从回调函数中检索数据
Retrieving data from callback function
我是不是要在 GLFW 中设置一个回调函数,比方说
glfwSetCursorPosCallback(window, mouse);
检索光标位置的最明显方法是
vec2 m;
void mouse (GLFWwindow* window, GLdouble x, GLdouble y)
{
m = vec2 (x, y);
}
但是,我更愿意在不使用全局变量的情况下这样做。可以吗?
您可以将用户指针关联到 GLFWindow
。参见 glfwSetWindowUserPointer
。
从 GLFWWindow
对象中一次检索指针
struct MyWindowData
{
GLdouble x;
GLdouble y;
}
将指向 windowData
的指针关联到 window
:
MyWindowData windowData;
glfwSetWindowUserPointer( window, &windowData );
glfwSetCursorPosCallback( window, mouse );
从 window
获取指针并将类型 void*
的指针转换为 MyWindowData *
(很遗憾,您必须进行转换)。
void mouse(GLFWwindow* window, GLdouble x, GLdouble y)
{
MyWindowData *dataPtr = (MyWindowData*)glfwGetWindowUserPointer( window );
dataPtr->x = x;
dataPtr->y = y;
}
我是不是要在 GLFW 中设置一个回调函数,比方说
glfwSetCursorPosCallback(window, mouse);
检索光标位置的最明显方法是
vec2 m;
void mouse (GLFWwindow* window, GLdouble x, GLdouble y)
{
m = vec2 (x, y);
}
但是,我更愿意在不使用全局变量的情况下这样做。可以吗?
您可以将用户指针关联到 GLFWindow
。参见 glfwSetWindowUserPointer
。
GLFWWindow
对象中一次检索指针
struct MyWindowData
{
GLdouble x;
GLdouble y;
}
将指向 windowData
的指针关联到 window
:
MyWindowData windowData;
glfwSetWindowUserPointer( window, &windowData );
glfwSetCursorPosCallback( window, mouse );
从 window
获取指针并将类型 void*
的指针转换为 MyWindowData *
(很遗憾,您必须进行转换)。
void mouse(GLFWwindow* window, GLdouble x, GLdouble y)
{
MyWindowData *dataPtr = (MyWindowData*)glfwGetWindowUserPointer( window );
dataPtr->x = x;
dataPtr->y = y;
}