Ylf*_*aue 1 c++ global-variables glfw
假设我要在 GLFW 中设置回调函数
glfwSetCursorPosCallback(window, mouse);
Run Code Online (Sandbox Code Playgroud)
检索光标位置的最明显的方法是
vec2 m;
void mouse (GLFWwindow* window, GLdouble x, GLdouble y)
{
m = vec2 (x, y);
}
Run Code Online (Sandbox Code Playgroud)
但是,我更愿意在不使用全局变量的情况下这样做。能做到吗?
您可以将用户指针关联到GLFWindow. 看glfwSetWindowUserPointer。
可以通过以下方式一次从GLFWWindow对象中检索指针glfwGetWindowUserPointer
struct MyWindowData
{
GLdouble x;
GLdouble y;
}
Run Code Online (Sandbox Code Playgroud)
将指向 、 的指针关联windowData到window:
MyWindowData windowData;
glfwSetWindowUserPointer( window, &windowData );
glfwSetCursorPosCallback( window, mouse );
Run Code Online (Sandbox Code Playgroud)
从 中获取指针并将window类型的指针转换void*为MyWindowData *(遗憾的是您必须进行转换)。
void mouse(GLFWwindow* window, GLdouble x, GLdouble y)
{
MyWindowData *dataPtr = (MyWindowData*)glfwGetWindowUserPointer( window );
dataPtr->x = x;
dataPtr->y = y;
}
Run Code Online (Sandbox Code Playgroud)