// deck.gl // SPDX-License-Identifier: MIT // Copyright (c) vis.gl contributors import {picking} from '@luma.gl/shadertools'; const sourceWGSL = /* wgsl */ `\ struct pickingUniforms { isActive: f32, isAttribute: f32, isHighlightActive: f32, useByteColors: f32, highlightedObjectColor: vec3, highlightColor: vec4, }; @group(0) @binding(auto) var picking: pickingUniforms; fn picking_normalizeColor(color: vec3) -> vec3 { return select(color, color / 255.0, picking.useByteColors > 0.5); } fn picking_normalizeColor4(color: vec4) -> vec4 { return select(color, color / 255.0, picking.useByteColors > 0.5); } fn picking_isColorZero(color: vec3) -> bool { return dot(color, vec3(1.0)) < 0.00001; } fn picking_isColorValid(color: vec3) -> bool { return dot(color, vec3(1.0)) > 0.00001; } `; export default { ...picking, source: sourceWGSL, defaultUniforms: {...picking.defaultUniforms, useByteColors: true}, inject: { 'vs:DECKGL_FILTER_GL_POSITION': ` // for picking depth values picking_setPickingAttribute(position.z / position.w); `, 'vs:DECKGL_FILTER_COLOR': ` picking_setPickingColor(geometry.pickingColor); `, 'fs:DECKGL_FILTER_COLOR': { order: 99, injection: ` // use highlight color if this fragment belongs to the selected object. color = picking_filterHighlightColor(color); // use picking color if rendering to picking FBO. color = picking_filterPickingColor(color); ` } } };