Browse Source

Merge pull request #16610 from aardgoose/parallel1

rework shader compile/link error checking
Mr.doob 6 năm trước cách đây
mục cha
commit
0113246bf6

+ 36 - 6
src/renderers/webgl/WebGLProgram.js

@@ -9,6 +9,20 @@ import { NoToneMapping, AddOperation, MixOperation, MultiplyOperation, Equirecta
 
 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 ) {
 
 	switch ( encoding ) {
@@ -34,6 +48,22 @@ function getEncodingComponents( encoding ) {
 
 }
 
+function getShaderErrors( gl, shader, type ) {
+
+	var status = gl.getShaderParameter( shader, gl.COMPILE_STATUS );
+	var log = gl.getShaderInfoLog( shader ).trim();
+
+	if ( status && log === '' ) return '';
+
+	// --enable-privileged-webgl-extension
+	// console.log( '**' + type + '**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( shader ) );
+
+	var source = gl.getShaderSource( shader );
+
+	return 'THREE.WebGLShader: gl.getShaderInfoLog() ' + type + '\n' + log + addLineNumbers( source );
+
+}
+
 function getTexelDecodingFunction( functionName, encoding ) {
 
 	var components = getEncodingComponents( encoding );
@@ -583,8 +613,8 @@ function WebGLProgram( renderer, extensions, code, material, shader, parameters,
 	// console.log( '*VERTEX*', vertexGlsl );
 	// console.log( '*FRAGMENT*', fragmentGlsl );
 
-	var glVertexShader = WebGLShader( gl, gl.VERTEX_SHADER, vertexGlsl, renderer.debug.checkShaderErrors );
-	var glFragmentShader = WebGLShader( gl, gl.FRAGMENT_SHADER, fragmentGlsl, renderer.debug.checkShaderErrors );
+	var glVertexShader = WebGLShader( gl, gl.VERTEX_SHADER, vertexGlsl );
+	var glFragmentShader = WebGLShader( gl, gl.FRAGMENT_SHADER, fragmentGlsl );
 
 	gl.attachShader( program, glVertexShader );
 	gl.attachShader( program, glFragmentShader );
@@ -614,14 +644,14 @@ function WebGLProgram( renderer, extensions, code, material, shader, parameters,
 		var runnable = 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 ) {
 
 			runnable = false;
 
-			console.error( 'THREE.WebGLProgram: shader error: ', gl.getError(), 'gl.VALIDATE_STATUS', gl.getProgramParameter( program, gl.VALIDATE_STATUS ), 'gl.getProgramInfoLog', programLog, vertexLog, fragmentLog );
+			var vertexErrors = getShaderErrors( gl, glVertexShader, 'vertex' );
+			var fragmentErrors = getShaderErrors( gl, glFragmentShader, 'fragment' );
+
+			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 !== '' ) {
 

+ 1 - 1
src/renderers/webgl/WebGLShader.d.ts

@@ -1,5 +1,5 @@
 export class WebGLShader {
 
-	constructor( gl: any, type: string, string: string, debug: boolean );
+	constructor( gl: any, type: string, string: string );
 
 }

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

@@ -2,49 +2,15 @@
  * @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 );
 
 	gl.shaderSource( shader, string );
 	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;
 
 }
 
-
 export { WebGLShader };