2016-02-02 102 views
2

我对OpenGL相当陌生,并且已经使用GLFW和GLEW结合来创建和显示OpenGL上下文。以下代码片段显示了我如何创建一个窗口并将其用于OpenGL。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函数时,它会以某种方式在我的进程内的某个位置存储该上下文以供将来使用,但没有文档显示这一点。

+0

基本上所有的OpenGL函数都是指针; glew'初始化'这些指针,使它们像函数一样行为,而实际上它们只是对已经加载到内存中的函数的引用。事情是,glew不是一个可行的API,因为它提供了一些额外的开销,并且不包含OpenGL中的所有内容。最好使用更多像“glbinding”一样的更新。 – Poriferous

回答

3

当前的OpenGL上下文是一个全局(或更多的点,thread_local)“变量”的种类。所有OpenGL函数都在当前线程中处于活动状态的任何上下文中执行操作。

这包括GLEW所做的OpenGL调用。