Browse Source

WebGLProgram: Don't cache additional attribute identifiers if RawShaderMaterial.

Mr.doob 10 years ago
parent
commit
adefed2a44
2 changed files with 30 additions and 21 deletions
  1. 1 0
      examples/webgl_buffergeometry_rawshader.html
  2. 29 21
      src/renderers/webgl/WebGLProgram.js

+ 1 - 0
examples/webgl_buffergeometry_rawshader.html

@@ -140,6 +140,7 @@
 					uniforms: {
 					uniforms: {
 						time: { type: "f", value: 1.0 }
 						time: { type: "f", value: 1.0 }
 					},
 					},
+					attributes: [ 'position', 'color' ],
 					vertexShader: document.getElementById( 'vertexShader' ).textContent,
 					vertexShader: document.getElementById( 'vertexShader' ).textContent,
 					fragmentShader: document.getElementById( 'fragmentShader' ).textContent,
 					fragmentShader: document.getElementById( 'fragmentShader' ).textContent,
 					side: THREE.DoubleSide,
 					side: THREE.DoubleSide,

+ 29 - 21
src/renderers/webgl/WebGLProgram.js

@@ -415,37 +415,45 @@ THREE.WebGLProgram = ( function () {
 
 
 		// cache attributes locations
 		// cache attributes locations
 
 
-		identifiers = [
-
-			'position',
-			'normal',
-			'uv',
-			'uv2',
-			'tangent',
-			'color',
-			'skinIndex',
-			'skinWeight',
-			'lineDistance'
+		if ( material instanceof THREE.RawShaderMaterial ) {
 
 
-		];
+			identifiers = attributes;
 
 
-		for ( var i = 0; i < parameters.maxMorphTargets; i ++ ) {
+		} else {
 
 
-			identifiers.push( 'morphTarget' + i );
+			identifiers = [
 
 
-		}
+				'position',
+				'normal',
+				'uv',
+				'uv2',
+				'tangent',
+				'color',
+				'skinIndex',
+				'skinWeight',
+				'lineDistance'
 
 
-		for ( var i = 0; i < parameters.maxMorphNormals; i ++ ) {
+			];
 
 
-			identifiers.push( 'morphNormal' + i );
+			for ( var i = 0; i < parameters.maxMorphTargets; i ++ ) {
 
 
-		}
+				identifiers.push( 'morphTarget' + i );
+
+			}
 
 
-		// ShaderMaterial attributes
+			for ( var i = 0; i < parameters.maxMorphNormals; i ++ ) {
 
 
-		if ( Array.isArray( attributes ) ) {
+				identifiers.push( 'morphNormal' + i );
 
 
-			identifiers = identifiers.concat( attributes );
+			}
+
+			// ShaderMaterial attributes
+
+			if ( Array.isArray( attributes ) ) {
+
+				identifiers = identifiers.concat( attributes );
+
+			}
 
 
 		}
 		}