2012-05-13 51 views
4

是在Qt中可用的OpenGL函數glDrawBuffers(GLsizei n,const GLenum * bufs)嗎? 我試圖將多個渲染目標傳遞給我的片段着色器,QtCreator表示該函數未在此範圍內聲明。這個想法是有一個帶有兩個顏色緩衝區的幀緩衝區對象,並且使用片段着色器來繪製這兩個緩衝區。Qt中的OpengGL glDrawBuffers()?

FIXED: 就不得不添加的#define GL_GLEXT_PROTOTYPES 1至損壞的文件:(

+0

如果你有片段着色器等工作,那麼你必須有某種擴展加載代碼。創建上下文時,您獲得了哪些GL版本? –

+0

@Nicol:glGetString(GL_VERSION)給我「3.3.0 NVIDIA 295.40」。 GL上下文是使用QGLWidget中的makeCurrent()設置的。如果我移除FBO,着色器就可以完美地工作(即使用默認的窗口顏色緩衝區) –

+0

您用什麼來加載OpenGL函數? –

回答

1

的Qt提供了OpenGL函數只有基本的訪問加載着色器和紋理在他們中間渲染目標不只是使用。像GLEW。GLEW適當延長裝載機庫將很好地與Qt的功能從QGLWidget來繪圖共存。

派生並重寫glInit調用​​

+0

謝謝,經過幾個小時的努力,我發現我犯了一個非常愚蠢的錯誤:我忘了#define GL_GLEXT_PROTOTYPES 1,以便擴展的接口變得對nVidia可見,現在都解決了,不需要GLEW,非常感謝無論如何 –

0

我們只是花了一些時間來修復牛逼之後調用glewInit他的。我們正在運行的Qt 5.2.1 OSX 10.8的Ubuntu 14.04(抱歉沒有WINDOWS經驗),並創建使用QGLFormat的OpenGL3.2上下文。

OSX沒有問題,因爲所有的OpenGL3.2功能(設定製服,繪製緩衝劑,等等。)中定義:

#include "OpenGL/gl3.h" ///< already included by Qt.. so nothing to do 

的Linux在另一方面,我們必須包括這些BOTH

#include "GL/gl.h" 
#include "GL/glext.h" ///< not included by Qt!!! manually include it 

我們也試圖有我們QGLWidget來繪圖類繼承QGLFunctions_3_2_Core(這個類定義了自己的glDrawBuffer等等複印件),但這是不是有用,只是導致了段錯誤

Program received signal SIGSEGV, Segmentation fault. 0x0000000000407068 
in glGetUniformLocation (this=0xbc5820, name=0x407cd0 "view_projection", program=1) 
at /usr/include/qt5/QtGui/qopenglfunctions_3_2_core.h:1075 1075  
return d_2_0_Core->GetUniformLocation(program, name); 

我們還調查了「的#define GL_GLEXT_PROTOTYPES 1「,但僅當我們使用glcorearb.h(您可以在線下載此標題)時纔有用。

+1

小修正:在OS X上,OpenGL 3.2函數在''中定義。請注意'gl3.h'而不是'gl.h'。 –