ねえ、私はglTextImage2Dでロードされたテクスチャを持っています。VRAMにロードされた後のテクスチャのサイズを取得したいのですが、どうすればよいですか?私の内部フォーマットはRGBAで、テクスチャのフォーマットはさまざまです。
2 に答える
これは参考になるかもしれませんし、おそらくそこから実際のメモリ使用量を推測することもできます。ただし、これはまだ近似値であると思います。
(NVIDIA または ATI 固有の拡張機能を使用して、OpenGL の合計メモリ使用量を照会します)
また、私の経験から、大まかな計算でメモリ使用量を概算することで、通常は十分であることに注意してください。テクスチャは、大きなオーバーヘッドなしで 1、2、または 4 つのコンポーネントのいずれかで保存する必要があります。したがって、WxH RGBA テクスチャの場合、W*H*4 を計算します。float テクスチャ (つまり GL_RGBA32F) を格納する場合は、W*H*4*4 を計算します。Mip-Maps の場合、(1/3) 追加のメモリ消費量を追加します。ただし、少なくとも私の知る限りでは、テクスチャ メモリもフラグメント化される可能性があることに注意してください。推定よりも使用可能なメモリが少なくなる可能性があります。
GetTexLevelParameterを使用すると、(レベルごとに) 次のことが得られます。
- 幅と高さ *
- 深さ
- 内部フォーマット *
- 圧縮形式と相対サイズ
(*) これらのパラメータを使用して、(指定されたレベルの) テクスチャ サイズを計算します。
単一テクスチャ メモリの使用量は、生成されたミップマップに依存します。実際、単一のテクスチャで使用されるメモリを正しく計算するには、テクスチャに関連するミップマップを決定し、各レベルのメモリ使用量を合計する必要があります。
ミップマップ カウントは、テクスチャ ターゲットに応じて OpenGL 仕様によって決定されます。テクスチャ配列要素には独自のミップマップ セットがあり、各立方体面テクスチャには独自のミップマップ セットがあります。ミップマップの次元は、1 になるまでレベルごとに半分になります。次元が 2 のべき乗でない場合は、小さい方の整数に丸められます。