2014-03-05 82 views
1

有一個設置一個回調函數GLFWwindowsizefun一個GLFWwindow的大小後,其被稱爲glfwSetWindowSizeCallback功能。現在的問題是,在我的用戶界面庫我有一個叫Window類持有會員GLFWwindow glfw_window;glm::mat4 ortho_proj;,並在大小回調函數我想做ortho_proj = glm::ortho(0.0f, (float)_width, (float)_height, 0.0f, -1.0f, 1.0f);,但我不能,因爲回調函數是靜態的,是不是Window類的成員,AFAIK不是。所以我知道,在回調函數中訪問ortho_proj變量的唯一方法是將變量設置爲靜態,但我不希望這樣,因爲在那種情況下,我將面臨在單個程序中創建多個窗口的問題。GLFWwindowsizefun無障礙OOP中

這是類定義:

class Window 
{ 
    private: 
     GLFWwindow* glfw_window; 
     mat4 ortho_proj; 
    public: 
     Window(int _width, int _height, const char* _title); 
     bool update(); 
     void render(); 
     ~Window(); 
}; 

這是回調函數(這是可行的,如果ortho_proj是公共和靜態的,如果我會ortho_proj前加Window::

void window_size_callback(GLFWwindow* _window, int _width, int _height) 
{ 
    ortho_proj = ortho(0.0f, (float)_width, (float)_height, 0.0f, -1.0f, 1.0f); 
} 

那麼在回調函數中有沒有什麼方法可以訪問ortho_proj變量,或者回調函數可能以某種方式成爲類成員?還是有任何GLFW函數返回一個布爾值,如果窗口已被調整大小?

+0

什麼是你想在'Window'類中允許的接口。您希望如何從那裏定製它? – Shoe

回答

3

您可以使用glfwSetWindowUserPointer()Window指針與GLFW窗口關聯。這樣,您可以從回調中查找Window實例,並回調到該類中。

這是一個經典的模式,我會一直majorly感到驚訝,如果GLFW沒有支持它。 @elmindreda知道她的東西。

+0

不錯!謝謝! – Qualphey