2013-01-09 180 views
0

我將使用QT編寫一個OpenGL應用程序作爲窗口的通用性。但我有一些問題。 當我試圖使用OpenGL版本> = 2.0功能,如着色器和緩衝區對象,我的應用程序切割。我用的是QGLWidget渲染插件,這是我的代碼snipet:OpenGL緩衝區和Qt OpenGL模塊

void RenderingWidget::initializeGL() 
{ 
    GLuint buffer_id; 
    glGenBuffers(...) 
      . 
      . 
      . 
} 

和失敗。當我通過QGLBuffer和創建緩衝區和着色器,緩衝區和着色器被正確創建,但只有片段着色器工作和頂點緩衝區什麼也不做。解決辦法是什麼? 如果問題我通過GLEW擴展/

回答

1

訪問OpenGL的版本> = 2.0的功能你說你通過訪問高級OpenGL功能GLEW。那麼你是否記得在獲得OpenGL上下文之後通過調用glewInit()來正確初始化GLEW(最有可能作爲initializeGL()中的第一條語句)?否則,必要的函數指針將不會正確設置,這在調用glGenBuffers等函數時的確會導致某種訪問衝突或空指針取消引用。另一方面,Qt在內部執行自己的手動擴展管理,而不使用GLEW或其他任何東西,這就是爲什麼Qt的緩衝區或着色器管理功能正常工作的原因。