Explorar o código

Provide option to disable shader compiler error checking

Took 26 minutes
Alex Goldring %!s(int64=6) %!d(string=hai) anos
pai
achega
f206c8236e

+ 8 - 0
docs/api/en/renderers/WebGLRenderer.html

@@ -92,6 +92,14 @@
 			Default is *true*.
 		</p>
 
+		<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.
+			It is strongly recommended to keep these checks enabled during development.
+			Default is *true*.
+		</p>
+
 		<h3>[property:Object capabilities]</h3>
 		<p>
 		An object containing details about the capabilities of the current [link:https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext RenderingContext].<br />

+ 8 - 0
docs/api/zh/renderers/WebGLRenderer.html

@@ -79,6 +79,14 @@
 			默认是*true*
 		</p>
 
+		<h3>[property:Boolean programCheckEnabled]</h3>
+		<p>
+			如果[page:.programCheckEnabled programCheckEnabled]为true,则定义是否检查材质着色器程序编译过程中的错误。
+			禁用此检查生产以获得性能增益可能很有用。
+			强烈建议在开发期间保持启用这些检查。
+			默认是*true*
+		</p>
+
 		<h3>[property:Object capabilities]</h3>
 		<p>
             一个包含当前渲染环境([link:https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext RenderingContext])的功能细节的对象。<br />

+ 6 - 1
src/renderers/WebGLRenderer.js

@@ -77,6 +77,12 @@ function WebGLRenderer( parameters ) {
 	this.domElement = _canvas;
 	this.context = null;
 
+	/**
+	 * Enables error checking and reporting when shader programs are being compiled
+	 * @type {boolean}
+	 */
+	this.programCheckEnabled = true;
+
 	// clearing
 
 	this.autoClear = true;
@@ -2605,5 +2611,4 @@ function WebGLRenderer( parameters ) {
 
 }
 
-
 export { WebGLRenderer };

+ 2 - 2
src/renderers/webgl/WebGLProgram.js

@@ -583,8 +583,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 );
-	var glFragmentShader = WebGLShader( gl, gl.FRAGMENT_SHADER, fragmentGlsl );
+	var glVertexShader = WebGLShader( gl, gl.VERTEX_SHADER, vertexGlsl, renderer.programCheckEnabled );
+	var glFragmentShader = WebGLShader( gl, gl.FRAGMENT_SHADER, fragmentGlsl, renderer.programCheckEnabled );
 
 	gl.attachShader( program, glVertexShader );
 	gl.attachShader( program, glFragmentShader );

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

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

+ 10 - 6
src/renderers/webgl/WebGLShader.js

@@ -16,22 +16,26 @@ function addLineNumbers( string ) {
 
 }
 
-function WebGLShader( gl, type, string ) {
+function WebGLShader( gl, type, string, check ) {
 
 	var shader = gl.createShader( type );
 
 	gl.shaderSource( shader, string );
 	gl.compileShader( shader );
 
-	if ( gl.getShaderParameter( shader, gl.COMPILE_STATUS ) === false ) {
+	if(check === true) {
 
-		console.error( 'THREE.WebGLShader: Shader couldn\'t compile.' );
+		if (gl.getShaderParameter(shader, gl.COMPILE_STATUS) === false) {
 
-	}
+			console.error('THREE.WebGLShader: Shader couldn\'t compile.');
+
+		}
+
+		if (gl.getShaderInfoLog(shader) !== '') {
 
-	if ( gl.getShaderInfoLog( shader ) !== '' ) {
+			console.warn('THREE.WebGLShader: gl.getShaderInfoLog()', type === gl.VERTEX_SHADER ? 'vertex' : 'fragment', gl.getShaderInfoLog(shader), addLineNumbers(string));
 
-		console.warn( 'THREE.WebGLShader: gl.getShaderInfoLog()', type === gl.VERTEX_SHADER ? 'vertex' : 'fragment', gl.getShaderInfoLog( shader ), addLineNumbers( string ) );
+		}
 
 	}