@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
33 lines (32 loc) • 1.99 kB
JavaScript
/* COPYRIGHT Esri - https://js.arcgis.com/5.0.19/LICENSE.txt */
import{HighlightReadBitmap as i}from"../HighlightReadBitmap.glsl.js";import{glsl as e}from"../../shaderModules/glsl.js";import{Integer2BindUniform as t}from"../../shaderModules/Integer2BindUniform.js";import{IntegerBindUniform as h}from"../../shaderModules/IntegerBindUniform.js";import{Texture2DBindUniform as l}from"../../shaderModules/Texture2DBindUniform.js";import{Texture2DUintBindUniform as g}from"../../shaderModules/Texture2DUintBindUniform.js";function d(d,o){const{fragment:u}=d,{output:r,draped:c,hasHighlightMixTexture:n}=o;8===r?(u.uniforms.add(new h("highlightLevel",i=>i.highlightLevel??0),new t("highlightMixOrigin",i=>i.highlightMixOrigin)),d.outputs.add("fragHighlight","uvec2",0),d.include(i),n?u.uniforms.add(new g("highlightMixTexture",i=>i.highlightMixTexture)).code.add(e`uvec2 getAccumulatedHighlight() {
return texelFetch(highlightMixTexture, ivec2(gl_FragCoord.xy) - highlightMixOrigin, 0).rg;
}
void outputHighlight(bool occluded) {
if (highlightLevel == 0) {
uint bits = occluded ? 3u : 1u;
fragHighlight = uvec2(bits, 0);
} else {
int ll = (highlightLevel & 3) << 1;
int li = (highlightLevel >> 2) & 3;
uint bits;
if (occluded) {
bits = 3u << ll;
} else {
bits = 1u << ll;
}
uvec2 combinedHighlight = getAccumulatedHighlight();
combinedHighlight[li] |= bits;
fragHighlight = combinedHighlight;
}
}`):u.code.add(e`void outputHighlight(bool occluded) {
uint bits = occluded ? 3u : 1u;
fragHighlight = uvec2(bits, 0);
}`),c?u.code.add(e`bool isHighlightOccluded() {
return false;
}`):u.uniforms.add(new l("depthTexture",i=>i.mainDepth)).code.add(e`bool isHighlightOccluded() {
float sceneDepth = texelFetch(depthTexture, ivec2(gl_FragCoord.xy), 0).x;
return gl_FragCoord.z > sceneDepth + 5e-7;
}`),u.code.add(e`void calculateOcclusionAndOutputHighlight() {
outputHighlight(isHighlightOccluded());
}`)):u.code.add(e`void calculateOcclusionAndOutputHighlight() {}`)}export{d as OutputHighlight};