4

私は最近、大規模なプログラムを Delphi から Lazarus に移行しました。ほとんどのバグは整理されており、Lazarus / FPC に完全に感銘を受けています。しかし、私がよく理解できないバグが1つあります。

私のアプリケーションには、メインの OpenGL ウィンドウといくつかの補助フォームがあります。当初、これらのフォームは Delphi VCL を使用して設計していましたが、現在は Lazarus LCL に移行しています。

編集: OpenGL ウィンドウは、現時点では LCL フォームではありません。Win32 への呼び出しを使用して実装され、独自のメッセージ ループがあります。

次のコード行に従って、すべてのフォームはメインの OpenGL ウィンドウの子と見なされます。

Form.ParentWindow := OpenGLWindow.h_wnd;

残念ながら、フォームが OpenGL ウィンドウによって所有されている場合、フォームは単に消えてしまいます。もちろん、OpenGL ウィンドウは 30fps のフレームレートで更新され、これがスクリーン バッファの問題を引き起こしています。フォームがレンダリングされ、OpenGL ウィンドウによってその上にレンダリングされます。

フォームがメイン ウィンドウによって所有されていない場合、問題は解決されます。残念ながら、所有権の変更はエンド ユーザーにとってかなり混乱を招きます (メニューがプログラムの背後で失われるなど)。

このような問題をどこから始めればよいのでしょうか。フォーム内にレンダリングするための独自のスクリーン バッファがあることを確認する必要がありますか、それとも間違った考えですか?

いくつかのことを明確にするために: QT などではなく、LCL の Win32 バージョンを使用しています。また、フォームをダブルバッファリングするように設定して、それが役立つかどうかを確認しようとしましたが、そうではありませんでした.

4

1 に答える 1

1

Lazarus に付属の OpenGlControl を使用してみてください。コンポーネントフォルダーからパッケージをインストールします。このコンポーネントは Tpaint のように機能しますが、opengl コンテキストです。任意のフォームにドロップすると、このフォームは opengl コンテキストになりますが、フォームでもあり、移動、サイズ変更などを行うことができます。コンポーネントに付属のサンプルを見てください。

/ブルーイカロ

于 2014-05-03T11:56:28.337 に答える