2012-01-15 8 views
1

頂点に私の(静的な)VBOにGL_UNSIGNED_SHORTまたはGL_FLOATを使うべきかどうかを決定する必要があります。ショーツはメモリを2倍少なく使いますが、レンダリング速度も低下します(GPUで浮動小数点に変換する必要があるため)。テクスチャ座標の場合と同じことですが、小さいテクスチャの場合はGL_UNSIGNED_BYTEを使用し、大きいテクスチャの場合はGL_UNSIGNED_SHORTを使用します(テクスチャマトリックスを使用して0-1にマップします)。しかし、レンダリングの速度が低下する可能性があります。OpenGL VBO:ショートまたはフロート?

答えて

3

最新のハードウェア(DX10対応以上)では、属性の読み取りパフォーマンスは、整数から浮動小数点への変換ではなく、常にメモリアクセスによって支配されると考えることができます。本質的にそれは無料です。

これはほとんどの場合、DX9クラスのハードウェアにも当てはまりますが、一部のハードウェアではうまく機能しない特定の頂点フォーマットがあります。

つまり、テクスチャ座標に符号なしバイトを使用できるかどうかはわかりません。ほとんどのモデルでは、テクスチャ座標のテクセルあたりの精度よりも高い精度が必要です。符号なしのショートは通常は問題ありませんが、バイト単位の精度では機能しません。

+0

私の目的では、符号なしバイトは最大128x128のテクスチャで正常に動作しますが、特定の頂点フォーマットはうまく動作しません。 (私はOpenGL 2.0をターゲットにしています) – Jonathan

2

shortをfloatに変換するのはかなり安い操作です。私はと思うでしょうメモリ帯域幅の節約は余分な処理コストを上回ると思います。

実際にテストすることなく、これは野生の推測だけにとどまります。