2016-08-08 13 views
7

質問: 正方形のテクスチャに長方形のテクスチャよりも同じ容量のビデオメモリが必要なのはなぜですか?OpenGL:正方形のテクスチャが少ないメモリを使用する理由

例: glTexImage2Dコマンドで360×4×16384サイズのテクスチャを作成しています。内部形式はGL_RGBAです。 ビデオメモリ:1328 MB。

同じデータで360×256×256のテクスチャを作成する場合、メモリ使用量は100MB未満です。

統合Intel HD4000 GPUを使用します。

+0

私は100%確信していませんが、OpenGLがglTexture呼び出しでピクセルデータをどのように処理するかとは関係があります。イメージが正方形である場合、レンダリングの準備ができるようにバックバッファにデータを格納するとき、2の累乗と関係していると思います。 –

+0

ミップマップを生成していますか?私はあなたがいないと思うが、確かに); – Mars

+0

@Mars:そうだね、ミップマップを使っていないということを正確に忘れた。 – Szak1

答えて

6

テクスチャが長方形であるということではありません。それは極端に大きい次元の1つです。です。

テクスチャから最適なテクセルを選択するために、ハードウェアはスウィズリングと呼ばれるものを採用します。一般的な考え方は、テクスチャ内のバイトを再構成して、2次元でお互いに隣り合うピクセルがメモリ内の隣接ピクセルになるようにすることです。しかし、これを行うには、テクスチャが両方の次元で特定の最小サイズであることが必要です。

ここで、テクスチャフィルタリングハードウェアはこの最小サイズを無視して、テクスチャの実際のサイズ内のピクセルからのみフェッチすることができます。しかし余分なストレージはまだそこにあり、スペースを取って有用な目的にはならない。

見ている通り、インテルのすばらしいハードウェアの基本最小サイズは32または64ピクセルです。

OpenGLでは、ここで行った以外の違和感を検出することはあまりありません。

+0

OpenGLを初めてお世話になりました。ありがとうございました。 実際に、4x16384サイズを各テクスチャに対して32x16384に増やしても、メモリ使用量は増加しませんでした(最初の増加は64x16384で発生します)。これは、あなたが示唆しているように、IntelチップセットのOpenGL実装には、ある方向に対して最低32ピクセルが割り当てられていることがわかります。 回答を解決策としてマークしました。 – Szak1

+0

それを検出できるNSightのようなツールはありませんか? – Zouch

関連する問題