// deck.gl // SPDX-License-Identifier: MIT // Copyright (c) vis.gl contributors export default /* wgsl */ ` struct Attributes { @builtin(instance_index) instanceIndex: u32, @location(0) positions: vec2, @location(1) instancePositions: vec2, @location(2) instanceWeights: f32, }; struct Varyings { @builtin(position) position: vec4, @location(0) color: vec4, @location(1) pickingColor: vec3, }; fn sampleColorRange(value: f32, domain: vec2) -> vec4 { let ratio = (value - domain.x) / (domain.y - domain.x); return textureSampleLevel(colorRange, colorRangeSampler, vec2(ratio, 0.5), 0.0); } @vertex fn vertexMain(attributes: Attributes) -> Varyings { var output: Varyings; output.pickingColor = picking_getPickingColorFromIndex(attributes.instanceIndex); if (attributes.instanceWeights != attributes.instanceWeights) { output.position = vec4(0.0); output.color = vec4(0.0); return output; } var position = attributes.instancePositions * screenGrid.gridSizeClipspace + attributes.positions * screenGrid.cellSizeClipspace; position.x -= 1.0; position.y = 1.0 - position.y; output.position = vec4(position, 0.0, 1.0); let colorValue = sampleColorRange(attributes.instanceWeights, screenGrid.colorDomain); output.color = vec4(colorValue.rgb, colorValue.a * layer.opacity); return output; } @fragment fn fragmentMain(varyings: Varyings) -> @location(0) vec4 { if (picking.isActive > 0.5) { if (!picking_isColorValid(varyings.pickingColor)) { discard; } return vec4(varyings.pickingColor, 1.0); } var color = varyings.color; if (picking.isHighlightActive > 0.5) { let highlightedObjectColor = picking_normalizeColor(picking.highlightedObjectColor); if (picking_isColorZero(abs(varyings.pickingColor - highlightedObjectColor))) { let highLightAlpha = picking.highlightColor.a; let blendedAlpha = highLightAlpha + color.a * (1.0 - highLightAlpha); if (blendedAlpha > 0.0) { let highLightRatio = highLightAlpha / blendedAlpha; color = vec4( mix(color.rgb, picking.highlightColor.rgb, highLightRatio), blendedAlpha ); } else { color = vec4(color.rgb, 0.0); } } } return deckgl_premultiplied_alpha(color); } `;