我正在尝试使用 glfw 在 openGL 中绘制图纸,我面临的问题是要保存点的各种坐标(我无法提前知道它们的值或会有多少)我需要重新分配一个指针以获得更多空间来保存它们。
我只需要在按下按钮时才重新分配指针,因此我认为 realloc 在key_callback
函数中是有意义的。
问题是,显然,int *pointer
不在key_callback
范围内,所以我不能直接在那里重新分配它,我不能将int *
传递给key_callback
因为它是一个 glfw 功能,具有我无法更改的特定参数。
我的问题是,我应该在 main(全局)之外声明int *pointer = malloc
,以便它从main
和key_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()
初始化指针 -- 在全局范围内声明的变量只能初始化为常量值,而不能初始化为函数调用。