这是我的初始化代码:

const int WIN_HEIGHT = 640;
const int WIN_WIDTH = 640;
void main(int argc, char **argv) {
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);

    /* lines in question */
    glEnable(GL_DEPTH_TEST);
    glEnable(GL_NORMALIZE);
    glEnable(GL_LIGHTING);
    glEnable(GL_LIGHT0);
    glShadeModel(GL_SMOOTH);

    glutInitWindowSize(WIN_WIDTH, WIN_HEIGHT);
    glutCreateWindow("OpenGL");
    glutDisplayFunc(Draw);
    glutKeyboardFunc(HandleInput);
    Initialize();

    glutMainLoop();
}

因此,大多数代码都是基本3D程序的漂亮样板。问题是,如果我将所有glEnable()行放在glutCreateWindow()之前,将它们重置。创建窗口后移动它们很简单(我将它们移到了自己的Initialize()函数中),但是为什么glutCreateWindow()会禁用它们呢?

最佳答案

我想说这是因为在调用glutCreateWindow()之前尚未创建context。然后,您可以在创建一个之后对其进行设置,可以从以下文本中进行解释:



由于没有上下文(或旧的,无效的上下文),因此您对glInit()的调用不会影响当前窗口的上下文。

关于c++ - glutCreateWindow(…)重置我的启用标志?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8349480/

10-10 14:20