You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

S3MTilesNoLightFS.js 3.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. export default `
  2. #ifdef GL_OES_standard_derivatives
  3. #extension GL_OES_standard_derivatives : enable
  4. #endif
  5. #ifdef GL_EXT_shader_texture_lod
  6. #extension GL_EXT_shader_texture_lod : enable
  7. #endif
  8. #ifdef TexCoord
  9. uniform sampler2D uTexture;
  10. uniform float uTexture0Width;
  11. varying vec4 vTexCoord;
  12. varying vec4 vTexCoordTransform;
  13. varying vec4 vTexMatrix;
  14. #endif
  15. #ifdef VertexColor
  16. varying vec4 vColor;
  17. #endif
  18. #ifdef TexCoord
  19. void calculateMipLevel(in vec2 inTexCoord, in float vecTile, in float fMaxMip, inout float mipLevel)
  20. {
  21. vec2 dx = dFdx(inTexCoord * vecTile);
  22. vec2 dy = dFdy(inTexCoord * vecTile);
  23. float dotX = dot(dx, dx);
  24. float dotY = dot(dy, dy);
  25. float dMax = max(dotX, dotY);
  26. float dMin = min(dotX, dotY);
  27. float offset = (dMax - dMin) / (dMax + dMin);
  28. offset = clamp(offset, 0.0, 1.0);
  29. float d = dMax * (1.0 - offset) + dMin * offset;
  30. mipLevel = 0.5 * log2(d);
  31. mipLevel = clamp(mipLevel, 0.0, fMaxMip - 1.62);
  32. }
  33. void calculateTexCoord(in vec3 inTexCoord, in float scale, in float XTran, in float YTran, in float fTile, in float mipLevel, inout vec2 outTexCoord)
  34. {
  35. if(inTexCoord.z < -9000.0)
  36. {
  37. outTexCoord = inTexCoord.xy;
  38. }
  39. else
  40. {
  41. vec2 fTexCoord = fract(inTexCoord.xy);
  42. float offset = 1.0 * pow(2.0, mipLevel) / fTile;
  43. fTexCoord = clamp(fTexCoord, offset, 1.0 - offset);
  44. outTexCoord.x = (fTexCoord.x + XTran) * scale;
  45. outTexCoord.y = (fTexCoord.y + YTran) * scale;
  46. }
  47. }
  48. vec4 getTexColorForS3M(sampler2D curTexture, vec3 oriTexCoord, float texTileWidth, float fMaxMipLev, float fTexCoordScale, vec2 vecTexCoordTranslate)
  49. {
  50. vec4 color = vec4(1.0);
  51. float mipLevel = 0.0;
  52. #ifdef GL_OES_standard_derivatives
  53. calculateMipLevel(oriTexCoord.xy, texTileWidth, fMaxMipLev, mipLevel);
  54. #endif
  55. vec2 realTexCoord;
  56. calculateTexCoord(oriTexCoord, fTexCoordScale, vecTexCoordTranslate.x, vecTexCoordTranslate.y, texTileWidth, mipLevel, realTexCoord);
  57. if(oriTexCoord.z < -9000.0)
  58. {
  59. color = texture2D(curTexture, realTexCoord.xy);
  60. }
  61. else
  62. {
  63. #ifdef GL_EXT_shader_texture_lod
  64. color = texture2DLodEXT(curTexture, realTexCoord.xy, mipLevel);
  65. #else
  66. color = texture2D(curTexture, realTexCoord.xy, mipLevel);
  67. #endif
  68. }
  69. return color;
  70. }
  71. vec4 getTextureColor()
  72. {
  73. if(vTexMatrix.z < 0.0)
  74. {
  75. return vec4(1.0);
  76. }
  77. float texTileWidth0 = vTexMatrix.z * uTexture0Width;
  78. vec3 realTexCoord = vec3(vTexCoord.xy, vTexCoordTransform.x);
  79. return getTexColorForS3M(uTexture, realTexCoord, texTileWidth0, vTexMatrix.w, vTexMatrix.z, vTexMatrix.xy);
  80. }
  81. #endif
  82. void main()
  83. {
  84. vec4 baseColorWithAlpha = vec4(1.0);
  85. #ifdef VertexColor
  86. vec4 baseColorWithAlpha = vColor;
  87. #endif
  88. #ifdef TexCoord
  89. baseColorWithAlpha *= getTextureColor();
  90. #endif
  91. gl_FragColor = baseColorWithAlpha;
  92. }
  93. `;