提交 f206c823 编写于 作者: A Alex Goldring

Provide option to disable shader compiler error checking

Took 26 minutes
上级 aa6ed41b
......@@ -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 />
......
......@@ -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 />
......
......@@ -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 };
......@@ -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 );
......
export class WebGLShader {
constructor(gl: any, type: string, string: string);
constructor(gl: any, type: string, string: string, check: boolean);
}
......@@ -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 ) );
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册