|
@@ -1,25 +1,31 @@
|
|
|
export default /* glsl */`
|
|
|
-// Workaround for Adreno GPUs not able to do dFdx( vViewPosition )
|
|
|
-
|
|
|
-vec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );
|
|
|
-vec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );
|
|
|
+bool isFrontFacing = true;
|
|
|
|
|
|
#ifdef FLAT_SHADED
|
|
|
|
|
|
+ // Workaround for Adreno GPUs not able to do dFdx( vViewPosition )
|
|
|
+
|
|
|
+ vec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );
|
|
|
+ vec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );
|
|
|
vec3 normal = normalize( cross( fdx, fdy ) );
|
|
|
|
|
|
- bool isFrontFacing = dot( vec3( 0, 0, 1 ), normal ) > 0.0;
|
|
|
+ isFrontFacing = dot( vec3( 0, 0, 1 ), normal ) > 0.0;
|
|
|
|
|
|
#else
|
|
|
|
|
|
vec3 normal = normalize( vNormal );
|
|
|
|
|
|
- // Workaround for Adreno GPUs broken gl_FrontFacing implementation
|
|
|
- // https://stackoverflow.com/a/32621243
|
|
|
+ #ifdef DOUBLE_SIDED
|
|
|
+
|
|
|
+ // Workaround for Adreno GPUs not able to do dFdx( vViewPosition )
|
|
|
|
|
|
- bool isFrontFacing = dot( normal, normalize( cross( fdx, fdy ) ) ) > 0.0;
|
|
|
+ vec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );
|
|
|
+ vec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );
|
|
|
|
|
|
- #ifdef DOUBLE_SIDED
|
|
|
+ // Workaround for Adreno GPUs broken gl_FrontFacing implementation
|
|
|
+ // https://stackoverflow.com/a/32621243
|
|
|
+
|
|
|
+ isFrontFacing = dot( normal, normalize( cross( fdx, fdy ) ) ) > 0.0;
|
|
|
|
|
|
normal = normal * ( float( isFrontFacing ) * 2.0 - 1.0 );
|
|
|
|