Skip to content

Commit 24a084d

Browse files
Separate composite and non-composite layer APIs (visgl#585)
- Only composite layers have `renderLayer()` methods - Only non-composite layers' `draw()` methods are called during render
1 parent a45eb60 commit 24a084d

7 files changed

Lines changed: 24 additions & 10 deletions

File tree

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,11 @@ Ref: http://keepachangelog.com/en/0.3.0/
1717

1818
## Beta Releases
1919

20+
[TBD]
21+
22+
- BREAKING: Only composite layers have `renderLayer` methods
23+
- BREAKING: Only primitive layers' `draw` methods are called during render
24+
2025
### deck.gl v4.1-alpha.1
2126

2227
- HOTFIX: Fix the bug that layer is finalized at every cycle due to an incorrect if check(#552)

docs/advanced/layer-lifecycle.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,8 @@ and updating unforms by calling
5959
`model.setUniforms`.
6060
By default, when `props.data` changes, all attributes are recalculated.
6161

62-
A layer may use
63-
[`layer.renderLayers()`](/docs/api-reference/composite-layer.md#-renderlayers-)
62+
A composite layer may use
63+
[`compositeLayer.renderLayers()`](/docs/api-reference/composite-layer.md#-renderlayers-)
6464
to insert one or more deck.gl layers after itself.
6565
The generated layers will then be matched and updated,
6666
allowing the decomposition of the drawing of a complex data set

docs/api-reference/composite-layer.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,11 @@ that you extend this class.
1111

1212
## Methods
1313

14+
##### `draw`
15+
16+
A composite layer does not render directly into the WebGL context.
17+
The `draw` method inherited from the base class is therefore never called.
18+
1419
##### `renderLayers`
1520

1621
Allows a layer to "render" or insert one or more deck.gl layers after itself.

src/lib/composite-layer.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@ export default class CompositeLayer extends Layer {
2525
super(props);
2626
}
2727

28+
get isComposite() {
29+
return true;
30+
}
31+
2832
// initializeState is usually not needed for composite layers
2933
// Provide empty definition to disable check for missing definition
3034
initializeState() {
@@ -42,4 +46,9 @@ export default class CompositeLayer extends Layer {
4246
getPickingInfo({info}) {
4347
return info;
4448
}
49+
50+
// Implement to generate sublayers
51+
renderLayers() {
52+
return null;
53+
}
4554
}

src/lib/draw-and-pick.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ export function drawLayers({layers, pass}) {
3333
let visibleCount = 0;
3434
// render layers in normal colors
3535
layers.forEach((layer, layerIndex) => {
36-
if (layer.props.visible) {
36+
if (!layer.isComposite && layer.props.visible) {
3737
layer.drawLayer({
3838
uniforms: Object.assign(
3939
{renderPickingBuffer: 0, pickingEnabled: 0},
@@ -93,7 +93,7 @@ export function pickLayers(gl, {
9393

9494
// Render all pickable layers in picking colors
9595
layers.forEach((layer, layerIndex) => {
96-
if (layer.props.visible && layer.props.pickable) {
96+
if (!layer.isComposite && layer.props.visible && layer.props.pickable) {
9797

9898
// Encode layerIndex with alpha
9999
gl.blendColor(0, 0, 0, (layerIndex + 1) / 255);

src/lib/layer-manager.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,7 @@ export default class LayerManager {
247247
generatedLayers.push(newLayer);
248248

249249
// Call layer lifecycle method: render sublayers
250-
let sublayers = newLayer.renderLayers();
250+
let sublayers = newLayer.isComposite ? newLayer.renderLayers() : null;
251251
// End layer lifecycle method: render sublayers
252252

253253
if (sublayers) {

src/lib/layer.js

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -107,11 +107,6 @@ export default class Layer {
107107
finalizeState() {
108108
}
109109

110-
// Implement to generate sublayers
111-
renderLayers() {
112-
return null;
113-
}
114-
115110
// If state has a model, draw it with supplied uniforms
116111
draw({uniforms = {}}) {
117112
if (this.state.model) {

0 commit comments

Comments
 (0)