2

SDLの下でfreeglutを介してOpenGLを使用するプログラムがあります。SDL/OpenGL の初期化は次のとおりです。

// Initialize SDL
SDL_Init(SDL_INIT_VIDEO);

// Create the SDL window
SDL_SetVideoMode(SCREEN_W, SCREEN_H, SCREEN_DEPTH, SDL_OPENGL);

// Initialize OpenGL
glClearColor(BG_COLOR_R, BG_COLOR_G, BG_COLOR_B, 1.f);
glViewport(0, 0, SCREEN_W, SCREEN_H);

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0f, SCREEN_W, SCREEN_H, 0.0f, -1.0f, 1.0f);

glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

私は glBegin() ... glEnd() ブロックを問題なく使用してプリミティブを描画してきました。ただし、このプログラムでは、任意の glutBitmapX 関数を呼び出すと、プログラムはエラー ステータスなしで終了します。テキストを描画するために使用しているコードは次のとおりです。

glColor3f(1.f, 1.f, 1.f);
glRasterPos2f(x, y);
glutStrokeString(GLUT_BITMAP_8_BY_13, (const unsigned char*)"test string");

以前の同様のプログラムでは、glutBitmapCharacter と glutStrokeString を使用してテキストを描画しましたが、動作しているように見えました。唯一の違いは、以前のプログラムのように GLUT だけでなく、SDL で freeglut を使用していることです。私のセットアップに見られない根本的な問題がありますか、それともテキストを描画するためのより良い方法はありますか?

4

2 に答える 2

2

セクション 2、初期化:

glutInit- プレフィックスで始まるルーチンは、GLUT 状態を初期化するために使用されます。主要な初期化ルーチンは glutInit で、GLUT プログラムで一度だけ呼び出す必要があります。glutInit の前に、前に glutInit が付いていない GLUT または OpenGL ルーチンを呼び出してはなりません。

他の glutInit- ルーチンは、glutInit の前に呼び出すことができます。その理由は、これらのルーチンを使用して、glutInit で行われるコマンド処理によって変更される可能性のあるデフォルトのウィンドウ初期化状態を設定できるからです。たとえば、glutInit の前に glutInitWindowSize(400, 400) を呼び出して、400 x 400 がプログラムのデフォルト ウィンドウ サイズであることを示すことができます。glutInit の前にウィンドウの初期サイズまたは位置を設定すると、GLUT プログラムのユーザーは、コマンド ライン引数を使用して初期サイズまたは位置を指定できます。

GLUT と SDL を混ぜ合わせようとしないでください。涙や機能しないイベント ループで終了します。1 つのフレームワークを選択し、それに固執します。

于 2012-09-27T21:35:32.210 に答える
0

ヒープが破損している可能性があります。

于 2013-11-29T19:30:59.260 に答える