我正在尝试使用 glfw 在 openGL 中绘图,我面临的问题是要保存点的各种坐标(我无法知道它们的值或提前有多少)我需要重新分配一个指针以获得更多空间来保存它们。
我只需要在按下按钮时重新分配指针,因此我认为将重新分配放在 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);
}
最佳答案
Each window has a user pointer that can be set with
glfwSetWindowUserPointer
and fetched withglfwGetWindowUserPointer
. This can be used for any purpose you need and will not be modified by GLFW throughout the life-time of the window.The initial value of the pointer is NULL.
关于c - glfw - key_callback 中的 realloc 可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43010745/