将单个纹理的子集渲染到WebGL画布上的最快方法是什么



如果你有一个宽度/高度为二次方的单次方纹理(比如2048(,并且你想尽快将它的缩放和转换子集(比如缩小的64x92大小的瓦片(闪电式地复制到另一个纹理上(作为缓冲区,这样它就可以在不脏的时候缓存(,然后将该纹理绘制到webgl画布上,你就没有更多的要求了-最快的策略是什么?

它是首先加载源纹理,将空纹理绑定到帧缓冲区,将具有drawElementsInstancedANGLE的源渲染到帧缓冲区时,然后解除绑定帧缓冲区并渲染到画布?

我对WebGL了解不多,我正在尝试编写一个非状态版本的https://github.com/kutuluk/js13k-2d(这只是使用draw((调用,而不是维护状态的精灵,因为我会有数百万个精灵(。在我深入研究之前,我希望能得到一些反馈。

没有通用的最快方法。最快的方式因GPU而异,也因具体情况而异。

  • 你画了很多同样大小的东西吗
  • 纹理图谱的各部分大小是否相同
  • 您将旋转或缩放每个实例吗
  • 他们的运动仅仅基于时间吗
  • 他们的绘图顺序会改变吗
  • 纹理是否具有透明度
  • 透明度是100%还是100%(0或1(,还是介于两者之间的各种值

我相信还有很多其他考虑因素。考虑到每一个因素,我可能会选择不同的方法。

一般来说,如果使用drawElementsAngleInstanced看起来很好,但不知道你想做什么,在哪台设备上很难知道。

下面是一些关于大量绘图的测试。

相关内容

最新更新