2
0
Эх сурвалжийг харах

Adreno 3XX workaround in normalmap_pars_fragment and bumpmap_pars_fragment. See #9988

Mr.doob 8 жил өмнө
parent
commit
73e3b92f42

+ 4 - 2
src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl

@@ -23,8 +23,10 @@
 
 	vec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {
 
-		vec3 vSigmaX = dFdx( surf_pos );
-		vec3 vSigmaY = dFdy( surf_pos );
+		// Workaround for Adreno 3XX dFd*( vec3 ) bug. See #9988
+
+		vec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );
+		vec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );
 		vec3 vN = surf_norm;		// normalized
 
 		vec3 R1 = cross( vSigmaY, vN );

+ 4 - 2
src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl

@@ -8,8 +8,10 @@
 
 	vec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm ) {
 
-		vec3 q0 = dFdx( eye_pos.xyz );
-		vec3 q1 = dFdy( eye_pos.xyz );
+		// Workaround for Adreno 3XX dFd*( vec3 ) bug. See #9988
+
+		vec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );
+		vec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );
 		vec2 st0 = dFdx( vUv.st );
 		vec2 st1 = dFdy( vUv.st );