2016-11-29 21 views
1

私は、glTexImage2D関数でGPUメモリにテクスチャを格納しており、理論的には限られているわけではありません。しかし、我々がそれらを使用しようとすると、GL_TEXTURE0〜GL_TEXTURE31の32テクスチャ単位の制限があります。なぜこの制限がありますか?なぜテクスチャユニット番号はOpenGLで制限されていますか?

+1

従来、各テクスチャユニットはフラグメントに対して操作を適用することがありました。これは、ピクセルの塗りつぶし率を維持するために非常に多くの単位しか適用できないことを意味していました。それらのテクスチャユニットは、シリコンの不動産を占め、テクスチャメモリなどを求めていました(私はここでは単純化しています)。さらに重要なのは、0 .. 31が列挙されているということは、GL実装に存在することを意味するものではありません。 'GL_MAX_TEXTURE_SIZE'、' GL_MAX_TEXTURE_IMAGE_UNITS'のような 'glGet'関数でこれらを照会します。 –

+0

あなたは[* GLview *](http://www.realtech-vr.com/glview/)に関心をお持ちかもしれませんが、照会を介して実際の能力、限界、拡張などを報告することができます。 –

+0

'ARB_bindless_texture'は、任意の数のテクスチャにアクセスすることをサポートしています。 – ybungalobill

答えて

1

制限事項(コメントに記載されているとおり、間違った制限)は、一度に1つのレンダリングコマンドで使用できるテクスチャの数です。各シェーダステージはits own limit on the number of textures it can accessです。

この制限は、ハードウェアにその機能が制限されていないために存在します。テクスチャはリソースを必要とし、ハードウェアの中には、これらのリソースのどれだけを一度に使用できるかに制限があります。ハードウェアのように、シェーダステージが持つことができるユニフォームの数に制限があります。

ここで、より低レベルの方法でテクスチャデータにアクセスできるハードウェアがいくつかあります。この機能は、ARB_bindless_textureを介して公開されています。最近のGL 4.x対応のハードウェアではサポートされていないため、これは重要な機能ではありません。

関連する問題