2

LinuxでSDLを使用する単純なOpenGLプログラムがあり、OpenGLバージョンをロードして印刷しようとしています。

cout << "GL_VERSION  : " << glGetString(GL_VERSION) << endl;

プログラムを実行すると、次のような出力でハングします...基本的にOpenGLライブラリが応答するのを「待機」しているように見えます。

GL_VERSION  : 

これは、Nvidia Ubuntu OpenGLライブラリ(nvidia-current-dev pkg)に対してリンクされています。Mesaもシステムにインストールしていますが、「lsof」からわかるように、Nvidiaが使用されているようです。

sdl-hack 29491 x  mem    REG               8,18 34639056 4212198 /usr/lib/nvidia-current/libnvidia-glcore.so.295.40
sdl-hack 29491 x  mem    REG               8,18    11728 4212207 /usr/lib/nvidia-current/tls/libnvidia-tls.so.295.40
sdl-hack 29491 x  mem    REG               8,18  1054832 4212209 /usr/lib/nvidia-current/libGL.so.295.40

これはNvidiadevpkgの一部ではないため、glu.hを提供するために「libglu1-mesa-dev」をインストールする必要があったことに注意してください。

これをデバッグする方法がよくわかりません。誰かが私を正しい方向に向けることができますか?

4

3 に答える 3

1

呼び出しSDL_OPENGLで他のフラグと混合しないでください。SDL_SetVideoMode()を使用できますがSDL_FULLSCREEN、 は必要ありませんSDL_HWSURFACE

特に、 はSDL_GL_DOUBLEBUFFERそのようには使用されません。代わりに:

SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
SDL_SetVideoMode(640, 480, 32, SDL_OPENGL);
于 2012-09-13T19:54:05.497 に答える
0

ターミナルでglxgearsと入力するとどうなりますか? 歯車が回転していることを示すウィンドウが表示されない場合は、インストールに問題があります。

歯車が回転しているウィンドウが表示される場合は、Nicol Bolas が提案したように、OpenGL コンテキストが適切に初期化されていません。

于 2012-09-13T19:50:21.943 に答える
0

私はこれを解決しました。以下のリンクのコードに従って、最初の作業バージョンを取得しました。

http://www.sdltutorials.com/sdl-opengl-tutorial-basics

この記事では、多くの set 属性呼び出しについて説明しています。

SDL_GL_SetAttribute(SDL_GL_RED_SIZE,        8);
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE,      8);
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE,       8);
SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE,      8);

SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE,      16);
SDL_GL_SetAttribute(SDL_GL_BUFFER_SIZE,        32);

SDL_GL_SetAttribute(SDL_GL_ACCUM_RED_SIZE,    8);
SDL_GL_SetAttribute(SDL_GL_ACCUM_GREEN_SIZE,    8);
SDL_GL_SetAttribute(SDL_GL_ACCUM_BLUE_SIZE,    8);
SDL_GL_SetAttribute(SDL_GL_ACCUM_ALPHA_SIZE,    8);

SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS,  1);
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES,  2);

これらは SDL_Init の後、SDL_SetVideoMode 呼び出しの前でした。それらを削除すると、プログラムが正常に動作しました!

奇妙なことに、問題は Mesa と Nvidia GL ライブラリの両方を備えた Linux でのみ発生しました。Mac OSX は大丈夫でした。

于 2012-09-14T13:41:42.370 に答える