OpenGL 程式設計/除錯
外觀
如果您使用的是 Mesa OpenGL 實現,您可以設定以下環境變數
- LIBGL_ALWAYS_SOFTWARE=1 : 使用軟體實現,完全不使用圖形卡。當您
- 懷疑驅動程式中的錯誤時,
- 想要嘗試另一種實現(就像使用不同的圖形卡一樣),
- 想要檢查圖形故障是由於記憶體未初始化還是程式設計錯誤造成的。
- MESA_DEBUG=1 : 在錯誤情況下會輸出診斷訊息(例如,在程式未連結時分配統一變數)。
如果您手動繪製線條或三角形,但沒有任何顯示
- 檢查您的第四個座標是否為 1 而不是 0
- 檢查您是否正確設定了 glEnableVertexAttribArray / glBindBuffer / glVertexAttribPointer
- 仔細檢查您使用的變數是否正確(錯誤的複製貼上...) - 避免使用全域性變數以幫助解決此問題
- 仔細檢查您的
glUniform*呼叫,包括型別 (3fv, 4fv...) - OpenGL 非常嚴格 並且 不會發出任何提示 - 注意 glDrawElements 的第四個也是最後一個引數 (
indices) 是指從起始位置偏移的位元組數,而不是從起始位置開始的元素數量,即使在使用 IBO 時也是如此。
OpenGL 使用 glGetError() 來報告錯誤。
switch (glGetError()) {
case GL_NO_ERROR:
cerr << "GL_NO_ERROR" << endl;
break;
case GL_INVALID_ENUM:
cerr << "GL_INVALID_ENUM" << endl;
break;
case GL_INVALID_VALUE:
cerr << "GL_INVALID_VALUE" << endl;
break;
case GL_INVALID_OPERATION:
cerr << "GL_INVALID_OPERATION" << endl;
break;
case GL_INVALID_FRAMEBUFFER_OPERATION:
cerr << "GL_INVALID_FRAMEBUFFER_OPERATION" << endl;
break;
case GL_OUT_OF_MEMORY:
cerr << "GL_OUT_OF_MEMORY" << endl;
break;
}
有關如何除錯模板緩衝區的提示,您可以檢視 模板緩衝區 部分。
- 著色器除錯 在 GLSL 華夏公益教科書中(關於使用顏色進行除錯)
- 除錯 Android NDK 用於除錯 Android 上的 OpenGL NDK 應用程式
瀏覽和下載 完整程式碼 