@deck.gl/aggregation-layers 8.6.4 → 8.7.0-alpha.11
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 +2733 -1948
- package/dist/es5/aggregation-layer.js +163 -109
- package/dist/es5/aggregation-layer.js.map +1 -1
- package/dist/es5/contour-layer/contour-layer.js +260 -240
- package/dist/es5/contour-layer/contour-layer.js.map +1 -1
- package/dist/es5/contour-layer/contour-utils.js +86 -65
- package/dist/es5/contour-layer/contour-utils.js.map +1 -1
- package/dist/es5/contour-layer/marching-squares-codes.js +106 -181
- package/dist/es5/contour-layer/marching-squares-codes.js.map +1 -1
- package/dist/es5/contour-layer/marching-squares.js +59 -56
- package/dist/es5/contour-layer/marching-squares.js.map +1 -1
- package/dist/es5/cpu-grid-layer/cpu-grid-layer.js +121 -85
- package/dist/es5/cpu-grid-layer/cpu-grid-layer.js.map +1 -1
- package/dist/es5/cpu-grid-layer/grid-aggregator.js +119 -93
- package/dist/es5/cpu-grid-layer/grid-aggregator.js.map +1 -1
- package/dist/es5/gpu-grid-layer/gpu-grid-cell-layer-vertex.glsl.js +1 -1
- package/dist/es5/gpu-grid-layer/gpu-grid-cell-layer.js +167 -131
- package/dist/es5/gpu-grid-layer/gpu-grid-cell-layer.js.map +1 -1
- package/dist/es5/gpu-grid-layer/gpu-grid-layer.js +322 -319
- package/dist/es5/gpu-grid-layer/gpu-grid-layer.js.map +1 -1
- package/dist/es5/grid-aggregation-layer.js +230 -202
- package/dist/es5/grid-aggregation-layer.js.map +1 -1
- package/dist/es5/grid-layer/grid-layer.js +91 -61
- package/dist/es5/grid-layer/grid-layer.js.map +1 -1
- package/dist/es5/heatmap-layer/heatmap-layer-utils.js +59 -24
- package/dist/es5/heatmap-layer/heatmap-layer-utils.js.map +1 -1
- package/dist/es5/heatmap-layer/heatmap-layer.js +536 -515
- package/dist/es5/heatmap-layer/heatmap-layer.js.map +1 -1
- package/dist/es5/heatmap-layer/triangle-layer.js +91 -64
- package/dist/es5/heatmap-layer/triangle-layer.js.map +1 -1
- package/dist/es5/hexagon-layer/hexagon-aggregator.js +77 -59
- package/dist/es5/hexagon-layer/hexagon-aggregator.js.map +1 -1
- package/dist/es5/hexagon-layer/hexagon-layer.js +164 -121
- package/dist/es5/hexagon-layer/hexagon-layer.js.map +1 -1
- package/dist/es5/index.js +12 -12
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/screen-grid-layer/screen-grid-cell-layer.js +193 -168
- package/dist/es5/screen-grid-layer/screen-grid-cell-layer.js.map +1 -1
- package/dist/es5/screen-grid-layer/screen-grid-layer.js +250 -235
- package/dist/es5/screen-grid-layer/screen-grid-layer.js.map +1 -1
- package/dist/es5/utils/aggregation-operation-utils.js +31 -16
- package/dist/es5/utils/aggregation-operation-utils.js.map +1 -1
- package/dist/es5/utils/bin-sorter.js +198 -118
- package/dist/es5/utils/bin-sorter.js.map +1 -1
- package/dist/es5/utils/color-utils.js +10 -8
- package/dist/es5/utils/color-utils.js.map +1 -1
- package/dist/es5/utils/cpu-aggregator.js +342 -323
- package/dist/es5/utils/cpu-aggregator.js.map +1 -1
- package/dist/es5/utils/gpu-grid-aggregation/gpu-grid-aggregator-constants.js +18 -20
- package/dist/es5/utils/gpu-grid-aggregation/gpu-grid-aggregator-constants.js.map +1 -1
- package/dist/es5/utils/gpu-grid-aggregation/gpu-grid-aggregator.js +547 -549
- package/dist/es5/utils/gpu-grid-aggregation/gpu-grid-aggregator.js.map +1 -1
- package/dist/es5/utils/grid-aggregation-utils.js +44 -50
- package/dist/es5/utils/grid-aggregation-utils.js.map +1 -1
- package/dist/es5/utils/prop-utils.js +2 -2
- package/dist/es5/utils/prop-utils.js.map +1 -1
- package/dist/es5/utils/resource-utils.js +39 -32
- package/dist/es5/utils/resource-utils.js.map +1 -1
- package/dist/es5/utils/scale-utils.js +66 -36
- package/dist/es5/utils/scale-utils.js.map +1 -1
- package/dist/esm/contour-layer/marching-squares-codes.js.map +1 -1
- package/dist/esm/gpu-grid-layer/gpu-grid-cell-layer-vertex.glsl.js +1 -1
- package/dist/esm/gpu-grid-layer/gpu-grid-cell-layer-vertex.glsl.js.map +1 -1
- package/dist/esm/heatmap-layer/heatmap-layer.js +4 -1
- package/dist/esm/heatmap-layer/heatmap-layer.js.map +1 -1
- package/dist/esm/heatmap-layer/triangle-layer.js.map +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/screen-grid-layer/screen-grid-cell-layer.js.map +1 -1
- package/dist/esm/utils/aggregation-operation-utils.js.map +1 -1
- package/dist/esm/utils/cpu-aggregator.js.map +1 -1
- package/dist/esm/utils/gpu-grid-aggregation/gpu-grid-aggregator.js.map +1 -1
- package/dist.min.js +1 -1
- package/package.json +3 -3
- package/src/contour-layer/marching-squares-codes.js +52 -10
- package/src/gpu-grid-layer/gpu-grid-cell-layer-vertex.glsl.js +2 -3
- package/src/heatmap-layer/heatmap-layer.js +6 -10
- package/src/heatmap-layer/triangle-layer.js +2 -9
- package/src/{index.js → index.ts} +0 -0
- package/src/utils/aggregation-operation-utils.js +4 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/utils/gpu-grid-aggregation/gpu-grid-aggregator.js"],"names":["Model","Transform","FEATURES","hasFeatures","isWebGL2","readPixelsToBuffer","withParameters","fp64arithmetic","log","project32","_mergeShaders","mergeShaders","DEFAULT_RUN_PARAMS","MAX_32_BIT_FLOAT","MIN_BLEND_EQUATION","MAX_BLEND_EQUATION","MAX_MIN_BLEND_EQUATION","EQUATION_MAP","DEFAULT_WEIGHT_PARAMS","PIXEL_SIZE","AGGREGATION_OPERATION","AGGREGATE_TO_GRID_VS","AGGREGATE_TO_GRID_FS","AGGREGATE_ALL_VS","AGGREGATE_ALL_FS","TRANSFORM_MEAN_VS","getFloatTexture","getFramebuffer","BUFFER_NAMES","ARRAY_BUFFER_MAP","maxData","minData","maxMinData","REQUIRED_FEATURES","WEBGL2","COLOR_ATTACHMENT_RGBA32F","BLEND_EQUATION_MINMAX","FLOAT_BLEND","TEXTURE_FLOAT","GPUGridAggregator","getAggregationData","aggregationData","pixelIndex","index","results","cellCount","cellWeight","maxCellWieght","minCellWeight","totalCount","getCellData","countsData","size","numCells","length","cellWeights","Float32Array","cellCounts","Uint32Array","i","sizeIndex","isSupported","gl","constructor","opts","id","state","weightAttributes","textures","meanTextures","buffers","framebuffers","maxMinFramebuffers","minFramebuffers","maxFramebuffers","equations","resources","_hasGPUSupport","_setupModels","delete","gridAggregationModel","allAggregationModel","meanTransform","deleteResources","run","setState","aggregationParams","_normalizeAggregationParams","_runAggregation","getData","weightId","data","aggregationBuffer","arrayName","bufferName","updateShaders","shaderOptions","modelDirty","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","minOrMaxFb","clearParams","clearColor","framebuffer","viewport","clear","draw","uSampler","texture","operation","MIN","MEAN","transformOptions","_sourceTextures","aggregationValues","_targetTexture","elementCount","width","height","update","getMeanTransform","attach","_updateModels","_setupFramebuffers","framebufferSize","resize","SUM","_getMinMaxTexture","name","getAggregationModel","instanceCount","getAllAggregationModel","_setupWeightAttributes","vertexCount","setVertexCount","setAttributes","setInstanceCount","result","Array","isArray","forEach","obj","shaders","vs","fs","modules","drawMode","isInstanced","position","_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 GL from '@luma.gl/constants';\nimport {\n Model,\n Transform,\n FEATURES,\n hasFeatures,\n isWebGL2,\n readPixelsToBuffer,\n withParameters\n} from '@luma.gl/core';\nimport {fp64arithmetic} from '@luma.gl/shadertools';\nimport {log, project32, _mergeShaders as mergeShaders} 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.js';\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 = [\n FEATURES.WEBGL2, // TODO: Remove after trannsform refactor\n FEATURES.COLOR_ATTACHMENT_RGBA32F,\n FEATURES.BLEND_EQUATION_MINMAX,\n FEATURES.FLOAT_BLEND,\n FEATURES.TEXTURE_FLOAT\n];\n\nexport default class GPUGridAggregator {\n // Decode and return aggregation data of given pixel.\n static getAggregationData({aggregationData, maxData, minData, maxMinData, pixelIndex}) {\n const index = pixelIndex * PIXEL_SIZE;\n const results = {};\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 = maxData[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(gl) {\n return hasFeatures(gl, REQUIRED_FEATURES);\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 constructor(gl, opts = {}) {\n this.id = opts.id || 'gpu-grid-aggregator';\n this.gl = gl;\n this.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 // common resources to be deleted\n resources: {},\n\n // results\n results: {}\n };\n this._hasGPUSupport =\n isWebGL2(gl) && // gl_InstanceID usage in min/max calculation shaders\n hasFeatures(\n this.gl,\n FEATURES.BLEND_EQUATION_MINMAX, // set min/max blend modes\n FEATURES.COLOR_ATTACHMENT_RGBA32F, // render to float texture\n FEATURES.TEXTURE_FLOAT // sample from a float texture\n );\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?.delete();\n allAggregationModel?.delete();\n meanTransform?.delete();\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 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 {gl, allAggregationModel} = this;\n\n withParameters(\n gl,\n {\n ...clearParams,\n framebuffer: minOrMaxFb,\n viewport: [0, 0, gridSize[0], gridSize[1]]\n },\n () => {\n gl.clear(gl.COLOR_BUFFER_BIT);\n\n allAggregationModel.draw({\n parameters,\n uniforms: {\n uSampler: framebuffers[id].texture,\n gridSize,\n combineMaxMin\n }\n });\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 {gl, 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 withParameters(\n gl,\n {\n framebuffer: framebuffers[id],\n viewport: [0, 0, gridSize[0], gridSize[1]],\n clearColor\n },\n () => {\n gl.clear(gl.COLOR_BUFFER_BIT);\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(gl, 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.gl, {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.gl, {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.gl, {\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.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.gl, {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.gl, {\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.gl, {\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.gl, {id: `resourceName`});\n }\n return resources[name];\n }\n\n _setupModels({numCol = 0, numRow = 0} = {}) {\n const {gl} = this;\n const {shaderOptions} = this.state;\n this.gridAggregationModel?.delete();\n this.gridAggregationModel = getAggregationModel(gl, shaderOptions);\n if (!this.allAggregationModel) {\n const instanceCount = numCol * numRow;\n this.allAggregationModel = getAllAggregationModel(gl, 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(gl, 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(gl, {\n id: 'Gird-Aggregation-Model',\n vertexCount: 1,\n drawMode: GL.POINTS,\n ...shaders\n });\n}\n\nfunction getAllAggregationModel(gl, instanceCount) {\n return new Model(gl, {\n id: 'All-Aggregation-Model',\n vs: AGGREGATE_ALL_VS,\n fs: AGGREGATE_ALL_FS,\n modules: [fp64arithmetic],\n vertexCount: 1,\n drawMode: GL.POINTS,\n isInstanced: true,\n instanceCount,\n attributes: {\n position: [0, 0]\n }\n });\n}\n\nfunction getMeanTransform(gl, opts) {\n return new Transform(gl, {\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.js"],"names":["Model","Transform","FEATURES","hasFeatures","isWebGL2","readPixelsToBuffer","withParameters","fp64arithmetic","log","project32","_mergeShaders","mergeShaders","DEFAULT_RUN_PARAMS","MAX_32_BIT_FLOAT","MIN_BLEND_EQUATION","MAX_BLEND_EQUATION","MAX_MIN_BLEND_EQUATION","EQUATION_MAP","DEFAULT_WEIGHT_PARAMS","PIXEL_SIZE","AGGREGATION_OPERATION","AGGREGATE_TO_GRID_VS","AGGREGATE_TO_GRID_FS","AGGREGATE_ALL_VS","AGGREGATE_ALL_FS","TRANSFORM_MEAN_VS","getFloatTexture","getFramebuffer","BUFFER_NAMES","ARRAY_BUFFER_MAP","maxData","minData","maxMinData","REQUIRED_FEATURES","WEBGL2","COLOR_ATTACHMENT_RGBA32F","BLEND_EQUATION_MINMAX","FLOAT_BLEND","TEXTURE_FLOAT","GPUGridAggregator","getAggregationData","aggregationData","pixelIndex","index","results","cellCount","cellWeight","maxCellWieght","minCellWeight","totalCount","getCellData","countsData","size","numCells","length","cellWeights","Float32Array","cellCounts","Uint32Array","i","sizeIndex","isSupported","gl","constructor","opts","id","state","weightAttributes","textures","meanTextures","buffers","framebuffers","maxMinFramebuffers","minFramebuffers","maxFramebuffers","equations","resources","_hasGPUSupport","_setupModels","delete","gridAggregationModel","allAggregationModel","meanTransform","deleteResources","run","setState","aggregationParams","_normalizeAggregationParams","_runAggregation","getData","weightId","data","aggregationBuffer","arrayName","bufferName","updateShaders","shaderOptions","modelDirty","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","minOrMaxFb","clearParams","clearColor","framebuffer","viewport","clear","draw","uSampler","texture","operation","MIN","MEAN","transformOptions","_sourceTextures","aggregationValues","_targetTexture","elementCount","width","height","update","getMeanTransform","attach","_updateModels","_setupFramebuffers","framebufferSize","resize","SUM","_getMinMaxTexture","name","getAggregationModel","instanceCount","getAllAggregationModel","_setupWeightAttributes","vertexCount","setVertexCount","setAttributes","setInstanceCount","result","Array","isArray","forEach","obj","shaders","vs","fs","modules","drawMode","isInstanced","position","_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 GL from '@luma.gl/constants';\nimport {\n Model,\n Transform,\n FEATURES,\n hasFeatures,\n isWebGL2,\n readPixelsToBuffer,\n withParameters\n} from '@luma.gl/core';\nimport {fp64arithmetic} from '@luma.gl/shadertools';\nimport {log, project32, _mergeShaders as mergeShaders} 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.js';\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 = [\n FEATURES.WEBGL2, // TODO: Remove after trannsform refactor\n FEATURES.COLOR_ATTACHMENT_RGBA32F,\n FEATURES.BLEND_EQUATION_MINMAX,\n FEATURES.FLOAT_BLEND,\n FEATURES.TEXTURE_FLOAT\n];\n\nexport default class GPUGridAggregator {\n // Decode and return aggregation data of given pixel.\n static getAggregationData({aggregationData, maxData, minData, maxMinData, pixelIndex}) {\n const index = pixelIndex * PIXEL_SIZE;\n const results = {};\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 = maxData[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(gl) {\n return hasFeatures(gl, REQUIRED_FEATURES);\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 constructor(gl, opts = {}) {\n this.id = opts.id || 'gpu-grid-aggregator';\n this.gl = gl;\n this.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 // common resources to be deleted\n resources: {},\n\n // results\n results: {}\n };\n this._hasGPUSupport =\n isWebGL2(gl) && // gl_InstanceID usage in min/max calculation shaders\n hasFeatures(\n this.gl,\n FEATURES.BLEND_EQUATION_MINMAX, // set min/max blend modes\n FEATURES.COLOR_ATTACHMENT_RGBA32F, // render to float texture\n FEATURES.TEXTURE_FLOAT // sample from a float texture\n );\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?.delete();\n allAggregationModel?.delete();\n meanTransform?.delete();\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 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 {gl, allAggregationModel} = this;\n\n withParameters(\n gl,\n {\n ...clearParams,\n framebuffer: minOrMaxFb,\n viewport: [0, 0, gridSize[0], gridSize[1]]\n },\n () => {\n gl.clear(gl.COLOR_BUFFER_BIT);\n\n allAggregationModel.draw({\n parameters,\n uniforms: {\n uSampler: framebuffers[id].texture,\n gridSize,\n combineMaxMin\n }\n });\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 {gl, 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 withParameters(\n gl,\n {\n framebuffer: framebuffers[id],\n viewport: [0, 0, gridSize[0], gridSize[1]],\n clearColor\n },\n () => {\n gl.clear(gl.COLOR_BUFFER_BIT);\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(gl, 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.gl, {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.gl, {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.gl, {\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.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.gl, {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.gl, {\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.gl, {\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.gl, {id: `resourceName`});\n }\n return resources[name];\n }\n\n _setupModels({numCol = 0, numRow = 0} = {}) {\n const {gl} = this;\n const {shaderOptions} = this.state;\n this.gridAggregationModel?.delete();\n this.gridAggregationModel = getAggregationModel(gl, shaderOptions);\n if (!this.allAggregationModel) {\n const instanceCount = numCol * numRow;\n this.allAggregationModel = getAllAggregationModel(gl, 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(gl, 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(gl, {\n id: 'Gird-Aggregation-Model',\n vertexCount: 1,\n drawMode: GL.POINTS,\n ...shaders\n });\n}\n\nfunction getAllAggregationModel(gl, instanceCount) {\n return new Model(gl, {\n id: 'All-Aggregation-Model',\n vs: AGGREGATE_ALL_VS,\n fs: AGGREGATE_ALL_FS,\n modules: [fp64arithmetic],\n vertexCount: 1,\n drawMode: GL.POINTS,\n isInstanced: true,\n instanceCount,\n attributes: {\n position: [0, 0]\n }\n });\n}\n\nfunction getMeanTransform(gl, opts) {\n return new Transform(gl, {\n vs: TRANSFORM_MEAN_VS,\n _targetTextureVarying: 'meanValues',\n ...opts\n });\n}\n"],"file":"gpu-grid-aggregator.js"}
|