【发布时间】:2014-08-27 07:24:31
【问题描述】:
我正在使用精灵表通过 THREE.js 创建动画纹理。每个精灵实例利用纹理偏移来控制要呈现该帧的图像。多个动画精灵可能会同时出现在屏幕上。
目前我正在使用 Texture.clone() 来复制精灵表纹理。但是,除非我将 Texture.needsUpdate 设置为 true,否则纹理不会显示在精灵上。将 needsUpdate 设置为 true 可以让我一次显示多个独立的动画精灵,但不幸的是,这会导致纹理内存在卡(/集成芯片)上重复。使用 Chrome WebGL Inspector,我可以清楚地看到精灵纹理与已渲染的动画精灵的复制次数相同。
有没有办法在不复制内存的情况下为每个实例克隆/重用具有不同偏移量的纹理?这是一个错误还是我做错了什么。
三个.js r67
更新:
我们解决这个问题的一种方法(我承认这不是一个好方法)是复制分配给原始纹理的 GL 纹理 ID,并将克隆的纹理设置为初始化。
clonedTexture.__webglTexture = origTexture.__webglTexture;
clonedTexture.__webglInit = true;
这要求纹理已经发送到卡上,我们通过 render.setTexture(origTexture...) 强制执行。
【问题讨论】:
-
看来您正在做预期的事情——通过克隆,纹理共享图像。
renderer.info.memory是否证实了你的怀疑? -
@WestLangley,是的,我可以确认纹理确实已被复制,并确认 WGL 检查员也说了什么。
标签: three.js