2016-02-02 104 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調用。