ImageMaterial.glsl.js 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. /*
  2. All material copyright ESRI, All Rights Reserved, unless otherwise specified.
  3. See https://js.arcgis.com/4.25/esri/copyright.txt for details.
  4. */
  5. import{isSome as e}from"../core/maybe.js";import{O as r}from"./vec2f64.js";import{ShaderOutput as o}from"../views/3d/webgl-engine/core/shaderLibrary/ShaderOutput.js";import{SliceDraw as i}from"../views/3d/webgl-engine/core/shaderLibrary/Slice.glsl.js";import{Transform as a}from"../views/3d/webgl-engine/core/shaderLibrary/Transform.glsl.js";import{multipassTerrainTest as t}from"../views/3d/webgl-engine/core/shaderLibrary/shading/MultipassTerrainTest.glsl.js";import{defaultMaskAlphaCutoff as s}from"../views/3d/webgl-engine/core/shaderLibrary/util/AlphaCutoff.js";import{ColorConversion as d}from"../views/3d/webgl-engine/core/shaderLibrary/util/ColorConversion.glsl.js";import{addProjViewLocalOrigin as l}from"../views/3d/webgl-engine/core/shaderLibrary/util/View.glsl.js";import{Float2PassUniform as n}from"../views/3d/webgl-engine/core/shaderModules/Float2PassUniform.js";import{FloatPassUniform as g}from"../views/3d/webgl-engine/core/shaderModules/FloatPassUniform.js";import{glsl as p}from"../views/3d/webgl-engine/core/shaderModules/interfaces.js";import{ShaderBuilder as c}from"../views/3d/webgl-engine/core/shaderModules/ShaderBuilder.js";import{Texture2DPassUniform as u}from"../views/3d/webgl-engine/core/shaderModules/Texture2DPassUniform.js";import{TransparencyPassType as m}from"../views/3d/webgl-engine/lib/TransparencyPassType.js";import{VertexAttribute as v}from"../views/3d/webgl-engine/lib/VertexAttribute.js";function f(f){const w=new c,{vertex:h,fragment:b}=w;return l(h,f),w.include(a,f),w.attributes.add(v.POSITION,"vec3"),w.attributes.add(v.UV0,"vec2"),w.varyings.add("vpos","vec3"),f.hasMultipassTerrain&&w.varyings.add("depth","float"),h.uniforms.add(new n("textureCoordinateScaleFactor",(o=>e(o.texture)&&e(o.texture.descriptor.textureCoordinateScaleFactor)?o.texture.descriptor.textureCoordinateScaleFactor:r))),h.code.add(p`
  6. void main(void) {
  7. vpos = position;
  8. ${f.hasMultipassTerrain?"depth = (view * vec4(vpos, 1.0)).z;":""}
  9. vTexCoord = uv0 * textureCoordinateScaleFactor;
  10. gl_Position = transformPosition(proj, view, vpos);
  11. }
  12. `),w.include(i,f),w.include(t,f),b.uniforms.add([new u("tex",(e=>e.texture)),new g("opacity",(e=>e.opacity))]),w.varyings.add("vTexCoord","vec2"),f.output===o.Alpha?b.code.add(p`
  13. void main() {
  14. discardBySlice(vpos);
  15. ${f.hasMultipassTerrain?"terrainDepthTest(gl_FragCoord, depth);":""}
  16. float alpha = texture2D(tex, vTexCoord).a * opacity;
  17. if (alpha < ${p.float(s)}) {
  18. discard;
  19. }
  20. gl_FragColor = vec4(alpha);
  21. }
  22. `):(b.include(d),b.code.add(p`
  23. void main() {
  24. discardBySlice(vpos);
  25. ${f.hasMultipassTerrain?"terrainDepthTest(gl_FragCoord, depth);":""}
  26. gl_FragColor = texture2D(tex, vTexCoord) * opacity;
  27. if (gl_FragColor.a < ${p.float(s)}) {
  28. discard;
  29. }
  30. gl_FragColor = highlightSlice(gl_FragColor, vpos);
  31. ${f.transparencyPassType===m.Color?"gl_FragColor = premultiplyAlpha(gl_FragColor);":""}
  32. }
  33. `)),w}const w=Object.freeze(Object.defineProperty({__proto__:null,build:f},Symbol.toStringTag,{value:"Module"}));export{w as I,f as b};