2011-10-04 9 views
8

C++でOpenGLによって使用される合計メモリをバイト単位で取得する方法は?C++でOpenGLによって使用される合計メモリをバイト単位で取得するには?

私はOpenGLアプリケーションを構築していますが、使用されているメモリの合計が増えているようですが、変数&で使用されている合計メモリに関する情報を得ることはできますが、OpenGLがその変数&オブジェクト&のテクスチャなどです。は、C++でOpenGLが使用するバイト単位の合計メモリを得ることができますか?

答えて

7

一般に、あなたはしません。 OpenGLは最終的にはハードウェアの抽象化です。 OpenGLは単にそのような情報を得る手段を提供していません。

尋ねる方法を提供するベンダー固有の拡張機能がありますが、戻ってくるものはアーキテクチャによって異なります。 AMDハードウェアはATI_meminfo extensionを提供します。メモリをバッファオブジェクト、テクスチャ、レンダバッファなどのオブジェクトの種類に分割します。

NVIDIAは実験的な拡張機能NVX_gpu_memory_infoを提供します。レジストリにはどのように使用するかに関する情報はないので、何かにリンクすることはできません。

いずれにしても、GPUが使用していることを知る最も効果的な方法は、自分で追跡することです。常にinternal image formats with sizesを使用してください。これは、テクスチャがどれくらいのメモリを占有しているか、かなり良い見積もりを計算できることを意味します。同じことがバッファオブジェクトなどにも適用されます。

パディング、アラインメントなどがあなたを混乱させる可能性があるため、正確な数字は得られません。しかし、あなたはかなりまともな何かを得るでしょう。

+0

私はテクスチャミップマップもメモリ使用量統計に考慮しなければならないと思います。 – Luca

+0

+1良い答え。私はOPがOpenGL実装(ドライバ)で使用されているCPUメモリを知りたいという印象を受けたので、実際にこの質問に答えなかった。そうでない場合(GPUメモリを参照している場合)、私は彼が "使用された総メモリが上昇しているように見える"ことをどのように見ているべきかわかりません。 –

+0

私はミップマップを使用しています。これはビットマップテクスチャを使用するよりも50%以上メモリが必要です。 GLはRAMとビデオRAMの両方を使用しているようです。 – jondinham

関連する問題