从回调函数中检索数据

时间:2015-12-16 15:50:22

标签: c++ global-variables glfw

如果我要在GLFW中设置一个回调函数,那就说

glfwSetCursorPosCallback(window, mouse);

检索光标位置最明显的方法是

vec2 m;

void mouse (GLFWwindow* window, GLdouble x, GLdouble y)
{
    m = vec2 (x, y);
}

但是,我更愿意不使用全局变量。可以吗?

1 个答案:

答案 0 :(得分:2)

您可以将用户指针与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; 
}