1

SDL と openGL を中心に構築されたプログラムで、Linux の垂直同期を無効にしようとしています。Gallium 0.4 をドライバとして使用する古い統合 ATI カードを実行しています。

コードを呼び出して vsync を無効にしようとしましたglXSwapInterval(0)が、これを行うと、プログラムは正常にコンパイルされますが、実行しようとすると segfault が発生します。

gdb は、かなり役に立たないメッセージを表示します。

Program received signal SIGSEGV, Segmentation fault.
0x00000000 in ?? ()

誰が何が起こっているのかについて何か考えがありますか?

4

1 に答える 1

4

glXSwapIntervalEXTおよびglXSwapIntervalSGIは拡張関数です。通常、拡張機能の関数アドレスにはglXGetProcAddressを介してアクセスしますが、一部のlibGL.soはそれらを直接エクスポートする場合があります。

最も簡単な解決策:GLEWのようなOpenGL拡張ローダーライブラリを入手します(これはすべての主要なLinuxディストリビューションのパッケージリポジトリにあります)。のすべての出現箇所を#include <GL/gl.h>with#include <GL/glew.h>および#include <GL/glx.h>with#include <GL/glxew.h>に置き換え、リンクされたライブラリのリストにlibGLEW.soを追加しglewInit()、OpenGLコンテキストを作成してバインドした直後に呼び出します。次に、拡張機能が実際に利用可能かどうかをテストします。

于 2012-12-18T13:18:11.407 に答える