有效的 OpenGL 上下文

Posted

技术标签:

【中文标题】有效的 OpenGL 上下文【英文标题】:Valid OpenGL context 【发布时间】:2008-08-18 09:17:17 【问题描述】:

在我的代码中如何以及在什么阶段创建?即使是简单的 OpenGL 代码,我也会遇到错误。

【问题讨论】:

【参考方案1】:

comp.graphics.api.opengl 上的帖子来看,似乎大多数新手都在为他们的第一个 OpenGL 程序而烦恼。在大多数情况下,错误是由于在创建有效的 OpenGL 上下文之前调用 OpenGL 函数引起的。 OpenGL是一个状态机。只有机器启动并在就绪状态下嗡嗡作响,才能投入工作。

下面是一些创建有效 OpenGL 上下文的简单代码:

#include <stdlib.h>
#include <GL/glut.h>

// Window attributes
static const unsigned int WIN_POS_X = 30;
static const unsigned int WIN_POS_Y = WIN_POS_X;
static const unsigned int WIN_WIDTH = 512;
static const unsigned int WIN_HEIGHT = WIN_WIDTH;

void glInit(int, char **);

int main(int argc, char * argv[])

    // Initialize OpenGL
    glInit(argc, argv);

    // A valid OpenGL context has been created.
    // You can call OpenGL functions from here on.

    glutMainLoop();

    return 0;


void glInit(int argc, char ** argv)

    // Initialize GLUT
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE);
    glutInitWindowPosition(WIN_POS_X, WIN_POS_Y);
    glutInitWindowSize(WIN_WIDTH, WIN_HEIGHT);
    glutCreateWindow("Hello OpenGL!");

    return;

注意:

这里感兴趣的电话是glutCreateWindow()。它不仅创建了一个窗口,还创建了一个 OpenGL 上下文。 在调用glutMainLoop() 之前,使用glutCreateWindow() 创建的窗口不可见。

【讨论】:

以上是关于有效的 OpenGL 上下文的主要内容,如果未能解决你的问题,请参考以下文章

尽管 OpenGL 上下文有效,glGenTextures 仍给出 GL_INVALID_OPERATION

我是不是需要分别为每个 opengl 上下文加载函数?

带有 OpenGL 的 Qt MDI 应用程序:如何获取有效的屏幕截图?

用于 OpenGL3.1+ 上下文的分层 COLLADA 加载器

OpenGL 纹理在 3.3 中都是黑色的 - 但在 3.1 中有效

使用 SDL2 和 xcode 4.6。我设法创建了一个 OpenGL 3.2 核心上下文。但是不能使用 glsl 1.50