gpt4 book ai didi

c++ - 在 qopenglfunctions.h 中找不到 glGenBuffers、glBindBuffer 等

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:45:28 25 4
gpt4 key购买 nike

我正在尝试在 qt 5.1.1 中使用着色器使用 opengl 渲染编写 map 应用程序。我能够使用 Glew 显示顶点。但我想使用 qopenglfunctions.h 中提供的功能奇怪的是,即使我包含这个文件,我也得到 glGenBuffers was not declared in this scope。当我打开 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(您可能从他们的网站上获得)使用 GLES 2.0 后端进行默认启用的 GL 渲染。这意味着,您的 glew header 将获得与 qopenglfunction header 中的类似声明相关的各种错误。不幸的是,您将不得不使用 opengl -desktop 命令重建 Qt 源代码,这将为您消除对 ES2.0 的依赖。另一种方法是使用 Qt 4.8 版本。

关于c++ - 在 qopenglfunctions.h 中找不到 glGenBuffers、glBindBuffer 等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19963131/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com