CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-deck-gl--extensions

Plug-and-play extension system providing advanced functionalities for deck.gl layers including brushing, filtering, styling, clipping, collision detection, masking, and terrain rendering capabilities.

Pending

Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

SecuritybySnyk

Pending

The risk profile of this skill

Overview
Eval results
Files

legacy-experimental.mddocs/

Legacy and Experimental Features

High-precision calculation support and experimental terrain rendering capabilities, including deprecated 64-bit precision extensions and preview terrain features.

Capabilities

Fp64Extension (Deprecated)

Legacy extension that adds 64-bit precision to geospatial layers. This extension is deprecated in favor of modern projection systems and high-precision viewport handling.

/**
 * Adds the legacy 64-bit precision to geospatial layers
 * @deprecated Use modern high-precision viewport and projection systems instead
 */
class Fp64Extension extends LayerExtension {
  static extensionName: 'Fp64Extension';
  
  constructor();
  
  getShaders(): any;
  draw(params: any, extension: this): void;
}

project64 Shader Module

64-bit precision projection shader module that works with the Fp64Extension and other high-precision rendering scenarios.

/**
 * 64-bit precision projection shader module
 * Provides high-precision coordinate transformations
 */
const project64: ShaderModule<Project64ModuleProps>;

interface Project64ModuleProps {
  /** The viewport for coordinate transformations */
  viewport: Viewport;
}

/**
 * Returns calculated 64-bit precision uniforms for the shader module
 * @param opts - Module properties or empty object
 * @returns Record of uniform values for high-precision rendering
 */
function getUniforms(opts?: Project64ModuleProps | {}): Record<string, any>;

interface ShaderModule<TProps> {
  name: string;
  dependencies: ShaderModule<any>[];
  vs: string; // Vertex shader code
  getUniforms: (opts?: TProps | {}) => Record<string, any>;
  uniformTypes: Record<string, string>;
}

_TerrainExtension (Experimental)

Experimental extension for terrain-aware rendering, providing capabilities for draping layers on terrain surfaces and offset rendering.

/**
 * Experimental terrain extension for 3D terrain rendering
 * Allows layers to be draped on terrain surfaces or offset from terrain
 * @experimental This API may change in future versions
 */
class _TerrainExtension extends LayerExtension {
  static extensionName: 'TerrainExtension';
  static defaultProps: TerrainExtensionDefaultProps;
  
  constructor();
  
  getShaders(): any;
  initializeState(): void;
  updateState(params: UpdateParameters): void;
  onNeedsRedraw(): void;
}

interface TerrainExtensionProps {
  /**
   * Terrain drawing mode:
   * - 'offset': Objects are offset from the terrain surface
   * - 'drape': Objects are draped/projected onto the terrain surface
   * If undefined, mode is automatically detected based on layer type
   */
  terrainDrawMode?: 'offset' | 'drape';
}

interface TerrainExtensionDefaultProps {
  terrainDrawMode: undefined;
}

interface TerrainModuleProps {
  // Properties for terrain shader module (implementation details vary)
}

Usage Examples:

import { ScatterplotLayer, PathLayer } from "@deck.gl/layers";
import { Fp64Extension, _TerrainExtension, project64 } from "@deck.gl/extensions";

// Legacy 64-bit precision (deprecated - use modern approaches instead)
const legacyPrecisionLayer = new ScatterplotLayer({
  id: "legacy-precision",
  data: precisionData,
  extensions: [new Fp64Extension()], // Deprecated
  getPosition: d => d.coordinates,
  getRadius: 100
});

// Using project64 shader module directly (advanced usage)
const customShaderLayer = new CustomLayer({
  id: "custom-precision",
  data: customData,
  modules: [project64], // Include 64-bit precision shader module
  moduleProps: {
    project64: {
      viewport: deck.viewManager.getViewport()
    }
  }
});

// Experimental terrain draping
const drapedLayer = new PathLayer({
  id: "draped-paths",
  data: pathData,
  extensions: [new _TerrainExtension()], // Experimental
  getPath: d => d.coordinates,
  terrainDrawMode: 'drape', // Drape paths on terrain surface
  getWidth: 5
});

// Terrain offset rendering
const offsetLayer = new ScatterplotLayer({
  id: "terrain-offset",
  data: pointData,
  extensions: [new _TerrainExtension()],
  getPosition: d => d.coordinates,
  terrainDrawMode: 'offset', // Offset points from terrain
  getRadius: 50
});

// Auto-detected terrain mode
const autoTerrainLayer = new ScatterplotLayer({
  id: "auto-terrain",
  data: pointData,
  extensions: [new _TerrainExtension()],
  getPosition: d => d.coordinates,
  // terrainDrawMode undefined - automatically detected
  getRadius: 25
});

Migration from Legacy Features

Replacing Fp64Extension

The Fp64Extension is deprecated. Modern alternatives include:

// Instead of Fp64Extension (deprecated)
const legacyLayer = new ScatterplotLayer({
  extensions: [new Fp64Extension()], // Don't use this
  // ...
});

// Use modern high-precision viewport
const modernLayer = new ScatterplotLayer({
  // No extension needed - precision handled by viewport
  coordinateSystem: COORDINATE_SYSTEM.LNGLAT_DEPRECATED, // If needed
  // Or use newer coordinate systems with built-in precision
  // ...
});

// Or use explicit projection with high precision
const projectedLayer = new ScatterplotLayer({
  coordinateSystem: COORDINATE_SYSTEM.WEB_MERCATOR,
  coordinateOrigin: [centerLng, centerLat], // High precision origin  
  // ...
});

Working with High-Precision Coordinates

// Modern approach for high-precision coordinates
const highPrecisionLayer = new ScatterplotLayer({
  data: precisionData,
  // Use coordinate origin for sub-pixel precision
  coordinateOrigin: [-122.45, 37.78],
  coordinateSystem: COORDINATE_SYSTEM.METER_OFFSETS,
  getPosition: d => [
    (d.lng - (-122.45)) * 111000, // Convert to meter offsets
    (d.lat - 37.78) * 111000
  ]
});

Experimental Terrain Features

Terrain Setup Requirements

// Terrain extension requires terrain provider in deck instance
const deckInstance = new Deck({
  // ... other config
  terrain: {
    provider: 'mapbox', // or other terrain provider
    accessToken: 'your-token',
    elevationData: 'mapbox://mapbox.terrain-rgb'
  },
  layers: [terrainLayer]
});

const terrainLayer = new PathLayer({
  extensions: [new _TerrainExtension()],
  terrainDrawMode: 'drape'
});

Advanced Terrain Usage

// Terrain with custom elevation handling
const advancedTerrainLayer = new ScatterplotLayer({
  extensions: [new _TerrainExtension()],
  terrainDrawMode: 'offset',
  // Additional terrain-related props may be available
  // Check latest documentation for experimental features
});

Performance Considerations

Fp64Extension (Legacy)

  • Significant performance impact due to double-precision calculations
  • Not recommended for new projects
  • Modern viewport systems provide better precision with less overhead

project64 Shader Module

  • Lower-level shader module with minimal performance impact
  • Only use when high precision is absolutely required
  • Most use cases are better served by modern coordinate systems

_TerrainExtension (Experimental)

  • Performance depends on terrain complexity and rendering mode
  • Drape mode may be more expensive than offset mode
  • Terrain data loading and caching affects overall performance

Compatibility and Support

Fp64Extension

  • ⚠️ Deprecated: Will be removed in future versions
  • Limited support and maintenance
  • Use modern alternatives for new projects

project64 Shader Module

  • Still supported for advanced use cases
  • Stable API, but use only when necessary
  • Better alternatives available in most cases

_TerrainExtension

  • 🧪 Experimental: API may change
  • Limited documentation and examples
  • Use with caution in production environments
  • Monitor release notes for API changes

Future Roadmap

  • Fp64Extension: Scheduled for removal in next major version
  • project64: Maintained for compatibility, but discouraged for new use
  • _TerrainExtension: Active development, API stabilization in progress
  • Modern high-precision systems continue to improve and should be preferred

Install with Tessl CLI

npx tessl i tessl/npm-deck-gl--extensions

docs

brushing.md

data-filtering.md

geometry-operations.md

index.md

legacy-experimental.md

styling.md

tile.json