2013-02-27 61 views
2

我想通過OS X上的ArcSynthesis教程,並且在調用glEnableVertexAttribArray後出現OpenGL錯誤「Invalid Operation」。我已經檢查過,我確實有一個VBO綁定,根據glEnableClientState and glEnableVertexAttribArray的討論,我不知道接下來要檢查什麼。glEnableVertexAttribArray給出無效操作

我使用OS X 10.8,OpenGL 3.2配置文件和Xcode 4.6。

我想寫一個類將加載在教程中使用的XML模型文件,我認爲,我正在做相同的操作與先前的程序繪製一個編碼模型。但是我必須以某種方式做一些不同或錯誤的事情,並且不知道該怎麼做。參考OpenGL 3.2文檔說,通過發送索引值超過OpenGL實現所允許的最大值,您會得到無效的操作,但是我使用的是前面使用的0和1。

下面的代碼,與所有的OpenGL錯誤檢查編輯出來的清晰度:

glBindBuffer(GL_ARRAY_BUFFER, vertexBufferObject); 
    for (int iAttribLoop = 0; iAttribLoop < [attributeAnalyzers count]; iAttribLoop++) { 
     AttributeAnalyzer *theAnalyzer = [attributeAnalyzers objectAtIndex:iAttribLoop]; 
     GLuint theIndex = [theAnalyzer index]; 
     NSLog(@"theIndex is %d", theIndex); 
     glEnableVertexAttribArray(theIndex); 
     glVertexAttribPointer(theIndex, [theAnalyzer size], theType, GL_FALSE, 0, dataOffset); 
     dataOffset += sizeof(theType)*[theAnalyzer size]*[theAnalyzer vertexCount]; 
    } 

回答

6

參考了OpenGL 3.2文檔中說,您通過在最大的索引值發送得到一個無效操作允許通過OpenGL實現

不,它不。這樣做會給你GL_INVALID_VALUEGL_INVALID_OPERATION僅由glEnableVertexAttribArray給出when you call it and no VAO is bound

所以你應該這樣做。

+0

這是我需要的提示!事實證明,我正在被多線程攻擊 - 繪圖程序在構建VAO的方法完成之前將VAO解綁。在這個程序中,繪圖程序不需要混淆VAO,所以我擺脫了這條線並修正了一些問題。看起來我不得不研究線程以及OpenGL ......謝謝! – 2013-02-27 03:02:31