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

在WebGL画布上渲染单个纹理子集的最快方法是什么?,webgl,Webgl,如果你有一个两倍宽度/高度的纹理(比如2048),并且你想尽快将它的缩放和转换子集(比如64x92大小的平铺缩小)放到另一个纹理上(作为缓冲区,以便在不脏的时候可以缓存),然后将该纹理绘制到webgl画布上,你没有更多的要求-什么是最快的策略 是否首先加载源纹理,将空纹理绑定到帧缓冲区,使用DropelementsInstancedAngle将源渲染到帧缓冲区,然后解除帧缓冲区绑定并渲染到画布 我对WebGL了解不多,我正在尝试编写一个非状态版本的https://github.com/kutul

如果你有一个两倍宽度/高度的纹理(比如2048),并且你想尽快将它的缩放和转换子集(比如64x92大小的平铺缩小)放到另一个纹理上(作为缓冲区,以便在不脏的时候可以缓存),然后将该纹理绘制到webgl画布上,你没有更多的要求-什么是最快的策略

是否首先加载源纹理,将空纹理绑定到帧缓冲区,使用
DropelementsInstancedAngle
将源渲染到帧缓冲区,然后解除帧缓冲区绑定并渲染到画布


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

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

  • 你画了很多同样大小的东西吗
  • 纹理图集的各部分大小是否相同
  • 您将旋转或缩放每个实例吗
  • 他们的行动能否仅仅基于时间
  • 他们的绘图顺序会改变吗
  • 纹理有透明度吗
  • 透明度是否为100%(0或1)或介于两者之间的各种值
我相信还有很多其他的考虑。出于各种考虑,我可能会选择不同的方法

一般来说,如果使用
抽屉门SangleInstanced
,您的想法似乎不错,但不知道您要做什么以及在哪台设备上很难知道


.

谢谢!澄清一下:我对低端、集成GPU设备感兴趣。我的低效解决方案在速度快的机器上已经足够快了。1.是的,很多东西大小一样(瓷砖)。2.是的,所有的瓷砖在地图集上也是一样大小的。3.我不会旋转任何一个。我需要缩放整个“视图”,这可以通过缩放每个实例来完成。4.他们的行动不能仅仅基于时间。5.瓷砖本身可能会改变,所以我认为是的。6.它们确实具有透明度。7.有些效果使用宽透明度,但我可以删除它们,只使用0或1。再多的优化也不会在低端机器上以快速帧速绘制数百万精灵。现在你提到了瓷砖,