Skip to content

Commit b1ed69e

Browse files
authored
Merge pull request #17323 from WestLangley/dev_precision_safe
Shaders: Added precisionSafeLength()
2 parents 257f66c + b29b13b commit b1ed69e

File tree

2 files changed

+14
-0
lines changed

2 files changed

+14
-0
lines changed

src/renderers/shaders/ShaderChunk/common.glsl.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,16 @@ highp float rand( const in vec2 uv ) {
2222
return fract(sin(sn) * c);
2323
}
2424
25+
#ifdef HIGH_PRECISION
26+
float precisionSafeLength( vec3 v ) { return length( v ); }
27+
#else
28+
float max3( vec3 v ) { return max( max( v.x, v.y ), v.z ); }
29+
float precisionSafeLength( vec3 v ) {
30+
float maxComponent = max3( abs( v ) );
31+
return length( v / maxComponent ) * maxComponent;
32+
}
33+
#endif
34+
2535
struct IncidentLight {
2636
vec3 color;
2737
vec3 direction;

src/renderers/webgl/WebGLProgram.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -370,6 +370,8 @@ function WebGLProgram( renderer, extensions, code, material, shader, parameters,
370370
'precision ' + parameters.precision + ' float;',
371371
'precision ' + parameters.precision + ' int;',
372372

373+
( parameters.precision === 'highp' ) ? '#define HIGH_PRECISION' : '',
374+
373375
'#define SHADER_NAME ' + shader.name,
374376

375377
customDefines,
@@ -488,6 +490,8 @@ function WebGLProgram( renderer, extensions, code, material, shader, parameters,
488490
'precision ' + parameters.precision + ' float;',
489491
'precision ' + parameters.precision + ' int;',
490492

493+
( parameters.precision === 'highp' ) ? '#define HIGH_PRECISION' : '',
494+
491495
'#define SHADER_NAME ' + shader.name,
492496

493497
customDefines,

0 commit comments

Comments
 (0)