|
@@ -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;
|
|
|
|