@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
51 lines (50 loc) • 3.1 kB
JavaScript
/*
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
See https://js.arcgis.com/4.33/esri/copyright.txt for details.
*/
import{neverReached as e}from"../../../../../../core/compilerUtils.js";import{RgbaFloatEncoding as t}from"../../../core/shaderLibrary/util/RgbaFloatEncoding.glsl.js";import{FloatDrawUniform as r}from"../../../core/shaderModules/FloatDrawUniform.js";import{glsl as a}from"../../../core/shaderModules/glsl.js";import{Texture2DDrawUniform as s}from"../../../core/shaderModules/Texture2DDrawUniform.js";import{usesSketchLogic as o,EdgeType as l}from"./EdgeUtil.glsl.js";import{UnpackAttributes as u}from"./UnpackAttributes.glsl.js";import{NoParameters as c}from"../../../../../webgl/NoParameters.js";class i extends c{}function n(c,i){c.include(u,i);const{vertex:n,fragment:d}=c;switch(o(i.type)&&(c.varyings.add("vStrokeUV","vec2"),n.uniforms.add(new s("strokesTexture",(e=>e.strokesTexture.texture)),new r("strokesLog2Resolution",(e=>Math.log2(e.strokesTexture.resolution))),new r("strokeVariants",(e=>e.strokesTexture.variants))).code.add(a`void calculateStyleOutputsSketch(float lineLength, UnpackedAttributes unpackedAttributes) {
vec2 sidenessNorm = unpackedAttributes.sidenessNorm;
float lineIndex = clamp(ceil(log2(lineLength)), 0.0, strokesLog2Resolution);
vStrokeUV = vec2(exp2(lineIndex) * sidenessNorm.y, lineIndex * strokeVariants + variantStroke + 0.5) / vec2(textureSize(strokesTexture, 0));
vStrokeUV.x += variantOffset;
}`),c.fragment.include(t),d.uniforms.add(new s("strokesTexture",(e=>e.strokesTexture.texture)),new r("strokesNormalizationScale",(e=>e.strokesTexture.normalizationScale))).code.add(a`float calculateLineOffsetSketch() {
float offsetNorm = rgbaTofloat(texture(strokesTexture, vStrokeUV));
return (offsetNorm - 0.5) * strokesNormalizationScale;
}
float calculateLinePressureSketch() {
return rgbaTofloat(texture(strokesTexture, vStrokeUV + vec2(0.0, 0.5)));
}`)),i.type){case l.Solid:n.code.add(a`void calculateStyleOutputs(UnpackedAttributes unpackedAttributes) {}`),d.code.add(a`float calculateLineOffset() {
return 0.0;
}
float calculateLinePressure() {
return 1.0;
}`);break;case l.Sketch:n.code.add(a`void calculateStyleOutputs(UnpackedAttributes unpackedAttributes)
{
calculateStyleOutputsSketch(vLineLengthPixels, unpackedAttributes);
}`),d.code.add(a`float calculateLineOffset() {
return calculateLineOffsetSketch();
}
float calculateLinePressure() {
return calculateLinePressureSketch();
}`);break;case l.Mixed:c.varyings.add("vType","float"),n.code.add(a`void calculateStyleOutputs(UnpackedAttributes unpackedAttributes)
{
vType = unpackedAttributes.type;
if (unpackedAttributes.type <= 0.0) {
calculateStyleOutputsSketch(vLineLengthPixels, unpackedAttributes);
}
}`),d.code.add(a`float calculateLineOffset() {
if (vType <= 0.0) {
return calculateLineOffsetSketch();
}
else {
return 0.0;
}
}
float calculateLinePressure() {
if (vType <= 0.0) {
return calculateLinePressureSketch();
}
else {
return 1.0;
}
}`);break;case l.COUNT:break;default:e(i.type)}}export{n as LineOffset,i as LineOffsetDrawParameters};