opengl GLUT无法在游戏模式中设置显示回调

gg0vcinb  于 2022-11-04  发布在  其他
关注(0)|答案(1)|浏览(159)

我在C语言中使用Glut,我用MinGW GCC 4.7.2编译代码,并使用GLUT的GLUTMing实现。我的主要入口点如下:

int main(int argc, char**argv) {

// init GLUT and create window
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
glutInitWindowPosition(100,100);
glutInitWindowSize(800,600);
glutCreateWindow("GLW");
glClearColor(0.2,0.2,1.0,1.0);
// enter gamemode
glutGameModeString("800x600:32");
if (glutGameModeGet(GLUT_GAME_MODE_POSSIBLE))
    glutEnterGameMode();
else {
    printf("The select mode is not available\n");
    exit(1);
}
// register callbacks
glutDisplayFunc(renderScene);
glutIdleFunc(renderScene);

// OpenGL init
glEnable(GL_DEPTH_TEST);
glEnable(GL_CULL_FACE);

glutMainLoop();

return 0;
}

我指向的渲染回调函数如下所示:

void renderScene(void) {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(0.9f, 0.9f, 0.9f);
glBegin(GL_TRIANGLES);
    glVertex3f(-2,-2,-5.0);
    glVertex3f(0,2,-5.0);
    glVertex3f(2,-2,-5.0);
glEnd();
glutSwapBuffers();
glutPostRedisplay();
}

我的程序在窗口模式下运行良好,但添加glutEnterGameMode();会在启动时崩溃并返回错误:redisplay needed for window 1, but no display callback.
我不确定我在这里做错了什么。就我所知,我是以正确的顺序输入glutMainLoop();并调用glutPostRedisplay();的。
我进入游戏模式时是否遗漏了什么?

olqngx59

olqngx591#

原来一开始使用glutCreateWindow();创建一个窗口会阻止OpenGL进入gamemode。我在第一次初始化glut后跳过了一切,直接调用glutEnterGameMode();,这很好用。

相关问题