Browse Source

WebGLRenderer: getShader to THREE.WebGLShader.

Mr.doob 11 years ago
parent
commit
e957060049

+ 3 - 47
src/renderers/WebGLRenderer.js

@@ -5598,10 +5598,10 @@ THREE.WebGLRenderer = function ( parameters ) {
 			"uniform vec3 cameraPosition;",
 			""
 
-		].join("\n");
+		].join( '\n' );
 
-		var glVertexShader = getShader( "vertex", prefix_vertex + vertexShader );
-		var glFragmentShader = getShader( "fragment", prefix_fragment + fragmentShader );
+		var glVertexShader = new THREE.WebGLShader( _gl, 'vertex', prefix_vertex + vertexShader );
+		var glFragmentShader = new THREE.WebGLShader( _gl, 'fragment', prefix_fragment + fragmentShader );
 
 		_gl.attachShader( program, glVertexShader );
 		_gl.attachShader( program, glFragmentShader );
@@ -5743,51 +5743,7 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 	};
 
-	function addLineNumbers ( string ) {
-
-		var chunks = string.split( "\n" );
-
-		for ( var i = 0, il = chunks.length; i < il; i ++ ) {
-
-			// Chrome reports shader errors on lines
-			// starting counting from 1
-
-			chunks[ i ] = ( i + 1 ) + ": " + chunks[ i ];
-
-		}
-
-		return chunks.join( "\n" );
-
-	};
-
-	function getShader ( type, string ) {
-
-		var shader;
 
-		if ( type === "fragment" ) {
-
-			shader = _gl.createShader( _gl.FRAGMENT_SHADER );
-
-		} else if ( type === "vertex" ) {
-
-			shader = _gl.createShader( _gl.VERTEX_SHADER );
-
-		}
-
-		_gl.shaderSource( shader, string );
-		_gl.compileShader( shader );
-
-		if ( !_gl.getShaderParameter( shader, _gl.COMPILE_STATUS ) ) {
-
-			console.error( _gl.getShaderInfoLog( shader ) );
-			console.error( addLineNumbers( string ) );
-			return null;
-
-		}
-
-		return shader;
-
-	};
 
 	// Textures
 

+ 57 - 0
src/renderers/webgl/WebGLShader.js

@@ -0,0 +1,57 @@
+THREE.WebGLShader = ( function () {
+
+	var addLineNumbers = function ( string ) {
+
+		var lines = string.split( '\n' );
+
+		for ( var i = 0; i < lines.length; i ++ ) {
+
+			lines[ i ] = ( i + 1 ) + ': ' + lines[ i ];
+
+		}
+
+		return lines.join( '\n' );
+
+	};
+
+	return function ( gl, type, string ) {
+
+		var shader; 
+
+		if ( type === 'vertex' ) {
+
+			shader = gl.createShader( gl.VERTEX_SHADER );
+
+		} else if ( type === 'fragment' ) {
+
+			shader = gl.createShader( gl.FRAGMENT_SHADER );
+
+		} else {
+
+			console.error( 'THREE.WebGLShader:', 'Unrecognised shader type', type );
+			return null;
+
+		}
+
+		gl.shaderSource( shader, string );
+		gl.compileShader( shader );
+
+		/*
+		if ( gl.getShaderParameter( shader, gl.COMPILE_STATUS ) === false ) {
+
+
+		}
+		*/
+
+		if ( gl.getShaderInfoLog( shader ) !== '' ) {
+
+			console.error( 'THREE.WebGLShader:', 'gl.getShaderInfoLog()', gl.getShaderInfoLog( shader ) );
+			console.error( addLineNumbers( string ) );
+
+		}
+
+		return shader;
+
+	};
+
+} )();

+ 1 - 0
utils/build/includes/common.json

@@ -86,6 +86,7 @@
 	"src/renderers/WebGLRenderer.js",
 	"src/renderers/WebGLRenderTarget.js",
 	"src/renderers/WebGLRenderTargetCube.js",
+	"src/renderers/webgl/WebGLShader.js",
 	"src/renderers/renderables/RenderableVertex.js",
 	"src/renderers/renderables/RenderableFace.js",
 	"src/renderers/renderables/RenderableObject.js",

+ 1 - 0
utils/build/includes/webgl.json

@@ -76,6 +76,7 @@
 	"src/renderers/WebGLRenderer.js",
 	"src/renderers/WebGLRenderTarget.js",
 	"src/renderers/WebGLRenderTargetCube.js",
+	"src/renderers/webgl/WebGLShader.js",
 	"src/renderers/renderables/RenderableVertex.js",
 	"src/renderers/renderables/RenderableFace3.js",
 	"src/renderers/renderables/RenderableObject.js",