2014-03-05 119 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