@deck.gl/aggregation-layers 9.0.0-alpha.6 → 9.0.0-alpha.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dist.dev.js +2859 -2634
- package/dist/es5/heatmap-layer/heatmap-layer.js +7 -8
- package/dist/es5/heatmap-layer/heatmap-layer.js.map +1 -1
- package/dist/es5/heatmap-layer/max-fs.glsl.js +1 -1
- package/dist/es5/heatmap-layer/max-vs.glsl.js +1 -1
- package/dist/es5/heatmap-layer/triangle-layer-fragment.glsl.js +1 -1
- package/dist/es5/heatmap-layer/triangle-layer-vertex.glsl.js +1 -1
- package/dist/es5/heatmap-layer/weights-fs.glsl.js +1 -1
- package/dist/es5/heatmap-layer/weights-vs.glsl.js +1 -1
- package/dist/es5/screen-grid-layer/screen-grid-cell-layer.js +4 -4
- package/dist/es5/screen-grid-layer/screen-grid-cell-layer.js.map +1 -1
- package/dist/es5/screen-grid-layer/screen-grid-layer-fragment.glsl.js +1 -1
- package/dist/es5/screen-grid-layer/screen-grid-layer-vertex.glsl.js +1 -1
- package/dist/es5/screen-grid-layer/screen-grid-layer.js +1 -3
- package/dist/es5/screen-grid-layer/screen-grid-layer.js.map +1 -1
- package/dist/es5/utils/gpu-grid-aggregation/aggregate-to-grid-fs.glsl.js +1 -1
- package/dist/es5/utils/gpu-grid-aggregation/aggregate-to-grid-vs.glsl.js +1 -1
- package/dist/es5/utils/gpu-grid-aggregation/gpu-grid-aggregator.js +1 -1
- package/dist/es5/utils/gpu-grid-aggregation/gpu-grid-aggregator.js.map +1 -1
- package/dist/es5/utils/gpu-grid-aggregation/transform-mean-vs.glsl.js +1 -1
- package/dist/esm/heatmap-layer/heatmap-layer.js +8 -11
- package/dist/esm/heatmap-layer/heatmap-layer.js.map +1 -1
- package/dist/esm/heatmap-layer/max-fs.glsl.js +5 -3
- package/dist/esm/heatmap-layer/max-fs.glsl.js.map +1 -1
- package/dist/esm/heatmap-layer/max-vs.glsl.js +3 -2
- package/dist/esm/heatmap-layer/max-vs.glsl.js.map +1 -1
- package/dist/esm/heatmap-layer/triangle-layer-fragment.glsl.js +9 -6
- package/dist/esm/heatmap-layer/triangle-layer-fragment.glsl.js.map +1 -1
- package/dist/esm/heatmap-layer/triangle-layer-vertex.glsl.js +7 -6
- package/dist/esm/heatmap-layer/triangle-layer-vertex.glsl.js.map +1 -1
- package/dist/esm/heatmap-layer/weights-fs.glsl.js +5 -3
- package/dist/esm/heatmap-layer/weights-fs.glsl.js.map +1 -1
- package/dist/esm/heatmap-layer/weights-vs.glsl.js +5 -4
- package/dist/esm/heatmap-layer/weights-vs.glsl.js.map +1 -1
- package/dist/esm/screen-grid-layer/screen-grid-cell-layer.js +4 -4
- package/dist/esm/screen-grid-layer/screen-grid-cell-layer.js.map +1 -1
- package/dist/esm/screen-grid-layer/screen-grid-layer-fragment.glsl.js +7 -4
- package/dist/esm/screen-grid-layer/screen-grid-layer-fragment.glsl.js.map +1 -1
- package/dist/esm/screen-grid-layer/screen-grid-layer-vertex.glsl.js +8 -7
- package/dist/esm/screen-grid-layer/screen-grid-layer-vertex.glsl.js.map +1 -1
- package/dist/esm/screen-grid-layer/screen-grid-layer.js +1 -3
- package/dist/esm/screen-grid-layer/screen-grid-layer.js.map +1 -1
- package/dist/esm/utils/gpu-grid-aggregation/aggregate-to-grid-fs.glsl.js +6 -3
- package/dist/esm/utils/gpu-grid-aggregation/aggregate-to-grid-fs.glsl.js.map +1 -1
- package/dist/esm/utils/gpu-grid-aggregation/aggregate-to-grid-vs.glsl.js +5 -4
- package/dist/esm/utils/gpu-grid-aggregation/aggregate-to-grid-vs.glsl.js.map +1 -1
- package/dist/esm/utils/gpu-grid-aggregation/gpu-grid-aggregator.js +2 -2
- package/dist/esm/utils/gpu-grid-aggregation/gpu-grid-aggregator.js.map +1 -1
- package/dist/esm/utils/gpu-grid-aggregation/transform-mean-vs.glsl.js +3 -2
- package/dist/esm/utils/gpu-grid-aggregation/transform-mean-vs.glsl.js.map +1 -1
- package/dist.min.js +152 -122
- package/package.json +7 -7
- package/src/heatmap-layer/heatmap-layer.ts +17 -17
- package/src/heatmap-layer/max-fs.glsl.ts +5 -3
- package/src/heatmap-layer/max-vs.glsl.ts +3 -2
- package/src/heatmap-layer/triangle-layer-fragment.glsl.ts +9 -6
- package/src/heatmap-layer/triangle-layer-vertex.glsl.ts +7 -6
- package/src/heatmap-layer/weights-fs.glsl.ts +5 -3
- package/src/heatmap-layer/weights-vs.glsl.ts +5 -4
- package/src/screen-grid-layer/screen-grid-cell-layer.ts +16 -8
- package/src/screen-grid-layer/screen-grid-layer-fragment.glsl.ts +7 -4
- package/src/screen-grid-layer/screen-grid-layer-vertex.glsl.ts +8 -7
- package/src/screen-grid-layer/screen-grid-layer.ts +1 -1
- package/src/utils/gpu-grid-aggregation/aggregate-to-grid-fs.glsl.ts +6 -3
- package/src/utils/gpu-grid-aggregation/aggregate-to-grid-vs.glsl.ts +5 -4
- package/src/utils/gpu-grid-aggregation/gpu-grid-aggregator.ts +2 -2
- package/src/utils/gpu-grid-aggregation/transform-mean-vs.glsl.ts +3 -2
- package/typed/aggregation-layer.d.ts +1 -1
- package/typed/aggregation-layer.d.ts.map +1 -1
- package/typed/contour-layer/contour-layer.d.ts +2 -2
- package/typed/contour-layer/contour-layer.d.ts.map +1 -1
- package/typed/cpu-grid-layer/cpu-grid-layer.d.ts +2 -2
- package/typed/cpu-grid-layer/cpu-grid-layer.d.ts.map +1 -1
- package/typed/cpu-grid-layer/grid-aggregator.d.ts +1 -1
- package/typed/cpu-grid-layer/grid-aggregator.d.ts.map +1 -1
- package/typed/gpu-grid-layer/gpu-grid-cell-layer.d.ts +1 -1
- package/typed/gpu-grid-layer/gpu-grid-cell-layer.d.ts.map +1 -1
- package/typed/gpu-grid-layer/gpu-grid-layer.d.ts +2 -2
- package/typed/gpu-grid-layer/gpu-grid-layer.d.ts.map +1 -1
- package/typed/grid-aggregation-layer.d.ts +1 -1
- package/typed/grid-aggregation-layer.d.ts.map +1 -1
- package/typed/grid-layer/grid-layer.d.ts +2 -2
- package/typed/grid-layer/grid-layer.d.ts.map +1 -1
- package/typed/heatmap-layer/heatmap-layer.d.ts +8 -9
- package/typed/heatmap-layer/heatmap-layer.d.ts.map +1 -1
- package/typed/heatmap-layer/max-fs.glsl.d.ts +1 -1
- package/typed/heatmap-layer/max-fs.glsl.d.ts.map +1 -1
- package/typed/heatmap-layer/max-vs.glsl.d.ts +1 -1
- package/typed/heatmap-layer/max-vs.glsl.d.ts.map +1 -1
- package/typed/heatmap-layer/triangle-layer-fragment.glsl.d.ts +1 -1
- package/typed/heatmap-layer/triangle-layer-fragment.glsl.d.ts.map +1 -1
- package/typed/heatmap-layer/triangle-layer-vertex.glsl.d.ts +1 -1
- package/typed/heatmap-layer/triangle-layer-vertex.glsl.d.ts.map +1 -1
- package/typed/heatmap-layer/triangle-layer.d.ts +2 -2
- package/typed/heatmap-layer/triangle-layer.d.ts.map +1 -1
- package/typed/heatmap-layer/weights-fs.glsl.d.ts +1 -1
- package/typed/heatmap-layer/weights-fs.glsl.d.ts.map +1 -1
- package/typed/heatmap-layer/weights-vs.glsl.d.ts +1 -1
- package/typed/heatmap-layer/weights-vs.glsl.d.ts.map +1 -1
- package/typed/hexagon-layer/hexagon-layer.d.ts +2 -2
- package/typed/hexagon-layer/hexagon-layer.d.ts.map +1 -1
- package/typed/screen-grid-layer/screen-grid-cell-layer.d.ts +4 -8
- package/typed/screen-grid-layer/screen-grid-cell-layer.d.ts.map +1 -1
- package/typed/screen-grid-layer/screen-grid-layer-fragment.glsl.d.ts +1 -1
- package/typed/screen-grid-layer/screen-grid-layer-fragment.glsl.d.ts.map +1 -1
- package/typed/screen-grid-layer/screen-grid-layer-vertex.glsl.d.ts +1 -1
- package/typed/screen-grid-layer/screen-grid-layer-vertex.glsl.d.ts.map +1 -1
- package/typed/screen-grid-layer/screen-grid-layer.d.ts +2 -2
- package/typed/screen-grid-layer/screen-grid-layer.d.ts.map +1 -1
- package/typed/types.d.ts +1 -1
- package/typed/types.d.ts.map +1 -1
- package/typed/utils/aggregation-operation-utils.d.ts +1 -1
- package/typed/utils/aggregation-operation-utils.d.ts.map +1 -1
- package/typed/utils/bin-sorter.d.ts +1 -1
- package/typed/utils/bin-sorter.d.ts.map +1 -1
- package/typed/utils/gpu-grid-aggregation/aggregate-to-grid-fs.glsl.d.ts +1 -1
- package/typed/utils/gpu-grid-aggregation/aggregate-to-grid-fs.glsl.d.ts.map +1 -1
- package/typed/utils/gpu-grid-aggregation/aggregate-to-grid-vs.glsl.d.ts +1 -1
- package/typed/utils/gpu-grid-aggregation/aggregate-to-grid-vs.glsl.d.ts.map +1 -1
- package/typed/utils/gpu-grid-aggregation/gpu-grid-aggregator.d.ts +1 -1
- package/typed/utils/gpu-grid-aggregation/gpu-grid-aggregator.d.ts.map +1 -1
- package/typed/utils/gpu-grid-aggregation/transform-mean-vs.glsl.d.ts +1 -1
- package/typed/utils/gpu-grid-aggregation/transform-mean-vs.glsl.d.ts.map +1 -1
- package/typed/utils/resource-utils.d.ts +1 -1
- package/typed/utils/resource-utils.d.ts.map +1 -1
|
@@ -724,7 +724,7 @@ function getAllAggregationModel(device, instanceCount) {
|
|
|
724
724
|
}
|
|
725
725
|
|
|
726
726
|
function getMeanTransform(device, opts) {
|
|
727
|
-
return new _engine.
|
|
727
|
+
return new _engine.TextureTransform(device, _objectSpread({
|
|
728
728
|
vs: _transformMeanVs.default,
|
|
729
729
|
_targetTextureVarying: 'meanValues'
|
|
730
730
|
}, opts));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/utils/gpu-grid-aggregation/gpu-grid-aggregator.ts"],"names":["BUFFER_NAMES","ARRAY_BUFFER_MAP","maxData","minData","maxMinData","REQUIRED_FEATURES","GPUGridAggregator","getAggregationData","aggregationData","pixelIndex","index","PIXEL_SIZE","results","cellCount","cellWeight","maxCellWieght","minCellWeight","totalCount","getCellData","countsData","size","numCells","length","cellWeights","Float32Array","cellCounts","Uint32Array","i","sizeIndex","isSupported","device","every","feature","features","has","props","state","weightAttributes","textures","meanTextures","buffers","framebuffers","maxMinFramebuffers","minFramebuffers","maxFramebuffers","equations","shaderOptions","modelDirty","resources","id","_hasGPUSupport","gridAggregationModel","allAggregationModel","meanTransform","info","type","_setupModels","delete","destroy","deleteResources","run","opts","setState","aggregationParams","_normalizeAggregationParams","log","_runAggregation","getData","weightId","data","aggregationBuffer","arrayName","bufferName","updateShaders","DEFAULT_RUN_PARAMS","weights","normalizeWeightParams","updateObject","Object","assign","_getAggregateData","needMin","needMax","combineMaxMin","aggregationTexture","target","sourceType","maxMinBuffer","maxMinTexture","minBuffer","minTexture","maxBuffer","maxTexture","_trackGPUResultBuffers","_renderAggregateData","cellSize","projectPoints","attributes","moduleSettings","numCol","numRow","translation","scaling","gridSize","parameters","blend","depthTest","blendFunc","uniforms","_renderToWeightsTexture","_renderToMaxMinTexture","blendEquation","MAX_MIN_BLEND_EQUATION","minOrMaxFb","clearParams","clearColor","MAX_32_BIT_FLOAT","MIN_BLEND_EQUATION","MAX_BLEND_EQUATION","framebuffer","viewport","color","setUniforms","setBindings","uSampler","texture","draw","operation","AGGREGATION_OPERATION","MIN","MEAN","transformOptions","_sourceTextures","aggregationValues","_targetTexture","elementCount","width","height","update","getMeanTransform","attach","_updateModels","_setupFramebuffers","framebufferSize","resize","EQUATION_MAP","SUM","_getMinMaxTexture","name","getAggregationModel","instanceCount","getAllAggregationModel","_setupWeightAttributes","vertexCount","setVertexCount","setAttributes","setInstanceCount","result","DEFAULT_WEIGHT_PARAMS","Array","isArray","forEach","obj","shaders","vs","AGGREGATE_TO_GRID_VS","fs","AGGREGATE_TO_GRID_FS","modules","fp64arithmetic","project32","Model","drawMode","shaderAssembler","AGGREGATE_ALL_VS","AGGREGATE_ALL_FS","topology","isInstanced","position","Transform","TRANSFORM_MEAN_VS","_targetTextureVarying"],"mappings":"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","sourcesContent":["// Copyright (c) 2015 - 2018 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport type {Device, DeviceFeature} from '@luma.gl/core';\nimport {Model, Transform} from '@luma.gl/engine';\nimport {fp64arithmetic} from '@luma.gl/shadertools';\nimport {readPixelsToBuffer, withGLParameters, clear} from '@luma.gl/webgl';\nimport {GL} from '@luma.gl/constants';\nimport {log, project32, _mergeShaders as mergeShaders, getShaderAssembler} from '@deck.gl/core';\n\nimport {\n DEFAULT_RUN_PARAMS,\n MAX_32_BIT_FLOAT,\n MIN_BLEND_EQUATION,\n MAX_BLEND_EQUATION,\n MAX_MIN_BLEND_EQUATION,\n EQUATION_MAP,\n DEFAULT_WEIGHT_PARAMS,\n PIXEL_SIZE\n} from './gpu-grid-aggregator-constants';\nimport {AGGREGATION_OPERATION} from '../aggregation-operation-utils';\n\nimport AGGREGATE_TO_GRID_VS from './aggregate-to-grid-vs.glsl';\nimport AGGREGATE_TO_GRID_FS from './aggregate-to-grid-fs.glsl';\nimport AGGREGATE_ALL_VS from './aggregate-all-vs.glsl';\nimport AGGREGATE_ALL_FS from './aggregate-all-fs.glsl';\nimport TRANSFORM_MEAN_VS from './transform-mean-vs.glsl';\nimport {getFloatTexture, getFramebuffer} from './../resource-utils';\n\nconst BUFFER_NAMES = ['aggregationBuffer', 'maxMinBuffer', 'minBuffer', 'maxBuffer'];\nconst ARRAY_BUFFER_MAP = {\n maxData: 'maxBuffer',\n minData: 'minBuffer',\n maxMinData: 'maxMinBuffer'\n};\n\nconst REQUIRED_FEATURES: DeviceFeature[] = [\n 'webgl2',\n 'blend-minmax-webgl1',\n 'texture-renderable-float32-webgl',\n 'texture-blend-float-webgl1',\n 'texture-formats-float32-webgl1'\n];\n\nexport type GPUGridAggregatorProps = {\n id?: string;\n};\n\nexport default class GPUGridAggregator {\n // Decode and return aggregation data of given pixel.\n static getAggregationData({\n aggregationData,\n maxData,\n minData,\n maxMinData,\n pixelIndex\n }: {\n aggregationData?: Float32Array;\n maxData?: Float32Array;\n minData?: Float32Array;\n maxMinData?: Float32Array;\n pixelIndex: number;\n }) {\n const index = pixelIndex * PIXEL_SIZE;\n const results: {cellCount?; cellWeight?; maxCellWieght?; minCellWeight?; totalCount?} = {};\n if (aggregationData) {\n results.cellCount = aggregationData[index + 3];\n results.cellWeight = aggregationData[index];\n }\n if (maxMinData) {\n results.maxCellWieght = maxMinData[0];\n results.minCellWeight = maxMinData[3];\n } else {\n if (maxData) {\n results.maxCellWieght = maxData[0];\n results.totalCount = maxData[3];\n }\n if (minData) {\n results.minCellWeight = minData[0];\n results.totalCount = minData[3];\n }\n }\n return results;\n }\n\n // Decodes and retuns counts and weights of all cells\n static getCellData({countsData, size = 1}) {\n const numCells = countsData.length / 4;\n const cellWeights = new Float32Array(numCells * size);\n const cellCounts = new Uint32Array(numCells);\n for (let i = 0; i < numCells; i++) {\n // weights in RGB channels\n for (let sizeIndex = 0; sizeIndex < size; sizeIndex++) {\n cellWeights[i * size + sizeIndex] = countsData[i * 4 + sizeIndex];\n }\n // count in Alpha channel\n cellCounts[i] = countsData[i * 4 + 3];\n }\n return {cellCounts, cellWeights};\n }\n\n static isSupported(device: Device) {\n return REQUIRED_FEATURES.every(feature => device.features.has(feature));\n }\n\n // DEBUG ONLY\n // static logData({aggregationBuffer, minBuffer, maxBuffer, maxMinBuffer, limit = 10}) {\n // if (aggregationBuffer) {\n // console.log('Aggregation Data:');\n // const agrData = aggregationBuffer.getData();\n // for (let index = 0; index < agrData.length && limit > 0; index += 4) {\n // if (agrData[index + 3] > 0) {\n // console.log(\n // `index: ${index} weights: ${agrData[index]} ${agrData[index + 1]} ${\n // agrData[index + 2]\n // } count: ${agrData[index + 3]}`\n // );\n // limit--;\n // }\n // }\n // }\n // const obj = {minBuffer, maxBuffer, maxMinBuffer};\n // for (const key in obj) {\n // if (obj[key]) {\n // const data = obj[key].getData();\n // console.log(`${key} data : R: ${data[0]} G: ${data[1]} B: ${data[2]} A: ${data[3]}`);\n // }\n // }\n // }\n\n state = {\n // per weight GPU resources\n weightAttributes: {},\n textures: {},\n meanTextures: {},\n buffers: {},\n framebuffers: {},\n maxMinFramebuffers: {},\n minFramebuffers: {},\n maxFramebuffers: {},\n equations: {},\n\n shaderOptions: {},\n modelDirty: false,\n\n // common resources to be deleted\n resources: {},\n\n // results\n results: {}\n };\n\n id: string;\n device: Device;\n _hasGPUSupport: boolean;\n\n gridAggregationModel;\n allAggregationModel;\n meanTransform;\n\n constructor(device: Device, props: GPUGridAggregatorProps = {}) {\n this.id = props.id || 'gpu-grid-aggregator';\n this.device = device;\n\n const REQUIRED_FEATURES: DeviceFeature[] = [\n 'blend-minmax-webgl1', // set min/max blend modes\n 'texture-renderable-float32-webgl', // render to float texture\n 'texture-formats-float32-webgl1' // sample from a float texture\n ];\n\n // gl_InstanceID usage in min/max calculation shaders\n this._hasGPUSupport =\n this.device.info.type === 'webgl2' &&\n REQUIRED_FEATURES.every(feature => device.features.has(feature));\n if (this._hasGPUSupport) {\n this._setupModels();\n }\n }\n\n // Delete owned resources.\n delete() {\n const {gridAggregationModel, allAggregationModel, meanTransform} = this;\n const {\n textures,\n framebuffers,\n maxMinFramebuffers,\n minFramebuffers,\n maxFramebuffers,\n meanTextures,\n resources\n } = this.state;\n\n gridAggregationModel?.destroy();\n allAggregationModel?.destroy();\n meanTransform?.destroy();\n\n deleteResources([\n framebuffers,\n textures,\n maxMinFramebuffers,\n minFramebuffers,\n maxFramebuffers,\n meanTextures,\n resources\n ]);\n }\n\n // Perform aggregation and retun the results\n run(opts = {}) {\n // reset results\n this.setState({results: {}});\n const aggregationParams = this._normalizeAggregationParams(opts);\n if (!this._hasGPUSupport) {\n log.log(1, 'GPUGridAggregator: not supported')();\n }\n return this._runAggregation(aggregationParams);\n }\n\n // Reads aggregation data into JS Array object\n // For WebGL1, data is available in JS Array objects already.\n // For WebGL2, data is read from Buffer objects and cached for subsequent queries.\n getData(weightId) {\n const data: {\n aggregationData?: Float32Array;\n maxData?: Float32Array;\n minData?: Float32Array;\n maxMinData?: Float32Array;\n } = {};\n const results = this.state.results;\n if (!results[weightId].aggregationData) {\n // cache the results if reading from the buffer (WebGL2 path)\n results[weightId].aggregationData = results[weightId].aggregationBuffer.getData();\n }\n data.aggregationData = results[weightId].aggregationData;\n\n // Check for optional results\n for (const arrayName in ARRAY_BUFFER_MAP) {\n const bufferName = ARRAY_BUFFER_MAP[arrayName];\n\n if (results[weightId][arrayName] || results[weightId][bufferName]) {\n // cache the result\n results[weightId][arrayName] =\n results[weightId][arrayName] || results[weightId][bufferName].getData();\n data[arrayName] = results[weightId][arrayName];\n }\n }\n return data;\n }\n\n updateShaders(shaderOptions = {}) {\n this.setState({shaderOptions, modelDirty: true});\n }\n\n // PRIVATE\n\n _normalizeAggregationParams(opts) {\n const aggregationParams = {...DEFAULT_RUN_PARAMS, ...opts};\n const {weights} = aggregationParams;\n if (weights) {\n aggregationParams.weights = normalizeWeightParams(weights);\n }\n return aggregationParams;\n }\n\n // Update priveate state\n setState(updateObject) {\n Object.assign(this.state, updateObject);\n }\n\n // GPU Aggregation methods\n\n _getAggregateData(opts) {\n const results = {};\n const {\n textures,\n framebuffers,\n maxMinFramebuffers,\n minFramebuffers,\n maxFramebuffers,\n resources\n } = this.state;\n const {weights} = opts;\n\n for (const id in weights) {\n results[id] = {};\n const {needMin, needMax, combineMaxMin} = weights[id];\n results[id].aggregationTexture = textures[id];\n results[id].aggregationBuffer = readPixelsToBuffer(framebuffers[id], {\n target: weights[id].aggregationBuffer, // update if a buffer is provided\n sourceType: GL.FLOAT\n });\n if (needMin && needMax && combineMaxMin) {\n results[id].maxMinBuffer = readPixelsToBuffer(maxMinFramebuffers[id], {\n target: weights[id].maxMinBuffer, // update if a buffer is provided\n sourceType: GL.FLOAT\n });\n results[id].maxMinTexture = resources[`${id}-maxMinTexture`];\n } else {\n if (needMin) {\n results[id].minBuffer = readPixelsToBuffer(minFramebuffers[id], {\n target: weights[id].minBuffer, // update if a buffer is provided\n sourceType: GL.FLOAT\n });\n results[id].minTexture = resources[`${id}-minTexture`];\n }\n if (needMax) {\n results[id].maxBuffer = readPixelsToBuffer(maxFramebuffers[id], {\n target: weights[id].maxBuffer, // update if a buffer is provided\n sourceType: GL.FLOAT\n });\n results[id].maxTexture = resources[`${id}-maxTexture`];\n }\n }\n }\n this._trackGPUResultBuffers(results, weights);\n return results;\n }\n\n _renderAggregateData(opts) {\n const {\n cellSize,\n projectPoints,\n attributes,\n moduleSettings,\n numCol,\n numRow,\n weights,\n translation,\n scaling\n } = opts;\n const {maxMinFramebuffers, minFramebuffers, maxFramebuffers} = this.state;\n\n const gridSize = [numCol, numRow];\n const parameters = {\n blend: true,\n depthTest: false,\n blendFunc: [GL.ONE, GL.ONE]\n };\n const uniforms = {\n cellSize,\n gridSize,\n projectPoints,\n translation,\n scaling\n };\n\n for (const id in weights) {\n const {needMin, needMax} = weights[id];\n const combineMaxMin = needMin && needMax && weights[id].combineMaxMin;\n this._renderToWeightsTexture({\n id,\n parameters,\n moduleSettings,\n uniforms,\n gridSize,\n attributes,\n weights\n });\n if (combineMaxMin) {\n this._renderToMaxMinTexture({\n id,\n parameters: {...parameters, blendEquation: MAX_MIN_BLEND_EQUATION},\n gridSize,\n minOrMaxFb: maxMinFramebuffers[id],\n clearParams: {clearColor: [0, 0, 0, MAX_32_BIT_FLOAT]},\n combineMaxMin\n });\n } else {\n if (needMin) {\n this._renderToMaxMinTexture({\n id,\n parameters: {...parameters, blendEquation: MIN_BLEND_EQUATION},\n gridSize,\n minOrMaxFb: minFramebuffers[id],\n clearParams: {clearColor: [MAX_32_BIT_FLOAT, MAX_32_BIT_FLOAT, MAX_32_BIT_FLOAT, 0]},\n combineMaxMin\n });\n }\n if (needMax) {\n this._renderToMaxMinTexture({\n id,\n parameters: {...parameters, blendEquation: MAX_BLEND_EQUATION},\n gridSize,\n minOrMaxFb: maxFramebuffers[id],\n clearParams: {clearColor: [0, 0, 0, 0]},\n combineMaxMin\n });\n }\n }\n }\n }\n\n // render all aggregated grid-cells to generate Min, Max or MaxMin data texture\n _renderToMaxMinTexture(opts) {\n const {id, parameters, gridSize, minOrMaxFb, combineMaxMin, clearParams = {}} = opts;\n const {framebuffers} = this.state;\n const {allAggregationModel} = this;\n\n withGLParameters(\n this.device,\n {\n ...clearParams,\n framebuffer: minOrMaxFb,\n viewport: [0, 0, gridSize[0], gridSize[1]]\n },\n () => {\n clear(this.device, {color: true});\n\n // allAggregationModel.setParameters(parameters);\n allAggregationModel.setUniforms({gridSize, combineMaxMin});\n allAggregationModel.setBindings({uSampler: framebuffers[id].texture});\n allAggregationModel.draw();\n // TODO - we need to create a render pass for the aggregation\n // allAggregationModel.draw(renderPass);\n }\n );\n }\n\n // render all data points to aggregate weights\n _renderToWeightsTexture(opts) {\n const {id, parameters, moduleSettings, uniforms, gridSize, weights} = opts;\n const {framebuffers, equations, weightAttributes} = this.state;\n const {gridAggregationModel} = this;\n const {operation} = weights[id];\n\n const clearColor =\n operation === AGGREGATION_OPERATION.MIN\n ? [MAX_32_BIT_FLOAT, MAX_32_BIT_FLOAT, MAX_32_BIT_FLOAT, 0]\n : [0, 0, 0, 0];\n withGLParameters(\n this.device,\n {\n framebuffer: framebuffers[id],\n viewport: [0, 0, gridSize[0], gridSize[1]],\n clearColor\n },\n () => {\n clear(this.device, {color: true});\n\n const attributes = {weights: weightAttributes[id]};\n gridAggregationModel.draw({\n parameters: {...parameters, blendEquation: equations[id]},\n moduleSettings,\n uniforms,\n attributes\n });\n }\n );\n\n if (operation === AGGREGATION_OPERATION.MEAN) {\n const {meanTextures, textures} = this.state;\n const transformOptions = {\n _sourceTextures: {aggregationValues: meanTextures[id]}, // contains aggregated data\n _targetTexture: textures[id], // store mean values,\n elementCount: textures[id].width * textures[id].height\n };\n if (this.meanTransform) {\n this.meanTransform.update(transformOptions);\n } else {\n this.meanTransform = getMeanTransform(this.device, transformOptions);\n }\n this.meanTransform.run({\n parameters: {\n blend: false,\n depthTest: false\n }\n });\n\n // update framebuffer with mean results so readPixelsToBuffer returns mean values\n framebuffers[id].attach({[GL.COLOR_ATTACHMENT0]: textures[id]});\n }\n }\n\n _runAggregation(opts) {\n this._updateModels(opts);\n this._setupFramebuffers(opts);\n this._renderAggregateData(opts);\n const results = this._getAggregateData(opts);\n this.setState({results});\n return results;\n }\n\n // set up framebuffer for each weight\n /* eslint-disable complexity, max-depth, max-statements*/\n _setupFramebuffers(opts) {\n const {\n textures,\n framebuffers,\n maxMinFramebuffers,\n minFramebuffers,\n maxFramebuffers,\n meanTextures,\n equations\n } = this.state;\n const {weights} = opts;\n const {numCol, numRow} = opts;\n const framebufferSize = {width: numCol, height: numRow};\n for (const id in weights) {\n const {needMin, needMax, combineMaxMin, operation} = weights[id];\n textures[id] =\n weights[id].aggregationTexture ||\n textures[id] ||\n getFloatTexture(this.device, {id: `${id}-texture`, width: numCol, height: numRow});\n textures[id].resize(framebufferSize);\n let texture = textures[id];\n if (operation === AGGREGATION_OPERATION.MEAN) {\n // For MEAN, we first aggregatet into a temp texture\n meanTextures[id] =\n meanTextures[id] ||\n getFloatTexture(this.device, {id: `${id}-mean-texture`, width: numCol, height: numRow});\n meanTextures[id].resize(framebufferSize);\n texture = meanTextures[id];\n }\n if (framebuffers[id]) {\n framebuffers[id].attach({[GL.COLOR_ATTACHMENT0]: texture});\n } else {\n framebuffers[id] = getFramebuffer(this.device, {\n id: `${id}-fb`,\n width: numCol,\n height: numRow,\n texture\n });\n }\n framebuffers[id].resize(framebufferSize);\n equations[id] = EQUATION_MAP[operation] || EQUATION_MAP[AGGREGATION_OPERATION.SUM];\n // For min/max framebuffers will use default size 1X1\n if (needMin || needMax) {\n if (needMin && needMax && combineMaxMin) {\n if (!maxMinFramebuffers[id]) {\n texture = weights[id].maxMinTexture || this._getMinMaxTexture(`${id}-maxMinTexture`);\n maxMinFramebuffers[id] = getFramebuffer(this.device, {id: `${id}-maxMinFb`, texture});\n }\n } else {\n if (needMin) {\n if (!minFramebuffers[id]) {\n texture = weights[id].minTexture || this._getMinMaxTexture(`${id}-minTexture`);\n minFramebuffers[id] = getFramebuffer(this.device, {\n id: `${id}-minFb`,\n texture\n });\n }\n }\n if (needMax) {\n if (!maxFramebuffers[id]) {\n texture = weights[id].maxTexture || this._getMinMaxTexture(`${id}-maxTexture`);\n maxFramebuffers[id] = getFramebuffer(this.device, {\n id: `${id}-maxFb`,\n texture\n });\n }\n }\n }\n }\n }\n }\n /* eslint-enable complexity, max-depth, max-statements */\n\n _getMinMaxTexture(name) {\n const {resources} = this.state;\n if (!resources[name]) {\n resources[name] = getFloatTexture(this.device, {id: 'resourceName'});\n }\n return resources[name];\n }\n\n _setupModels({numCol = 0, numRow = 0} = {}) {\n const {shaderOptions} = this.state;\n this.gridAggregationModel?.destroy();\n this.gridAggregationModel = getAggregationModel(this.device, shaderOptions);\n if (!this.allAggregationModel) {\n const instanceCount = numCol * numRow;\n this.allAggregationModel = getAllAggregationModel(this.device, instanceCount);\n }\n }\n\n // set up buffers for all weights\n _setupWeightAttributes(opts) {\n const {weightAttributes} = this.state;\n const {weights} = opts;\n for (const id in weights) {\n weightAttributes[id] = opts.attributes[id];\n }\n }\n\n /** GPU Aggregation results are provided in Buffers, if new Buffer objects are created track them for later deletion. */\n /* eslint-disable max-depth */\n _trackGPUResultBuffers(results, weights) {\n const {resources} = this.state;\n for (const id in results) {\n if (results[id]) {\n for (const bufferName of BUFFER_NAMES) {\n if (results[id][bufferName] && weights[id][bufferName] !== results[id][bufferName]) {\n // No result buffer is provided in weights object, `readPixelsToBuffer` has created a new Buffer object\n // collect the new buffer for garabge collection\n const name = `gpu-result-${id}-${bufferName}`;\n if (resources[name]) {\n resources[name].delete();\n }\n resources[name] = results[id][bufferName];\n }\n }\n }\n }\n }\n /* eslint-enable max-depth */\n\n _updateModels(opts) {\n const {vertexCount, attributes, numCol, numRow} = opts;\n const {modelDirty} = this.state;\n\n if (modelDirty) {\n this._setupModels(opts);\n this.setState({modelDirty: false});\n }\n\n // this maps color/elevation to weight name.\n this._setupWeightAttributes(opts);\n\n this.gridAggregationModel.setVertexCount(vertexCount);\n this.gridAggregationModel.setAttributes(attributes);\n\n this.allAggregationModel.setInstanceCount(numCol * numRow);\n }\n}\n\n// HELPER METHODS\n\nfunction normalizeWeightParams(weights) {\n const result = {};\n for (const id in weights) {\n result[id] = {...DEFAULT_WEIGHT_PARAMS, ...weights[id]};\n }\n return result;\n}\n\nfunction deleteResources(resources) {\n resources = Array.isArray(resources) ? resources : [resources];\n resources.forEach(obj => {\n for (const name in obj) {\n obj[name].delete();\n }\n });\n}\n\nfunction getAggregationModel(device: Device, shaderOptions) {\n const shaders = mergeShaders(\n {\n vs: AGGREGATE_TO_GRID_VS,\n fs: AGGREGATE_TO_GRID_FS,\n modules: [fp64arithmetic, project32]\n },\n shaderOptions\n );\n\n return new Model(device, {\n id: 'Grid-Aggregation-Model',\n vertexCount: 1,\n drawMode: GL.POINTS,\n shaderAssembler: getShaderAssembler(),\n ...shaders\n });\n}\n\nfunction getAllAggregationModel(device: Device, instanceCount: number): Model {\n return new Model(device, {\n id: 'All-Aggregation-Model',\n vs: AGGREGATE_ALL_VS,\n fs: AGGREGATE_ALL_FS,\n modules: [fp64arithmetic],\n vertexCount: 1,\n topology: 'point-list',\n isInstanced: true,\n instanceCount,\n attributes: {\n // @ts-expect-error\n position: [0, 0]\n }\n });\n}\n\nfunction getMeanTransform(device: Device, opts) {\n return new Transform(device, {\n vs: TRANSFORM_MEAN_VS,\n _targetTextureVarying: 'meanValues',\n ...opts\n });\n}\n"],"file":"gpu-grid-aggregator.js"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/utils/gpu-grid-aggregation/gpu-grid-aggregator.ts"],"names":["BUFFER_NAMES","ARRAY_BUFFER_MAP","maxData","minData","maxMinData","REQUIRED_FEATURES","GPUGridAggregator","getAggregationData","aggregationData","pixelIndex","index","PIXEL_SIZE","results","cellCount","cellWeight","maxCellWieght","minCellWeight","totalCount","getCellData","countsData","size","numCells","length","cellWeights","Float32Array","cellCounts","Uint32Array","i","sizeIndex","isSupported","device","every","feature","features","has","props","state","weightAttributes","textures","meanTextures","buffers","framebuffers","maxMinFramebuffers","minFramebuffers","maxFramebuffers","equations","shaderOptions","modelDirty","resources","id","_hasGPUSupport","gridAggregationModel","allAggregationModel","meanTransform","info","type","_setupModels","delete","destroy","deleteResources","run","opts","setState","aggregationParams","_normalizeAggregationParams","log","_runAggregation","getData","weightId","data","aggregationBuffer","arrayName","bufferName","updateShaders","DEFAULT_RUN_PARAMS","weights","normalizeWeightParams","updateObject","Object","assign","_getAggregateData","needMin","needMax","combineMaxMin","aggregationTexture","target","sourceType","maxMinBuffer","maxMinTexture","minBuffer","minTexture","maxBuffer","maxTexture","_trackGPUResultBuffers","_renderAggregateData","cellSize","projectPoints","attributes","moduleSettings","numCol","numRow","translation","scaling","gridSize","parameters","blend","depthTest","blendFunc","uniforms","_renderToWeightsTexture","_renderToMaxMinTexture","blendEquation","MAX_MIN_BLEND_EQUATION","minOrMaxFb","clearParams","clearColor","MAX_32_BIT_FLOAT","MIN_BLEND_EQUATION","MAX_BLEND_EQUATION","framebuffer","viewport","color","setUniforms","setBindings","uSampler","texture","draw","operation","AGGREGATION_OPERATION","MIN","MEAN","transformOptions","_sourceTextures","aggregationValues","_targetTexture","elementCount","width","height","update","getMeanTransform","attach","_updateModels","_setupFramebuffers","framebufferSize","resize","EQUATION_MAP","SUM","_getMinMaxTexture","name","getAggregationModel","instanceCount","getAllAggregationModel","_setupWeightAttributes","vertexCount","setVertexCount","setAttributes","setInstanceCount","result","DEFAULT_WEIGHT_PARAMS","Array","isArray","forEach","obj","shaders","vs","AGGREGATE_TO_GRID_VS","fs","AGGREGATE_TO_GRID_FS","modules","fp64arithmetic","project32","Model","drawMode","shaderAssembler","AGGREGATE_ALL_VS","AGGREGATE_ALL_FS","topology","isInstanced","position","TextureTransform","TRANSFORM_MEAN_VS","_targetTextureVarying"],"mappings":"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","sourcesContent":["// Copyright (c) 2015 - 2018 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport type {Device, DeviceFeature} from '@luma.gl/core';\nimport {Model, TextureTransform} from '@luma.gl/engine';\nimport {fp64arithmetic} from '@luma.gl/shadertools';\nimport {readPixelsToBuffer, withGLParameters, clear} from '@luma.gl/webgl';\nimport {GL} from '@luma.gl/constants';\nimport {log, project32, _mergeShaders as mergeShaders, getShaderAssembler} from '@deck.gl/core';\n\nimport {\n DEFAULT_RUN_PARAMS,\n MAX_32_BIT_FLOAT,\n MIN_BLEND_EQUATION,\n MAX_BLEND_EQUATION,\n MAX_MIN_BLEND_EQUATION,\n EQUATION_MAP,\n DEFAULT_WEIGHT_PARAMS,\n PIXEL_SIZE\n} from './gpu-grid-aggregator-constants';\nimport {AGGREGATION_OPERATION} from '../aggregation-operation-utils';\n\nimport AGGREGATE_TO_GRID_VS from './aggregate-to-grid-vs.glsl';\nimport AGGREGATE_TO_GRID_FS from './aggregate-to-grid-fs.glsl';\nimport AGGREGATE_ALL_VS from './aggregate-all-vs.glsl';\nimport AGGREGATE_ALL_FS from './aggregate-all-fs.glsl';\nimport TRANSFORM_MEAN_VS from './transform-mean-vs.glsl';\nimport {getFloatTexture, getFramebuffer} from './../resource-utils';\n\nconst BUFFER_NAMES = ['aggregationBuffer', 'maxMinBuffer', 'minBuffer', 'maxBuffer'];\nconst ARRAY_BUFFER_MAP = {\n maxData: 'maxBuffer',\n minData: 'minBuffer',\n maxMinData: 'maxMinBuffer'\n};\n\nconst REQUIRED_FEATURES: DeviceFeature[] = [\n 'webgl2',\n 'blend-minmax-webgl1',\n 'texture-renderable-float32-webgl',\n 'texture-blend-float-webgl1',\n 'texture-formats-float32-webgl1'\n];\n\nexport type GPUGridAggregatorProps = {\n id?: string;\n};\n\nexport default class GPUGridAggregator {\n // Decode and return aggregation data of given pixel.\n static getAggregationData({\n aggregationData,\n maxData,\n minData,\n maxMinData,\n pixelIndex\n }: {\n aggregationData?: Float32Array;\n maxData?: Float32Array;\n minData?: Float32Array;\n maxMinData?: Float32Array;\n pixelIndex: number;\n }) {\n const index = pixelIndex * PIXEL_SIZE;\n const results: {cellCount?; cellWeight?; maxCellWieght?; minCellWeight?; totalCount?} = {};\n if (aggregationData) {\n results.cellCount = aggregationData[index + 3];\n results.cellWeight = aggregationData[index];\n }\n if (maxMinData) {\n results.maxCellWieght = maxMinData[0];\n results.minCellWeight = maxMinData[3];\n } else {\n if (maxData) {\n results.maxCellWieght = maxData[0];\n results.totalCount = maxData[3];\n }\n if (minData) {\n results.minCellWeight = minData[0];\n results.totalCount = minData[3];\n }\n }\n return results;\n }\n\n // Decodes and retuns counts and weights of all cells\n static getCellData({countsData, size = 1}) {\n const numCells = countsData.length / 4;\n const cellWeights = new Float32Array(numCells * size);\n const cellCounts = new Uint32Array(numCells);\n for (let i = 0; i < numCells; i++) {\n // weights in RGB channels\n for (let sizeIndex = 0; sizeIndex < size; sizeIndex++) {\n cellWeights[i * size + sizeIndex] = countsData[i * 4 + sizeIndex];\n }\n // count in Alpha channel\n cellCounts[i] = countsData[i * 4 + 3];\n }\n return {cellCounts, cellWeights};\n }\n\n static isSupported(device: Device) {\n return REQUIRED_FEATURES.every(feature => device.features.has(feature));\n }\n\n // DEBUG ONLY\n // static logData({aggregationBuffer, minBuffer, maxBuffer, maxMinBuffer, limit = 10}) {\n // if (aggregationBuffer) {\n // console.log('Aggregation Data:');\n // const agrData = aggregationBuffer.getData();\n // for (let index = 0; index < agrData.length && limit > 0; index += 4) {\n // if (agrData[index + 3] > 0) {\n // console.log(\n // `index: ${index} weights: ${agrData[index]} ${agrData[index + 1]} ${\n // agrData[index + 2]\n // } count: ${agrData[index + 3]}`\n // );\n // limit--;\n // }\n // }\n // }\n // const obj = {minBuffer, maxBuffer, maxMinBuffer};\n // for (const key in obj) {\n // if (obj[key]) {\n // const data = obj[key].getData();\n // console.log(`${key} data : R: ${data[0]} G: ${data[1]} B: ${data[2]} A: ${data[3]}`);\n // }\n // }\n // }\n\n state = {\n // per weight GPU resources\n weightAttributes: {},\n textures: {},\n meanTextures: {},\n buffers: {},\n framebuffers: {},\n maxMinFramebuffers: {},\n minFramebuffers: {},\n maxFramebuffers: {},\n equations: {},\n\n shaderOptions: {},\n modelDirty: false,\n\n // common resources to be deleted\n resources: {},\n\n // results\n results: {}\n };\n\n id: string;\n device: Device;\n _hasGPUSupport: boolean;\n\n gridAggregationModel;\n allAggregationModel;\n meanTransform;\n\n constructor(device: Device, props: GPUGridAggregatorProps = {}) {\n this.id = props.id || 'gpu-grid-aggregator';\n this.device = device;\n\n const REQUIRED_FEATURES: DeviceFeature[] = [\n 'blend-minmax-webgl1', // set min/max blend modes\n 'texture-renderable-float32-webgl', // render to float texture\n 'texture-formats-float32-webgl1' // sample from a float texture\n ];\n\n // gl_InstanceID usage in min/max calculation shaders\n this._hasGPUSupport =\n this.device.info.type === 'webgl2' &&\n REQUIRED_FEATURES.every(feature => device.features.has(feature));\n if (this._hasGPUSupport) {\n this._setupModels();\n }\n }\n\n // Delete owned resources.\n delete() {\n const {gridAggregationModel, allAggregationModel, meanTransform} = this;\n const {\n textures,\n framebuffers,\n maxMinFramebuffers,\n minFramebuffers,\n maxFramebuffers,\n meanTextures,\n resources\n } = this.state;\n\n gridAggregationModel?.destroy();\n allAggregationModel?.destroy();\n meanTransform?.destroy();\n\n deleteResources([\n framebuffers,\n textures,\n maxMinFramebuffers,\n minFramebuffers,\n maxFramebuffers,\n meanTextures,\n resources\n ]);\n }\n\n // Perform aggregation and retun the results\n run(opts = {}) {\n // reset results\n this.setState({results: {}});\n const aggregationParams = this._normalizeAggregationParams(opts);\n if (!this._hasGPUSupport) {\n log.log(1, 'GPUGridAggregator: not supported')();\n }\n return this._runAggregation(aggregationParams);\n }\n\n // Reads aggregation data into JS Array object\n // For WebGL1, data is available in JS Array objects already.\n // For WebGL2, data is read from Buffer objects and cached for subsequent queries.\n getData(weightId) {\n const data: {\n aggregationData?: Float32Array;\n maxData?: Float32Array;\n minData?: Float32Array;\n maxMinData?: Float32Array;\n } = {};\n const results = this.state.results;\n if (!results[weightId].aggregationData) {\n // cache the results if reading from the buffer (WebGL2 path)\n results[weightId].aggregationData = results[weightId].aggregationBuffer.getData();\n }\n data.aggregationData = results[weightId].aggregationData;\n\n // Check for optional results\n for (const arrayName in ARRAY_BUFFER_MAP) {\n const bufferName = ARRAY_BUFFER_MAP[arrayName];\n\n if (results[weightId][arrayName] || results[weightId][bufferName]) {\n // cache the result\n results[weightId][arrayName] =\n results[weightId][arrayName] || results[weightId][bufferName].getData();\n data[arrayName] = results[weightId][arrayName];\n }\n }\n return data;\n }\n\n updateShaders(shaderOptions = {}) {\n this.setState({shaderOptions, modelDirty: true});\n }\n\n // PRIVATE\n\n _normalizeAggregationParams(opts) {\n const aggregationParams = {...DEFAULT_RUN_PARAMS, ...opts};\n const {weights} = aggregationParams;\n if (weights) {\n aggregationParams.weights = normalizeWeightParams(weights);\n }\n return aggregationParams;\n }\n\n // Update priveate state\n setState(updateObject) {\n Object.assign(this.state, updateObject);\n }\n\n // GPU Aggregation methods\n\n _getAggregateData(opts) {\n const results = {};\n const {\n textures,\n framebuffers,\n maxMinFramebuffers,\n minFramebuffers,\n maxFramebuffers,\n resources\n } = this.state;\n const {weights} = opts;\n\n for (const id in weights) {\n results[id] = {};\n const {needMin, needMax, combineMaxMin} = weights[id];\n results[id].aggregationTexture = textures[id];\n results[id].aggregationBuffer = readPixelsToBuffer(framebuffers[id], {\n target: weights[id].aggregationBuffer, // update if a buffer is provided\n sourceType: GL.FLOAT\n });\n if (needMin && needMax && combineMaxMin) {\n results[id].maxMinBuffer = readPixelsToBuffer(maxMinFramebuffers[id], {\n target: weights[id].maxMinBuffer, // update if a buffer is provided\n sourceType: GL.FLOAT\n });\n results[id].maxMinTexture = resources[`${id}-maxMinTexture`];\n } else {\n if (needMin) {\n results[id].minBuffer = readPixelsToBuffer(minFramebuffers[id], {\n target: weights[id].minBuffer, // update if a buffer is provided\n sourceType: GL.FLOAT\n });\n results[id].minTexture = resources[`${id}-minTexture`];\n }\n if (needMax) {\n results[id].maxBuffer = readPixelsToBuffer(maxFramebuffers[id], {\n target: weights[id].maxBuffer, // update if a buffer is provided\n sourceType: GL.FLOAT\n });\n results[id].maxTexture = resources[`${id}-maxTexture`];\n }\n }\n }\n this._trackGPUResultBuffers(results, weights);\n return results;\n }\n\n _renderAggregateData(opts) {\n const {\n cellSize,\n projectPoints,\n attributes,\n moduleSettings,\n numCol,\n numRow,\n weights,\n translation,\n scaling\n } = opts;\n const {maxMinFramebuffers, minFramebuffers, maxFramebuffers} = this.state;\n\n const gridSize = [numCol, numRow];\n const parameters = {\n blend: true,\n depthTest: false,\n blendFunc: [GL.ONE, GL.ONE]\n };\n const uniforms = {\n cellSize,\n gridSize,\n projectPoints,\n translation,\n scaling\n };\n\n for (const id in weights) {\n const {needMin, needMax} = weights[id];\n const combineMaxMin = needMin && needMax && weights[id].combineMaxMin;\n this._renderToWeightsTexture({\n id,\n parameters,\n moduleSettings,\n uniforms,\n gridSize,\n attributes,\n weights\n });\n if (combineMaxMin) {\n this._renderToMaxMinTexture({\n id,\n parameters: {...parameters, blendEquation: MAX_MIN_BLEND_EQUATION},\n gridSize,\n minOrMaxFb: maxMinFramebuffers[id],\n clearParams: {clearColor: [0, 0, 0, MAX_32_BIT_FLOAT]},\n combineMaxMin\n });\n } else {\n if (needMin) {\n this._renderToMaxMinTexture({\n id,\n parameters: {...parameters, blendEquation: MIN_BLEND_EQUATION},\n gridSize,\n minOrMaxFb: minFramebuffers[id],\n clearParams: {clearColor: [MAX_32_BIT_FLOAT, MAX_32_BIT_FLOAT, MAX_32_BIT_FLOAT, 0]},\n combineMaxMin\n });\n }\n if (needMax) {\n this._renderToMaxMinTexture({\n id,\n parameters: {...parameters, blendEquation: MAX_BLEND_EQUATION},\n gridSize,\n minOrMaxFb: maxFramebuffers[id],\n clearParams: {clearColor: [0, 0, 0, 0]},\n combineMaxMin\n });\n }\n }\n }\n }\n\n // render all aggregated grid-cells to generate Min, Max or MaxMin data texture\n _renderToMaxMinTexture(opts) {\n const {id, parameters, gridSize, minOrMaxFb, combineMaxMin, clearParams = {}} = opts;\n const {framebuffers} = this.state;\n const {allAggregationModel} = this;\n\n withGLParameters(\n this.device,\n {\n ...clearParams,\n framebuffer: minOrMaxFb,\n viewport: [0, 0, gridSize[0], gridSize[1]]\n },\n () => {\n clear(this.device, {color: true});\n\n // allAggregationModel.setParameters(parameters);\n allAggregationModel.setUniforms({gridSize, combineMaxMin});\n allAggregationModel.setBindings({uSampler: framebuffers[id].texture});\n allAggregationModel.draw();\n // TODO - we need to create a render pass for the aggregation\n // allAggregationModel.draw(renderPass);\n }\n );\n }\n\n // render all data points to aggregate weights\n _renderToWeightsTexture(opts) {\n const {id, parameters, moduleSettings, uniforms, gridSize, weights} = opts;\n const {framebuffers, equations, weightAttributes} = this.state;\n const {gridAggregationModel} = this;\n const {operation} = weights[id];\n\n const clearColor =\n operation === AGGREGATION_OPERATION.MIN\n ? [MAX_32_BIT_FLOAT, MAX_32_BIT_FLOAT, MAX_32_BIT_FLOAT, 0]\n : [0, 0, 0, 0];\n withGLParameters(\n this.device,\n {\n framebuffer: framebuffers[id],\n viewport: [0, 0, gridSize[0], gridSize[1]],\n clearColor\n },\n () => {\n clear(this.device, {color: true});\n\n const attributes = {weights: weightAttributes[id]};\n gridAggregationModel.draw({\n parameters: {...parameters, blendEquation: equations[id]},\n moduleSettings,\n uniforms,\n attributes\n });\n }\n );\n\n if (operation === AGGREGATION_OPERATION.MEAN) {\n const {meanTextures, textures} = this.state;\n const transformOptions = {\n _sourceTextures: {aggregationValues: meanTextures[id]}, // contains aggregated data\n _targetTexture: textures[id], // store mean values,\n elementCount: textures[id].width * textures[id].height\n };\n if (this.meanTransform) {\n this.meanTransform.update(transformOptions);\n } else {\n this.meanTransform = getMeanTransform(this.device, transformOptions);\n }\n this.meanTransform.run({\n parameters: {\n blend: false,\n depthTest: false\n }\n });\n\n // update framebuffer with mean results so readPixelsToBuffer returns mean values\n framebuffers[id].attach({[GL.COLOR_ATTACHMENT0]: textures[id]});\n }\n }\n\n _runAggregation(opts) {\n this._updateModels(opts);\n this._setupFramebuffers(opts);\n this._renderAggregateData(opts);\n const results = this._getAggregateData(opts);\n this.setState({results});\n return results;\n }\n\n // set up framebuffer for each weight\n /* eslint-disable complexity, max-depth, max-statements*/\n _setupFramebuffers(opts) {\n const {\n textures,\n framebuffers,\n maxMinFramebuffers,\n minFramebuffers,\n maxFramebuffers,\n meanTextures,\n equations\n } = this.state;\n const {weights} = opts;\n const {numCol, numRow} = opts;\n const framebufferSize = {width: numCol, height: numRow};\n for (const id in weights) {\n const {needMin, needMax, combineMaxMin, operation} = weights[id];\n textures[id] =\n weights[id].aggregationTexture ||\n textures[id] ||\n getFloatTexture(this.device, {id: `${id}-texture`, width: numCol, height: numRow});\n textures[id].resize(framebufferSize);\n let texture = textures[id];\n if (operation === AGGREGATION_OPERATION.MEAN) {\n // For MEAN, we first aggregatet into a temp texture\n meanTextures[id] =\n meanTextures[id] ||\n getFloatTexture(this.device, {id: `${id}-mean-texture`, width: numCol, height: numRow});\n meanTextures[id].resize(framebufferSize);\n texture = meanTextures[id];\n }\n if (framebuffers[id]) {\n framebuffers[id].attach({[GL.COLOR_ATTACHMENT0]: texture});\n } else {\n framebuffers[id] = getFramebuffer(this.device, {\n id: `${id}-fb`,\n width: numCol,\n height: numRow,\n texture\n });\n }\n framebuffers[id].resize(framebufferSize);\n equations[id] = EQUATION_MAP[operation] || EQUATION_MAP[AGGREGATION_OPERATION.SUM];\n // For min/max framebuffers will use default size 1X1\n if (needMin || needMax) {\n if (needMin && needMax && combineMaxMin) {\n if (!maxMinFramebuffers[id]) {\n texture = weights[id].maxMinTexture || this._getMinMaxTexture(`${id}-maxMinTexture`);\n maxMinFramebuffers[id] = getFramebuffer(this.device, {id: `${id}-maxMinFb`, texture});\n }\n } else {\n if (needMin) {\n if (!minFramebuffers[id]) {\n texture = weights[id].minTexture || this._getMinMaxTexture(`${id}-minTexture`);\n minFramebuffers[id] = getFramebuffer(this.device, {\n id: `${id}-minFb`,\n texture\n });\n }\n }\n if (needMax) {\n if (!maxFramebuffers[id]) {\n texture = weights[id].maxTexture || this._getMinMaxTexture(`${id}-maxTexture`);\n maxFramebuffers[id] = getFramebuffer(this.device, {\n id: `${id}-maxFb`,\n texture\n });\n }\n }\n }\n }\n }\n }\n /* eslint-enable complexity, max-depth, max-statements */\n\n _getMinMaxTexture(name) {\n const {resources} = this.state;\n if (!resources[name]) {\n resources[name] = getFloatTexture(this.device, {id: 'resourceName'});\n }\n return resources[name];\n }\n\n _setupModels({numCol = 0, numRow = 0} = {}) {\n const {shaderOptions} = this.state;\n this.gridAggregationModel?.destroy();\n this.gridAggregationModel = getAggregationModel(this.device, shaderOptions);\n if (!this.allAggregationModel) {\n const instanceCount = numCol * numRow;\n this.allAggregationModel = getAllAggregationModel(this.device, instanceCount);\n }\n }\n\n // set up buffers for all weights\n _setupWeightAttributes(opts) {\n const {weightAttributes} = this.state;\n const {weights} = opts;\n for (const id in weights) {\n weightAttributes[id] = opts.attributes[id];\n }\n }\n\n /** GPU Aggregation results are provided in Buffers, if new Buffer objects are created track them for later deletion. */\n /* eslint-disable max-depth */\n _trackGPUResultBuffers(results, weights) {\n const {resources} = this.state;\n for (const id in results) {\n if (results[id]) {\n for (const bufferName of BUFFER_NAMES) {\n if (results[id][bufferName] && weights[id][bufferName] !== results[id][bufferName]) {\n // No result buffer is provided in weights object, `readPixelsToBuffer` has created a new Buffer object\n // collect the new buffer for garabge collection\n const name = `gpu-result-${id}-${bufferName}`;\n if (resources[name]) {\n resources[name].delete();\n }\n resources[name] = results[id][bufferName];\n }\n }\n }\n }\n }\n /* eslint-enable max-depth */\n\n _updateModels(opts) {\n const {vertexCount, attributes, numCol, numRow} = opts;\n const {modelDirty} = this.state;\n\n if (modelDirty) {\n this._setupModels(opts);\n this.setState({modelDirty: false});\n }\n\n // this maps color/elevation to weight name.\n this._setupWeightAttributes(opts);\n\n this.gridAggregationModel.setVertexCount(vertexCount);\n this.gridAggregationModel.setAttributes(attributes);\n\n this.allAggregationModel.setInstanceCount(numCol * numRow);\n }\n}\n\n// HELPER METHODS\n\nfunction normalizeWeightParams(weights) {\n const result = {};\n for (const id in weights) {\n result[id] = {...DEFAULT_WEIGHT_PARAMS, ...weights[id]};\n }\n return result;\n}\n\nfunction deleteResources(resources) {\n resources = Array.isArray(resources) ? resources : [resources];\n resources.forEach(obj => {\n for (const name in obj) {\n obj[name].delete();\n }\n });\n}\n\nfunction getAggregationModel(device: Device, shaderOptions) {\n const shaders = mergeShaders(\n {\n vs: AGGREGATE_TO_GRID_VS,\n fs: AGGREGATE_TO_GRID_FS,\n modules: [fp64arithmetic, project32]\n },\n shaderOptions\n );\n\n return new Model(device, {\n id: 'Grid-Aggregation-Model',\n vertexCount: 1,\n drawMode: GL.POINTS,\n shaderAssembler: getShaderAssembler(),\n ...shaders\n });\n}\n\nfunction getAllAggregationModel(device: Device, instanceCount: number): Model {\n return new Model(device, {\n id: 'All-Aggregation-Model',\n vs: AGGREGATE_ALL_VS,\n fs: AGGREGATE_ALL_FS,\n modules: [fp64arithmetic],\n vertexCount: 1,\n topology: 'point-list',\n isInstanced: true,\n instanceCount,\n attributes: {\n // @ts-expect-error\n position: [0, 0]\n }\n });\n}\n\nfunction getMeanTransform(device: Device, opts) {\n return new TextureTransform(device, {\n vs: TRANSFORM_MEAN_VS,\n _targetTextureVarying: 'meanValues',\n ...opts\n });\n}\n"],"file":"gpu-grid-aggregator.js"}
|
|
@@ -4,6 +4,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
var _default = "#define SHADER_NAME gpu-aggregation-transform-mean-vs\
|
|
7
|
+
var _default = "#version 300 es\n#define SHADER_NAME gpu-aggregation-transform-mean-vs\nin vec4 aggregationValues;\nout vec4 meanValues;\n\nvoid main()\n{\n bool isCellValid = bool(aggregationValues.w > 0.);\n meanValues.xyz = isCellValid ? aggregationValues.xyz/aggregationValues.w : vec3(0, 0, 0);\n meanValues.w = aggregationValues.w;\n gl_PointSize = 1.0;\n}\n";
|
|
8
8
|
exports.default = _default;
|
|
9
9
|
//# sourceMappingURL=transform-mean-vs.glsl.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { getBounds, boundsContain, packVertices, scaleToAspectRatio, getTextureCoordinates, getTextureParams } from './heatmap-layer-utils';
|
|
2
2
|
import { GL } from '@luma.gl/constants';
|
|
3
|
-
import {
|
|
3
|
+
import { TextureTransform } from '@luma.gl/engine';
|
|
4
4
|
import { withGLParameters } from '@luma.gl/webgl';
|
|
5
5
|
import { AttributeManager, COORDINATE_SYSTEM, log } from '@deck.gl/core';
|
|
6
6
|
import TriangleLayer from './triangle-layer';
|
|
@@ -339,15 +339,12 @@ export default class HeatmapLayer extends AggregationLayer {
|
|
|
339
339
|
let {
|
|
340
340
|
weightsTransform
|
|
341
341
|
} = this.state;
|
|
342
|
-
const {
|
|
343
|
-
weightsTexture
|
|
344
|
-
} = this.state;
|
|
345
342
|
(_weightsTransform = weightsTransform) === null || _weightsTransform === void 0 ? void 0 : _weightsTransform.delete();
|
|
346
|
-
weightsTransform = new
|
|
343
|
+
weightsTransform = new TextureTransform(this.context.device, {
|
|
347
344
|
id: `${this.id}-weights-transform`,
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
345
|
+
vertexCount: 1,
|
|
346
|
+
targetTexture: this.state.weightsTexture,
|
|
347
|
+
targetTextureVarying: 'weightsTexture',
|
|
351
348
|
...shaders
|
|
352
349
|
});
|
|
353
350
|
this.setState({
|
|
@@ -368,7 +365,7 @@ export default class HeatmapLayer extends AggregationLayer {
|
|
|
368
365
|
this._createWeightsTransform(weightsTransformShaders);
|
|
369
366
|
|
|
370
367
|
const maxWeightsTransformShaders = this.getShaders('max-weights-transform');
|
|
371
|
-
const maxWeightTransform = new
|
|
368
|
+
const maxWeightTransform = new TextureTransform(this.context.device, {
|
|
372
369
|
id: `${this.id}-max-weights-transform`,
|
|
373
370
|
_sourceTextures: {
|
|
374
371
|
inTexture: weightsTexture
|
|
@@ -461,9 +458,9 @@ export default class HeatmapLayer extends AggregationLayer {
|
|
|
461
458
|
const {
|
|
462
459
|
viewport
|
|
463
460
|
} = this.context;
|
|
464
|
-
triPositionBuffer.
|
|
461
|
+
triPositionBuffer.write(packVertices(viewportCorners, 3));
|
|
465
462
|
const textureBounds = viewportCorners.map(p => getTextureCoordinates(viewport.projectPosition(p), normalizedCommonBounds));
|
|
466
|
-
triTexCoordBuffer.
|
|
463
|
+
triTexCoordBuffer.write(packVertices(textureBounds, 2));
|
|
467
464
|
}
|
|
468
465
|
|
|
469
466
|
_updateColorTexture(opts) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/heatmap-layer/heatmap-layer.ts"],"names":["getBounds","boundsContain","packVertices","scaleToAspectRatio","getTextureCoordinates","getTextureParams","GL","Transform","withGLParameters","AttributeManager","COORDINATE_SYSTEM","log","TriangleLayer","AggregationLayer","defaultColorRange","colorRangeToFlatArray","weightsVs","weightsFs","vsMax","fsMax","RESOLUTION","TEXTURE_PROPS","format","mipmaps","sampler","minFilter","magFilter","addressModeU","addressModeV","DEFAULT_COLOR_DOMAIN","AGGREGATION_MODE","SUM","MEAN","defaultProps","getPosition","type","value","x","position","getWeight","intensity","min","radiusPixels","max","colorRange","threshold","colorDomain","optional","aggregation","weightsTextureSize","debounceTimeout","REQUIRED_FEATURES","FLOAT_TARGET_FEATURES","DIMENSIONS","data","props","HeatmapLayer","state","initializeState","every","feature","context","device","features","has","setState","supported","error","id","initializeAggregationLayer","_setupTextureParams","_setupAttributes","_setupResources","shouldUpdateState","changeFlags","somethingChanged","updateState","opts","_updateHeatmapState","oldProps","_getChangeFlags","dataChanged","viewportChanged","boundsChanged","_updateBounds","_updateTextureRenderingBounds","clearTimeout","updateTimer","isWeightMapDirty","viewportZoomChanged","_debouncedUpdateWeightmap","_updateColorTexture","_updateWeightmap","zoom","viewport","renderLayers","weightsTexture","triPositionBuffer","triTexCoordBuffer","maxWeightsTexture","colorTexture","updateTriggers","TriangleLayerClass","getSubLayerClass","getSubLayerProps","coordinateSystem","DEFAULT","attributes","positions","texCoords","vertexCount","maxTexture","aggregationMode","texture","finalizeState","weightsTransform","maxWeightTransform","destroy","_getAttributeManager","stats","dimensions","isAttributeChanged","isAggregationDirty","compareAll","dimension","_createTextures","textureSize","createTexture","width","height","attributeManager","getAttributeManager","add","size","accessor","weights","positionAttributeName","Math","limits","maxTextureDimension2D","floatTargetSupport","weightsScale","warn","getShaders","vs","_fs","_createWeightsTransform","shaders","delete","elementCount","_targetTexture","_targetTextureVarying","weightsTransformShaders","maxWeightsTransformShaders","_sourceTextures","inTexture","createBuffer","byteLength","updateShaders","shaderOptions","_updateMaxWeightValue","run","parameters","blend","depthTest","blendFunc","blendEquation","forceUpdate","viewportCorners","unproject","map","p","fround","visibleWorldBounds","newState","worldBounds","scaledCommonBounds","_worldToCommonBounds","_commonToWorldBounds","LNGLAT","normalizedCommonBounds","subData","textureBounds","projectPosition","colors","Uint8Array","setImageData","length","commonBounds","useLayerCoordinateSystem","metersPerPixel","distanceScales","metersPerUnit","uniforms","textureWidth","update","getNumInstances","gl","clearColor","clearRenderTarget","getAttributes","moduleSettings","getModuleSettings","fromTimer","setTimeout","bind","minLong","minLat","maxLong","maxLat","offsetMode","LNGLAT_OFFSETS","METER_OFFSETS","offsetOriginCommon","coordinateOrigin","scale","bottomLeftCommon","topRightCommon","xMin","yMin","xMax","yMax","bottomLeftWorld","unprojectPosition","topRightWorld","slice","concat","layerName"],"mappings":"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","sourcesContent":["// Copyright (c) 2015 - 2019 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n/* global setTimeout clearTimeout */\nimport {\n getBounds,\n boundsContain,\n packVertices,\n scaleToAspectRatio,\n getTextureCoordinates,\n getTextureParams\n} from './heatmap-layer-utils';\nimport {DeviceFeature, Texture, TextureProps, TextureFormat} from '@luma.gl/core';\nimport {GL} from '@luma.gl/constants';\nimport {Transform} from '@luma.gl/engine';\nimport {BufferWithAccessor, withGLParameters} from '@luma.gl/webgl';\nimport {\n Accessor,\n AccessorFunction,\n AttributeManager,\n ChangeFlags,\n Color,\n COORDINATE_SYSTEM,\n Layer,\n LayerContext,\n LayersList,\n log,\n Position,\n UpdateParameters,\n DefaultProps\n} from '@deck.gl/core';\nimport TriangleLayer from './triangle-layer';\nimport AggregationLayer, {AggregationLayerProps} from '../aggregation-layer';\nimport {defaultColorRange, colorRangeToFlatArray} from '../utils/color-utils';\nimport weightsVs from './weights-vs.glsl';\nimport weightsFs from './weights-fs.glsl';\nimport vsMax from './max-vs.glsl';\nimport fsMax from './max-fs.glsl';\n\nconst RESOLUTION = 2; // (number of common space pixels) / (number texels)\nconst TEXTURE_PROPS: TextureProps = {\n format: 'rgba8unorm',\n mipmaps: false,\n sampler: {\n minFilter: 'nearest',\n magFilter: 'nearest',\n addressModeU: 'clamp-to-edge',\n addressModeV: 'clamp-to-edge'\n }\n};\nconst DEFAULT_COLOR_DOMAIN = [0, 0];\nconst AGGREGATION_MODE = {\n SUM: 0,\n MEAN: 1\n};\n\nconst defaultProps: DefaultProps<HeatmapLayerProps> = {\n getPosition: {type: 'accessor', value: (x: any) => x.position},\n getWeight: {type: 'accessor', value: 1},\n intensity: {type: 'number', min: 0, value: 1},\n radiusPixels: {type: 'number', min: 1, max: 100, value: 50},\n colorRange: defaultColorRange,\n threshold: {type: 'number', min: 0, max: 1, value: 0.05},\n colorDomain: {type: 'array', value: null, optional: true},\n // 'SUM' or 'MEAN'\n aggregation: 'SUM',\n weightsTextureSize: {type: 'number', min: 128, max: 2048, value: 2048},\n debounceTimeout: {type: 'number', min: 0, max: 1000, value: 500}\n};\n\nconst REQUIRED_FEATURES: DeviceFeature[] = [\n 'blend-minmax-webgl1', // max weight calculation\n 'texture-formats-float32-webgl1' // weight-map as texture\n];\n\nconst FLOAT_TARGET_FEATURES: DeviceFeature[] = [\n 'texture-renderable-float32-webgl', // ability to render to float texture\n 'texture-blend-float-webgl1' // ability to blend when rendering to float texture\n];\n\nconst DIMENSIONS = {\n data: {\n props: ['radiusPixels']\n }\n};\n\nexport type HeatmapLayerProps<DataT = unknown> = _HeatmapLayerProps<DataT> &\n AggregationLayerProps<DataT>;\n\ntype _HeatmapLayerProps<DataT> = {\n /**\n * Radius of the circle in pixels, to which the weight of an object is distributed.\n *\n * @default 30\n */\n radiusPixels?: number;\n\n /**\n * Specified as an array of colors [color1, color2, ...].\n *\n * @default `6-class YlOrRd` - [colorbrewer](http://colorbrewer2.org/#type=sequential&scheme=YlOrRd&n=6)\n */\n colorRange?: Color[];\n\n /**\n * Value that is multiplied with the total weight at a pixel to obtain the final weight.\n *\n * @default 1\n */\n intensity?: number;\n\n /**\n * Ratio of the fading weight to the max weight, between `0` and `1`.\n *\n * For example, `0.1` affects all pixels with weight under 10% of the max.\n *\n * Ignored when `colorDomain` is specified.\n * @default 0.05\n */\n threshold?: number;\n\n /**\n * Controls how weight values are mapped to the `colorRange`, as an array of two numbers [`minValue`, `maxValue`].\n *\n * @default null\n */\n colorDomain?: [number, number] | null;\n\n /**\n * Defines the type of aggregation operation\n *\n * V valid values are 'SUM', 'MEAN'.\n *\n * @default 'SUM'\n */\n aggregation?: 'SUM' | 'MEAN';\n\n /**\n * Specifies the size of weight texture.\n * @default 2048\n */\n weightsTextureSize?: number;\n\n /**\n * Interval in milliseconds during which changes to the viewport don't trigger aggregation.\n *\n * @default 500\n */\n debounceTimeout?: number;\n\n /**\n * Method called to retrieve the position of each object.\n *\n * @default d => d.position\n */\n getPosition?: AccessorFunction<DataT, Position>;\n\n /**\n * The weight of each object.\n *\n * @default 1\n */\n getWeight?: Accessor<DataT, number>;\n};\n\n/** Visualizes the spatial distribution of data. */\nexport default class HeatmapLayer<\n DataT = any,\n ExtraPropsT extends {} = {}\n> extends AggregationLayer<DataT, ExtraPropsT & Required<_HeatmapLayerProps<DataT>>> {\n static layerName = 'HeatmapLayer';\n static defaultProps = defaultProps;\n\n state!: AggregationLayer<DataT>['state'] & {\n supported: boolean;\n colorDomain?: number[];\n isWeightMapDirty?: boolean;\n weightsTexture?: Texture;\n maxWeightsTexture?: Texture;\n colorTexture?: Texture;\n zoom?: number;\n worldBounds?: number[];\n normalizedCommonBounds?: number[];\n updateTimer?: any;\n triPositionBuffer?: BufferWithAccessor;\n triTexCoordBuffer?: BufferWithAccessor;\n weightsTransform?: Transform;\n maxWeightTransform?: Transform;\n textureSize: number;\n format: TextureFormat;\n type: GL;\n weightsScale: number;\n visibleWorldBounds: number[];\n viewportCorners: number[][];\n };\n\n initializeState() {\n if (!REQUIRED_FEATURES.every(feature => this.context.device.features.has(feature))) {\n this.setState({supported: false});\n log.error(`HeatmapLayer: ${this.id} is not supported on this browser`)();\n return;\n }\n super.initializeAggregationLayer(DIMENSIONS);\n this.setState({supported: true, colorDomain: DEFAULT_COLOR_DOMAIN});\n this._setupTextureParams();\n this._setupAttributes();\n this._setupResources();\n }\n\n shouldUpdateState({changeFlags}: UpdateParameters<this>) {\n // Need to be updated when viewport changes\n return changeFlags.somethingChanged;\n }\n\n /* eslint-disable max-statements,complexity */\n updateState(opts: UpdateParameters<this>) {\n if (!this.state.supported) {\n return;\n }\n super.updateState(opts);\n this._updateHeatmapState(opts);\n }\n\n _updateHeatmapState(opts: UpdateParameters<this>) {\n const {props, oldProps} = opts;\n const changeFlags = this._getChangeFlags(opts);\n\n if (changeFlags.dataChanged || changeFlags.viewportChanged) {\n // if data is changed, do not debounce and immediately update the weight map\n changeFlags.boundsChanged = this._updateBounds(changeFlags.dataChanged);\n this._updateTextureRenderingBounds();\n }\n\n if (changeFlags.dataChanged || changeFlags.boundsChanged) {\n // Update weight map immediately\n clearTimeout(this.state.updateTimer);\n this.setState({isWeightMapDirty: true});\n } else if (changeFlags.viewportZoomChanged) {\n // Update weight map when zoom stops\n this._debouncedUpdateWeightmap();\n }\n\n if (props.colorRange !== oldProps.colorRange) {\n this._updateColorTexture(opts);\n }\n\n if (this.state.isWeightMapDirty) {\n this._updateWeightmap();\n }\n\n this.setState({zoom: opts.context.viewport.zoom});\n }\n\n renderLayers(): LayersList | Layer {\n if (!this.state.supported) {\n return [];\n }\n const {\n weightsTexture,\n triPositionBuffer,\n triTexCoordBuffer,\n maxWeightsTexture,\n colorTexture,\n colorDomain\n } = this.state;\n const {updateTriggers, intensity, threshold, aggregation} = this.props;\n\n const TriangleLayerClass = this.getSubLayerClass('triangle', TriangleLayer);\n\n return new TriangleLayerClass(\n this.getSubLayerProps({\n id: 'triangle-layer',\n updateTriggers\n }),\n {\n // position buffer is filled with world coordinates generated from viewport.unproject\n // i.e. LNGLAT if geospatial, CARTESIAN otherwise\n coordinateSystem: COORDINATE_SYSTEM.DEFAULT,\n data: {\n attributes: {\n positions: triPositionBuffer,\n texCoords: triTexCoordBuffer\n }\n },\n vertexCount: 4,\n maxTexture: maxWeightsTexture,\n colorTexture,\n aggregationMode: AGGREGATION_MODE[aggregation] || 0,\n texture: weightsTexture,\n intensity,\n threshold,\n colorDomain\n }\n );\n }\n\n finalizeState(context: LayerContext) {\n super.finalizeState(context);\n const {\n weightsTransform,\n weightsTexture,\n maxWeightTransform,\n maxWeightsTexture,\n triPositionBuffer,\n triTexCoordBuffer,\n colorTexture,\n updateTimer\n } = this.state;\n weightsTransform?.destroy();\n weightsTexture?.destroy();\n maxWeightTransform?.destroy();\n maxWeightsTexture?.destroy();\n triPositionBuffer?.destroy();\n triTexCoordBuffer?.destroy();\n colorTexture?.destroy();\n if (updateTimer) {\n clearTimeout(updateTimer);\n }\n }\n\n // PRIVATE\n\n // override Composite layer private method to create AttributeManager instance\n _getAttributeManager() {\n return new AttributeManager(this.context.device, {\n id: this.props.id,\n stats: this.context.stats\n });\n }\n\n _getChangeFlags(opts: UpdateParameters<this>) {\n const changeFlags: Partial<ChangeFlags> & {\n boundsChanged?: boolean;\n viewportZoomChanged?: boolean;\n } = {};\n const {dimensions} = this.state;\n changeFlags.dataChanged =\n (this.isAttributeChanged() && 'attribute changed') || // if any attribute is changed\n (this.isAggregationDirty(opts, {\n compareAll: true,\n dimension: dimensions.data\n }) &&\n 'aggregation is dirty');\n changeFlags.viewportChanged = opts.changeFlags.viewportChanged;\n\n const {zoom} = this.state;\n if (!opts.context.viewport || opts.context.viewport.zoom !== zoom) {\n changeFlags.viewportZoomChanged = true;\n }\n\n return changeFlags;\n }\n\n _createTextures() {\n const {textureSize, format, type} = this.state;\n\n this.setState({\n weightsTexture: this.context.device.createTexture({\n width: textureSize,\n height: textureSize,\n format,\n type,\n ...TEXTURE_PROPS\n }),\n maxWeightsTexture: this.context.device.createTexture({format, type, ...TEXTURE_PROPS}) // 1 X 1 texture,\n });\n }\n\n _setupAttributes() {\n const attributeManager = this.getAttributeManager()!;\n attributeManager.add({\n positions: {size: 3, type: GL.DOUBLE, accessor: 'getPosition'},\n weights: {size: 1, accessor: 'getWeight'}\n });\n this.setState({positionAttributeName: 'positions'});\n }\n\n _setupTextureParams() {\n const {device} = this.context;\n const {weightsTextureSize} = this.props;\n\n const textureSize = Math.min(weightsTextureSize, device.limits.maxTextureDimension2D as number);\n const floatTargetSupport = FLOAT_TARGET_FEATURES.every(feature => device.features.has(feature));\n const {format, type} = getTextureParams({device, floatTargetSupport});\n const weightsScale = floatTargetSupport ? 1 : 1 / 255;\n this.setState({textureSize, format, type, weightsScale});\n if (!floatTargetSupport) {\n log.warn(\n `HeatmapLayer: ${this.id} rendering to float texture not supported, fallingback to low precession format`\n )();\n }\n }\n\n getShaders(type) {\n return super.getShaders(\n type === 'max-weights-transform'\n ? {\n vs: vsMax,\n _fs: fsMax\n }\n : {\n vs: weightsVs,\n _fs: weightsFs\n }\n );\n }\n\n _createWeightsTransform(shaders = {}) {\n let {weightsTransform} = this.state;\n const {weightsTexture} = this.state;\n weightsTransform?.delete();\n\n weightsTransform = new Transform(this.context.device, {\n id: `${this.id}-weights-transform`,\n elementCount: 1,\n _targetTexture: weightsTexture,\n _targetTextureVarying: 'weightsTexture',\n ...shaders\n });\n this.setState({weightsTransform});\n }\n\n _setupResources() {\n this._createTextures();\n const {textureSize, weightsTexture, maxWeightsTexture} = this.state;\n\n const weightsTransformShaders = this.getShaders('weights-transform');\n this._createWeightsTransform(weightsTransformShaders);\n\n const maxWeightsTransformShaders = this.getShaders('max-weights-transform');\n const maxWeightTransform = new Transform(this.context.device, {\n id: `${this.id}-max-weights-transform`,\n _sourceTextures: {\n inTexture: weightsTexture\n },\n _targetTexture: maxWeightsTexture,\n _targetTextureVarying: 'outTexture',\n ...maxWeightsTransformShaders,\n elementCount: textureSize * textureSize\n });\n\n this.setState({\n weightsTexture,\n maxWeightsTexture,\n maxWeightTransform,\n zoom: null,\n triPositionBuffer: this.context.device.createBuffer({\n byteLength: 48,\n // @ts-expect-error\n accessor: {size: 3}\n }),\n triTexCoordBuffer: this.context.device.createBuffer({\n byteLength: 48,\n // @ts-expect-error\n accessor: {size: 2}\n })\n });\n }\n\n // overwrite super class method to update transform model\n updateShaders(shaderOptions) {\n // sahder params (modules, injects) changed, update model object\n this._createWeightsTransform(shaderOptions);\n }\n\n _updateMaxWeightValue() {\n const {maxWeightTransform} = this.state;\n maxWeightTransform!.run({\n parameters: {\n blend: true,\n depthTest: false,\n blendFunc: [GL.ONE, GL.ONE],\n blendEquation: GL.MAX\n }\n });\n }\n\n // Computes world bounds area that needs to be processed for generate heatmap\n _updateBounds(forceUpdate: any = false): boolean {\n const {viewport} = this.context;\n\n // Unproject all 4 corners of the current screen coordinates into world coordinates (lng/lat)\n // Takes care of viewport has non zero bearing/pitch (i.e axis not aligned with world coordiante system)\n const viewportCorners = [\n viewport.unproject([0, 0]),\n viewport.unproject([viewport.width, 0]),\n viewport.unproject([viewport.width, viewport.height]),\n viewport.unproject([0, viewport.height])\n ].map(p => p.map(Math.fround));\n\n // #1: get world bounds for current viewport extends\n const visibleWorldBounds = getBounds(viewportCorners); // TODO: Change to visible bounds\n\n const newState: Partial<HeatmapLayer['state']> = {visibleWorldBounds, viewportCorners};\n let boundsChanged = false;\n\n if (\n forceUpdate ||\n !this.state.worldBounds ||\n !boundsContain(this.state.worldBounds, visibleWorldBounds)\n ) {\n // #2 : convert world bounds to common (Flat) bounds\n // #3 : extend common bounds to match aspect ratio with viewport\n const scaledCommonBounds = this._worldToCommonBounds(visibleWorldBounds);\n\n // #4 :convert aligned common bounds to world bounds\n const worldBounds = this._commonToWorldBounds(scaledCommonBounds);\n\n // Clip webmercator projection limits\n if (this.props.coordinateSystem === COORDINATE_SYSTEM.LNGLAT) {\n worldBounds[1] = Math.max(worldBounds[1], -85.051129);\n worldBounds[3] = Math.min(worldBounds[3], 85.051129);\n worldBounds[0] = Math.max(worldBounds[0], -360);\n worldBounds[2] = Math.min(worldBounds[2], 360);\n }\n\n // #5: now convert world bounds to common using Layer's coordiante system and origin\n const normalizedCommonBounds = this._worldToCommonBounds(worldBounds);\n\n newState.worldBounds = worldBounds;\n newState.normalizedCommonBounds = normalizedCommonBounds;\n\n boundsChanged = true;\n }\n this.setState(newState);\n return boundsChanged;\n }\n\n _updateTextureRenderingBounds() {\n // Just render visible portion of the texture\n const {triPositionBuffer, triTexCoordBuffer, normalizedCommonBounds, viewportCorners} =\n this.state;\n\n const {viewport} = this.context;\n\n triPositionBuffer!.subData(packVertices(viewportCorners, 3));\n\n const textureBounds = viewportCorners.map(p =>\n getTextureCoordinates(viewport.projectPosition(p), normalizedCommonBounds!)\n );\n triTexCoordBuffer!.subData(packVertices(textureBounds, 2));\n }\n\n _updateColorTexture(opts) {\n const {colorRange} = opts.props;\n let {colorTexture} = this.state;\n const colors = colorRangeToFlatArray(colorRange, false, Uint8Array as any);\n\n if (colorTexture) {\n // @ts-expect-error TODO - no longer supported in v9?\n colorTexture.setImageData({\n data: colors,\n width: colorRange.length\n });\n } else {\n colorTexture = this.context.device.createTexture({\n data: colors,\n width: colorRange.length,\n height: 1,\n ...TEXTURE_PROPS\n });\n }\n this.setState({colorTexture});\n }\n\n _updateWeightmap() {\n const {radiusPixels, colorDomain, aggregation} = this.props;\n const {worldBounds, textureSize, weightsScale} = this.state;\n const weightsTransform = this.state.weightsTransform!;\n this.state.isWeightMapDirty = false;\n\n // convert world bounds to common using Layer's coordiante system and origin\n const commonBounds = this._worldToCommonBounds(worldBounds, {\n useLayerCoordinateSystem: true\n });\n\n if (colorDomain && aggregation === 'SUM') {\n // scale color domain to weight per pixel\n const {viewport} = this.context;\n const metersPerPixel =\n (viewport.distanceScales.metersPerUnit[2] * (commonBounds[2] - commonBounds[0])) /\n textureSize;\n this.state.colorDomain = colorDomain.map(x => x * metersPerPixel * weightsScale);\n } else {\n this.state.colorDomain = colorDomain || DEFAULT_COLOR_DOMAIN;\n }\n\n const uniforms = {\n radiusPixels,\n commonBounds,\n textureWidth: textureSize,\n weightsScale\n };\n // Attribute manager sets data array count as instaceCount on model\n // we need to set that as elementCount on 'weightsTransform'\n weightsTransform.update({\n elementCount: this.getNumInstances()\n });\n // Need to explictly specify clearColor as external context may have modified it\n withGLParameters(this.context.gl, {clearColor: [0, 0, 0, 0]}, () => {\n weightsTransform.run({\n uniforms,\n parameters: {\n blend: true,\n depthTest: false,\n blendFunc: [GL.ONE, GL.ONE],\n blendEquation: GL.FUNC_ADD\n },\n clearRenderTarget: true,\n // @ts-expect-error TODO - no longer supported in v9?\n attributes: this.getAttributes(),\n moduleSettings: this.getModuleSettings()\n });\n });\n this._updateMaxWeightValue();\n\n // reset filtering parameters (TODO: remove once luma issue#1193 is fixed)\n // TODO v9 sampler support in luma.gl needs to improve\n // weightsTexture.setSampler({\n // magFilter: 'linear',\n // minFilter: 'linear'\n // });\n }\n\n _debouncedUpdateWeightmap(fromTimer = false) {\n let {updateTimer} = this.state;\n const {debounceTimeout} = this.props;\n\n if (fromTimer) {\n updateTimer = null;\n // update\n this._updateBounds(true);\n this._updateTextureRenderingBounds();\n this.setState({isWeightMapDirty: true});\n } else {\n this.setState({isWeightMapDirty: false});\n clearTimeout(updateTimer);\n updateTimer = setTimeout(this._debouncedUpdateWeightmap.bind(this, true), debounceTimeout);\n }\n\n this.setState({updateTimer});\n }\n\n // input: worldBounds: [minLong, minLat, maxLong, maxLat]\n // input: opts.useLayerCoordinateSystem : layers coordiante system is used\n // optput: commonBounds: [minX, minY, maxX, maxY] scaled to fit the current texture\n _worldToCommonBounds(worldBounds, opts: {useLayerCoordinateSystem?: boolean} = {}) {\n const {useLayerCoordinateSystem = false} = opts;\n const [minLong, minLat, maxLong, maxLat] = worldBounds;\n const {viewport} = this.context;\n const {textureSize} = this.state;\n const {coordinateSystem} = this.props;\n\n const offsetMode =\n useLayerCoordinateSystem &&\n (coordinateSystem === COORDINATE_SYSTEM.LNGLAT_OFFSETS ||\n coordinateSystem === COORDINATE_SYSTEM.METER_OFFSETS);\n const offsetOriginCommon = offsetMode\n ? viewport.projectPosition(this.props.coordinateOrigin)\n : [0, 0];\n const size = (textureSize * RESOLUTION) / viewport.scale;\n\n let bottomLeftCommon;\n let topRightCommon;\n\n // Y-axis is flipped between World and Common bounds\n if (useLayerCoordinateSystem && !offsetMode) {\n bottomLeftCommon = this.projectPosition([minLong, minLat, 0]);\n topRightCommon = this.projectPosition([maxLong, maxLat, 0]);\n } else {\n bottomLeftCommon = viewport.projectPosition([minLong, minLat, 0]);\n topRightCommon = viewport.projectPosition([maxLong, maxLat, 0]);\n }\n // Ignore z component\n return scaleToAspectRatio(\n [\n bottomLeftCommon[0] - offsetOriginCommon[0],\n bottomLeftCommon[1] - offsetOriginCommon[1],\n topRightCommon[0] - offsetOriginCommon[0],\n topRightCommon[1] - offsetOriginCommon[1]\n ],\n size,\n size\n );\n }\n\n // input commonBounds: [xMin, yMin, xMax, yMax]\n // output worldBounds: [minLong, minLat, maxLong, maxLat]\n _commonToWorldBounds(commonBounds) {\n const [xMin, yMin, xMax, yMax] = commonBounds;\n const {viewport} = this.context;\n const bottomLeftWorld = viewport.unprojectPosition([xMin, yMin]);\n const topRightWorld = viewport.unprojectPosition([xMax, yMax]);\n\n return bottomLeftWorld.slice(0, 2).concat(topRightWorld.slice(0, 2));\n }\n}\n"],"file":"heatmap-layer.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/heatmap-layer/heatmap-layer.ts"],"names":["getBounds","boundsContain","packVertices","scaleToAspectRatio","getTextureCoordinates","getTextureParams","GL","TextureTransform","withGLParameters","AttributeManager","COORDINATE_SYSTEM","log","TriangleLayer","AggregationLayer","defaultColorRange","colorRangeToFlatArray","weightsVs","weightsFs","vsMax","fsMax","RESOLUTION","TEXTURE_PROPS","format","mipmaps","sampler","minFilter","magFilter","addressModeU","addressModeV","DEFAULT_COLOR_DOMAIN","AGGREGATION_MODE","SUM","MEAN","defaultProps","getPosition","type","value","x","position","getWeight","intensity","min","radiusPixels","max","colorRange","threshold","colorDomain","optional","aggregation","weightsTextureSize","debounceTimeout","REQUIRED_FEATURES","FLOAT_TARGET_FEATURES","DIMENSIONS","data","props","HeatmapLayer","state","initializeState","every","feature","context","device","features","has","setState","supported","error","id","initializeAggregationLayer","_setupTextureParams","_setupAttributes","_setupResources","shouldUpdateState","changeFlags","somethingChanged","updateState","opts","_updateHeatmapState","oldProps","_getChangeFlags","dataChanged","viewportChanged","boundsChanged","_updateBounds","_updateTextureRenderingBounds","clearTimeout","updateTimer","isWeightMapDirty","viewportZoomChanged","_debouncedUpdateWeightmap","_updateColorTexture","_updateWeightmap","zoom","viewport","renderLayers","weightsTexture","triPositionBuffer","triTexCoordBuffer","maxWeightsTexture","colorTexture","updateTriggers","TriangleLayerClass","getSubLayerClass","getSubLayerProps","coordinateSystem","DEFAULT","attributes","positions","texCoords","vertexCount","maxTexture","aggregationMode","texture","finalizeState","weightsTransform","maxWeightTransform","destroy","_getAttributeManager","stats","dimensions","isAttributeChanged","isAggregationDirty","compareAll","dimension","_createTextures","textureSize","createTexture","width","height","attributeManager","getAttributeManager","add","size","accessor","weights","positionAttributeName","Math","limits","maxTextureDimension2D","floatTargetSupport","weightsScale","warn","getShaders","vs","_fs","_createWeightsTransform","shaders","delete","targetTexture","targetTextureVarying","weightsTransformShaders","maxWeightsTransformShaders","_sourceTextures","inTexture","_targetTexture","_targetTextureVarying","elementCount","createBuffer","byteLength","updateShaders","shaderOptions","_updateMaxWeightValue","run","parameters","blend","depthTest","blendFunc","blendEquation","forceUpdate","viewportCorners","unproject","map","p","fround","visibleWorldBounds","newState","worldBounds","scaledCommonBounds","_worldToCommonBounds","_commonToWorldBounds","LNGLAT","normalizedCommonBounds","write","textureBounds","projectPosition","colors","Uint8Array","setImageData","length","commonBounds","useLayerCoordinateSystem","metersPerPixel","distanceScales","metersPerUnit","uniforms","textureWidth","update","getNumInstances","gl","clearColor","clearRenderTarget","getAttributes","moduleSettings","getModuleSettings","fromTimer","setTimeout","bind","minLong","minLat","maxLong","maxLat","offsetMode","LNGLAT_OFFSETS","METER_OFFSETS","offsetOriginCommon","coordinateOrigin","scale","bottomLeftCommon","topRightCommon","xMin","yMin","xMax","yMax","bottomLeftWorld","unprojectPosition","topRightWorld","slice","concat","layerName"],"mappings":"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","sourcesContent":["// Copyright (c) 2015 - 2019 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n/* global setTimeout clearTimeout */\nimport {\n getBounds,\n boundsContain,\n packVertices,\n scaleToAspectRatio,\n getTextureCoordinates,\n getTextureParams\n} from './heatmap-layer-utils';\nimport {Buffer, DeviceFeature, Texture, TextureProps, TextureFormat} from '@luma.gl/core';\nimport {GL} from '@luma.gl/constants';\nimport {TextureTransform, TextureTransformProps} from '@luma.gl/engine';\nimport {withGLParameters} from '@luma.gl/webgl';\nimport {\n Accessor,\n AccessorFunction,\n AttributeManager,\n ChangeFlags,\n Color,\n COORDINATE_SYSTEM,\n Layer,\n LayerContext,\n LayersList,\n log,\n Position,\n UpdateParameters,\n DefaultProps\n} from '@deck.gl/core';\nimport TriangleLayer from './triangle-layer';\nimport AggregationLayer, {AggregationLayerProps} from '../aggregation-layer';\nimport {defaultColorRange, colorRangeToFlatArray} from '../utils/color-utils';\nimport weightsVs from './weights-vs.glsl';\nimport weightsFs from './weights-fs.glsl';\nimport vsMax from './max-vs.glsl';\nimport fsMax from './max-fs.glsl';\n\nconst RESOLUTION = 2; // (number of common space pixels) / (number texels)\nconst TEXTURE_PROPS: TextureProps = {\n format: 'rgba8unorm',\n mipmaps: false,\n sampler: {\n minFilter: 'nearest',\n magFilter: 'nearest',\n addressModeU: 'clamp-to-edge',\n addressModeV: 'clamp-to-edge'\n }\n};\nconst DEFAULT_COLOR_DOMAIN = [0, 0];\nconst AGGREGATION_MODE = {\n SUM: 0,\n MEAN: 1\n};\n\nconst defaultProps: DefaultProps<HeatmapLayerProps> = {\n getPosition: {type: 'accessor', value: (x: any) => x.position},\n getWeight: {type: 'accessor', value: 1},\n intensity: {type: 'number', min: 0, value: 1},\n radiusPixels: {type: 'number', min: 1, max: 100, value: 50},\n colorRange: defaultColorRange,\n threshold: {type: 'number', min: 0, max: 1, value: 0.05},\n colorDomain: {type: 'array', value: null, optional: true},\n // 'SUM' or 'MEAN'\n aggregation: 'SUM',\n weightsTextureSize: {type: 'number', min: 128, max: 2048, value: 2048},\n debounceTimeout: {type: 'number', min: 0, max: 1000, value: 500}\n};\n\nconst REQUIRED_FEATURES: DeviceFeature[] = [\n 'blend-minmax-webgl1', // max weight calculation\n 'texture-formats-float32-webgl1' // weight-map as texture\n];\n\nconst FLOAT_TARGET_FEATURES: DeviceFeature[] = [\n 'texture-renderable-float32-webgl', // ability to render to float texture\n 'texture-blend-float-webgl1' // ability to blend when rendering to float texture\n];\n\nconst DIMENSIONS = {\n data: {\n props: ['radiusPixels']\n }\n};\n\nexport type HeatmapLayerProps<DataT = unknown> = _HeatmapLayerProps<DataT> &\n AggregationLayerProps<DataT>;\n\ntype _HeatmapLayerProps<DataT> = {\n /**\n * Radius of the circle in pixels, to which the weight of an object is distributed.\n *\n * @default 30\n */\n radiusPixels?: number;\n\n /**\n * Specified as an array of colors [color1, color2, ...].\n *\n * @default `6-class YlOrRd` - [colorbrewer](http://colorbrewer2.org/#type=sequential&scheme=YlOrRd&n=6)\n */\n colorRange?: Color[];\n\n /**\n * Value that is multiplied with the total weight at a pixel to obtain the final weight.\n *\n * @default 1\n */\n intensity?: number;\n\n /**\n * Ratio of the fading weight to the max weight, between `0` and `1`.\n *\n * For example, `0.1` affects all pixels with weight under 10% of the max.\n *\n * Ignored when `colorDomain` is specified.\n * @default 0.05\n */\n threshold?: number;\n\n /**\n * Controls how weight values are mapped to the `colorRange`, as an array of two numbers [`minValue`, `maxValue`].\n *\n * @default null\n */\n colorDomain?: [number, number] | null;\n\n /**\n * Defines the type of aggregation operation\n *\n * V valid values are 'SUM', 'MEAN'.\n *\n * @default 'SUM'\n */\n aggregation?: 'SUM' | 'MEAN';\n\n /**\n * Specifies the size of weight texture.\n * @default 2048\n */\n weightsTextureSize?: number;\n\n /**\n * Interval in milliseconds during which changes to the viewport don't trigger aggregation.\n *\n * @default 500\n */\n debounceTimeout?: number;\n\n /**\n * Method called to retrieve the position of each object.\n *\n * @default d => d.position\n */\n getPosition?: AccessorFunction<DataT, Position>;\n\n /**\n * The weight of each object.\n *\n * @default 1\n */\n getWeight?: Accessor<DataT, number>;\n};\n\n/** Visualizes the spatial distribution of data. */\nexport default class HeatmapLayer<\n DataT = any,\n ExtraPropsT extends {} = {}\n> extends AggregationLayer<DataT, ExtraPropsT & Required<_HeatmapLayerProps<DataT>>> {\n static layerName = 'HeatmapLayer';\n static defaultProps = defaultProps;\n\n state!: AggregationLayer<DataT>['state'] & {\n supported: boolean;\n colorDomain?: number[];\n isWeightMapDirty?: boolean;\n weightsTexture?: Texture;\n maxWeightsTexture?: Texture;\n colorTexture?: Texture;\n zoom?: number;\n worldBounds?: number[];\n normalizedCommonBounds?: number[];\n updateTimer?: any;\n triPositionBuffer?: Buffer;\n triTexCoordBuffer?: Buffer;\n weightsTransform?: TextureTransform;\n maxWeightTransform?: TextureTransform;\n textureSize: number;\n format: TextureFormat;\n type: GL;\n weightsScale: number;\n visibleWorldBounds: number[];\n viewportCorners: number[][];\n };\n\n initializeState() {\n if (!REQUIRED_FEATURES.every(feature => this.context.device.features.has(feature))) {\n this.setState({supported: false});\n log.error(`HeatmapLayer: ${this.id} is not supported on this browser`)();\n return;\n }\n super.initializeAggregationLayer(DIMENSIONS);\n this.setState({supported: true, colorDomain: DEFAULT_COLOR_DOMAIN});\n this._setupTextureParams();\n this._setupAttributes();\n this._setupResources();\n }\n\n shouldUpdateState({changeFlags}: UpdateParameters<this>) {\n // Need to be updated when viewport changes\n return changeFlags.somethingChanged;\n }\n\n /* eslint-disable max-statements,complexity */\n updateState(opts: UpdateParameters<this>) {\n if (!this.state.supported) {\n return;\n }\n super.updateState(opts);\n this._updateHeatmapState(opts);\n }\n\n _updateHeatmapState(opts: UpdateParameters<this>) {\n const {props, oldProps} = opts;\n const changeFlags = this._getChangeFlags(opts);\n\n if (changeFlags.dataChanged || changeFlags.viewportChanged) {\n // if data is changed, do not debounce and immediately update the weight map\n changeFlags.boundsChanged = this._updateBounds(changeFlags.dataChanged);\n this._updateTextureRenderingBounds();\n }\n\n if (changeFlags.dataChanged || changeFlags.boundsChanged) {\n // Update weight map immediately\n clearTimeout(this.state.updateTimer);\n this.setState({isWeightMapDirty: true});\n } else if (changeFlags.viewportZoomChanged) {\n // Update weight map when zoom stops\n this._debouncedUpdateWeightmap();\n }\n\n if (props.colorRange !== oldProps.colorRange) {\n this._updateColorTexture(opts);\n }\n\n if (this.state.isWeightMapDirty) {\n this._updateWeightmap();\n }\n\n this.setState({zoom: opts.context.viewport.zoom});\n }\n\n renderLayers(): LayersList | Layer {\n if (!this.state.supported) {\n return [];\n }\n const {\n weightsTexture,\n triPositionBuffer,\n triTexCoordBuffer,\n maxWeightsTexture,\n colorTexture,\n colorDomain\n } = this.state;\n const {updateTriggers, intensity, threshold, aggregation} = this.props;\n\n const TriangleLayerClass = this.getSubLayerClass('triangle', TriangleLayer);\n\n return new TriangleLayerClass(\n this.getSubLayerProps({\n id: 'triangle-layer',\n updateTriggers\n }),\n {\n // position buffer is filled with world coordinates generated from viewport.unproject\n // i.e. LNGLAT if geospatial, CARTESIAN otherwise\n coordinateSystem: COORDINATE_SYSTEM.DEFAULT,\n data: {\n attributes: {\n positions: triPositionBuffer,\n texCoords: triTexCoordBuffer\n }\n },\n vertexCount: 4,\n maxTexture: maxWeightsTexture,\n colorTexture,\n aggregationMode: AGGREGATION_MODE[aggregation] || 0,\n texture: weightsTexture,\n intensity,\n threshold,\n colorDomain\n }\n );\n }\n\n finalizeState(context: LayerContext) {\n super.finalizeState(context);\n const {\n weightsTransform,\n weightsTexture,\n maxWeightTransform,\n maxWeightsTexture,\n triPositionBuffer,\n triTexCoordBuffer,\n colorTexture,\n updateTimer\n } = this.state;\n weightsTransform?.destroy();\n weightsTexture?.destroy();\n maxWeightTransform?.destroy();\n maxWeightsTexture?.destroy();\n triPositionBuffer?.destroy();\n triTexCoordBuffer?.destroy();\n colorTexture?.destroy();\n if (updateTimer) {\n clearTimeout(updateTimer);\n }\n }\n\n // PRIVATE\n\n // override Composite layer private method to create AttributeManager instance\n _getAttributeManager() {\n return new AttributeManager(this.context.device, {\n id: this.props.id,\n stats: this.context.stats\n });\n }\n\n _getChangeFlags(opts: UpdateParameters<this>) {\n const changeFlags: Partial<ChangeFlags> & {\n boundsChanged?: boolean;\n viewportZoomChanged?: boolean;\n } = {};\n const {dimensions} = this.state;\n changeFlags.dataChanged =\n (this.isAttributeChanged() && 'attribute changed') || // if any attribute is changed\n (this.isAggregationDirty(opts, {\n compareAll: true,\n dimension: dimensions.data\n }) &&\n 'aggregation is dirty');\n changeFlags.viewportChanged = opts.changeFlags.viewportChanged;\n\n const {zoom} = this.state;\n if (!opts.context.viewport || opts.context.viewport.zoom !== zoom) {\n changeFlags.viewportZoomChanged = true;\n }\n\n return changeFlags;\n }\n\n _createTextures() {\n const {textureSize, format, type} = this.state;\n\n this.setState({\n weightsTexture: this.context.device.createTexture({\n width: textureSize,\n height: textureSize,\n format,\n type,\n ...TEXTURE_PROPS\n }),\n maxWeightsTexture: this.context.device.createTexture({format, type, ...TEXTURE_PROPS}) // 1 X 1 texture,\n });\n }\n\n _setupAttributes() {\n const attributeManager = this.getAttributeManager()!;\n attributeManager.add({\n positions: {size: 3, type: GL.DOUBLE, accessor: 'getPosition'},\n weights: {size: 1, accessor: 'getWeight'}\n });\n this.setState({positionAttributeName: 'positions'});\n }\n\n _setupTextureParams() {\n const {device} = this.context;\n const {weightsTextureSize} = this.props;\n\n const textureSize = Math.min(weightsTextureSize, device.limits.maxTextureDimension2D as number);\n const floatTargetSupport = FLOAT_TARGET_FEATURES.every(feature => device.features.has(feature));\n const {format, type} = getTextureParams({device, floatTargetSupport});\n const weightsScale = floatTargetSupport ? 1 : 1 / 255;\n this.setState({textureSize, format, type, weightsScale});\n if (!floatTargetSupport) {\n log.warn(\n `HeatmapLayer: ${this.id} rendering to float texture not supported, fallingback to low precession format`\n )();\n }\n }\n\n getShaders(type) {\n return super.getShaders(\n type === 'max-weights-transform'\n ? {\n vs: vsMax,\n _fs: fsMax\n }\n : {\n vs: weightsVs,\n _fs: weightsFs\n }\n );\n }\n\n _createWeightsTransform(shaders = {}) {\n let {weightsTransform} = this.state;\n weightsTransform?.delete();\n\n weightsTransform = new TextureTransform(this.context.device, {\n id: `${this.id}-weights-transform`,\n vertexCount: 1,\n targetTexture: this.state.weightsTexture!,\n targetTextureVarying: 'weightsTexture',\n ...shaders\n } as TextureTransformProps);\n this.setState({weightsTransform});\n }\n\n _setupResources() {\n this._createTextures();\n const {textureSize, weightsTexture, maxWeightsTexture} = this.state;\n\n const weightsTransformShaders = this.getShaders('weights-transform');\n this._createWeightsTransform(weightsTransformShaders);\n\n const maxWeightsTransformShaders = this.getShaders('max-weights-transform');\n const maxWeightTransform = new TextureTransform(this.context.device, {\n id: `${this.id}-max-weights-transform`,\n _sourceTextures: {\n inTexture: weightsTexture\n },\n _targetTexture: maxWeightsTexture,\n _targetTextureVarying: 'outTexture',\n ...maxWeightsTransformShaders,\n elementCount: textureSize * textureSize\n });\n\n this.setState({\n weightsTexture,\n maxWeightsTexture,\n maxWeightTransform,\n zoom: null,\n triPositionBuffer: this.context.device.createBuffer({\n byteLength: 48,\n // @ts-expect-error\n accessor: {size: 3}\n }),\n triTexCoordBuffer: this.context.device.createBuffer({\n byteLength: 48,\n // @ts-expect-error\n accessor: {size: 2}\n })\n });\n }\n\n // overwrite super class method to update transform model\n updateShaders(shaderOptions) {\n // sahder params (modules, injects) changed, update model object\n this._createWeightsTransform(shaderOptions);\n }\n\n _updateMaxWeightValue() {\n const {maxWeightTransform} = this.state;\n maxWeightTransform!.run({\n parameters: {\n // @ts-expect-error TODO(v9): Resolve errors.\n blend: true,\n depthTest: false,\n blendFunc: [GL.ONE, GL.ONE],\n blendEquation: GL.MAX\n }\n });\n }\n\n // Computes world bounds area that needs to be processed for generate heatmap\n _updateBounds(forceUpdate: any = false): boolean {\n const {viewport} = this.context;\n\n // Unproject all 4 corners of the current screen coordinates into world coordinates (lng/lat)\n // Takes care of viewport has non zero bearing/pitch (i.e axis not aligned with world coordiante system)\n const viewportCorners = [\n viewport.unproject([0, 0]),\n viewport.unproject([viewport.width, 0]),\n viewport.unproject([viewport.width, viewport.height]),\n viewport.unproject([0, viewport.height])\n ].map(p => p.map(Math.fround));\n\n // #1: get world bounds for current viewport extends\n const visibleWorldBounds = getBounds(viewportCorners); // TODO: Change to visible bounds\n\n const newState: Partial<HeatmapLayer['state']> = {visibleWorldBounds, viewportCorners};\n let boundsChanged = false;\n\n if (\n forceUpdate ||\n !this.state.worldBounds ||\n !boundsContain(this.state.worldBounds, visibleWorldBounds)\n ) {\n // #2 : convert world bounds to common (Flat) bounds\n // #3 : extend common bounds to match aspect ratio with viewport\n const scaledCommonBounds = this._worldToCommonBounds(visibleWorldBounds);\n\n // #4 :convert aligned common bounds to world bounds\n const worldBounds = this._commonToWorldBounds(scaledCommonBounds);\n\n // Clip webmercator projection limits\n if (this.props.coordinateSystem === COORDINATE_SYSTEM.LNGLAT) {\n worldBounds[1] = Math.max(worldBounds[1], -85.051129);\n worldBounds[3] = Math.min(worldBounds[3], 85.051129);\n worldBounds[0] = Math.max(worldBounds[0], -360);\n worldBounds[2] = Math.min(worldBounds[2], 360);\n }\n\n // #5: now convert world bounds to common using Layer's coordiante system and origin\n const normalizedCommonBounds = this._worldToCommonBounds(worldBounds);\n\n newState.worldBounds = worldBounds;\n newState.normalizedCommonBounds = normalizedCommonBounds;\n\n boundsChanged = true;\n }\n this.setState(newState);\n return boundsChanged;\n }\n\n _updateTextureRenderingBounds() {\n // Just render visible portion of the texture\n const {triPositionBuffer, triTexCoordBuffer, normalizedCommonBounds, viewportCorners} =\n this.state;\n\n const {viewport} = this.context;\n\n triPositionBuffer!.write(packVertices(viewportCorners, 3));\n\n const textureBounds = viewportCorners.map(p =>\n getTextureCoordinates(viewport.projectPosition(p), normalizedCommonBounds!)\n );\n triTexCoordBuffer!.write(packVertices(textureBounds, 2));\n }\n\n _updateColorTexture(opts) {\n const {colorRange} = opts.props;\n let {colorTexture} = this.state;\n const colors = colorRangeToFlatArray(colorRange, false, Uint8Array as any);\n\n if (colorTexture) {\n // @ts-expect-error TODO - no longer supported in v9?\n colorTexture.setImageData({\n data: colors,\n width: colorRange.length\n });\n } else {\n colorTexture = this.context.device.createTexture({\n data: colors,\n width: colorRange.length,\n height: 1,\n ...TEXTURE_PROPS\n });\n }\n this.setState({colorTexture});\n }\n\n _updateWeightmap() {\n const {radiusPixels, colorDomain, aggregation} = this.props;\n const {worldBounds, textureSize, weightsScale} = this.state;\n const weightsTransform = this.state.weightsTransform!;\n this.state.isWeightMapDirty = false;\n\n // convert world bounds to common using Layer's coordiante system and origin\n const commonBounds = this._worldToCommonBounds(worldBounds, {\n useLayerCoordinateSystem: true\n });\n\n if (colorDomain && aggregation === 'SUM') {\n // scale color domain to weight per pixel\n const {viewport} = this.context;\n const metersPerPixel =\n (viewport.distanceScales.metersPerUnit[2] * (commonBounds[2] - commonBounds[0])) /\n textureSize;\n this.state.colorDomain = colorDomain.map(x => x * metersPerPixel * weightsScale);\n } else {\n this.state.colorDomain = colorDomain || DEFAULT_COLOR_DOMAIN;\n }\n\n const uniforms = {\n radiusPixels,\n commonBounds,\n textureWidth: textureSize,\n weightsScale\n };\n // Attribute manager sets data array count as instaceCount on model\n // we need to set that as elementCount on 'weightsTransform'\n weightsTransform.update({\n elementCount: this.getNumInstances()\n });\n // Need to explictly specify clearColor as external context may have modified it\n withGLParameters(this.context.gl, {clearColor: [0, 0, 0, 0]}, () => {\n weightsTransform.run({\n uniforms,\n parameters: {\n // @ts-expect-error TODO(v9): Resolve errors.\n blend: true,\n depthTest: false,\n blendFunc: [GL.ONE, GL.ONE],\n blendEquation: GL.FUNC_ADD\n },\n clearRenderTarget: true,\n attributes: this.getAttributes(),\n moduleSettings: this.getModuleSettings()\n });\n });\n this._updateMaxWeightValue();\n\n // reset filtering parameters (TODO: remove once luma issue#1193 is fixed)\n // TODO v9 sampler support in luma.gl needs to improve\n // weightsTexture.setSampler({\n // magFilter: 'linear',\n // minFilter: 'linear'\n // });\n }\n\n _debouncedUpdateWeightmap(fromTimer = false) {\n let {updateTimer} = this.state;\n const {debounceTimeout} = this.props;\n\n if (fromTimer) {\n updateTimer = null;\n // update\n this._updateBounds(true);\n this._updateTextureRenderingBounds();\n this.setState({isWeightMapDirty: true});\n } else {\n this.setState({isWeightMapDirty: false});\n clearTimeout(updateTimer);\n updateTimer = setTimeout(this._debouncedUpdateWeightmap.bind(this, true), debounceTimeout);\n }\n\n this.setState({updateTimer});\n }\n\n // input: worldBounds: [minLong, minLat, maxLong, maxLat]\n // input: opts.useLayerCoordinateSystem : layers coordiante system is used\n // optput: commonBounds: [minX, minY, maxX, maxY] scaled to fit the current texture\n _worldToCommonBounds(worldBounds, opts: {useLayerCoordinateSystem?: boolean} = {}) {\n const {useLayerCoordinateSystem = false} = opts;\n const [minLong, minLat, maxLong, maxLat] = worldBounds;\n const {viewport} = this.context;\n const {textureSize} = this.state;\n const {coordinateSystem} = this.props;\n\n const offsetMode =\n useLayerCoordinateSystem &&\n (coordinateSystem === COORDINATE_SYSTEM.LNGLAT_OFFSETS ||\n coordinateSystem === COORDINATE_SYSTEM.METER_OFFSETS);\n const offsetOriginCommon = offsetMode\n ? viewport.projectPosition(this.props.coordinateOrigin)\n : [0, 0];\n const size = (textureSize * RESOLUTION) / viewport.scale;\n\n let bottomLeftCommon;\n let topRightCommon;\n\n // Y-axis is flipped between World and Common bounds\n if (useLayerCoordinateSystem && !offsetMode) {\n bottomLeftCommon = this.projectPosition([minLong, minLat, 0]);\n topRightCommon = this.projectPosition([maxLong, maxLat, 0]);\n } else {\n bottomLeftCommon = viewport.projectPosition([minLong, minLat, 0]);\n topRightCommon = viewport.projectPosition([maxLong, maxLat, 0]);\n }\n // Ignore z component\n return scaleToAspectRatio(\n [\n bottomLeftCommon[0] - offsetOriginCommon[0],\n bottomLeftCommon[1] - offsetOriginCommon[1],\n topRightCommon[0] - offsetOriginCommon[0],\n topRightCommon[1] - offsetOriginCommon[1]\n ],\n size,\n size\n );\n }\n\n // input commonBounds: [xMin, yMin, xMax, yMax]\n // output worldBounds: [minLong, minLat, maxLong, maxLat]\n _commonToWorldBounds(commonBounds) {\n const [xMin, yMin, xMax, yMax] = commonBounds;\n const {viewport} = this.context;\n const bottomLeftWorld = viewport.unprojectPosition([xMin, yMin]);\n const topRightWorld = viewport.unprojectPosition([xMax, yMax]);\n\n return bottomLeftWorld.slice(0, 2).concat(topRightWorld.slice(0, 2));\n }\n}\n"],"file":"heatmap-layer.js"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
export default `\
|
|
2
|
-
|
|
2
|
+
#version 300 es
|
|
3
|
+
in vec4 outTexture;
|
|
4
|
+
out vec4 fragColor;
|
|
3
5
|
void main() {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
+
fragColor = outTexture;
|
|
7
|
+
fragColor.g = outTexture.r / max(1.0, outTexture.a);
|
|
6
8
|
}
|
|
7
9
|
`;
|
|
8
10
|
//# sourceMappingURL=max-fs.glsl.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/heatmap-layer/max-fs.glsl.ts"],"names":[],"mappings":"AAAA,eAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,
|
|
1
|
+
{"version":3,"sources":["../../../src/heatmap-layer/max-fs.glsl.ts"],"names":[],"mappings":"AAAA,eAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CARA","sourcesContent":["export default `\\\n#version 300 es\nin vec4 outTexture;\nout vec4 fragColor;\nvoid main() {\n fragColor = outTexture;\n fragColor.g = outTexture.r / max(1.0, outTexture.a);\n}\n`;\n"],"file":"max-fs.glsl.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/heatmap-layer/max-vs.glsl.ts"],"names":[],"mappings":"AAAA,eAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,
|
|
1
|
+
{"version":3,"sources":["../../../src/heatmap-layer/max-vs.glsl.ts"],"names":[],"mappings":"AAAA,eAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAZA","sourcesContent":["export default `\\\n#version 300 es\nin vec4 inTexture;\nout vec4 outTexture;\n\nvoid main()\n{\noutTexture = inTexture;\ngl_Position = vec4(0, 0, 0, 1.);\n// Enforce default value for ANGLE issue (https://bugs.chromium.org/p/angleproject/issues/detail?id=3941)\ngl_PointSize = 1.0;\n}\n`;\n"],"file":"max-vs.glsl.js"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export default `\
|
|
2
|
+
#version 300 es
|
|
2
3
|
#define SHADER_NAME triangle-layer-fragment-shader
|
|
3
4
|
|
|
4
5
|
precision highp float;
|
|
@@ -8,19 +9,21 @@ uniform sampler2D texture;
|
|
|
8
9
|
uniform sampler2D colorTexture;
|
|
9
10
|
uniform float aggregationMode;
|
|
10
11
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
in vec2 vTexCoords;
|
|
13
|
+
in float vIntensityMin;
|
|
14
|
+
in float vIntensityMax;
|
|
15
|
+
|
|
16
|
+
out vec4 fragColor;
|
|
14
17
|
|
|
15
18
|
vec4 getLinearColor(float value) {
|
|
16
19
|
float factor = clamp(value * vIntensityMax, 0., 1.);
|
|
17
|
-
vec4 color =
|
|
20
|
+
vec4 color = texture(colorTexture, vec2(factor, 0.5));
|
|
18
21
|
color.a *= min(value * vIntensityMin, 1.0);
|
|
19
22
|
return color;
|
|
20
23
|
}
|
|
21
24
|
|
|
22
25
|
void main(void) {
|
|
23
|
-
vec4 weights =
|
|
26
|
+
vec4 weights = texture(texture, vTexCoords);
|
|
24
27
|
float weight = weights.r;
|
|
25
28
|
|
|
26
29
|
if (aggregationMode > 0.5) {
|
|
@@ -34,7 +37,7 @@ void main(void) {
|
|
|
34
37
|
|
|
35
38
|
vec4 linearColor = getLinearColor(weight);
|
|
36
39
|
linearColor.a *= opacity;
|
|
37
|
-
|
|
40
|
+
fragColor = linearColor;
|
|
38
41
|
}
|
|
39
42
|
`;
|
|
40
43
|
//# sourceMappingURL=triangle-layer-fragment.glsl.js.map
|