|
@@ -1,39 +1,44 @@
|
|
export default /* glsl */`
|
|
export default /* glsl */`
|
|
-#ifdef FLAT_SHADED
|
|
|
|
|
|
+// Workaround for Adreno/Nexus5 not able 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 ) );
|
|
|
|
|
|
- // Workaround for Adreno/Nexus5 not able able to do dFdx( vViewPosition ) ...
|
|
|
|
|
|
+#ifdef FLAT_SHADED
|
|
|
|
|
|
- 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 ) );
|
|
vec3 normal = normalize( cross( fdx, fdy ) );
|
|
|
|
|
|
#else
|
|
#else
|
|
|
|
|
|
vec3 normal = normalize( vNormal );
|
|
vec3 normal = normalize( vNormal );
|
|
|
|
|
|
- #ifdef DOUBLE_SIDED
|
|
|
|
|
|
+#endif
|
|
|
|
|
|
- normal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );
|
|
|
|
|
|
+// Workaround for Adreno GPUs gl_FrontFacing bug. See #10331 and #15850
|
|
|
|
|
|
- #endif
|
|
|
|
|
|
+bool isFrontFacing = dot( normal, normalize( cross( fdx, fdy ) ) ) > 0.0;
|
|
|
|
|
|
- #ifdef USE_TANGENT
|
|
|
|
|
|
+#ifdef DOUBLE_SIDED
|
|
|
|
|
|
- vec3 tangent = normalize( vTangent );
|
|
|
|
- vec3 bitangent = normalize( vBitangent );
|
|
|
|
|
|
+ normal = normal * ( float( isFrontFacing ) * 2.0 - 1.0 );
|
|
|
|
|
|
- #ifdef DOUBLE_SIDED
|
|
|
|
|
|
+#endif
|
|
|
|
+
|
|
|
|
+#ifdef USE_TANGENT
|
|
|
|
|
|
- tangent = tangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );
|
|
|
|
- bitangent = bitangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );
|
|
|
|
|
|
+ vec3 tangent = normalize( vTangent );
|
|
|
|
+ vec3 bitangent = normalize( vBitangent );
|
|
|
|
|
|
- #endif
|
|
|
|
|
|
+ #ifdef DOUBLE_SIDED
|
|
|
|
|
|
- #if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )
|
|
|
|
|
|
+ tangent = tangent * ( float( isFrontFacing ) * 2.0 - 1.0 );
|
|
|
|
+ bitangent = bitangent * ( float( isFrontFacing ) * 2.0 - 1.0 );
|
|
|
|
+
|
|
|
|
+ #endif
|
|
|
|
|
|
- mat3 vTBN = mat3( tangent, bitangent, normal );
|
|
|
|
|
|
+ #if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )
|
|
|
|
|
|
- #endif
|
|
|
|
|
|
+ mat3 vTBN = mat3( tangent, bitangent, normal );
|
|
|
|
|
|
#endif
|
|
#endif
|
|
|
|
|