@deck.gl/layers
Version:
deck.gl core layers
93 lines (74 loc) • 2.88 kB
text/typescript
// deck.gl
// SPDX-License-Identifier: MIT
// Copyright (c) vis.gl contributors
export default /* wgsl */ `\
struct ConstantAttributes {
instanceNormals: vec3<f32>,
instanceColors: vec4<f32>,
instancePositions: vec3<f32>,
instancePositions64Low: vec3<f32>,
instancePickingColors: vec3<f32>
};
const constants = ConstantAttributes(
vec3<f32>(1.0, 0.0, 0.0),
vec4<f32>(0.0, 0.0, 0.0, 1.0),
vec3<f32>(0.0),
vec3<f32>(0.0),
vec3<f32>(0.0)
);
struct Attributes {
instanceIndex : u32,
vertexIndex : u32,
positions: vec3<f32>,
instancePositions: vec3<f32>,
instancePositions64Low: vec3<f32>,
instanceNormals: vec3<f32>,
instanceColors: vec4<f32>,
instancePickingColors: vec3<f32>
};
struct Varyings {
position: vec4<f32>,
vColor: vec4<f32>,
unitPosition: vec2<f32>,
};
fn vertexMain(attributes: Attributes) -> Varyings {
var varyings: Varyings;
// var geometry: Geometry;
// geometry.worldPosition = instancePositions;
// geometry.normal = project_normal(instanceNormals);
// position on the containing square in [-1, 1] space
varyings.unitPosition = attributes.positions.xy;
geometry.uv = varyings.unitPosition;
geometry.pickingColor = attributes.instancePickingColors;
// Find the center of the point and add the current vertex
let offset = vec3<f32>(attributes.positions.xy * project_unit_size_to_pixel(pointCloud.radiusPixels, pointCloud.sizeUnits), 0.0);
// DECKGL_FILTER_SIZE(offset, geometry);
varyings.position = project_position_to_clipspace(attributes.instancePositions, attributes.instancePositions64Low, vec3<f32>(0.0)); // TODO , geometry.position);
// DECKGL_FILTER_GL_POSITION(gl_Position, geometry);
let clipPixels = project_pixel_size_to_clipspace(offset.xy);
varyings.position.x += clipPixels.x;
varyings.position.y += clipPixels.y;
// Apply lighting
let lightColor = lighting_getLightColor2(attributes.instanceColors.rgb, project.cameraPosition, geometry.position.xyz, geometry.normal);
// Apply opacity to instance color, or return instance picking color
varyings.vColor = vec4(lightColor, attributes.instanceColors.a * color.opacity);
// DECKGL_FILTER_COLOR(vColor, geometry);
return varyings;
}
fn fragmentMain(varyings: Varyings) -> vec4<f32> {
// var geometry: Geometry;
// geometry.uv = unitPosition.xy;
let distToCenter = length(varyings.unitPosition);
if (distToCenter > 1.0) {
discard;
}
var fragColor: vec4<f32>;
fragColor = varyings.vColor;
// DECKGL_FILTER_COLOR(fragColor, geometry);
// Apply premultiplied alpha as required by transparent canvas
fragColor = deckgl_premultiplied_alpha(fragColor);
return fragColor;
}
`;