我正在尝试使用qt 5.1.1和opengl渲染器以及着色器编写地图应用程序。我已经能够使用Glew显示顶点。但是我想使用qopenglfunctions.h中提供的函数。奇怪的是,即使我包含了这个文件,我仍然会得到“在此范围内未声明glGenBuffers”的错误。当我打开qopenglfunctions.h时,它就在那个文件里!有人遇到过这种奇怪的问题吗?代码相当长,但我添加了一些抛出链接器错误的内容。
initializeGLFunctions();
this->program=program;
glGenVertexArrays(1,&mapVAO); //This is where the linker throws an error
glBindVertexArray(mapVAO);
// Generate 2 VBOs
glGenBuffers(2, mapBuffer);
initMapBoundary();
void GeometryEngine::initMapBoundary()
{
GLfloat mapSize=5.0f;
VertexData boundary[] = {
// Vertex data for face 0
{QVector3D(-mapSize, -mapSize, 1.0), QVector2D(0, 0)}, // v0
{QVector3D( mapSize, -mapSize, 1.0), QVector2D(20.0,0/*0.33, 0.0*/)}, // v1
{QVector3D(-mapSize, mapSize, 1.0), QVector2D(0,20/*0.0, 0.5*/)}, // v2
{QVector3D( mapSize, mapSize, 1.0), QVector2D(20.0,20.0/*0.33, 0.5*/)}, // v3
};
GLushort indices[] = {
0, 1, 2, 3,
};
// Transfer vertex data to VBO 0
glBindBuffer(GL_ARRAY_BUFFER, mapBuffer[0]);
glBufferData(GL_ARRAY_BUFFER, 4 * sizeof(VertexData), boundary, GL_STATIC_DRAW);
// Transfer index data to VBO 1
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, mapBuffer[1]);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, 4 * sizeof(GLushort), indices, GL_STATIC_DRAW);
// Offset for position
quintptr offset = 0;
// Tell OpenGL programmable pipeline how to locate vertex position data
int vertexLocation = program->attributeLocation("a_position");
program->enableAttributeArray(vertexLocation);
// program->setAttributeBuffer(vertexLocation,GL_FLOAT,offset,3);
glVertexAttribPointer(vertexLocation, 3, GL_FLOAT, GL_FALSE, sizeof(VertexData), (const void *)offset);
// Offset for texture coordinate
offset += sizeof(QVector3D);
// Tell OpenGL programmable pipeline how to locate vertex texture coordinate data
int texcoordLocation = program->attributeLocation("a_texcoord");
program->enableAttributeArray(texcoordLocation);
glVertexAttribPointer(texcoordLocation, 2, GL_FLOAT, GL_FALSE, sizeof(VertexData), (const void *)offset);
//program->setAttributeBuffer(texcoordLocation,GL_FLOAT,offset,2);
}
就像我说的一样,我的Linux系统上所有这些工作都很正常,所以我相信代码没有太大问题。我只需要知道如何告诉Qt构建系统在Windows 7机器上选择正确的OpenGL驱动程序。显卡是Nvidia GT325m。
#define GL_GLEXT_PROTOTYPES
。 - Jesus Ramos