【问题标题】:Cloning textures without causing duplicate card memory in THREE.js在 THREE.js 中克隆纹理而不会导致重复的卡内存
【发布时间】: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


【解决方案1】:

这是正在进行中的事情。随时留意THREE.Image 登陆。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-08
    • 1970-01-01
    • 2014-04-17
    • 1970-01-01
    • 2012-02-05
    • 1970-01-01
    • 1970-01-01
    • 2015-09-06
    相关资源
    最近更新 更多