GLGDI +または「GDI +からOpenTKへの切り替え」

多くの人は、GDI +が減速するという問題に対処しなければならなかったと思いますが、それは鉄によって加速されないためです。

だから私はかつてレベルエディターを書きました



そして、私はもはやGDI +を持っていないことに気づきました。加速したものに切り替える必要があり、最小限の時間でした。 少しグーグルで、OpenTKライブラリを選ぶことにしました。



OpenTK(Open Toolkit)は、OpenGL、OpenGL ES、OpenCL、およびOpenALのラッパーである低レベルのライブラリです。 このライブラリは、ゲーム、科学アプリケーション、および3Dグラフィックス、オーディオ、コンピューティング機能を必要とするその他のアプリケーション向けに設計されています。 OpenTKはクロスプラットフォームライブラリであり、Monoと.NETの両方で実行されます。


なぜOpenTKを選んだのですか? まず、OpenTKはGLControlクラス(UserControlの直接の子孫)を提供します。これにより、このライブラリへの切り替えが容易になります。 第二に、バンドルにはTextPrinterクラスが含まれています。これにより、画面にテキストを非常に簡単に表示できます。 第三に、グーグル中に、2Dレンダリング、OpenGL初期化、およびその他の設備のための一連のクラスを含む小さな「Engine.zip」アーカイブを見つけました。



最初に、OpenTKに切り替えたときに遭遇する落とし穴について説明する予定でしたが、GDI +から高速なものへの切り替えの問題は非常に一般的であることを思い出して、GDI +を模倣する小さなライブラリを作成し、パブリックドメインに入れることにしました。 私は彼女のGLGDI +と呼んだ。 これは軽量のライブラリであり、最も必要な最小値のみが含まれ、GDI + APIを完全にコピーしようとしないことを忘れないでください。 クラスGLGraphics、GLImage、およびGLMultiImageが含まれています。 GLGraphicsには次のメソッドが含まれています。



いくつかのポイント


それでも、OpenTKを使用する際に直面しなければならなかったいくつかのポイントについて説明します。 OpenTK Webサイトには、私が読んだことがない確かなチュートリアルがあります。もし読んだなら、問題はもっと少ないでしょう。 しかし、あったのは:

  1. 私が最初に出会ったのは、コントロールが起動時に再描画されなかった、それは簡単だった、OnPaintの最後にSwapBuffersメソッドを呼び出すことを忘れないでください、GLControlはすでにDoubleBuffer機能が組み込まれているので、バッファを切り替えるだけです
  2. 私がつまずいたのは、画像ではなく黒い長方形です。 レンダリングの前にimage.SetBlending()を呼び出すことで解決しました。現在、ライブラリではすべての画像がブレンドで描画されるため、これに問題はないはずです。
  3. 2番目のコントロールをOpenTKレールに転送すると、最初のコントロールが機能を果たすのを停止した後、要素を描画する前にOnPaintでMakeCurrentメソッドを呼び出して決定したことがわかりました
  4. TextPrinter(DrawStringの基礎)は、テキストを表示するときにクラッシュすることがあります。何もする必要はありません-クラスはバグが多く、レンダリング品質、フォント、フォントサイズの特定の組み合わせによって、フォントとサイズを選択する必要がありました
  5. また、コントロールが読み込まれたことを追跡し、その後OpenTK / GLGraphicsで動作することを追跡し、コントロールがフォームデザイナモードにないことも確認する必要があります。
  6. コントロールのサイズを変更するときは、GLGraphics.Resize(Width、Height)を呼び出すことを忘れないでください


おわりに


ライブラリは、BSDライセンスの下でGoogleCodeにあります。 誰かがそれを必要とするならば、健康のためにそれを使用してください。 ライブラリの操作方法を理解するには、付属のサンプルのソースコードを見てください。非常に簡単です。



上記のすべての「モーメント」が考慮されます。

大量のユーザーを対象とした製品にこのライブラリを使用することはお勧めしません-これには若すぎますが、ユーティリティでの使用には非常に適しています。

現時点では、ライブラリの開発計画はありません-その機能は十分にあります。 しかし、バグ修正とパッチは大歓迎です:)



OpenTKフォーラムで読んだ内容から判断すると、TextPrinter(テキストの表示に使用)は将来ライブラリから除外されますが、別のプロジェクトで除外される可能性があります。 したがって、彼の運命はまだあいまいです。 現在は非推奨状態にあるため、ライブラリのコンパイル時に警告が表示されます。



これで、マップエディターの動作が非常に速くなり、速度が低下することはありません。



UPD: OpenTK Webサイトへのリンクを提供するのを忘れた

UPD2:サンプルのソースコードのパス(アーカイブとSVNの両方)のバグを修正しました



All Articles