从回调函数中检索数据

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)

但是,我更愿意在不使用全局变量的情况下这样做。能做到吗?

Rab*_*d76 5

您可以将用户指针关联到GLFWindow. 看glfwSetWindowUserPointer

可以通过以下方式一次从GLFWWindow对象中检索指针glfwGetWindowUserPointer

struct MyWindowData
{
  GLdouble x;
  GLdouble y;
}
Run Code Online (Sandbox Code Playgroud)

将指向 、 的指针关联windowDatawindow

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)