0

私はいくつかのクロスプラットフォーム GUI ライブラリ (FLTK、wxWidgets、GTK++ など) を使用してきましたが、プラットフォームに関係なく同じように見えるものを作成したいので、私のニーズを満たすものはないように感じます (プラットフォーム上でネイティブの外観を持たない GUI の構築に反対する人々ですが、それはここでは問題ではありません)。コントロールを構築するために、私は通常、ライブラリによって提供される基本的な形状に依存し、すべてをまとめてバインドおよびコーディングします...

そこで、2D GUI プログラミング用にいくつかの opengl を試してみることにしました (クロスプラットフォームであるため)。平均 RAM 消費量は 1/2MB ですが、単純な背景を持つ非常に基本的な openGL ウィンドウの範囲は 6 ~ 9 MB です。

これは、このスレッドの実際の質問につながります。画面のすべてのレンダリングは、opengl/direct (カバーの下) のいずれかを使用して行われたと思いました。

これらが実際にどのように機能するかについての洞察を得ることができる何らかの記事を説明またはリンクしてください。

読んでくれてありがとう!

4

2 に答える 2

0

あなたの質問は非常に漠然としていますが、GL アプリが基本的な GUI ウィンドウよりも多くのメモリを消費する理由について質問しているようです。

それは OpenGL アプリケーションだからです。これは、OpenGL を機能させるために必要なすべての機構を格納する必要があることを意味します。これは、バック バッファ、Z バッファなど、非常に大きなサイズのフレームバッファが必要であることを意味します。機能するには、多くのボイラープレートが必要です。

本当に、私はそれについて心配することはありません。これは、すべてのアプリケーションが行うことです。

于 2012-03-04T17:47:08.797 に答える
0

これらのマルチプラットフォーム ツールキットは通常、描画を行う非常に多くのバックエンドをサポートします。一部のツールキットはバックエンドとして OpenGL をサポートしていますが、通常、デフォルトは「ネイティブ」バックエンドです。

見てみましょう。Qtで。Windows では、ネイティブ バックエンドの描画に GDI を使用します。LinuxではXRenderを使用していると思います。Symbian と Mac で同じです。Qt には独自のソフトウェア ラスタライザーもあります。もちろん、OpenGL バックエンドもあります。

では、これらの GUI ツールキットの一部を使用するアプリケーションが、単純な OpenGL アプリケーションよりも少ないメモリしか消費しないのはなぜでしょうか? ツールキットが「ネイティブ」バックエンドを使用する場合、すべての可視 GUI が同じ描画 API を使用する可能性が非常に高いため、すべてが既にメモリにロードされています。ネイティブ API は、すべてのアプリケーションが描画できる画面全体を表す 1 つのバッファーのみを使用することもできます。

ただし、OpenGL を使用する場合は、アプリケーション ウィンドウを表す独自のバッファーがあります。言うまでもなく、OpenGL アプリケーションには通常、z バッファ、ステンシル バッファ、バック バッファなど、2D 描画には必須ではない複数のフレームバッファがありますが、ある程度のスペースを必要とします (おそらくグラフィック カード メモリ内のスペースですが)。最後に、OpenGL を使用する場合、必要なライブラリがまだロードされていない可能性があります。

于 2012-03-04T18:14:15.570 に答える