c - glfw - key_callback 中的 realloc 可能吗?

标签 c opengl malloc glfw

我正在尝试使用 glfw 在 openGL 中绘图,我面临的问题是要保存点的各种坐标(我无法知道它们的值或提前有多少)我需要重新分配一个指针以获得更多空间来保存它们。
我只需要在按下按钮时重新分配指针,因此我认为将重新分配放在 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);
}

最佳答案

User pointer :

Each window has a user pointer that can be set with glfwSetWindowUserPointer and fetched with glfwGetWindowUserPointer. 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/

相关文章:

c - 如何使用 iconv(3) 将宽字符串转换为 UTF-8?

c - ? : ternary conditional operator behaviour when leaving one expression empty

c++ - 如何在 OpenGL 中绘制单个像素?

混淆访问 malloc 内存(未初始化)

c - malloc 与数组,无法理解为什么这有效

c - 在 C 中获取数组大小。无法理解输出

编码,将一个整数写入文件中

c - 如何检索加载我的 dll 的线程的地址

c++ - OpenGL 灰度纹理作为浮点格式错误

c++ - 打开 GL 照明问题