Opengl 为什么GlenableVertexAttributeArray在某些系统上会根据调用顺序崩溃?

Opengl 为什么GlenableVertexAttributeArray在某些系统上会根据调用顺序崩溃?,opengl,Opengl,昨天,我调查了顶点缓冲区对象设置中的一个奇怪崩溃。我刚从素色切换到纹理,所以我的顶点缓冲区对象现在包含一个 struct VertexData { glm::vec4 pos; glm::vec2 texCoord; } 而不是 struct VertexData { glm::vec4 pos, color; } 在我的系统(英特尔芯片)上,一切进展顺利,但另一个使用专有Linux驱动程序(fglrx)的Radeon卡系统在VBO设置中崩溃。我们最终找到了GlenableVertexAtt

昨天,我调查了顶点缓冲区对象设置中的一个奇怪崩溃。我刚从素色切换到纹理,所以我的顶点缓冲区对象现在包含一个

struct VertexData { glm::vec4 pos; glm::vec2 texCoord; }
而不是

struct VertexData { glm::vec4 pos, color; }
在我的系统(英特尔芯片)上,一切进展顺利,但另一个使用专有Linux驱动程序(fglrx)的Radeon卡系统在VBO设置中崩溃。我们最终找到了GlenableVertexAttributeArray调用,发现

glEnableVertexAttribArray(1); //attribute location for texcoord
glEnableVertexAttribArray(0); //attribute location for position
工作时

glEnableVertexAttribArray(0); //attribute location for position
glEnableVertexAttribArray(1); //attribute location for texcoord
在第一次呼叫中崩溃。(请注意,属性位置在第二个代码段中交换。)为什么?我能想到的唯一解释是驱动程序错误,但我觉得这似乎不太可能,因为所有其他OpenGL应用程序都可以工作。还是有什么我忘了做的

作为参考,我附上我的简历的相关部分。现在,我已经设置了我的上下文,启用了GL_DEPTH_TEST、GL_CULL_FACE和GL_TEXTURE_2D,上传了一些纹理,并准备了我的着色器程序(没有显式调用glBindAttribLocation)

glGetAttriblLocation(3,在_位置)=0
glGetAttribLocation(3,in_TexCoord)=1
glgenvertexarray(1,[1])
glBindVertexArray(1)
glGenBuffers(1,[1])
glBindBuffer(GL_数组_缓冲区,1)
GLVertexAttribute指针(0,4,GL_浮点,false,0x18,NULL)
glVertexAttributePointer(1,2,GL_浮点,false,0x18,0x10)

GlenableVertexAttributeArray(0)这不应该崩溃。您很可能发现了一个驱动程序错误。请向AMD报告,以便他们能够修复它

glGetAttribLocation(3, in_Position) = 0
glGetAttribLocation(3, in_TexCoord) = 1

glGenVertexArrays(1, [1])
glBindVertexArray(1)

glGenBuffers(1, [1])
glBindBuffer(GL_ARRAY_BUFFER, 1)
glVertexAttribPointer(0, 4, GL_FLOAT, false, 0x18, NULL)
glVertexAttribPointer(1, 2, GL_FLOAT, false, 0x18, 0x10)
glEnableVertexAttribArray(0) <-- this crashes with AMD/ATI fglrx driver
glEnableVertexAttribArray(1)