in modules/aggregation-layers/src/utils/gpu-grid-aggregation/gpu-grid-aggregator.js [307:379]
_renderAggregateData(opts) {
const {
cellSize,
projectPoints,
attributes,
moduleSettings,
numCol,
numRow,
weights,
translation,
scaling
} = opts;
const {maxMinFramebuffers, minFramebuffers, maxFramebuffers} = this.state;
const gridSize = [numCol, numRow];
const parameters = {
blend: true,
depthTest: false,
blendFunc: [GL.ONE, GL.ONE]
};
const uniforms = {
cellSize,
gridSize,
projectPoints,
translation,
scaling
};
for (const id in weights) {
const {needMin, needMax} = weights[id];
const combineMaxMin = needMin && needMax && weights[id].combineMaxMin;
this._renderToWeightsTexture({
id,
parameters,
moduleSettings,
uniforms,
gridSize,
attributes,
weights
});
if (combineMaxMin) {
this._renderToMaxMinTexture({
id,
parameters: Object.assign({}, parameters, {blendEquation: MAX_MIN_BLEND_EQUATION}),
gridSize,
minOrMaxFb: maxMinFramebuffers[id],
clearParams: {clearColor: [0, 0, 0, MAX_32_BIT_FLOAT]},
combineMaxMin
});
} else {
if (needMin) {
this._renderToMaxMinTexture({
id,
parameters: Object.assign({}, parameters, {blendEquation: MIN_BLEND_EQUATION}),
gridSize,
minOrMaxFb: minFramebuffers[id],
clearParams: {clearColor: [MAX_32_BIT_FLOAT, MAX_32_BIT_FLOAT, MAX_32_BIT_FLOAT, 0]},
combineMaxMin
});
}
if (needMax) {
this._renderToMaxMinTexture({
id,
parameters: Object.assign({}, parameters, {blendEquation: MAX_BLEND_EQUATION}),
gridSize,
minOrMaxFb: maxFramebuffers[id],
clearParams: {clearColor: [0, 0, 0, 0]},
combineMaxMin
});
}
}
}
}