2014-03-05 2 views
1

GLFWwindow의 크기가 조정 된 후 호출되는 GLFWwindowsizefun 콜백 함수 설정을위한 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에 액세스하기위한 유일한 방법은 변수를 정적으로 설정하는 것입니다. 그러나이 경우에는 단일 프로그램에서 여러 창을 만드는 데 문제가 발생하기 때문에 필요하지 않습니다.OOP의 GLFWwindowsizefun 접근성

class Window 
{ 
    private: 
     GLFWwindow* glfw_window; 
     mat4 ortho_proj; 
    public: 
     Window(int _width, int _height, const char* _title); 
     bool update(); 
     void render(); 
     ~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 공공 및 정적 될 경우 일하는 것이 내가 ortho_proj 전에 Window::를 추가하는 경우)입니다 :

클래스 정의입니다

따라서 콜백 함수에서 ortho_proj 변수에 액세스하는 방법이 있습니까? 아니면 콜백 함수가 어떻게 든 클래스 멤버 일 수 있습니까? 또는 창 크기를 조정 한 경우 부울 반환 GLFW 함수가 있습니까?

+0

'Window' 클래스에서 허용하고 싶은 인터페이스는 무엇입니까? 거기에서 사용자 정의 할 수있게하려면 어떻게 하시겠습니까? – Shoe

답변

3

glfwSetWindowUserPointer()을 사용하면 Window 포인터를 GLFW 창에 연결할 수 있습니다. 그런 식으로 콜백 내부에서 Window 인스턴스를 찾아 다시 클래스에 콜백 할 수 있습니다.

이것은 고전적인 패턴이며, GLFW가 지원하지 않는다면 크게 놀랐을 것입니다. @elmindreda은 자신의 물건을 알고 있습니다.

+0

니스! 고맙습니다! – Qualphey