提交 a9e0b9de 编写于 作者: B Ben Adams

Reuse program when not changed

Resuse program if code is the same and material updated
上级 67849f94
......@@ -2244,30 +2244,8 @@ THREE.WebGLRenderer = function ( parameters ) {
function initMaterial( material, lights, fog, object ) {
material.addEventListener( 'dispose', onMaterialDispose );
var shaderID = shaderIDs[ material.type ];
if ( shaderID ) {
var shader = THREE.ShaderLib[ shaderID ];
material.__webglShader = {
uniforms: THREE.UniformsUtils.clone( shader.uniforms ),
vertexShader: shader.vertexShader,
fragmentShader: shader.fragmentShader
}
} else {
material.__webglShader = {
uniforms: material.uniforms,
vertexShader: material.vertexShader,
fragmentShader: material.fragmentShader
}
}
// heuristics to create shader parameters according to lights in the scene
// (not to blow over maxLights budget)
......@@ -2366,6 +2344,43 @@ THREE.WebGLRenderer = function ( parameters ) {
var code = chunks.join();
if ( !material.program ) {
// new material
material.addEventListener( 'dispose', onMaterialDispose );
} else if ( material.program.code !== code ) {
// changed glsl or parameters
deallocateMaterial( material );
} else {
// same glsl and parameters
return;
}
if ( shaderID ) {
var shader = THREE.ShaderLib[ shaderID ];
material.__webglShader = {
uniforms: THREE.UniformsUtils.clone( shader.uniforms ),
vertexShader: shader.vertexShader,
fragmentShader: shader.fragmentShader
}
} else {
material.__webglShader = {
uniforms: material.uniforms,
vertexShader: material.vertexShader,
fragmentShader: material.fragmentShader
}
}
var program;
// Check if code has been already compiled
......@@ -2477,8 +2492,6 @@ THREE.WebGLRenderer = function ( parameters ) {
if ( material.needsUpdate ) {
if ( material.program ) deallocateMaterial( material );
initMaterial( material, lights, fog, object );
material.needsUpdate = false;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册