如果我在GLFW中设置回调函数,比如
glfwSetCursorPosCallback(window, mouse);
检索光标位置最明显的方法是
vec2 m;
void mouse (GLFWwindow* window, GLdouble x, GLdouble y)
{
m = vec2 (x, y);
}
但是,我更愿意在不使用全局变量的情况下执行此操作。能做到吗?
您可以将用户指针关联到GLFWindow
。参见glfwSetWindowUserPointer
。
指针可以通过glfwGetWindowUserPointer
一次从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;
}