2012-05-13 13 views
4

はQtで利用できるOpenGL関数glDrawBuffers(GLsizei n、const GLenum * bufs)ですか? 私はフラグメントシェーダに複数のレンダリングターゲットを渡そうとしていますが、QtCreatorは関数がこのスコープ内で宣言されていないと言います。考え方は、2つのカラーバッファを持つフレームバッファオブジェクトを用意し、それらの2つのバッファにフラグメントシェーダを描画することです。QtのOpenGLのglDrawBuffers()ですか?

FIXED: ちょうどの#defineは、問題のファイルに1をGL_GLEXT_PROTOTYPES追加する必要がありました:(

+0

フラグメントシェーダーなどがある場合は、何らかの拡張読み込みコードが必要です。あなたのコンテキストを作成するとき、あなたはどのGL版を入手していますか? –

+0

@ニコル:glGetString(GL_VERSION)は私に "3.3.0 NVIDIA 295.40"を与えます。 GLコンテキストは、QGLWidgetのmakeCurrent()を使用して設定されました。 FBOを削除すると、シェーダは完全に機能します(つまり、デフォルトのウィンドウカラーバッファを使用します)。 –

+0

OpenGL関数を読み込むために何を使用していますか? –

答えて

1

のQtは、OpenGLの機能にのみ基本的なアクセスを提供していますロードシェーダとテクスチャがその中にある対象ではないレンダリングだけを使用。。。 GLEWのような適切な拡張ローダーライブラリ。GLEWはうまくQtの機能と共存します。

QGLWidgetから派生しglewInitを呼び出すためにglInitをオーバーライドし​​

+0

ありがとう、私は非常にばかげた間違いをしていたことを確認していただきありがとうございます。#define GL_GLEXT_PROTOTYPES 1を忘れてしまったので、拡張機能へのインターフェイスがnVidiaに見えるようになりました。とにかく –

0

を呼び出した後に私達はちょうどトンを固定いくつかの時間を費やし彼の私たちは、にOSX 10.8のUbuntu 14.04(申し訳ありませんがないWINDOWS経験を)のQt 5.2.1を実行しているとQGLFormatを使用してOpenGL3.2コンテキストを作成しています。

OSXでは、すべてのOpenGL3.2機能としては問題は(など、バッファを描く、制服を設定する。)で定義されているが存在しない。一方

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

上のLinux、我々はまた、が私たちのQGLWidgetを持っているを試みた

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

:我々はこれらのBOTHを含める必要がクラス継承は、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の関数は ''で定義されています。 'gl.h'ではなく' gl3.h'に注意してください。 –

関連する問題