소스 검색

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

Mr.doob 8 년 전
부모
커밋
73e3b92f42
2개의 변경된 파일8개의 추가작업 그리고 4개의 파일을 삭제
  1. 4 2
      src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl
  2. 4 2
      src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl

+ 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 );