From b29b13b4d3d820b2358e8909f8f063755d2dddb8 Mon Sep 17 00:00:00 2001 From: WestLangley Date: Thu, 22 Aug 2019 20:15:32 -0400 Subject: [PATCH] Added precisionSafeLength() --- src/renderers/shaders/ShaderChunk/common.glsl.js | 10 ++++++++++ src/renderers/webgl/WebGLProgram.js | 4 ++++ 2 files changed, 14 insertions(+) diff --git a/src/renderers/shaders/ShaderChunk/common.glsl.js b/src/renderers/shaders/ShaderChunk/common.glsl.js index 6be1b6132f..ad0453e0e2 100644 --- a/src/renderers/shaders/ShaderChunk/common.glsl.js +++ b/src/renderers/shaders/ShaderChunk/common.glsl.js @@ -22,6 +22,16 @@ highp float rand( const in vec2 uv ) { return fract(sin(sn) * c); } +#ifdef HIGH_PRECISION + float precisionSafeLength( vec3 v ) { return length( v ); } +#else + float max3( vec3 v ) { return max( max( v.x, v.y ), v.z ); } + float precisionSafeLength( vec3 v ) { + float maxComponent = max3( abs( v ) ); + return length( v / maxComponent ) * maxComponent; + } +#endif + struct IncidentLight { vec3 color; vec3 direction; diff --git a/src/renderers/webgl/WebGLProgram.js b/src/renderers/webgl/WebGLProgram.js index de86d3c9ee..86e316dc94 100644 --- a/src/renderers/webgl/WebGLProgram.js +++ b/src/renderers/webgl/WebGLProgram.js @@ -370,6 +370,8 @@ function WebGLProgram( renderer, extensions, code, material, shader, parameters, 'precision ' + parameters.precision + ' float;', 'precision ' + parameters.precision + ' int;', + ( parameters.precision === 'highp' ) ? '#define HIGH_PRECISION' : '', + '#define SHADER_NAME ' + shader.name, customDefines, @@ -488,6 +490,8 @@ function WebGLProgram( renderer, extensions, code, material, shader, parameters, 'precision ' + parameters.precision + ' float;', 'precision ' + parameters.precision + ' int;', + ( parameters.precision === 'highp' ) ? '#define HIGH_PRECISION' : '', + '#define SHADER_NAME ' + shader.name, customDefines, -- GitLab