|
@@ -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 !== '' ) {
|
|
|
|