kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
125 lines (110 loc) • 12.5 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.TOPOLOGY = exports.TEXTURE_USAGE = exports.TEXTURE_FORMAT = exports.GL_BLEND_FUNC_TO_WEBGPU = exports.GL_BLEND_EQ_TO_WEBGPU = exports.FILTER_MODE = exports.DEPTH_STENCIL_FORMAT = exports.CULL_MODE = exports.BLEND_PARAMS_ALPHA = exports.BLEND_OPERATION = exports.BLEND_FACTOR = exports.ADDRESS_MODE = void 0;
// SPDX-License-Identifier: MIT
// Copyright contributors to the kepler.gl project
/**
* WebGPU-style string constants for deck.gl 9 / luma.gl 9 render parameters.
* These replace the old GL.* enum values that were used in deck.gl 8.
*/
// --- Blend factors ---
var BLEND_FACTOR = exports.BLEND_FACTOR = {
ZERO: 'zero',
ONE: 'one',
SRC: 'src',
ONE_MINUS_SRC: 'one-minus-src',
SRC_ALPHA: 'src-alpha',
ONE_MINUS_SRC_ALPHA: 'one-minus-src-alpha',
DST: 'dst',
ONE_MINUS_DST: 'one-minus-dst',
DST_ALPHA: 'dst-alpha',
ONE_MINUS_DST_ALPHA: 'one-minus-dst-alpha'
};
// --- Blend operations ---
var BLEND_OPERATION = exports.BLEND_OPERATION = {
ADD: 'add',
SUBTRACT: 'subtract',
REVERSE_SUBTRACT: 'reverse-subtract',
MIN: 'min',
MAX: 'max'
};
// --- Cull modes ---
var CULL_MODE = exports.CULL_MODE = {
NONE: 'none',
FRONT: 'front',
BACK: 'back'
};
// --- Texture filter modes ---
var FILTER_MODE = exports.FILTER_MODE = {
NEAREST: 'nearest',
LINEAR: 'linear'
};
// --- Texture address (wrap) modes ---
var ADDRESS_MODE = exports.ADDRESS_MODE = {
CLAMP_TO_EDGE: 'clamp-to-edge',
REPEAT: 'repeat',
MIRROR_REPEAT: 'mirror-repeat'
};
// --- Texture formats ---
var TEXTURE_FORMAT = exports.TEXTURE_FORMAT = {
R8_UINT: 'r8uint',
R16_UINT: 'r16uint',
R32_UINT: 'r32uint',
R8_SINT: 'r8sint',
R16_SINT: 'r16sint',
R32_SINT: 'r32sint',
R32_FLOAT: 'r32float',
RGBA8_UNORM: 'rgba8unorm'
};
// --- Depth-stencil attachment formats ---
var DEPTH_STENCIL_FORMAT = exports.DEPTH_STENCIL_FORMAT = {
DEPTH24_PLUS: 'depth24plus'
};
// --- Texture usage flags (mirroring luma.gl Texture static fields) ---
var TEXTURE_USAGE = exports.TEXTURE_USAGE = {
COPY_SRC: 0x01,
COPY_DST: 0x02,
SAMPLE: 0x04,
RENDER_ATTACHMENT: 0x10
};
// --- Primitive topologies ---
var TOPOLOGY = exports.TOPOLOGY = {
TRIANGLE_LIST: 'triangle-list',
TRIANGLE_STRIP: 'triangle-strip',
LINE_LIST: 'line-list',
LINE_STRIP: 'line-strip',
POINT_LIST: 'point-list'
};
// --- Precomposed parameter sets ---
/**
* Standard alpha blending: srcAlpha / oneMinusSrcAlpha for both color and alpha.
* Include `blend: true` since per-layer parameters override global ones in deck.gl 9.
*/
var BLEND_PARAMS_ALPHA = exports.BLEND_PARAMS_ALPHA = {
blend: true,
blendColorSrcFactor: BLEND_FACTOR.SRC_ALPHA,
blendColorDstFactor: BLEND_FACTOR.ONE_MINUS_SRC_ALPHA,
blendAlphaSrcFactor: BLEND_FACTOR.ONE,
blendAlphaDstFactor: BLEND_FACTOR.ONE_MINUS_SRC_ALPHA,
blendColorOperation: BLEND_OPERATION.ADD,
blendAlphaOperation: BLEND_OPERATION.ADD
};
// --- Mapping tables (GL enum name → WebGPU string) used by gl-utils ---
var GL_BLEND_FUNC_TO_WEBGPU = exports.GL_BLEND_FUNC_TO_WEBGPU = {
SRC_ALPHA: BLEND_FACTOR.SRC_ALPHA,
ONE_MINUS_SRC_ALPHA: BLEND_FACTOR.ONE_MINUS_SRC_ALPHA,
DST_ALPHA: BLEND_FACTOR.DST_ALPHA,
ONE: BLEND_FACTOR.ONE,
ONE_MINUS_DST_COLOR: BLEND_FACTOR.ONE_MINUS_DST,
DST_COLOR: BLEND_FACTOR.DST,
ZERO: BLEND_FACTOR.ZERO,
SRC_COLOR: BLEND_FACTOR.SRC
};
var GL_BLEND_EQ_TO_WEBGPU = exports.GL_BLEND_EQ_TO_WEBGPU = {
FUNC_ADD: BLEND_OPERATION.ADD,
FUNC_SUBTRACT: BLEND_OPERATION.SUBTRACT,
FUNC_REVERSE_SUBTRACT: BLEND_OPERATION.REVERSE_SUBTRACT
};
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCTEVORF9GQUNUT1IiLCJleHBvcnRzIiwiWkVSTyIsIk9ORSIsIlNSQyIsIk9ORV9NSU5VU19TUkMiLCJTUkNfQUxQSEEiLCJPTkVfTUlOVVNfU1JDX0FMUEhBIiwiRFNUIiwiT05FX01JTlVTX0RTVCIsIkRTVF9BTFBIQSIsIk9ORV9NSU5VU19EU1RfQUxQSEEiLCJCTEVORF9PUEVSQVRJT04iLCJBREQiLCJTVUJUUkFDVCIsIlJFVkVSU0VfU1VCVFJBQ1QiLCJNSU4iLCJNQVgiLCJDVUxMX01PREUiLCJOT05FIiwiRlJPTlQiLCJCQUNLIiwiRklMVEVSX01PREUiLCJORUFSRVNUIiwiTElORUFSIiwiQUREUkVTU19NT0RFIiwiQ0xBTVBfVE9fRURHRSIsIlJFUEVBVCIsIk1JUlJPUl9SRVBFQVQiLCJURVhUVVJFX0ZPUk1BVCIsIlI4X1VJTlQiLCJSMTZfVUlOVCIsIlIzMl9VSU5UIiwiUjhfU0lOVCIsIlIxNl9TSU5UIiwiUjMyX1NJTlQiLCJSMzJfRkxPQVQiLCJSR0JBOF9VTk9STSIsIkRFUFRIX1NURU5DSUxfRk9STUFUIiwiREVQVEgyNF9QTFVTIiwiVEVYVFVSRV9VU0FHRSIsIkNPUFlfU1JDIiwiQ09QWV9EU1QiLCJTQU1QTEUiLCJSRU5ERVJfQVRUQUNITUVOVCIsIlRPUE9MT0dZIiwiVFJJQU5HTEVfTElTVCIsIlRSSUFOR0xFX1NUUklQIiwiTElORV9MSVNUIiwiTElORV9TVFJJUCIsIlBPSU5UX0xJU1QiLCJCTEVORF9QQVJBTVNfQUxQSEEiLCJibGVuZCIsImJsZW5kQ29sb3JTcmNGYWN0b3IiLCJibGVuZENvbG9yRHN0RmFjdG9yIiwiYmxlbmRBbHBoYVNyY0ZhY3RvciIsImJsZW5kQWxwaGFEc3RGYWN0b3IiLCJibGVuZENvbG9yT3BlcmF0aW9uIiwiYmxlbmRBbHBoYU9wZXJhdGlvbiIsIkdMX0JMRU5EX0ZVTkNfVE9fV0VCR1BVIiwiT05FX01JTlVTX0RTVF9DT0xPUiIsIkRTVF9DT0xPUiIsIlNSQ19DT0xPUiIsIkdMX0JMRU5EX0VRX1RPX1dFQkdQVSIsIkZVTkNfQUREIiwiRlVOQ19TVUJUUkFDVCIsIkZVTkNfUkVWRVJTRV9TVUJUUkFDVCJdLCJzb3VyY2VzIjpbIi4uL3NyYy9ncHUtcGFyYW1ldGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG4vKipcbiAqIFdlYkdQVS1zdHlsZSBzdHJpbmcgY29uc3RhbnRzIGZvciBkZWNrLmdsIDkgLyBsdW1hLmdsIDkgcmVuZGVyIHBhcmFtZXRlcnMuXG4gKiBUaGVzZSByZXBsYWNlIHRoZSBvbGQgR0wuKiBlbnVtIHZhbHVlcyB0aGF0IHdlcmUgdXNlZCBpbiBkZWNrLmdsIDguXG4gKi9cblxuLy8gLS0tIEJsZW5kIGZhY3RvcnMgLS0tXG5leHBvcnQgY29uc3QgQkxFTkRfRkFDVE9SID0ge1xuICBaRVJPOiAnemVybycsXG4gIE9ORTogJ29uZScsXG4gIFNSQzogJ3NyYycsXG4gIE9ORV9NSU5VU19TUkM6ICdvbmUtbWludXMtc3JjJyxcbiAgU1JDX0FMUEhBOiAnc3JjLWFscGhhJyxcbiAgT05FX01JTlVTX1NSQ19BTFBIQTogJ29uZS1taW51cy1zcmMtYWxwaGEnLFxuICBEU1Q6ICdkc3QnLFxuICBPTkVfTUlOVVNfRFNUOiAnb25lLW1pbnVzLWRzdCcsXG4gIERTVF9BTFBIQTogJ2RzdC1hbHBoYScsXG4gIE9ORV9NSU5VU19EU1RfQUxQSEE6ICdvbmUtbWludXMtZHN0LWFscGhhJ1xufSBhcyBjb25zdDtcblxuLy8gLS0tIEJsZW5kIG9wZXJhdGlvbnMgLS0tXG5leHBvcnQgY29uc3QgQkxFTkRfT1BFUkFUSU9OID0ge1xuICBBREQ6ICdhZGQnLFxuICBTVUJUUkFDVDogJ3N1YnRyYWN0JyxcbiAgUkVWRVJTRV9TVUJUUkFDVDogJ3JldmVyc2Utc3VidHJhY3QnLFxuICBNSU46ICdtaW4nLFxuICBNQVg6ICdtYXgnXG59IGFzIGNvbnN0O1xuXG4vLyAtLS0gQ3VsbCBtb2RlcyAtLS1cbmV4cG9ydCBjb25zdCBDVUxMX01PREUgPSB7XG4gIE5PTkU6ICdub25lJyxcbiAgRlJPTlQ6ICdmcm9udCcsXG4gIEJBQ0s6ICdiYWNrJ1xufSBhcyBjb25zdDtcblxuLy8gLS0tIFRleHR1cmUgZmlsdGVyIG1vZGVzIC0tLVxuZXhwb3J0IGNvbnN0IEZJTFRFUl9NT0RFID0ge1xuICBORUFSRVNUOiAnbmVhcmVzdCcsXG4gIExJTkVBUjogJ2xpbmVhcidcbn0gYXMgY29uc3Q7XG5cbi8vIC0tLSBUZXh0dXJlIGFkZHJlc3MgKHdyYXApIG1vZGVzIC0tLVxuZXhwb3J0IGNvbnN0IEFERFJFU1NfTU9ERSA9IHtcbiAgQ0xBTVBfVE9fRURHRTogJ2NsYW1wLXRvLWVkZ2UnLFxuICBSRVBFQVQ6ICdyZXBlYXQnLFxuICBNSVJST1JfUkVQRUFUOiAnbWlycm9yLXJlcGVhdCdcbn0gYXMgY29uc3Q7XG5cbi8vIC0tLSBUZXh0dXJlIGZvcm1hdHMgLS0tXG5leHBvcnQgY29uc3QgVEVYVFVSRV9GT1JNQVQgPSB7XG4gIFI4X1VJTlQ6ICdyOHVpbnQnLFxuICBSMTZfVUlOVDogJ3IxNnVpbnQnLFxuICBSMzJfVUlOVDogJ3IzMnVpbnQnLFxuICBSOF9TSU5UOiAncjhzaW50JyxcbiAgUjE2X1NJTlQ6ICdyMTZzaW50JyxcbiAgUjMyX1NJTlQ6ICdyMzJzaW50JyxcbiAgUjMyX0ZMT0FUOiAncjMyZmxvYXQnLFxuICBSR0JBOF9VTk9STTogJ3JnYmE4dW5vcm0nXG59IGFzIGNvbnN0O1xuXG4vLyAtLS0gRGVwdGgtc3RlbmNpbCBhdHRhY2htZW50IGZvcm1hdHMgLS0tXG5leHBvcnQgY29uc3QgREVQVEhfU1RFTkNJTF9GT1JNQVQgPSB7XG4gIERFUFRIMjRfUExVUzogJ2RlcHRoMjRwbHVzJ1xufSBhcyBjb25zdDtcblxuLy8gLS0tIFRleHR1cmUgdXNhZ2UgZmxhZ3MgKG1pcnJvcmluZyBsdW1hLmdsIFRleHR1cmUgc3RhdGljIGZpZWxkcykgLS0tXG5leHBvcnQgY29uc3QgVEVYVFVSRV9VU0FHRSA9IHtcbiAgQ09QWV9TUkM6IDB4MDEsXG4gIENPUFlfRFNUOiAweDAyLFxuICBTQU1QTEU6IDB4MDQsXG4gIFJFTkRFUl9BVFRBQ0hNRU5UOiAweDEwXG59IGFzIGNvbnN0O1xuXG4vLyAtLS0gUHJpbWl0aXZlIHRvcG9sb2dpZXMgLS0tXG5leHBvcnQgY29uc3QgVE9QT0xPR1kgPSB7XG4gIFRSSUFOR0xFX0xJU1Q6ICd0cmlhbmdsZS1saXN0JyxcbiAgVFJJQU5HTEVfU1RSSVA6ICd0cmlhbmdsZS1zdHJpcCcsXG4gIExJTkVfTElTVDogJ2xpbmUtbGlzdCcsXG4gIExJTkVfU1RSSVA6ICdsaW5lLXN0cmlwJyxcbiAgUE9JTlRfTElTVDogJ3BvaW50LWxpc3QnXG59IGFzIGNvbnN0O1xuXG4vLyAtLS0gUHJlY29tcG9zZWQgcGFyYW1ldGVyIHNldHMgLS0tXG5cbi8qKlxuICogU3RhbmRhcmQgYWxwaGEgYmxlbmRpbmc6IHNyY0FscGhhIC8gb25lTWludXNTcmNBbHBoYSBmb3IgYm90aCBjb2xvciBhbmQgYWxwaGEuXG4gKiBJbmNsdWRlIGBibGVuZDogdHJ1ZWAgc2luY2UgcGVyLWxheWVyIHBhcmFtZXRlcnMgb3ZlcnJpZGUgZ2xvYmFsIG9uZXMgaW4gZGVjay5nbCA5LlxuICovXG5leHBvcnQgY29uc3QgQkxFTkRfUEFSQU1TX0FMUEhBID0ge1xuICBibGVuZDogdHJ1ZSxcbiAgYmxlbmRDb2xvclNyY0ZhY3RvcjogQkxFTkRfRkFDVE9SLlNSQ19BTFBIQSxcbiAgYmxlbmRDb2xvckRzdEZhY3RvcjogQkxFTkRfRkFDVE9SLk9ORV9NSU5VU19TUkNfQUxQSEEsXG4gIGJsZW5kQWxwaGFTcmNGYWN0b3I6IEJMRU5EX0ZBQ1RPUi5PTkUsXG4gIGJsZW5kQWxwaGFEc3RGYWN0b3I6IEJMRU5EX0ZBQ1RPUi5PTkVfTUlOVVNfU1JDX0FMUEhBLFxuICBibGVuZENvbG9yT3BlcmF0aW9uOiBCTEVORF9PUEVSQVRJT04uQURELFxuICBibGVuZEFscGhhT3BlcmF0aW9uOiBCTEVORF9PUEVSQVRJT04uQUREXG59IGFzIGNvbnN0O1xuXG4vLyAtLS0gTWFwcGluZyB0YWJsZXMgKEdMIGVudW0gbmFtZSDihpIgV2ViR1BVIHN0cmluZykgdXNlZCBieSBnbC11dGlscyAtLS1cblxuZXhwb3J0IGNvbnN0IEdMX0JMRU5EX0ZVTkNfVE9fV0VCR1BVOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICBTUkNfQUxQSEE6IEJMRU5EX0ZBQ1RPUi5TUkNfQUxQSEEsXG4gIE9ORV9NSU5VU19TUkNfQUxQSEE6IEJMRU5EX0ZBQ1RPUi5PTkVfTUlOVVNfU1JDX0FMUEhBLFxuICBEU1RfQUxQSEE6IEJMRU5EX0ZBQ1RPUi5EU1RfQUxQSEEsXG4gIE9ORTogQkxFTkRfRkFDVE9SLk9ORSxcbiAgT05FX01JTlVTX0RTVF9DT0xPUjogQkxFTkRfRkFDVE9SLk9ORV9NSU5VU19EU1QsXG4gIERTVF9DT0xPUjogQkxFTkRfRkFDVE9SLkRTVCxcbiAgWkVSTzogQkxFTkRfRkFDVE9SLlpFUk8sXG4gIFNSQ19DT0xPUjogQkxFTkRfRkFDVE9SLlNSQ1xufTtcblxuZXhwb3J0IGNvbnN0IEdMX0JMRU5EX0VRX1RPX1dFQkdQVTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgRlVOQ19BREQ6IEJMRU5EX09QRVJBVElPTi5BREQsXG4gIEZVTkNfU1VCVFJBQ1Q6IEJMRU5EX09QRVJBVElPTi5TVUJUUkFDVCxcbiAgRlVOQ19SRVZFUlNFX1NVQlRSQUNUOiBCTEVORF9PUEVSQVRJT04uUkVWRVJTRV9TVUJUUkFDVFxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNPLElBQU1BLFlBQVksR0FBQUMsT0FBQSxDQUFBRCxZQUFBLEdBQUc7RUFDMUJFLElBQUksRUFBRSxNQUFNO0VBQ1pDLEdBQUcsRUFBRSxLQUFLO0VBQ1ZDLEdBQUcsRUFBRSxLQUFLO0VBQ1ZDLGFBQWEsRUFBRSxlQUFlO0VBQzlCQyxT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