Skip to content

Commit 4fcc172

Browse files
committed
adaption of gl renderer for VectorTileLayer and Vector3DLayer
1 parent bac5903 commit 4fcc172

File tree

4 files changed

+12
-48
lines changed

4 files changed

+12
-48
lines changed

debug/terrain.html

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -127,8 +127,6 @@
127127
//mapbox服务
128128
debug: true,
129129
type: 'mapbox',
130-
tileSize: 256,
131-
132130
urlTemplate: 'https://{s}.tiles.mapbox.com/v4/mapbox.terrain-rgb/{z}/{x}/{y}.pngraw?access_token=pk.eyJ1IjoibWFwYm94LWdsLWpzIiwiYSI6ImNram9ybGI1ajExYjQyeGxlemppb2pwYjIifQ.LGy5UGNIsXUZdYMvfYRiAQ',
133131
// urlTemplate: 'https://api.mapbox.com/v4/mapbox.terrain-rgb/{z}/{x}/{y}@2x.png?access_token=pk.eyJ1Ijoidmhhd2siLCJhIjoiY2xmbWpqOXBoMGNmZDN2cjJwZXk0MXBzZiJ9.192VNPJG0VV9dGOCOX1gUw',
134132
// urlTemplate: 'https://osm-tiles.ams3.cdn.digitaloceanspaces.com/elevation/{z}/{x}/{y}.png',

packages/layer-3dtiles/src/layer/renderer/TileMeshPainter.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -803,7 +803,8 @@ export default class TileMeshPainter {
803803
instanceBuffers[p] = {
804804
buffer: this._regl.buffer({
805805
dimension: instanceData[p].length / instanceCount,
806-
data: instanceData[p]
806+
data: instanceData[p],
807+
name: p
807808
}),
808809
divisor: 1
809810
};
@@ -1447,7 +1448,7 @@ export default class TileMeshPainter {
14471448
}
14481449
const attrs = {};
14491450
for (const p in attributes) {
1450-
const buffer = getUniqueREGLBuffer(this._regl, attributes[p], { dimension: attributes[p].itemSize });
1451+
const buffer = getUniqueREGLBuffer(this._regl, attributes[p], { dimension: attributes[p].itemSize, name: p });
14511452
// 优先采用 attributeSemantics中定义的属性
14521453
const name = attributeSemantics[p] || p;
14531454
attrs[name] = extend({}, attributes[p]);

packages/vt/src/layer/renderer/VectorTileLayerRenderer.js

Lines changed: 8 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -248,20 +248,11 @@ class VectorTileLayerRenderer extends maptalks.renderer.TileLayerCanvasRenderer
248248
return !!inGroup;
249249
}
250250

251-
createContext() {
252-
const inGroup = this.canvas.gl && this.canvas.gl.wrap;
253-
if (inGroup) {
254-
this.gl = this.canvas.gl.wrap();
255-
this.regl = this.canvas.gl.regl;
256-
} else {
257-
const { gl, regl, attributes } = this._createREGLContext(this.canvas);
258-
this.gl = gl;
259-
this.regl = regl;
260-
this.glOptions = attributes;
261-
}
262-
if (inGroup) {
263-
this.canvas.pickingFBO = this.canvas.pickingFBO || this.regl.framebuffer(this.canvas.width, this.canvas.height);
264-
}
251+
initContext() {
252+
const { regl, reglGL } = this.context;
253+
this.regl = regl;
254+
this.gl = reglGL;
255+
this.canvas.pickingFBO = this.canvas.pickingFBO || this.regl.framebuffer(this.canvas.width, this.canvas.height);
265256
this.pickingFBO = this.canvas.pickingFBO || this.regl.framebuffer(this.canvas.width, this.canvas.height);
266257
this._debugPainter = new DebugPainter(this.regl, this.getMap());
267258
this._prepareWorker();
@@ -326,19 +317,6 @@ class VectorTileLayerRenderer extends maptalks.renderer.TileLayerCanvasRenderer
326317
this._workerCacheIndex++;
327318
}
328319

329-
clearCanvas() {
330-
super.clearCanvas();
331-
if (!this.regl) {
332-
return;
333-
}
334-
//这里必须通过regl来clear,如果直接调用webgl context的clear,则brdf的texture会被设为0
335-
this.regl.clear({
336-
color: CLEAR_COLOR,
337-
depth: 1,
338-
stencil: 0
339-
});
340-
}
341-
342320
isDrawable() {
343321
return true;
344322
}
@@ -1611,6 +1589,8 @@ class VectorTileLayerRenderer extends maptalks.renderer.TileLayerCanvasRenderer
16111589
this._groundPainter.dispose();
16121590
delete this._groundPainter;
16131591
}
1592+
delete this.gl;
1593+
delete this.regl;
16141594
if (super.onRemove) super.onRemove();
16151595
this._clearPlugin();
16161596
}
@@ -2006,8 +1986,7 @@ class VectorTileLayerRenderer extends maptalks.renderer.TileLayerCanvasRenderer
20061986

20071987
_getLayerOpacity() {
20081988
const layerOpacity = this.layer.options['opacity'];
2009-
// 不在GroupGLLayer中时,MapCanvasRenderer会读取opacity并按照透明度绘制,所以layerOpacity设成1
2010-
return this._isInGroupGLLayer() ? (isNil(layerOpacity) ? 1 : layerOpacity) : 1;
1989+
return (isNil(layerOpacity) ? 1 : layerOpacity);
20111990
}
20121991
}
20131992

packages/vt/src/layer/vector/Vector3DLayerRenderer.js

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1530,19 +1530,6 @@ class Vector3DLayerRenderer extends maptalks.renderer.CanvasRenderer {
15301530
/* eslint-enable no-empty */
15311531
}
15321532

1533-
clearCanvas() {
1534-
super.clearCanvas();
1535-
if (!this.regl) {
1536-
return;
1537-
}
1538-
//这里必须通过regl来clear,如果直接调用webgl context的clear,则brdf的texture会被设为0
1539-
this.regl.clear({
1540-
color: [0, 0, 0, 0],
1541-
depth: 1,
1542-
stencil: 0xFF
1543-
});
1544-
}
1545-
15461533
resizeCanvas(canvasSize) {
15471534
super.resizeCanvas(canvasSize);
15481535
const canvas = this.canvas;
@@ -1654,8 +1641,7 @@ class Vector3DLayerRenderer extends maptalks.renderer.CanvasRenderer {
16541641

16551642
_getLayerOpacity() {
16561643
const layerOpacity = this.layer.options['opacity'];
1657-
// 不在GroupGLLayer中时,MapCanvasRenderer会读取opacity并按照透明度绘制,所以layerOpacity设成1
1658-
return this._isInGroupGLLayer() ? (isNil(layerOpacity) ? 1 : layerOpacity) : 1;
1644+
return (isNil(layerOpacity) ? 1 : layerOpacity);
16591645
}
16601646
}
16611647

0 commit comments

Comments
 (0)