From f206c8236e8935023708df1b4fe85f7cd6b89acd Mon Sep 17 00:00:00 2001 From: Alex Goldring Date: Tue, 16 Apr 2019 20:26:51 +0200 Subject: [PATCH] Provide option to disable shader compiler error checking Took 26 minutes --- docs/api/en/renderers/WebGLRenderer.html | 8 ++++++++ docs/api/zh/renderers/WebGLRenderer.html | 8 ++++++++ src/renderers/WebGLRenderer.js | 7 ++++++- src/renderers/webgl/WebGLProgram.js | 4 ++-- src/renderers/webgl/WebGLShader.d.ts | 2 +- src/renderers/webgl/WebGLShader.js | 16 ++++++++++------ 6 files changed, 35 insertions(+), 10 deletions(-) diff --git a/docs/api/en/renderers/WebGLRenderer.html b/docs/api/en/renderers/WebGLRenderer.html index 9d401dbd15..20bff268b5 100644 --- a/docs/api/en/renderers/WebGLRenderer.html +++ b/docs/api/en/renderers/WebGLRenderer.html @@ -92,6 +92,14 @@ Default is *true*.

+

[property:Boolean programCheckEnabled]

+

+ 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*. +

+

[property:Object capabilities]

An object containing details about the capabilities of the current [link:https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext RenderingContext].
diff --git a/docs/api/zh/renderers/WebGLRenderer.html b/docs/api/zh/renderers/WebGLRenderer.html index a5e16f8c38..371d894bac 100644 --- a/docs/api/zh/renderers/WebGLRenderer.html +++ b/docs/api/zh/renderers/WebGLRenderer.html @@ -79,6 +79,14 @@ 默认是*true*

+

[property:Boolean programCheckEnabled]

+

+ 如果[page:.programCheckEnabled programCheckEnabled]为true,则定义是否检查材质着色器程序编译过程中的错误。 + 禁用此检查生产以获得性能增益可能很有用。 + 强烈建议在开发期间保持启用这些检查。 + 默认是*true* +

+

[property:Object capabilities]

一个包含当前渲染环境([link:https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext RenderingContext])的功能细节的对象。
diff --git a/src/renderers/WebGLRenderer.js b/src/renderers/WebGLRenderer.js index 9b4a259dbb..d47303604d 100644 --- a/src/renderers/WebGLRenderer.js +++ b/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 }; diff --git a/src/renderers/webgl/WebGLProgram.js b/src/renderers/webgl/WebGLProgram.js index 40ac9bcdae..1742cdac7e 100644 --- a/src/renderers/webgl/WebGLProgram.js +++ b/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 ); diff --git a/src/renderers/webgl/WebGLShader.d.ts b/src/renderers/webgl/WebGLShader.d.ts index f02159dc86..7b6d6823d0 100644 --- a/src/renderers/webgl/WebGLShader.d.ts +++ b/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); } diff --git a/src/renderers/webgl/WebGLShader.js b/src/renderers/webgl/WebGLShader.js index ca2a0d9db1..29a832a34a 100644 --- a/src/renderers/webgl/WebGLShader.js +++ b/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 ) ); + } } -- GitLab