2017-03-24 4 views
1

私はglfwを使ってOpenGLで図面を作ろうとしていますが、私が直面している問題は、ポイントのさまざまな座標を保存することです(私はその値を知ることができないか、それらを保存するためのスペースを増やすためにポインタを再割り当てします。
私はボタンを押したときにのみポインタを再割り当てする必要があります。したがって、key_callback関数内にreallocがあると意味が分かりました。
問題は明らかに、int *pointerはので、私は直接そこにreallocをすることはできませんし、それが特定の引数がありGLFWのfucntionですので、私はkey_callbackint *を渡すことはできませんkey_callbackの範囲ではない、ということである私ができます」 t変化。
私の質問はkey_callback内のグローバル変数を増加させ、それがmainkey_callbackの両方から見えるだように、私は(世界的に)メインのint *pointer = malloc外を宣言すべきであり、そしてメインの内側にif (new_variable_value != old_variable_value){realloc}ような何かを行うか、私はしなかった第3の選択肢が存在しますのことを考える?glfw - key_callback内の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); 
} 

答えて

0

User pointer

各ウィンドウは、glfwSetWindowUserPointerglfwGetWindowUserPointerとフェッチして設定することができるユーザ・ポインタを有します。これは、あなたが必要とするあらゆる目的に使用することができ、GLFWがウィンドウの寿命期間を通して変更することはありません。

ポインタの初期値はNULLです。

+0

ありがとう、私はその関数の存在を無視しました –

0

宣言pointerとしてグローバル変数。これは最も簡単な修正方法です。

malloc()main()で初期化する必要があります。グローバルスコープで宣言された変数は、関数呼び出しではなく定数値でのみ初期化できます。

+0

今私は愚かな気がします。グローバル変数を使用しないので、関数呼び出しに初期化できないと忘れてしまいました... –

関連する問題