2009-06-19 11 views
7

私はWindowsの下でDev-C++でライブラリを再構築しようとしていました。しかし、これまでに追加したシェーダの機能はサポートされていません。関連する関数(:: glCreateShader()、:: glCreateProgram()などを見つけることができません)Dev-C++およびSDLを使用したOpenGL v2.0シェーダ?

インターネットとDev-C++フォルダでは、OpenGL実装(gl.h)がv1.1であることがわかりました。最新のヘッダーをSGIからダウンロードするにはrecommendationsが見つかりました。私はgl3.hを見つけましたが、詳細な調査の結果、gl.hは私のプロジェクトには含まれていないことに気付きました。私はSDL/SDL_opengl.hを調べるべきです。

EDIT: SDL_opengl.h が問題の関数のプロトタイプを宣言しgl.h含みません。だから問題は、リンカのエラーではなくコンパイル時のエラーが出るのはなぜですか?

(マイライブラリのみもちろん、MINGW32を除き(多くのOSXの下のように、MINGW32、libOpenGL32、libSDL、libSDL_ImageとlibSDL_Mixerにリンク)私は問題ありませんでした。)

どのように使用することができますDev-C++とSDLのOpenGL v2.0シェーダ?

+0

なぜ地球上でDev-C++を使いたいですか?過去4年間に更新されたIDEを使用してください。 (そして、*サポートされていてもバグがなく、機能が欠けていた) – jalf

+0

VC++ 2008 Expressの代わりにDev-C++を選んだのはなぜですか? –

+0

それは公正な点だと私はそれが来るのを見ていないと言うことはできません。 Windowsは私の主要なプラットフォームになることはなく、マニフェストとMSVCランタイムの6つのフレーバーのジャグリングを嫌っていました。さらに、私はGP2X用に開発しようとしていました。その公式のdevkitは、Dev-C++を駄目にしているので、便利だと思いました...そうですね。 – zyndor

答えて

8

gl.hはOpenGL 1.1(場合によっては、使用するファイルのバージョンとオペレーティングシステムによっては1.3まで)にのみ適用されます。それ以外にはglext.hとおそらくglxext.h(Linux/Unix)またはwglext.h(Windows)が必要です。

OpenGLの新しいバージョンのすべての機能は、実行時にリンクする必要があります。したがって、それらを使用するには、正しい関数アドレスを取得し、それを関数ポインタに割り当てる必要があります。これを行う最も簡単な方法は、GLEWのようなものを使用することです。

マニュアルの方法は、このようなものになるだろう:あなたは、あなたが最初の行を省略することができますglext.h含む前GL_GLEXT_PROTOTYPESを定義する場合

PFNGLCREATESHADERPROC glCreateShader = NULL; 
glCreateShader = (PFNGLCREATESHADERPROC) glXGetProcAddress((GLubyte*) "glCreateShader"); 

PFNGLCREATESHADERPROC glCreateShader = NULL; 
glCreateShader = (PFNGLCREATESHADERPROC) wglGetProcAddress("glCreateShader"); 

またはLinux用。

EDIT: SDL_opengl.hにはglext.hのコピーが含まれているようです(最新ではありません)。したがって、上記を有効にする必要があります。別のglext.hを使用する場合は、SDL_opengl.hをインクルードする前にNO_SDL_GLEXTを定義する必要があります。また、関数プロトタイプは、GL_GLEXT_PROTOTYPESが定義されていないか、自分で記述している限り利用できません。

EDIT2:明らかに、SDLにはSDL_GL_GetProcAddressという独自のGetProcAddress関数があります。

+0

"また、関数プロトタイプはGL_GLEXT_PROTOTYPESが定義されていないか、自分で書き込む限り利用できません。 < - それ。ありがとうございました! – zyndor

+0

+1については、SDL_GL_GetProcAddressを参照してください。 – Caterpillar

0

実行時に関数のアドレスをロードできますか?

typedef GLhandle (APIENTRYP PFNGLCREATESHADERPROC) (GLenum shaderType); 
PFNGLCREATESHADERPROC glCreateShader = NULL; 
glCreateShader = (PFNGLCREATESHADERPROC)wglGetProcAddress("glCreateShader"); 

typedef GLhandle (APIENTRYP PFNGLCREATEPROGRAMPROC)(); 
PFNGLCREATEPROGRAMPROC glCreateProgram = NULL; 
glCreateProgram = (PFNGLCREATEPROGRAMPROC)wglGetProcAddress("glCreateProgram"); 
関連する問題