私は2Dレイヤーベースのアプリケーションに取り組んでいます。私はWebGLを使って合成したいと思います。これらの層は、互いに対してシフトされてもよく、各フレームの各(小さな)部分だけが変化してもよい。しかし、その長方形部分の幅と高さは予期せず変化する可能性があります。 レイヤーごとに1つのキャンバス(2D)と1つのテクスチャを使用したいと思います。各フレームは、変更されたレイヤーの部分だけを各キャンバスに再描画し、その小さな領域をGPUにアップロードして、テクスチャ、GPUが私のために合成する前に。しかし、画像の一部だけをテクスチャの一部にアップロードする効率的な方法は見つけられていません。 texSubImage2D()
はテクスチャの一部を更新しますが、完全な画像/キャンバスのみを使用し、使用する画像の矩形領域を指定することはできないようです。WebGL:イメージ/キャンバスの一部だけをテクスチャとしてアップロードする効率的な方法はありますか?
:
- 使用
getImageData()
+texSubImage2D()
のみにGPUにキャンバスのピクセルを変換するには(オーバーヘッドを変える部分をアップロードtexImage2D()
- とImageDataをのデータ)
- 層全体のキャンバスを再アップロード各フレーム又は各レイヤの変更のために完全に適合するように、正しい寸法に小さなcanvas2Dサイズを変更/作成し、その後、関連を更新するためにそれを送信する
texSubImage2D()
を使用テクスチャ(メモリrエスケープオーバーヘッド)
ですから、テクスチャの画像/キャンバスの一部を指定する方法はありますか? texImagePart2D()
とtexSubImagePart2D
のようなものは、使用する画像/キャンバスの矩形領域を指定するために、さらに4つのパラメータ、sourceX
、sourceY
、sourceWidth
とsourceHeight
を受け入れますか?
少なくとも、組み込みGPUのほとんどでは、TexSubImage2D APIが遅くなります。 TexImage2D自体を使うほうが良いでしょう。 – prabindh
その一部だけが変更されたとしても、テクスチャ全体を再アップロードするよりも速い方法はありませんか?しかし、私は理解していない、なぜそれが全体の質感ではなく、小さなrectをアップロードするだけで、それは遅くなるだろうか?既存のテクスチャを変更するのが遅いのですか? – Jor