OpenGL 上下文存储在哪里?

Posted

技术标签:

【中文标题】OpenGL 上下文存储在哪里?【英文标题】:Where is the OpenGL context stored? 【发布时间】:2016-02-02 01:57:46 【问题描述】:

我是 OpenGL 的新手,一直在使用 GLFW 和 GLEW 来创建和显示 OpenGL 上下文。以下代码 sn-p 显示了我如何创建一个窗口并将其用于 OpenGL。

GLFWwindow* window;

if (!glfwInit())

    return -1;


window = glfwCreateWindow(1280, 720, "Hello OpenGL", NULL, NULL);

if (!window)

    glfwTerminate();
    return -1;


glfwMakeContextCurrent(window);

GLenum err = glewInit();

if (err != GLEW_OK)

    glfwTerminate();
    return -1;

glewInit 如何获取窗口/上下文并使用它进行初始化,而无需我自己传递任何额外的参数?

我只能想象,当我们调用 glfwMakeContextCurrent 函数时,它会以某种方式将上下文存储在我的进程中的某个位置以供以后使用,但没有文档显示这一点。

【问题讨论】:

基本上所有的OpenGL函数都是它的指针; glew '初始化'这些指针,使它们表现得像函数,而实际上它们只是对已经加载到内存中的函数的引用。问题是,glew 不是一个可行的 API,因为它提供了轻微的开销并且没有涵盖 OpenGL 中的所有内容。最好使用更新的东西,比如glbinding 【参考方案1】:

当前的 OpenGL 上下文是一种全局(或者更确切地说,thread_local)“变量”。所有 OpenGL 函数都作用于当前线程中当前处于活动状态的任何上下文。

这包括 GLEW 进行的 OpenGL 调用。

【讨论】:

以上是关于OpenGL 上下文存储在哪里?的主要内容,如果未能解决你的问题,请参考以下文章

使用 ubuntu 在不同的显示器上共享 opengl 上下文

使用 openGL 在 SDL2 中全屏显示窗口

我的OpenGL学习进阶之旅EGL简介

有效的 OpenGL 上下文

在现有 sdl_opengl 上下文上绘制小部件

OpenGL 渲染上下文-context