Pārlūkot izejas kodu

Included linkage checks into the toggle

Took 45 seconds
Alex Goldring 6 gadi atpakaļ
vecāks
revīzija
3c0d8b51b6

+ 3 - 3
docs/api/en/renderers/WebGLRenderer.html

@@ -94,10 +94,10 @@
 
 		<h3>[property:Boolean programCheckEnabled]</h3>
 		<p>
-			If [page:.programCheckEnabled programCheckEnabled] is true, defines whether Material shader programs are checked
-			for errors during compilation process. It may be useful to disable this check in production for performance gain.
+			If [page:.programCheckEnabled programCheckEnabled] is true, defines whether material shader programs are checked
+			for errors during compilation and linkage process. It may be useful to disable this check in production for performance gain.
 			It is strongly recommended to keep these checks enabled during development.
-			If the shader does not compile - it will not work and associated material will not render.
+			If the shader does not compile and link - it will not work and associated material will not render.
 			Default is *true*.
 		</p>
 

+ 3 - 3
docs/api/zh/renderers/WebGLRenderer.html

@@ -81,10 +81,10 @@
 
 		<h3>[property:Boolean programCheckEnabled]</h3>
 		<p>
-			如果[page:.programCheckEnabled programCheckEnabled]为true,定义是否检查材质着色器程序编译过程中的错误。
-			禁用此检查生产以获得性能增益可能很有用。
+			如果[page:.programCheckEnabled programCheckEnabled]为true,定义是否检查材质着色器程序
+			编译和链接过程中的错误。 禁用此检查生产以获得性能增益可能很有用。
 			强烈建议在开发期间保持启用这些检查。
-			如果着色器未编译 - 它将无法工作,并且相关材质将无法渲染
+			如果着色器没有编译和链接 - 它将无法工作,并且相关材料将不会呈现
 			默认是*true*
 		</p>
 

+ 34 - 29
src/renderers/webgl/WebGLProgram.js

@@ -604,56 +604,61 @@ function WebGLProgram( renderer, extensions, code, material, shader, parameters,
 
 	gl.linkProgram( program );
 
-	var programLog = gl.getProgramInfoLog( program ).trim();
-	var vertexLog = gl.getShaderInfoLog( glVertexShader ).trim();
-	var fragmentLog = gl.getShaderInfoLog( glFragmentShader ).trim();
+	if( renderer.programCheckEnabled ){
+		// check for link errors
 
-	var runnable = true;
-	var haveDiagnostics = true;
+		var programLog = gl.getProgramInfoLog( program ).trim();
+		var vertexLog = gl.getShaderInfoLog( glVertexShader ).trim();
+		var fragmentLog = gl.getShaderInfoLog( glFragmentShader ).trim();
 
-	// console.log( '**VERTEX**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( glVertexShader ) );
-	// console.log( '**FRAGMENT**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( glFragmentShader ) );
+		var runnable = true;
+		var haveDiagnostics = true;
 
-	if ( gl.getProgramParameter( program, gl.LINK_STATUS ) === false ) {
+		// console.log( '**VERTEX**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( glVertexShader ) );
+		// console.log( '**FRAGMENT**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( glFragmentShader ) );
 
-		runnable = false;
+		if ( gl.getProgramParameter( program, gl.LINK_STATUS ) === false ) {
 
-		console.error( 'THREE.WebGLProgram: shader error: ', gl.getError(), 'gl.VALIDATE_STATUS', gl.getProgramParameter( program, gl.VALIDATE_STATUS ), 'gl.getProgramInfoLog', programLog, vertexLog, fragmentLog );
+			runnable = false;
 
-	} else if ( programLog !== '' ) {
+			console.error( 'THREE.WebGLProgram: shader error: ', gl.getError(), 'gl.VALIDATE_STATUS', gl.getProgramParameter( program, gl.VALIDATE_STATUS ), 'gl.getProgramInfoLog', programLog, vertexLog, fragmentLog );
 
-		console.warn( 'THREE.WebGLProgram: gl.getProgramInfoLog()', programLog );
+		} else if ( programLog !== '' ) {
 
-	} else if ( vertexLog === '' || fragmentLog === '' ) {
+			console.warn( 'THREE.WebGLProgram: gl.getProgramInfoLog()', programLog );
 
-		haveDiagnostics = false;
+		} else if ( vertexLog === '' || fragmentLog === '' ) {
 
-	}
+			haveDiagnostics = false;
 
-	if ( haveDiagnostics ) {
+		}
 
-		this.diagnostics = {
+		if ( haveDiagnostics ) {
 
-			runnable: runnable,
-			material: material,
+			this.diagnostics = {
 
-			programLog: programLog,
+				runnable: runnable,
+				material: material,
 
-			vertexShader: {
+				programLog: programLog,
 
-				log: vertexLog,
-				prefix: prefixVertex
+				vertexShader: {
 
-			},
+					log: vertexLog,
+					prefix: prefixVertex
 
-			fragmentShader: {
+				},
 
-				log: fragmentLog,
-				prefix: prefixFragment
+				fragmentShader: {
 
-			}
+					log: fragmentLog,
+					prefix: prefixFragment
 
-		};
+				}
+
+			};
+
+		}
 
 	}