C - GLFW - 内部的 Realloc key_callback可能吗?



我正在尝试使用 glfw 在 openGL 中绘制图纸,我面临的问题是要保存点的各种坐标(我无法提前知道它们的值或会有多少)我需要重新分配一个指针以获得更多空间来保存它们。
我只需要在按下按钮时才重新分配指针,因此我认为 realloc 在key_callback函数中是有意义的。
问题是,显然,int *pointer不在key_callback范围内,所以我不能直接在那里重新分配它,我不能将int *传递给key_callback因为它是一个 glfw 功能,具有我无法更改的特定参数。
我的问题是,我应该在 main(全局)之外声明int *pointer = malloc,以便它从mainkey_callback都可见,在key_callback内部增加一个全局变量并在 main 内部做类似if (new_variable_value != old_variable_value){realloc}的事情,或者存在我没有想到的第三种选择?

这是我现在拥有的代码的骨架:(显然由于多种原因它不起作用,这只是为了让您了解我想做什么)

key_callback(GLFWwindow *window, int key, int scancode, int action, int mods) {
// do stuff
// realloc pointer
}
int main(void) {
int *pointer = malloc(sizeof(int));
if (!pointer){
free(pointer);
exit(EXIT_FAILURE);
}
GLFWwindow *window;
glfwSetErrorCallback(error_callback);
if (!glfwInit())
exit(EXIT_FAILURE);
window = glfwCreateWindow(1280, 720, "Example", NULL, NULL);
if (!window) {
glfwTerminate();
exit(EXIT_FAILURE);
}
glfwMakeContextCurrent(window);
glfwSetKeyCallback(window, key_callback);
while (!glfwWindowShouldClose(window)) {
//draw stuff
glfwSwapBuffers(window);
glfwPollEvents();
}
free(pointer);
glfwDestroyWindow(window);
glfwTerminate();
exit(EXIT_SUCCESS);
}

用户指针:

每个窗口都有一个用户指针,可以使用glfwSetWindowUserPointer设置并使用glfwGetWindowUserPointer获取。这可以用于您需要的任何目的,并且在窗口的整个生命周期内不会被GLFW修改。

指针的初始值为 NULL。

pointer声明为全局变量。这是最简单的解决方法。

您需要使用main()中的malloc()初始化指针 -- 在全局范围内声明的变量只能初始化为常量值,而不能初始化为函数调用。

相关内容

  • 没有找到相关文章

最新更新