UNPKG

@doegis/core

Version:

DOE GIS API

24 lines (22 loc) 1.23 kB
import{glsl as e}from"../../shaderModules/interfaces.js";function t(t){t.extensions.add("GL_EXT_shader_texture_lod"),t.extensions.add("GL_OES_standard_derivatives"),t.fragment.code.add(e`#ifndef GL_EXT_shader_texture_lod float calcMipMapLevel(const vec2 ddx, const vec2 ddy) { float deltaMaxSqr = max(dot(ddx, ddx), dot(ddy, ddy)); return max(0.0, 0.5 * log2(deltaMaxSqr)); } #endif vec4 textureAtlasLookup(sampler2D texture, vec2 textureSize, vec2 textureCoordinates, vec4 atlasRegion) { vec2 atlasScale = atlasRegion.zw - atlasRegion.xy; vec2 uvAtlas = fract(textureCoordinates) * atlasScale + atlasRegion.xy; float maxdUV = 0.125; vec2 dUVdx = clamp(dFdx(textureCoordinates), -maxdUV, maxdUV) * atlasScale; vec2 dUVdy = clamp(dFdy(textureCoordinates), -maxdUV, maxdUV) * atlasScale; #ifdef GL_EXT_shader_texture_lod return texture2DGradEXT(texture, uvAtlas, dUVdx, dUVdy); #else vec2 dUVdxAuto = dFdx(uvAtlas); vec2 dUVdyAuto = dFdy(uvAtlas); float mipMapLevel = calcMipMapLevel(dUVdx * textureSize, dUVdy * textureSize); float autoMipMapLevel = calcMipMapLevel(dUVdxAuto * textureSize, dUVdyAuto * textureSize); return texture2D(texture, uvAtlas, mipMapLevel - autoMipMapLevel); #endif }`)}export{t as TextureAtlasLookup};