我在项目中遇到了一个问题,使用qt 5.5.1和openGL GLSL。我尝试显示一个skybox,所以我创建了一个类。这个类继承了QOpenGLFunctions_3_1,最后一个类包含了很多gl函数。现在在我的skybox构造函数上,我初始化了我的数组(vertex和index),然后我这样做:
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)。你知道我怎么才能修复它吗?
发布于 2015-12-23 05:35:18
在大多数情况下,我得到了错误,问题是我试图在OpenGl设置之前初始化一些东西。在你的例子中,我认为问题是在你设置Glew或GLUT之前,你的skybox顶点数组的初始化是被调用的。这些OpenGl函数如glGenVertexArrays不是直接来自opengl32.dll,它可能是从GPU加载的,所以必须正确初始化,所以在没有进一步初始化的情况下不能使用它。
发布于 2015-12-29 18:05:14
我忘记了initializeOpenGLFunctions();行。这一行在使用QOpenGLFunctions_3_1函数的每个类中都是必需的,而且不仅仅是在openGL管道的开始阶段。
https://stackoverflow.com/questions/34423949
复制相似问题