2015-03-02 57 views
1

我正在构建一个应用程序,动态加载服务器中的图像以用作场景中的纹理,并且我正在研究如何正确加载/卸载这些纹理。Three.js纹理何时发送到GPU?

我的简单问题是;在Three.js调用图中,纹理是否会加载和/或更新到GPU中?当我创建纹理时(var tex = new THREE.Texture())还是当我将它应用到网格(var mesh = new THREE.Mesh(geom, mat))时? Three的Texture class表示纹理在创建纹理时未加载。但我在Mesh中也找不到任何东西。

我错过了什么吗?纹理是否加载在渲染循环中而不是创建对象上?这可能是有道理的。

在此先感谢!

+0

好的。所以我想我几乎回答了这个问题。它似乎是[Renderer](https://github.com/mrdoob/three.js/blob/a72347515fa34e892f7a9bfa66a34fdc0df55954/src/renderers/WebGLRenderer.js#L5717)上传/删除纹理的责任。 如果这是准确的,是否意味着我保证不会乱用GPU,除非我调用像'renderer.render(场景,相机)的东西;'? – 2015-03-02 10:34:55

回答

3

所有的GPU指令已被抽象到WebGLRenderer。

这意味着任何对象的three.js所内设立将与GPU丝毫直到你打电话不互动:

renderer.render(scene, camera); 

此呼叫会自动安装所有相关的WebGL的缓冲器,着色器,属性,制服,纹理等等。所以在这个时间点之前,所有three.js与它们的材质和几何图形都进行网格化,它们实际上只是很好的抽象对象,完全与它们渲染到屏幕的方式分离(为什么假设它们将被渲染?)。

这样做的主要原因是有其他渲染器,例如CanvasRenderer,它们具有完全不同的API。

+0

太棒了!这正是我想确认的。谢谢! – 2015-03-02 12:20:13