diff --git a/docs/api/en/renderers/WebGLRenderer.html b/docs/api/en/renderers/WebGLRenderer.html index 9d401dbd15b31190a894740da39f06a01c3a0b78..20bff268b55b4649648832485c42ef25f397ee9b 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 a5e16f8c38c2ba5f7f2639418897b5f9ee90f6cd..371d894bac5bfa4e446ab36b51cdbad21dbc3ca6 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 9b4a259dbbba52c535aa50abd9bc97d15055238a..d47303604db9e9d2fc82a64e76abe07c5c981770 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 40ac9bcdae0ddb8b892e2ef6eeaa0edccbaca5d8..1742cdac7eb8ee2092467c8a273d841ee1743c3d 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 f02159dc86a7e9d826f0b97e00c11002ae0aeabf..7b6d6823d01639d5953ba7f459fc652c808daf21 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 ca2a0d9db1db07776a3aa0b8caf032d0ec8f0a87..29a832a34a27473ecc626cfcd14b41f6b9d331f4 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 ) ); + } }