GLFW设置回调函数

GLFW setting callback functions

本文关键字:函数 回调 设置 GLFW      更新时间:2023-10-16

GLFW中设置回调函数时使用哪个data type

我尝试设置一个函数类型void,但给我一个compile error。将其更改为void __stdcall给我一个RT error,但我如何使用GLFWtypedef 's,如GLFW*fun ?我认为这是正确的选择。我真的需要一个示例源代码。

btw,我定义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) {
}

in main

int main() {
//glfw intialization...
glfwSetKeyCallback(Keyboard);
//other setters
}

但是,我怎么做呢?

GLFWmouseposfun MousePos {
}
//...

根据GLFW v2的文档。x传递给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 %dn", key, action);
}
int main() {
    glfwInit();
    glfwOpenWindow(640, 480, 0, 0, 0, 0, 0, 0, GLFW_WINDOW);
    glfwSetKeyCallback(keyfun);
    while(1) {
      glfwSwapBuffers();
    }
}

如果这段代码不工作,你可能链接到GLFW不正确。

嗯,对不起,是我的错。我只是没有注意到我在void MousePos(int x, int y)中有这个Vec2f To_OGL_Coords(int x, int y),我没有包括在我的帖子中。正如我所说,它是Vec2f,我遗漏了NULL的第3 (z)坐标,导致运行时错误。Method number 2应该在这里起作用,和Jacob Parker的答案一样。我真的不知道这些指针如果使用不当会有什么影响。

(PS。我在二维上工作,这就是为什么我忽略了z坐标。我的坏)