Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

WebGLで頂点データを整数で送るメリット

知りたいこと

頂点数が同じ場合、頂点データを整数でGPUに転送すると、浮動小数点数で送った場合よりも占有するGPUメモリ空間を小さくすることができるでしょうか。

なぜそれを知りたいか

諸般の事情により、頂点データを整数で保持しています。1つの頂点はUint8ClampedArray(4)、8ビット4要素で構成されます。頂点データとは別に幾つかのパラメータをGPUに送り、頂点シェーダ上でそれらの値から座標を計算して使用しています。事前に計算してGPUに送ることを想定していません。頂点シェーダ上で型変換が必要なことは承知しています。
WebGL時代はvertexAttribPointer()を使って頂点データの関連付けをしていました。MDNによるとこのメソッドを使用した場合、常に浮動小数点数に変換して送信される、とあります。JavaScript上では1つの頂点が8ビット4要素で32ビットですが、浮動小数点数に変換されると32ビット4要素128ビットとしてGPUに送信されるているのかな、と考えていました(無駄にメモリを消費しているのではと思っていました)。
WebGL2時代になりvertexAttribIPointer()というメソッドが追加され、整数のままGPUに送信できるようになりました。このメソッドを使用した場合、上述のデータは1頂点あたり32ビットでGPUで送られるのであれば、GPUのメモリ空間を節約できるのでは、と考えました(大量の頂点を扱いたいため)。
この考え方は正しいでしょうか。

自分で試したこと

ブラウザのデバッガツール等を調べてみたのですが、転送した頂点データのGPUメモリ上でのサイズを調べる方法がわかりませんでした。

最後に

WebGL、WebGL2を把握せず手探りで開発しているので理解に誤りがあればご指摘ください。どうぞよろしくお願いいたします。

0

Your answer might help someone💌