0

からコールバック関数を呼び出そうとしています

 void display(void){

    my_draw(&here_is_the_actual_drawing);

 }

 void here_is_the_actual_drawing(){

    glVertex2f(x,y);

 }

主にopenglループ呼び出し表示..のように

 glutDisplayFunc(display); 

私の質問は、これを行うことができますか?? コードをコンパイルしてみましたが、スタックします.. [ my_draw は here_is_the_actual_drawing を呼び出すスレッドを作成します ---- わかりましたので、コールバックするスレッドはありません]

4

1 に答える 1

0

my_draw は here_is_the_actual_drawing を呼び出すスレッドを作成します ---- わかりましたので、コールバックするスレッドはありません]

任意のスレッドから単にOpenGL コマンドを呼び出すことはできません。OpenGL にはコンテキストが必要であり、各 OpenGL コンテキストは一度に 1 つのスレッドでのみアクティブにできます。スレッド間でコンテキストを移行することは完全に可能です。ただし、これには、コンテキストの作成と管理を完全に制御できる必要があります。

(Free)GLUT、GLFW、SDL などの単純なフレームワークを使用すると、コンテキスト管理を制御できなくなります。しかし、技術的には可能です。

しかし、可能なことすべてが理にかなっているわけではありません。通常、すべての OpenGL 操作を 1 つのスレッド (正確にはメイン GUI スレッド) に保持することが最善の解決策です。マルチスレッド OpenGL は、非常に少数の状況でのみ有用であり、その場合でも非常に限られた状況でのみ有用です。

BTDT (実際、私の現在のプロジェクトではマルチスレッド OpenGL を多用しています)

于 2013-01-26T01:15:58.550 に答える