Webgl:销毁或重用缓冲区/纹理?

时间:2018-12-17 22:37:43

标签: webgl

我是WebGL的新手。 :) 我知道顶点数据和纹理在发生变化时不应该经常更新,但首选: -通过调用gl.deleteBuffer销毁先前的缓冲区(static_draw)并创建一个新缓冲区。 -重复使用同一张图片(以Dynamic_Draw开头)

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

相同的规则适用于纹理吗?谢谢

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

1 个答案:

答案 0 :(得分:1)

让我们先看看我们何时要删除资源:

由于OpenGL是一种C-Style API,因此假定用户要负责管理内存,其中一部分还用于管理GPU内存。由于封装和其他设计原理,人们并不总是能够共享和重用资源,因此存在delete*函数来释放分配的资源。在javascript中,垃圾回收器确保将超出范围的WebGL资源标记为删除,就像调用delete*所做的¹一样,导致delete*函数在以下情况下变得相当多余: WebGL。

清除后,您总是希望尽可能地更新您的资源,因为您还必须重做已经对它们进行的所有设置,例如设置顶点属性指针或纹理的过滤和环绕模式。