diff --git a/src/lib/shaders/includes/math/math.glsl b/src/lib/shaders/includes/math/math.glsl index 9caa6f7a..eb288b3d 100644 --- a/src/lib/shaders/includes/math/math.glsl +++ b/src/lib/shaders/includes/math/math.glsl @@ -13,7 +13,7 @@ float pow2( const in float x ) { return x*x; } float pow3( const in float x ) { return x*x*x; } float pow4( const in float x ) { float x2 = x*x; return x2*x2; } -float average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); } +float average( const in vec3 color ) { return dot( color, vec3( 0.3333333333 ) ); } // https://stackoverflow.com/questions/9446888/best-way-to-detect-nans-in-opengl-shaders bool isnan( float val ) { diff --git a/src/lib/shaders/includes/math/math.tests.glsl b/src/lib/shaders/includes/math/math.tests.glsl index 2b550a69..bcd5d9dd 100644 --- a/src/lib/shaders/includes/math/math.tests.glsl +++ b/src/lib/shaders/includes/math/math.tests.glsl @@ -11,15 +11,20 @@ void tests( inout TestResults results ) { asset( results, 5, pow3( -2.0 ) == -8.0 ); asset( results, 6, pow4( -2.0 ) == 16.0 ); - asset( results, 7, average( vec3( -2.0 ) ) == -2.0 ); - asset( results, 8, average( vec3( 10., 20., 30. ) ) == 20. ); - asset( results, 9, isnan( 1. / 0. ) ); - asset( results, 10, ! isnan( 0. / 1. ) ); + asset( results, 7, equalsTolerance( average( vec3( -2.0 ) ), -2.0, 0.000001 ) ); + asset( results, 8, equalsTolerance( average( vec3( 10., 20., 30. ) ), 20., 0.000001 ) ); + float divisor = 0.; + asset( results, 9, ! isnan( 0. / 1. ) ); + asset( results, 10, isnan( 1. / divisor ) ); + asset( results, 11, isnan( sqrt( divisor ) ) ); - asset( results, 12, saturate( -2.) == 0. ); - asset( results, 13, saturate( 2.) == 1. ); + asset( results, 12, equalsTolerance( saturate( -2.), 0., 0.000001 ) ); + asset( results, 13, equalsTolerance( saturate( 2.), 1., 0.000001 ) ); - asset( results, 15, cos( PI ) == 1. ); - asset( results, 16, cos( PI2 ) == 0. ); + asset( results, 15, equalsTolerance( cos( PI ), -1., 0.000001 ) ); + asset( results, 16, equalsTolerance( cos( PI2 ), 1., 0.000001 ) ); + + asset( results, 17, equalsTolerance( sin( PI ), 0., 0.000001 ) ); + asset( results, 18, equalsTolerance( sin( PI2 ), 0., 0.000001 ) ); }