2012-02-24 63 views
0

昨天,我調查了一個奇怪的崩潰在我的頂點緩衝區對象的設置。我只是從普通的顏色切換到紋理,所以我的頂點緩衝區對象現在包含的爲什麼glEnableVertexAttribArray會根據呼叫順序在某些系統上崩潰?

struct VertexData { glm::vec4 pos; glm::vec2 texCoord; } 

,而不是

struct VertexData { glm::vec4 pos, color; } 

數組在我的系統(英特爾芯片),一切都進行得很順利,但其他系統使用專有Linux驅動程序(fglrx)的Radeon卡在VBO安裝程序中崩潰。我們終於跟蹤下來的glEnableVertexAttribArray電話,發現在第一次調用

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應用程序都可以工作。還是有什麼我忘了做的?

作爲參考,我附上我的apitrace的相關部分。此時,我已經建立了我的上下文,啓用了GL_DEPTH_TEST,GL_CULL_FACE和GL_TEXTURE_2D,上傳了一些紋理,並準備了我的着色器程序(不顯式調用glBindAttribLocation)。

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) 

(glBufferData在第一幀期間以後調用。)

回答

1

這是不應該發生崩潰。你很可能發現了一個驅動程序錯誤。請報告給AMD,以便他們能夠修復它。