首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >glutCreateWindow(...)重置我的启用标志?

glutCreateWindow(...)重置我的启用标志?
EN

Stack Overflow用户
提问于 2011-12-02 06:52:40
回答 2查看 350关注 0票数 1

下面是我的初始化代码:

代码语言:javascript
复制
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()要禁用它们呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-02 07:00:36

我会说这是因为在您调用glutCreateWindow()之前还没有创建context。然后,您可以在创建后设置它们,这可以从以下文本中解释:

要使任何OpenGL命令工作,上下文必须是当前的;所有OpenGL命令都会影响当前上下文的状态。

因为没有上下文(或者是一个旧的、无效的上下文),所以对glInit()的调用不会影响当前窗口的上下文。

票数 2
EN

Stack Overflow用户

发布于 2011-12-02 07:00:00

因为正在对当前窗口执行glEnable。调用glutCreateWindow之后,您就创建了一个新窗口,并用它替换了当前的窗口。这个新窗口有一个新的opengl上下文。在创建一个新窗口之后,您可以继续并根据需要启用和修改它的上下文。

参考:http://www.opengl.org/documentation/specs/glut/spec3/node16.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8349480

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档