gpt4 book ai didi

webgl - 将单个纹理的子集渲染到 WebGL Canvas 上的最快方法是什么?

转载 作者:行者123 更新时间:2023-12-05 08:50:07 25 4
gpt4 key购买 nike

如果您有一个单一的二次方宽度/高度纹理(例如 2048)并且您希望尽快将其缩放和平移的子集(例如按比例缩小的 64x92 大小的图 block )移到另一个纹理上(作为缓冲区,以便在不脏时可以缓存),然后将该纹理绘制到 webgl Canvas 上,您没有更多要求 - 最快的策略是什么?

是否首先加载源纹理,将空纹理绑定(bind)到帧缓冲区,使用 drawElementsInstancedANGLE 将源渲染到帧缓冲区,然后取消绑定(bind)帧缓冲区并渲染到 Canvas ?

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

最佳答案

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

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

我敢肯定还有很多其他的考虑因素。对于每一种考虑,我可能会选择不同的方法。

一般来说,如果使用 drawElementsAngleInstanced,您的想法似乎不错,但不知道您到底想做什么,也很难知道在哪个设备上。

Here's some tests of drawing lots of stuff .

关于webgl - 将单个纹理的子集渲染到 WebGL Canvas 上的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62784790/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com