Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Can';在qopenglfunctions.h中找不到glGenBuffers、glBindBuffer等_C++_Qt_Opengl_Glsl - Fatal编程技术网

C++ Can';在qopenglfunctions.h中找不到glGenBuffers、glBindBuffer等

C++ Can';在qopenglfunctions.h中找不到glGenBuffers、glBindBuffer等,c++,qt,opengl,glsl,C++,Qt,Opengl,Glsl,我正在尝试用Qt5.1.1编写一个地图应用程序,该应用程序使用着色器通过opengl渲染。 我能够使用Glew显示顶点。但是我想使用qopenglfunctions.h中提供的函数 奇怪的是,即使我包含了这个文件,我得到的glGenBuffers也没有在这个范围内声明。当我打开qopenglfunctions.h时,它就在那个文件中! 有人遇到过这个奇怪的问题吗?代码相当长。但是我添加了一些抛出链接器错误的代码 initializeGLFunctions(); this->program=

我正在尝试用Qt5.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

带有Qt 5,它不会以常规方式为您工作。问题是预编译的Qt SDK(您可能从其网站获得)使用默认启用的GLE2.0后端进行GL渲染。这意味着,您的glew头将获得与qopenglfunction头中类似声明相关的所有类型的错误。不幸的是,您将不得不使用opengl-desktop命令重建Qt源代码,这将为您消除对ES2.0的依赖。另一种方法是使用Qt4.8版本

您可能需要将
#define GL_GLEXT_prototype
添加到包含它的文件中。您能粘贴一个显示问题的最小片段吗?@JesusRamos,我已经这么做了。似乎不起作用。顺便说一句,这个问题是opengl版本(正如Michael IV在其中一个答案中提到的)。我正在使用archlinux的qt5构建和mesa驱动程序。我终于用glew得到了我需要的东西。我的笔记本电脑太弱,无法处理从源代码构建qt。从源代码构建qt只需要一段时间,我不认为应该崩溃。它不会崩溃。正如我所说,我的笔记本电脑太旧了,在构建时会发热并关闭。很抱歉我不清楚,我很清楚linux上使用Qt的GLES 2.0后端(我在linux上使用opengl-desktop选项构建了Qt)。然而,问题出在我朋友的笔记本电脑上,它有windows。他从与opengl捆绑在一起的qt网站下载了预构建的二进制文件。所以问题在于windows上的驱动程序。至少在windows上,Qt二进制安装程序提供了两个版本,一个带有桌面OpenGL,另一个带有ANGLE。