Make some adaptations to the PointsLayer renderer to make it work

This commit is contained in:
Olivier Guyot
2022-03-16 17:53:12 +01:00
parent 979dfd3a55
commit a2ba7ecaa7
2 changed files with 21 additions and 21 deletions

View File

@@ -5,11 +5,7 @@ import BaseVector from '../../layer/BaseVector.js';
import VectorEventType from '../../source/VectorEventType.js'; import VectorEventType from '../../source/VectorEventType.js';
import ViewHint from '../../ViewHint.js'; import ViewHint from '../../ViewHint.js';
import WebGLArrayBuffer from '../../webgl/Buffer.js'; import WebGLArrayBuffer from '../../webgl/Buffer.js';
import WebGLLayerRenderer, { import WebGLLayerRenderer from './Layer.js';
WebGLWorkerMessageType,
colorDecodeId,
colorEncodeId,
} from './Layer.js';
import WebGLRenderTarget from '../../webgl/RenderTarget.js'; import WebGLRenderTarget from '../../webgl/RenderTarget.js';
import {ARRAY_BUFFER, DYNAMIC_DRAW, ELEMENT_ARRAY_BUFFER} from '../../webgl.js'; import {ARRAY_BUFFER, DYNAMIC_DRAW, ELEMENT_ARRAY_BUFFER} from '../../webgl.js';
import {AttributeType, DefaultUniform} from '../../webgl/Helper.js'; import {AttributeType, DefaultUniform} from '../../webgl/Helper.js';
@@ -25,6 +21,8 @@ import {buffer, createEmpty, equals, getWidth} from '../../extent.js';
import {create as createWebGLWorker} from '../../worker/webgl.js'; import {create as createWebGLWorker} from '../../worker/webgl.js';
import {getUid} from '../../util.js'; import {getUid} from '../../util.js';
import {listen, unlistenByKey} from '../../events.js'; import {listen, unlistenByKey} from '../../events.js';
import {colorDecodeId, colorEncodeId} from '../../render/webgl/utils.js';
import {WebGLWorkerMessageType} from '../../render/webgl/constants.js';
/** /**
* @typedef {Object} CustomAttribute A description of a custom attribute to be passed on to the GPU, with a value different * @typedef {Object} CustomAttribute A description of a custom attribute to be passed on to the GPU, with a value different
@@ -303,7 +301,7 @@ class WebGLPointsLayerRenderer extends WebGLLayerRenderer {
*/ */
function (event) { function (event) {
const received = event.data; const received = event.data;
if (received.type === WebGLWorkerMessageType.GENERATE_BUFFERS) { if (received.type === WebGLWorkerMessageType.GENERATE_POINT_BUFFERS) {
const projectionTransform = received.projectionTransform; const projectionTransform = received.projectionTransform;
if (received.hitDetection) { if (received.hitDetection) {
this.hitVerticesBuffer_.fromArrayBuffer(received.vertexBuffer); this.hitVerticesBuffer_.fromArrayBuffer(received.vertexBuffer);
@@ -637,9 +635,10 @@ class WebGLPointsLayerRenderer extends WebGLLayerRenderer {
} }
} }
/** @type {import('./Layer').WebGLWorkerGenerateBuffersMessage} */ /** @type {import('../../render/webgl/constants.js').WebGLWorkerGenerateBuffersMessage} */
const message = { const message = {
type: WebGLWorkerMessageType.GENERATE_BUFFERS, id: 0,
type: WebGLWorkerMessageType.GENERATE_POINT_BUFFERS,
renderInstructions: this.renderInstructions_.buffer, renderInstructions: this.renderInstructions_.buffer,
customAttributesCount: this.customAttributes.length, customAttributesCount: this.customAttributes.length,
}; };
@@ -650,10 +649,11 @@ class WebGLPointsLayerRenderer extends WebGLLayerRenderer {
this.worker_.postMessage(message, [this.renderInstructions_.buffer]); this.worker_.postMessage(message, [this.renderInstructions_.buffer]);
this.renderInstructions_ = null; this.renderInstructions_ = null;
/** @type {import('./Layer').WebGLWorkerGenerateBuffersMessage} */ /** @type {import('../../render/webgl/constants.js').WebGLWorkerGenerateBuffersMessage} */
if (this.hitDetectionEnabled_) { if (this.hitDetectionEnabled_) {
const hitMessage = { const hitMessage = {
type: WebGLWorkerMessageType.GENERATE_BUFFERS, id: 0,
type: WebGLWorkerMessageType.GENERATE_POINT_BUFFERS,
renderInstructions: this.hitRenderInstructions_.buffer, renderInstructions: this.hitRenderInstructions_.buffer,
customAttributesCount: 5 + this.customAttributes.length, customAttributesCount: 5 + this.customAttributes.length,
}; };

View File

@@ -8,7 +8,7 @@ import View from '../../../../../../src/ol/View.js';
import ViewHint from '../../../../../../src/ol/ViewHint.js'; import ViewHint from '../../../../../../src/ol/ViewHint.js';
import WebGLPointsLayer from '../../../../../../src/ol/layer/WebGLPoints.js'; import WebGLPointsLayer from '../../../../../../src/ol/layer/WebGLPoints.js';
import WebGLPointsLayerRenderer from '../../../../../../src/ol/renderer/webgl/PointsLayer.js'; import WebGLPointsLayerRenderer from '../../../../../../src/ol/renderer/webgl/PointsLayer.js';
import {WebGLWorkerMessageType} from '../../../../../../src/ol/renderer/webgl/Layer.js'; import {WebGLWorkerMessageType} from '../../../../../../src/ol/render/webgl/constants.js';
import { import {
compose as composeTransform, compose as composeTransform,
create as createTransform, create as createTransform,
@@ -156,7 +156,7 @@ describe('ol/renderer/webgl/PointsLayer', function () {
const attributePerVertex = 3; const attributePerVertex = 3;
renderer.worker_.addEventListener('message', function (event) { renderer.worker_.addEventListener('message', function (event) {
if (event.data.type !== WebGLWorkerMessageType.GENERATE_BUFFERS) { if (event.data.type !== WebGLWorkerMessageType.GENERATE_POINT_BUFFERS) {
return; return;
} }
expect(renderer.verticesBuffer_.getArray().length).to.eql( expect(renderer.verticesBuffer_.getArray().length).to.eql(
@@ -192,7 +192,7 @@ describe('ol/renderer/webgl/PointsLayer', function () {
const attributePerVertex = 8; const attributePerVertex = 8;
renderer.worker_.addEventListener('message', function (event) { renderer.worker_.addEventListener('message', function (event) {
if (event.data.type !== WebGLWorkerMessageType.GENERATE_BUFFERS) { if (event.data.type !== WebGLWorkerMessageType.GENERATE_POINT_BUFFERS) {
return; return;
} }
if (!renderer.hitVerticesBuffer_.getArray()) { if (!renderer.hitVerticesBuffer_.getArray()) {
@@ -231,7 +231,7 @@ describe('ol/renderer/webgl/PointsLayer', function () {
renderer.prepareFrame(frameState); renderer.prepareFrame(frameState);
renderer.worker_.addEventListener('message', function (event) { renderer.worker_.addEventListener('message', function (event) {
if (event.data.type !== WebGLWorkerMessageType.GENERATE_BUFFERS) { if (event.data.type !== WebGLWorkerMessageType.GENERATE_POINT_BUFFERS) {
return; return;
} }
const attributePerVertex = 3; const attributePerVertex = 3;
@@ -627,14 +627,14 @@ describe('ol/renderer/webgl/PointsLayer', function () {
beforeEach(function () { beforeEach(function () {
source = new VectorSource({ source = new VectorSource({
features: new GeoJSON().readFeatures({ features: new GeoJSON().readFeatures({
'type': 'FeatureCollection', type: 'FeatureCollection',
'features': [ features: [
{ {
'type': 'Feature', type: 'Feature',
'properties': {}, properties: {},
'geometry': { geometry: {
'type': 'Point', type: 'Point',
'coordinates': [13, 52], coordinates: [13, 52],
}, },
}, },
], ],