最近、私はキャンバスに多くの画像を描画する必要があります。キャンバスのサイズは800x600pxで、256x256px(それより小さいものもあります)の画像がたくさんあり、これらの小さな画像はキャンバス上に完全な画像を構成します。私はこれを実装する2つの方法があります。WebGL VS Canvas 2Dハードウェアアクセラレータ
最初にキャンバスの2Dコンテキスト(context = canvas.getContext('2d')
)を使用すると、すべてのイメージをキャンバスの適切な場所に配置するだけでcontext.drawimage()
メソッドを使用できます。
別の方法として、WebGLを使用してこれらの画像をキャンバスに描画します。このようにして、小さな画像ごとに長方形を描く必要があります。矩形のサイズはこの小さな画像と同じです。さらに、矩形はキャンバスの適切な場所にあります。それから私はそれを満たすためにテクスチャとしてイメージを使用します。
次に、これらの2つの方法のパフォーマンスを比較します。それらのfpsは両方とも60に達し、アニメーション(マウスでクリックまたは移動すると、キャンバスは何度も再描画されます)は非常に滑らかに見えます。だから私は彼らのCPU使用量を比較します。私は、WebGLを使用すると、GPUが多くの描画作業を保証するため、CPUの使用量が少なくなることを期待しています。しかし、その結果、CPU使用率はほぼ同じに見えます。私はWebGLコードを最適化しようとしています。十分に良いと思います。 Googleでは、Chromeのようなブラウザを見つけたので、Firefoxはデフォルトのハードウェアアクセラレータを有効にします。だから私はハードウェアアクセラレーションを閉じようとします。それで、最初の方法のCPU使用率がはるかに高くなります。ですから、キャンバスの2DはGPUを使用して加速するので、2DレンダリングのためだけにWebGLを使用する必要がありますか?キャンバスの2D GPUアクセラレーションとWebGLの違いは何ですか?どちらもGPUを使用しています。たぶん、2番目の方法のCPU使用率を下げる他の方法がありますか?どんな答えでも感謝します!
ご回答いただきありがとうございます。あなたが言ったように、WebGLとCanvas 2Dはそれぞれ長所と短所を持っています。ついに私はWebGLを採用しました。 – LiuGui
注:2dContextには 'alpha'オプションもあります。 – Kaiido
あなたのポイントは? – gman