From f206c8236e8935023708df1b4fe85f7cd6b89acd Mon Sep 17 00:00:00 2001
From: Alex Goldring
+ 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*. +
+
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*
+ 如果[page:.programCheckEnabled programCheckEnabled]为true,则定义是否检查材质着色器程序编译过程中的错误。 + 禁用此检查生产以获得性能增益可能很有用。 + 强烈建议在开发期间保持启用这些检查。 + 默认是*true* +
+
一个包含当前渲染环境([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