首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >glGenVertexArrays QOpenGLFunctions_3_1读访问冲突

glGenVertexArrays QOpenGLFunctions_3_1读访问冲突
EN

Stack Overflow用户
提问于 2015-12-23 04:29:21
回答 2查看 311关注 0票数 0

我在项目中遇到了一个问题,使用qt 5.5.1和openGL GLSL。我尝试显示一个skybox,所以我创建了一个类。这个类继承了QOpenGLFunctions_3_1,最后一个类包含了很多gl函数。现在在我的skybox构造函数上,我初始化了我的数组(vertex和index),然后我这样做:

代码语言:javascript
复制
glGenVertexArrays(1, &m_vaoHandle);
glBindVertexArray(m_vaoHandle);

GLuint handle[2] = {0, 1};
glGenBuffers(2, handle);

glBindBuffer(GL_ARRAY_BUFFER, handle[0]);
glBufferData(GL_ARRAY_BUFFER, 24 * 3 * sizeof(float), v, GL_STATIC_DRAW);

glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, handle[1]);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, 36 * sizeof(GLuint), el, GL_STATIC_DRAW);

我有一个对第二行的读访问冲突。如果我将第一行放在末尾,读访问冲突将显示给第一个glBindBuffer...一种解决方案是使用glew,但我不想要。我将代码带到了一个没有使用这个库的初始版本(OpenGL 4.0 Shading Cookbook)。你知道我怎么才能修复它吗?

EN

回答 2

Stack Overflow用户

发布于 2015-12-23 05:35:18

在大多数情况下,我得到了错误,问题是我试图在OpenGl设置之前初始化一些东西。在你的例子中,我认为问题是在你设置Glew或GLUT之前,你的skybox顶点数组的初始化是被调用的。这些OpenGl函数如glGenVertexArrays不是直接来自opengl32.dll,它可能是从GPU加载的,所以必须正确初始化,所以在没有进一步初始化的情况下不能使用它。

票数 0
EN

Stack Overflow用户

发布于 2015-12-29 18:05:14

我忘记了initializeOpenGLFunctions();行。这一行在使用QOpenGLFunctions_3_1函数的每个类中都是必需的,而且不仅仅是在openGL管道的开始阶段。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34423949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档