Browse Source

move error checking and display

aardgoose 6 years ago
parent
commit
5c97a30a6e
2 changed files with 34 additions and 39 deletions
  1. 33 4
      src/renderers/webgl/WebGLProgram.js
  2. 1 35
      src/renderers/webgl/WebGLShader.js

+ 33 - 4
src/renderers/webgl/WebGLProgram.js

@@ -9,6 +9,20 @@ import { NoToneMapping, AddOperation, MixOperation, MultiplyOperation, Equirecta
 
 
 var programIdCount = 0;
 var programIdCount = 0;
 
 
+function addLineNumbers( string ) {
+
+	var lines = string.split( '\n' );
+
+	for ( var i = 0; i < lines.length; i ++ ) {
+
+		lines[ i ] = ( i + 1 ) + ': ' + lines[ i ];
+
+	}
+
+	return lines.join( '\n' );
+
+}
+
 function getEncodingComponents( encoding ) {
 function getEncodingComponents( encoding ) {
 
 
 	switch ( encoding ) {
 	switch ( encoding ) {
@@ -34,6 +48,22 @@ function getEncodingComponents( encoding ) {
 
 
 }
 }
 
 
+function getShaderErrors( gl, shader ) {
+
+	var status = gl.getShaderParameter( shader, gl.COMPILE_STATUS );
+	var source = gl.getShaderSource( shader );
+	var log = gl.getShaderInfoLog( shader ).trim();
+	var type = gl.getShaderParameter( shader, gl.SHADER_TYPE ) === gl.VERTEX_SHADER ? 'vertex' : 'fragment';
+
+	if ( status && log === '' ) return '';
+
+	// --enable-privileged-webgl-extension
+	// console.log( '**' + type + '**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( shader ) );
+
+	return 'THREE.WebGLShader: gl.getShaderInfoLog() ' + type + ' ' + log + addLineNumbers( source );
+
+}
+
 function getTexelDecodingFunction( functionName, encoding ) {
 function getTexelDecodingFunction( functionName, encoding ) {
 
 
 	var components = getEncodingComponents( encoding );
 	var components = getEncodingComponents( encoding );
@@ -610,18 +640,17 @@ function WebGLProgram( renderer, extensions, code, material, shader, parameters,
 		var programLog = gl.getProgramInfoLog( program ).trim();
 		var programLog = gl.getProgramInfoLog( program ).trim();
 		var vertexLog = gl.getShaderInfoLog( glVertexShader ).trim();
 		var vertexLog = gl.getShaderInfoLog( glVertexShader ).trim();
 		var fragmentLog = gl.getShaderInfoLog( glFragmentShader ).trim();
 		var fragmentLog = gl.getShaderInfoLog( glFragmentShader ).trim();
+		var vertexErrors = getShaderErrors( gl, glVertexShader );
+		var fragmentErrors = getShaderErrors( gl, glFragmentShader );
 
 
 		var runnable = true;
 		var runnable = true;
 		var haveDiagnostics = true;
 		var haveDiagnostics = true;
 
 
-		// console.log( '**VERTEX**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( glVertexShader ) );
-		// console.log( '**FRAGMENT**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( glFragmentShader ) );
-
 		if ( gl.getProgramParameter( program, gl.LINK_STATUS ) === false ) {
 		if ( gl.getProgramParameter( program, gl.LINK_STATUS ) === false ) {
 
 
 			runnable = false;
 			runnable = false;
 
 
-			console.error( 'THREE.WebGLProgram: shader error: ', gl.getError(), 'gl.VALIDATE_STATUS', gl.getProgramParameter( program, gl.VALIDATE_STATUS ), 'gl.getProgramInfoLog', programLog, vertexLog, fragmentLog );
+			console.error( 'THREE.WebGLProgram: shader error: ', gl.getError(), 'gl.VALIDATE_STATUS', gl.getProgramParameter( program, gl.VALIDATE_STATUS ), 'gl.getProgramInfoLog', programLog, vertexErrors, fragmentErrors );
 
 
 		} else if ( programLog !== '' ) {
 		} else if ( programLog !== '' ) {
 
 

+ 1 - 35
src/renderers/webgl/WebGLShader.js

@@ -2,49 +2,15 @@
  * @author mrdoob / http://mrdoob.com/
  * @author mrdoob / http://mrdoob.com/
  */
  */
 
 
-function addLineNumbers( string ) {
-
-	var lines = string.split( '\n' );
-
-	for ( var i = 0; i < lines.length; i ++ ) {
-
-		lines[ i ] = ( i + 1 ) + ': ' + lines[ i ];
-
-	}
-
-	return lines.join( '\n' );
-
-}
-
-function WebGLShader( gl, type, string, debug ) {
+function WebGLShader( gl, type, string ) {
 
 
 	var shader = gl.createShader( type );
 	var shader = gl.createShader( type );
 
 
 	gl.shaderSource( shader, string );
 	gl.shaderSource( shader, string );
 	gl.compileShader( shader );
 	gl.compileShader( shader );
 
 
-	if ( debug === true ) {
-
-		if ( gl.getShaderParameter( shader, gl.COMPILE_STATUS ) === false ) {
-
-			console.error( 'THREE.WebGLShader: Shader couldn\'t compile.' );
-
-		}
-
-		if ( gl.getShaderInfoLog( shader ) !== '' ) {
-
-			console.warn( 'THREE.WebGLShader: gl.getShaderInfoLog()', type === gl.VERTEX_SHADER ? 'vertex' : 'fragment', gl.getShaderInfoLog( shader ), addLineNumbers( string ) );
-
-		}
-
-	}
-
-	// --enable-privileged-webgl-extension
-	// console.log( type, gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( shader ) );
-
 	return shader;
 	return shader;
 
 
 }
 }
 
 
-
 export { WebGLShader };
 export { WebGLShader };