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 来绘制文本,它似乎可以工作。唯一的区别是我现在将 freeglut 与 SDL 一起使用,而不是像以前的程序中那样仅使用 GLUT。我的设置是否存在一些我没有看到的基本问题,或者是否有更好的方法来绘制文本?

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。它将以眼泪和/或无效的事件循环结束。选择一个框架并坚持下去。

于 2012-09-27T21:35:32.210 回答
0

您可能已经损坏了堆。

于 2013-11-29T19:30:59.260 回答