skybox.glsl 802 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. //@renderpasses 0
  2. //@import "std"
  3. //@vertex
  4. void main(){
  5. transformQuadVertex();
  6. }
  7. //@fragment
  8. void main(){
  9. vec4 clip=r_InverseProjectionMatrix * vec4( v_ClipPosition*2.0-1.0,1.0,1.0 );
  10. vec3 tv=r_EnvMatrix * (clip.xyz/clip.w);
  11. vec3 frag;
  12. if( r_SkyCube ){
  13. frag=pow( textureCube( r_SkyTextureCube,tv ).rgb,vec3( 2.2 ) );
  14. }else{
  15. float p=-atan( tv.y,sqrt( tv.x*tv.x+tv.z*tv.z ) ) / pi + 0.5;
  16. float y=atan( tv.x,tv.z ) / pi * 0.5 + 0.5;
  17. frag=pow( texture2D( r_SkyTexture2D,vec2( y,p ) ).rgb,vec3( 2.2 ) );
  18. }
  19. frag*=r_SkyColor.rgb;
  20. #if MX2_DEFERREDRENDERER
  21. gl_FragData[0]=vec4( frag,1.0 ); //accum
  22. gl_FragData[1]=vec4( 0.0,0.0,0.0,1.0 ); //color_m
  23. gl_FragData[2]=vec4( 0.5,0.5,0.5,1.0 ); //normal_r
  24. #else
  25. emitLinearFragment( vec4( frag,1.0 ) );
  26. #endif
  27. }