關於wglCreateContextAttribsARB()的問題
前言
wglCreateContextAttribsARB()是可以選擇context的版本的CreateContext(),在create方面沒問題,但在wglMakeCurrent()後,會發現畫面再也畫不出任何東西,可是畫面卻是有清除的!這個問題以前一直不知道是什麼問題,最近有空就來Debug一下。
內容
首先畫面是有清除的,表示glClear()有效的,但"Hello Trangle的範例"執行後會發現三角形畫不出來!
用glGetError()也沒有得到錯誤訊息。以前都一直以為是wglCreateContextAttribsARB()的參數沒下好,又或是wglMakeCurrent()的時機的問題,讓我一直找不出這個問題的答案。在Debug中發現當版本被調到3.1後遽然就畫得出來了!但到了3.2以後的版本都繪畫不出來,這時才開始懷疑可能不是wglCreateContextAttribsARB()的問題,看了一下"Hello Trangle的範例"的程式碼,在OpenGL的設置有glUseProgram()、glEnableVertexAttribArray()、glBindBuffer()與glVertexAttribPointer(),看來沒什麼問題,但在google關於OpenGL3.2的範例後發現裡面多了一個glBindVertexArray()!這是OpenGL3.2多的Vertex Array Object(VAO),在我之前對VAO的認知是這個東西可用可不用,但我錯了,在我把VAO加入後,"Hello Trangle的範例"就可以順利畫出三角形了,原來在OpenGL3.2以後,VAO是"必要"流程,而不是可選擇的流程,真是學習了。
參考資料
Tutorial2: VAOs, VBOs, Vertex and Fragment Shaders (C / SDL)
沒有留言:
張貼留言