我正在使用一个使用setCallback
函数的c库。这些函数采用具有固定签名的函数,例如:
int glfwSetCursorPosCallback(window, mouse_move);
mouse_move
签名的位置
void mouse_move(GLFWwindow * window, double xpos, double ypos)
但是假设mouse_move
依赖于这些函数参数之外的其他状态,例如camera
结构体?在 c 中,我只是将camera
设为全局变量。但是,我正在Cython
工作,我想在不求助于全局变量的情况下使用glfwSetCursorPosCallback
,这些全局变量是非pythonic和混乱的。如果camera
是一个类或实例属性,有没有办法从mouse_move
内部访问它而不将其作为参数传入?
这不是一般问题的解决方案,但对于 glfw 回调,可以将void*
与您的GLFWwindow
相关联,如下所示:
glfwSetWindowUserPointer(window, yourVoidPtr);
并稍后访问它(例如在回调中(:
YourData *data = (YourData *) glfwGetWindowUserPointer(window);