#include <QOpenGLFunctions_2_1>
// ...
QOpenGLFunctions_2_1 *globalGLFunctions;
// ...
{
makeCurrent();
globalGLFunctions = new QOpenGLFunctions_2_1;
globalGLFunctions->initializeOpenGLFunctions();
}
void mesh::draw(unsigned int programId)
{
//attribute vec3 vertex
int vertex = globalGLFunctions->glGetAttribLocation(programId,"vertex"); //0
int normal = globalGLFunctions->glGetAttribLocation(programId,"normal"); //1
int tangent = globalGLFunctions->glGetAttribLocation(programId,"tangent"); //2
int color = globalGLFunctions->glGetAttribLocation(programId,"color"); //3
int UV = globalGLFunctions->glGetAttribLocation(programId,"UV"); //4
//texture0
//texture1...
std::string str="texture";
for( size_t i=0;i<textures.size();i++)
{
globalGLFunctions->glActiveTexture(GL_TEXTURE0+i);
globalGLFunctions->glBindTexture(GL_TEXTURE_2D,textures[i].id);
globalGLFunctions->glUniform1i(globalGLFunctions->glGetUniformLocation(programId,(str+(char)(i+'0')).c_str()),i);
}
globalGLFunctions->glBindBuffer(GL_ARRAY_BUFFER,VBO);
globalGLFunctions->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,IND);
globalGLFunctions->glEnableVertexAttribArray(vertex);
globalGLFunctions->glVertexAttribPointer(vertex,3,GL_FLOAT,GL_FALSE,sizeof(vertexData),0);
globalGLFunctions->glEnableVertexAttribArray(normal);
globalGLFunctions->glVertexAttribPointer(normal,3,GL_FLOAT,GL_FALSE,sizeof(vertexData),(void*)(3*sizeof(float)));
globalGLFunctions->glEnableVertexAttribArray(tangent);
globalGLFunctions->glVertexAttribPointer(tangent,3,GL_FLOAT,GL_FALSE,sizeof(vertexData),(void*)(6*sizeof(float)));
globalGLFunctions->glEnableVertexAttribArray(color);
globalGLFunctions->glVertexAttribPointer(color,3,GL_FLOAT,GL_FALSE,sizeof(vertexData),(void*)(9*sizeof(float)));
globalGLFunctions->glEnableVertexAttribArray(UV);
globalGLFunctions->glVertexAttribPointer(UV,2,GL_FLOAT,GL_FALSE,sizeof(vertexData),(void*)(12*sizeof(float)));
globalGLFunctions->glDrawElements(GL_TRIANGLES,indices.size(),GL_UNSIGNED_INT,0);
globalGLFunctions->glDisableVertexAttribArray(vertex);
globalGLFunctions->glDisableVertexAttribArray(normal);
globalGLFunctions->glDisableVertexAttribArray(tangent);
globalGLFunctions->glDisableVertexAttribArray(color);
globalGLFunctions->glDisableVertexAttribArray(UV);
globalGLFunctions->glBindBuffer(GL_ARRAY_BUFFER,0);
globalGLFunctions->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,0);
}
#include <QOpenGLFunctions_2_1>
// ...
QOpenGLFunctions_2_1 *globalGLFunctions;
// ...
Scene::Scene( QWidget *parent ) :
QGLWidget( parent )
{
makeCurrent();
globalGLFunctions = new QOpenGLFunctions_2_1;
globalGLFunctions->initializeOpenGLFunctions();
}
void mesh::draw(unsigned int programId)
{
//attribute vec3 vertex
int vertex = globalGLFunctions->glGetAttribLocation(programId,"vertex"); //0
int normal = globalGLFunctions->glGetAttribLocation(programId,"normal"); //1
int tangent = globalGLFunctions->glGetAttribLocation(programId,"tangent"); //2
int color = globalGLFunctions->glGetAttribLocation(programId,"color"); //3
int UV = globalGLFunctions->glGetAttribLocation(programId,"UV"); //4
//texture0
//texture1...
std::string str="texture";
for( size_t i=0;i<textures.size();i++)
{
globalGLFunctions->glActiveTexture(GL_TEXTURE0+i);
globalGLFunctions->glBindTexture(GL_TEXTURE_2D,textures[i].id);
globalGLFunctions->glUniform1i(globalGLFunctions->glGetUniformLocation(programId,(str+(char)(i+'0')).c_str()),i);
}
globalGLFunctions->glBindBuffer(GL_ARRAY_BUFFER,VBO);
globalGLFunctions->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,IND);
globalGLFunctions->glEnableVertexAttribArray(vertex);
globalGLFunctions->glVertexAttribPointer(vertex,3,GL_FLOAT,GL_FALSE,sizeof(vertexData),0);
globalGLFunctions->glEnableVertexAttribArray(normal);
globalGLFunctions->glVertexAttribPointer(normal,3,GL_FLOAT,GL_FALSE,sizeof(vertexData),(void*)(3*sizeof(float)));
globalGLFunctions->glEnableVertexAttribArray(tangent);
globalGLFunctions->glVertexAttribPointer(tangent,3,GL_FLOAT,GL_FALSE,sizeof(vertexData),(void*)(6*sizeof(float)));
globalGLFunctions->glEnableVertexAttribArray(color);
globalGLFunctions->glVertexAttribPointer(color,3,GL_FLOAT,GL_FALSE,sizeof(vertexData),(void*)(9*sizeof(float)));
globalGLFunctions->glEnableVertexAttribArray(UV);
globalGLFunctions->glVertexAttribPointer(UV,2,GL_FLOAT,GL_FALSE,sizeof(vertexData),(void*)(12*sizeof(float)));
globalGLFunctions->glDrawElements(GL_TRIANGLES,indices.size(),GL_UNSIGNED_INT,0);
globalGLFunctions->glDisableVertexAttribArray(vertex);
globalGLFunctions->glDisableVertexAttribArray(normal);
globalGLFunctions->glDisableVertexAttribArray(tangent);
globalGLFunctions->glDisableVertexAttribArray(color);
globalGLFunctions->glDisableVertexAttribArray(UV);
globalGLFunctions->glBindBuffer(GL_ARRAY_BUFFER,0);
globalGLFunctions->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,0);
}
To copy to clipboard, switch view to plain text mode
Bookmarks