Cloning textures without causing duplicate card memory in THREE.js

江枫思渺然 提交于 2020-01-02 20:59:05

问题


I am using sprite sheets to create animated textures with THREE.js. Each sprite instance utilizes texture offsets to control which of the images to present that frame. Multiple animated sprites may be on the screen at once.

Currently I am using Texture.clone() to duplicate the sprite sheet texture. However, unless I set Texture.needsUpdate to true, the texture will not display on the sprites. Setting needsUpdate to true allows me to display multiple independent animated sprites at once, but unfortunately this causes the texture memory to be duplicate on the card (/ integrated chip). Using Chrome WebGL Inspector I can clearly see that the sprite texture has been duplicate the same number of times as animated sprites that have been rendered.

Is there any way to clone / reuse the texture with different offsets for each instance without duplicating the memory? Is this a bug or am I doing something wrong.

THREE.js r67

Update:

One way that we have gotten around this (not a great way I admit) is to duplicate the GL texture ID assigned to the original texture and set the cloned texture as being initialized.

clonedTexture.__webglTexture = origTexture.__webglTexture;
clonedTexture.__webglInit = true;

This requires that the texture has already been sent to the card, which we force with render.setTexture(origTexture...).


回答1:


This is something that's in the works. Keep an eye for whenever THREE.Image lands.



来源:https://stackoverflow.com/questions/25514730/cloning-textures-without-causing-duplicate-card-memory-in-three-js

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!