WebGL: 销毁还是重用缓冲/纹理?

3

我是WebGL的新手。 :) 我知道顶点数据和纹理不应该经常更新,但是当它们发生更改时,哪种方法更好: - 通过调用gl.deleteBuffer销毁以前的缓冲区(static_draw),然后创建一个新的。 - 重复使用同一个缓冲区(Dynamic_Draw)。

(不,我没有使用任何库,只是直接使用WebGL)

纹理是否也适用相同的规则?谢谢

有趣的是,我找不到现有的讨论...或者可能只是错过了它们。

1个回答

2
让我们首先看一下什么情况下我们希望删除资源:
由于OpenGL是一种C风格的API,假定用户负责管理内存,其中之一就是管理GPU内存。由于封装和其他设计原则的存在,我们并不总是能够共享和重用资源,因此delete*函数存在以释放已分配的资源。在JavaScript中,垃圾收集器确保WebGL资源超出范围时被标记为删除,就像调用delete*一样¹,因此在WebGL的上下文中,delete*函数变得相当多余。
搞清楚了这一点,您总是希望在可能的情况下更新您的资源,因为您还必须重新设置所有已经完成的设置,例如为纹理设置顶点属性指针或过滤和包裹模式。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接