天天看點

OpenGL程式中與glew相關的未處理異常的解決方案

問題:程式中已經正确包含glew相關的頭檔案和庫檔案,glew也已經通過glewInit()正确初始化,程式運作到glGenVertexArrays處時仍然出現運作時錯誤:

***.exe(某opengl可執行程式)中的0x********(某記憶體位址) 處有未處理的異常: Ox********: Access violation

尤其是針對

// Create a vertex array object
    GLuint vao;
    glGenVertexArrays( 1, &vao );
    glBindVertexArray( vao );
           

解決方案:

 在glewInit()之前加上glewExperimental = true;

Reason:

官方解釋:GLEW obtains information on the supported extensions from the graphics driver. Experimental or pre-release drivers, however, might not report every available extension through the standard mechanism, in which case GLEW will report it unsupported. To circumvent this situation, the glewExperimental global switch can be turned on by setting it to GL_TRUE before calling glewInit(), which ensures that all extensions with valid entry points will be exposed. 

GLEW從圖形驅動程式擷取受支援的擴充的資訊。 然而,實驗驅動程式或預釋出驅動程式可能不會通過标準機制報告每個可用的擴充,在這種情況下,GLEW将報告它不受支援。 為了避免這種情況,可以在調用glewInit()之前将glewExperimental全局開關設定為GL_TRUE來打開,這将確定所有具有有效入口點的擴充都将被暴露。

繼續閱讀