2

Visual Studio Express 2008 で C# を使用しています。

Tao Framework OpenGL dll も使用しています。

再描画が必要なときに SimpleOpenGLControl が再描画される原因は何ですか?

SimpleOpenGLControl がアクティブなフォームにある場合、再描画するために必要なのは、glFlush()andを呼び出すことだけSimpleOpenGLControl.Invalidate()です。

ただし、コントロールがアクティブなフォームに存在しない場合、再描画することはできません。非正統的な手段でコントロールを無効にする方法を見つけましたが、これはコントロールのコンテンツ (3D レンダリング) を再描画せず、単に空白 (黒) のコントロールを残します。

アクティブなフォームに関係なく、コントロールを実際に再描画するにはどうすればよいですか?

4

1 に答える 1

3

どうやら私の問題は SimpleOpenGLControl の再描画ではなく、関数が呼び出されたスレッドにあったようです。

私のアプリケーションは、1 つのスレッドで新しいデータを取得するまで待機し、委任された表示関数を介してフォームにデータを返します。

エラーや警告は発生しませんでしたが、OpenGL レンダリング バッファがいっぱいになっていないようです。これは、それを埋める関数が独立したスレッドから呼び出されたためです。

スレッドセーフ関数の委譲を完全には理解していませんが、フォームが実行されているスレッドの下でプロシージャをプッシュしたところ、OpenGL レンダリング バッファが再び満足しました。

したがって、私の質問に対する答えは次のとおりです。OpenGL は、初期化されたのと同じスレッドで発生しない限り、レンダリング バッファに値を入力しません。

于 2010-01-30T03:13:15.623 に答える