2012-03-18 21 views
7

GL_MAX_TEXTURE_SIZEバリアントが1つの軸のテクスチャピクセルサイズを返すか、または両方が加算された(x、y)かどうかを知りたいと思います。GL_MAX_TEXTURE_SIZEとの混乱

たとえば、私のPC上では、結果として8192が得られます。 これは、私が8192 * 8192 * 4(256mb)または4096 * 4096 * 4(64mb)のテクスチャをロードできることを意味しますか?もしそうなら、私のグラフィックスカードに1GBのビデオメモリがある場合、なぜこれが起こるのですか?

+1

私は最大のテクスチャサイズは、ビデオメモリの量よりも(ハードウェア内の)アドレスにアクセスするために必要なライン数(ビット)と関連があると考えています。純粋にソフトウェアの観点から見ると、常に私には恣意的に見えるので、ハードウェアの制限でなければなりません。 – Robinson

答えて

15

OpenGL仕様では、最大1D/2Dテクスチャイメージディメンションと呼ばれているため、実際には8192x8192イメージを意味します。さて、幅と高さの合計は意味がありません。これはサイズについて何も言わないので、8000x192テクスチャは4096x4096テクスチャとはかなり異なるサイズを持っています。少なくとも乗算はより合理的ですが、この場合、8192~90x90テクスチャを意味します。

しかし、それらの値を塩の粒で取る必要があります。実際には実装(ハードウェア/ドライバ)が許す範囲の上限にすぎないため、ハードウェアのビデオメモリと一致する必要はありません。実際には、フレームバッファ、VBOなど、ビデオメモリに格納されているものがずっと多いので、控えめな価値を与えるのはかなり妥当です。同様に、あなたのドライバ開発者はこの定数にあまり注意を払わないかもしれません(それはATIではありません)。そしてデフォルト値を返して、あなたのテクスチャは実際にはもっと大きくなります。

Robinson氏は、テクスチャメモリがビデオメモリの特別な領域であり、特殊な2Dアドレッシング/キャッシングモードを提供するため、彼のコメントではRawメモリ以外のものにも依存する可能性があると述べています。

+0

このすばらしい記事のおかげでたくさん:) – user1010005