Jelajahi Sumber

Remove .isGLSL3 property from ShaderMaterial and determine GLSL3 shader code by checking #version instead

Takahiro 7 tahun lalu
induk
melakukan
062d7db20b
2 mengubah file dengan 14 tambahan dan 3 penghapusan
  1. 0 2
      src/materials/ShaderMaterial.js
  2. 14 1
      src/renderers/webgl/WebGLProgram.js

+ 0 - 2
src/materials/ShaderMaterial.js

@@ -34,8 +34,6 @@ function ShaderMaterial( parameters ) {
 	this.vertexShader = 'void main() {\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}';
 	this.fragmentShader = 'void main() {\n\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\n}';
 
-	this.isGLSL3 = false;
-
 	this.linewidth = 1;
 
 	this.wireframe = false;

+ 14 - 1
src/renderers/webgl/WebGLProgram.js

@@ -516,7 +516,20 @@ function WebGLProgram( renderer, extensions, code, material, shader, parameters
 
 	if ( gl.isWebGL2 && ! material.isRawShaderMaterial ) {
 
-		var isGLSL3ShaderMaterial = material.isShaderMaterial && material.isGLSL3;
+		var isGLSL3ShaderMaterial = false;
+
+		var versionRegex = /^\s*#version\s+300\s+es\s*\n/;
+
+		if ( material.isShaderMaterial &&
+			vertexShader.match( versionRegex ) !== null &&
+			fragmentShader.match( versionRegex ) !== null ) {
+
+			isGLSL3ShaderMaterial = true;
+
+			vertexShader = vertexShader.replace( versionRegex, '' );
+			fragmentShader = fragmentShader.replace( versionRegex, '' );
+
+		}
 
 		// GLSL 3.0 conversion
 		prefixVertex = [