GLFW设置回调函数

时间:2013-04-23 11:35:02

标签: c++ types callback glfw

data type中设置回调函数时要使用的GLFW

我尝试设置一个函数来键入void但是给了我一个compile error。将其更改为void __stdcall会为我提供RT error,但如何使用typedef GLFWGLFW*fun?我认为这是正确的做法。我真的需要一个示例源代码。

顺便说一句,我将GLFW定义为 GLFW_DLL

更新

我的代码看起来像这样:

(我以三种方式做到了)

1

原型。因为these*低于main 这个给了我一个编译错误(转换无效)

void MouseClick(int, int);
void Keyboard(int, int);
//...

2

//appending `__stdcall` get compiled but gives me `RT error`

void __stdcall MouseClick(int, int);
void __stdcall Keyboard(int, int);

第3

在我的其他项目中,我使用GLFW_BUILD_DLL并在MSVS中使用强制转换进行编译。 glfwSetKeyCallback((GLFWkeyfun)Keyboard); 但现在,我无法使用MinGW

GLFW_DLL中执行此操作
void MouseClick(int x, int y) {

}
main ...

int main() {

//glfw intialization...

glfwSetKeyCallback(Keyboard);
//other setters

}

但是,我该怎么办呢?

GLFWmouseposfun MousePos {

}

//...

2 个答案:

答案 0 :(得分:2)

根据GLFW v2.x的the documentation,您传递给glfwSetKeyCallback(等)的原型是

void GLFWCALL functionname( int key, int action );

这是一个完整的C程序,它将打印出关键事件:

#include <stdio.h>
#include <GL/glfw.h>

void GLFWCALL keyfun(int key, int action) {
  printf("%d %d\n", key, action);
}

int main() {
    glfwInit();
    glfwOpenWindow(640, 480, 0, 0, 0, 0, 0, 0, GLFW_WINDOW);
    glfwSetKeyCallback(keyfun);
    while(1) {
      glfwSwapBuffers();
    }
}

如果此代码不起作用,您可能无法正确链接到GLFW。

答案 1 :(得分:2)

啊,对不起我的错。我只是没有注意到我在Vec2f To_OGL_Coords(int x, int y)void MousePos(int x, int y)我没有包含在帖子中。 正如我所说的那样,Vec2f将第3(z)坐标遗漏给NULL导致运行时错误。 Method number 2应该在这里工作,就像Jacob Parker的回答一样。如果使用不当,我真的不太了解那些指针的效果。

(PS。我正在研究2D,这就是为什么我忽略了z坐标。我的坏)