2011-12-02 23 views
1

私はGLSLに関するオンラインのチュートリアルをいくつか続けています。私は現在のプログラムにコードを実装しています。正常にコンパイルされますが、デバッグするとアクセス違反が発生します:OpenGL/glsl/sdlコードのC++アクセス違反

First-chance exception at 0x00000000 in Game Engine v0.2a.exe: 0xC0000005: Access violation. 
Unhandled exception at 0x00000000 in Game Engine v0.2a.exe: 0xC0000005: Access violation. 

私はなぜそれがわかりません。

GLuint v,f,f2,p,ge; 
int gw = RESOLUTION_X; 
int gh = RESOLUTION_Y; 

void setShaders() 
{ 
    char *vs = NULL, *fs = NULL, *fs2 = NULL, *gs = NULL; 

    v = glCreateShader(GL_VERTEX_SHADER); //<-- this line 
    f = glCreateShader(GL_FRAGMENT_SHADER); 
    ge = glCreateShader(GL_GEOMETRY_SHADER_EXT); 

... 

追加のコードを入力する必要がありますか?私は何がここで間違って行われているのか分かりません。

答えて

2

おそらくSDL_Initに電話していないのを忘れましたか?あるいは、この関数を複数のスレッドから呼び出すことはできますか?

+0

+1;この仮説は、アドレス0x00を呼び出すときに例外がスローされるという事実によって補強される。おそらく 'glCreateShader'がNULLで初期化された関数へのポインタであるためです。 – xtofl

+0

これは事実です。私はsdl initの前にglew initと呼んでいました。 – grep

+2

私は自分の人生でSDLを使ったことが一度もありませんでした。試したことはありませんでしたが、前回と同様にSDL_InitになるたびにSDLのクラッシュについてたくさんの質問がありました。だから私たちは行く:) –

1

glCreateShaderは関数へのNULLポインタです。これは、すべてのドライバがサポートしているわけではない関数なので、GLEWなどのGL拡張ラッパーを使用する必要があります。

拡張機能を使用する前に、現在の実装でサポートされていることを確認する必要があります。あなたの場合は、GL2.0関数なのでif (GLEW_VERSION_2_0) ...です。

関連する問題