UNPKG

kepler.gl

Version:

kepler.gl is a webgl based application to visualize large scale location data in the browser

70 lines (69 loc) 4.05 kB
import { Layer, LayerExtension } from '@deck.gl/core'; export type FilterArrowExtensionProps = { getFiltered?: () => number; }; /** * FilterArrowExtension - a deck.gl extension to filter arrow layer * * A simple extension to filter arrow layer based on the result of CPU filteredIndex, * so we can avoid filtering on the raw Arrow table and recreating geometry attributes. * Specifically, an attribute `filtered` is added to the layer to indicate whether the feature has been Filtered * the shader module is modified to discard the feature if filtered value is 0 * the accessor getFiltered is used to get the value of `filtered` based on the value `filteredIndex` in Arrowlayer */ export default class FilterArrowExtension extends LayerExtension { static defaultProps: { getFiltered: { type: string; value: number; }; }; static extensionName: string; getShaders(): { modules: { name: string; dependencies: { readonly name: "project"; readonly dependencies: [{ name: string; vs: string; }, { readonly name: "geometry"; readonly source: "const SMOOTH_EDGE_RADIUS: f32 = 0.5;\n\nstruct VertexGeometry {\n position: vec4<f32>,\n worldPosition: vec3<f32>,\n worldPositionAlt: vec3<f32>,\n normal: vec3<f32>,\n uv: vec2<f32>,\n pickingColor: vec3<f32>,\n};\n\nvar<private> geometry_: VertexGeometry = VertexGeometry(\n vec4<f32>(0.0, 0.0, 1.0, 0.0),\n vec3<f32>(0.0, 0.0, 0.0),\n vec3<f32>(0.0, 0.0, 0.0),\n vec3<f32>(0.0, 0.0, 0.0),\n vec2<f32>(0.0, 0.0),\n vec3<f32>(0.0, 0.0, 0.0)\n);\n\nstruct FragmentGeometry {\n uv: vec2<f32>,\n};\n\nvar<private> fragmentGeometry: FragmentGeometry;\n\nfn smoothedge(edge: f32, x: f32) -> f32 {\n return smoothstep(edge - SMOOTH_EDGE_RADIUS, edge + SMOOTH_EDGE_RADIUS, x);\n}\n"; readonly vs: "#define SMOOTH_EDGE_RADIUS 0.5\n\nstruct VertexGeometry {\n vec4 position;\n vec3 worldPosition;\n vec3 worldPositionAlt;\n vec3 normal;\n vec2 uv;\n vec3 pickingColor;\n} geometry = VertexGeometry(\n vec4(0.0, 0.0, 1.0, 0.0),\n vec3(0.0),\n vec3(0.0),\n vec3(0.0),\n vec2(0.0),\n vec3(0.0)\n);\n"; readonly fs: "#define SMOOTH_EDGE_RADIUS 0.5\n\nstruct FragmentGeometry {\n vec2 uv;\n} geometry;\n\nfloat smoothedge(float edge, float x) {\n return smoothstep(edge - SMOOTH_EDGE_RADIUS, edge + SMOOTH_EDGE_RADIUS, x);\n}\n"; }]; readonly source: string; readonly vs: string; readonly getUniforms: (opts?: import("@deck.gl/core").ProjectProps | {}) => {}; readonly uniformTypes: { readonly wrapLongitude: "f32"; readonly coordinateSystem: "i32"; readonly commonUnitsPerMeter: "vec3<f32>"; readonly projectionMode: "i32"; readonly scale: "f32"; readonly commonUnitsPerWorldUnit: "vec3<f32>"; readonly commonUnitsPerWorldUnit2: "vec3<f32>"; readonly center: "vec4<f32>"; readonly modelMatrix: "mat4x4<f32>"; readonly viewProjectionMatrix: "mat4x4<f32>"; readonly viewportSize: "vec2<f32>"; readonly devicePixelRatio: "f32"; readonly focalDistance: "f32"; readonly cameraPosition: "vec3<f32>"; readonly coordinateOrigin: "vec3<f32>"; readonly commonOrigin: "vec3<f32>"; readonly pseudoMeters: "f32"; }; }[]; vs: string; fs: string; inject: { 'vs:#main-start': string; }; getUniforms: () => void; }[]; defines: {}; }; initializeState(this: Layer<FilterArrowExtensionProps>): void; }