Include WebGL context in render events for WebGL layers

This commit is contained in:
Tim Schaub
2021-10-28 18:43:04 -06:00
parent aff751bdf0
commit 2adf74ece4
8 changed files with 172 additions and 20 deletions

View File

@@ -4,6 +4,7 @@ import View from '../../../../../src/ol/View.js';
import WebGLHelper from '../../../../../src/ol/webgl/Helper.js';
import WebGLTileLayer from '../../../../../src/ol/layer/WebGLTile.js';
import {createCanvasContext2D} from '../../../../../src/ol/dom.js';
import {getRenderPixel} from '../../../../../src/ol/render.js';
describe('ol/layer/WebGLTile', function () {
/** @type {WebGLTileLayer} */
@@ -129,6 +130,46 @@ describe('ol/layer/WebGLTile', function () {
});
});
it('dispatches a prerender event with WebGL context and inverse pixel transform', (done) => {
let called = false;
layer.on('prerender', (event) => {
expect(event.context).to.be.a(WebGLRenderingContext);
const mapSize = event.frameState.size;
const bottomLeft = getRenderPixel(event, [0, mapSize[1]]);
expect(bottomLeft).to.eql([0, 0]);
called = true;
});
map.once('rendercomplete', () => {
expect(called).to.be(true);
done();
});
map.render();
});
it('dispatches a postrender event with WebGL context and inverse pixel transform', (done) => {
let called = false;
layer.on('postrender', (event) => {
expect(event.context).to.be.a(WebGLRenderingContext);
const mapSize = event.frameState.size;
const topRight = getRenderPixel(event, [mapSize[1], 0]);
const pixelRatio = event.frameState.pixelRatio;
expect(topRight).to.eql([
mapSize[0] * pixelRatio,
mapSize[1] * pixelRatio,
]);
called = true;
});
map.once('rendercomplete', () => {
expect(called).to.be(true);
done();
});
map.render();
});
it('tries to expire the source tile cache', (done) => {
const source = layer.getSource();
const expire = sinon.spy(source, 'expireCache');