in modules/aggregation-layers/src/contour-layer/contour-layer.js [149:217]
updateAggregationState(opts) {
const {props, oldProps} = opts;
const {cellSize, coordinateSystem} = props;
const {viewport} = this.context;
const cellSizeChanged = oldProps.cellSize !== cellSize;
let gpuAggregation = props.gpuAggregation;
if (this.state.gpuAggregation !== props.gpuAggregation) {
if (gpuAggregation && !GPUGridAggregator.isSupported(this.context.gl)) {
log.warn('GPU Grid Aggregation not supported, falling back to CPU')();
gpuAggregation = false;
}
}
const gpuAggregationChanged = gpuAggregation !== this.state.gpuAggregation;
this.setState({
gpuAggregation
});
const {dimensions} = this.state;
const positionsChanged = this.isAttributeChanged(POSITION_ATTRIBUTE_NAME);
const {data, weights} = dimensions;
let {boundingBox} = this.state;
if (positionsChanged) {
boundingBox = getBoundingBox(this.getAttributes(), this.getNumInstances());
this.setState({boundingBox});
}
if (positionsChanged || cellSizeChanged) {
const {gridOffset, translation, width, height, numCol, numRow} = getGridParams(
boundingBox,
cellSize,
viewport,
coordinateSystem
);
this.allocateResources(numRow, numCol);
this.setState({
gridOffset,
boundingBox,
translation,
posOffset: translation.slice(), // Used for CPU aggregation, to offset points
gridOrigin: [-1 * translation[0], -1 * translation[1]],
width,
height,
numCol,
numRow
});
}
const aggregationDataDirty =
positionsChanged ||
gpuAggregationChanged ||
this.isAggregationDirty(opts, {
dimension: data,
compareAll: gpuAggregation // check for all (including extentions props) when using gpu aggregation
});
const aggregationWeightsDirty = this.isAggregationDirty(opts, {
dimension: weights
});
if (aggregationWeightsDirty) {
this._updateAccessors(opts);
}
if (aggregationDataDirty || aggregationWeightsDirty) {
this._resetResults();
}
this.setState({
aggregationDataDirty,
aggregationWeightsDirty
});
}