Skip to content

Commit

Permalink
Merge e8d42c7 into 0265f68
Browse files Browse the repository at this point in the history
  • Loading branch information
Pessimistress committed Oct 3, 2019
2 parents 0265f68 + e8d42c7 commit 0603347
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 13 deletions.
37 changes: 36 additions & 1 deletion docs/api-reference/deck.md
Expand Up @@ -49,7 +49,42 @@ The array of deck.gl layers to be rendered. This array is expected to be an arra

##### `layerFilter` (Function)

Optionally takes a function `({layer, viewport, isPicking}) => Boolean` that is called before a layer is rendered. Gives the application an opportunity to filter out layers from the layer list during either rendering or picking. Filtering can be done per viewport or per layer or both. This enables techniques like adding helper layers that work as masks during picking but do not show up during rendering. All the lifecycle methods are still triggered even a if a layer is filtered out using this prop.
Default: `null`

If supplied, will be called before a layer is drawn to determine whether it should be rendered. This gives the application an opportunity to filter out layers from the layer list during either rendering or picking. Filtering can be done per viewport or per layer or both. This enables techniques like adding helper layers that work as masks during picking but do not show up during rendering.

```js
new Deck({
// ...
layerFilter: ({layer, viewport}) => {
if (viewport.id !== 'minimap' && layer.id === 'geofence') {
// only display geofence in the minimap
return false;
}
return true;
}
}
```
Notes:
- `layerFilter` does not override the visibility defined by the layer's `visible` and `pickable` props.
- All the lifecycle methods are still triggered even a if a layer is filtered out using this prop.
Arguments:
- `layer` (Layer) - the layer to be drawn
- `viewport` (Viewport) - the current viewport
- `isPicking` (Boolean) - whether this is a picking pass
- `renderPass` (String) - the name of the current render pass. Some standard passes are:
+ `'screen'` - drawing to screen
+ `'picking:hover'` - drawing to offscreen picking buffer due to pointer move
+ `'picking:query'` - drawing to offscreen picking buffer due to user-initiated query, e.g. calling `deck.pickObject`.
+ `'shadow'` - drawing to shadow map
Returns:
`true` if the layer should be drawn.
##### `getCursor` (Function)
Expand Down
6 changes: 3 additions & 3 deletions modules/core/src/passes/layers-pass.js
Expand Up @@ -73,7 +73,7 @@ export default class LayersPass extends Pass {
// render layers in normal colors
layers.forEach((layer, layerIndex) => {
// Check if we should draw layer
const shouldDrawLayer = this.shouldDrawLayer(layer, viewport, layerFilter);
const shouldDrawLayer = this.shouldDrawLayer(layer, viewport, layerFilter, pass);

// Calculate stats
if (shouldDrawLayer && layer.props.pickable) {
Expand Down Expand Up @@ -102,11 +102,11 @@ export default class LayersPass extends Pass {
return renderStatus;
}

shouldDrawLayer(layer, viewport, layerFilter) {
shouldDrawLayer(layer, viewport, layerFilter, pass) {
let shouldDrawLayer = !layer.isComposite && layer.props.visible;

if (shouldDrawLayer && layerFilter) {
shouldDrawLayer = layerFilter({layer, viewport, isPicking: false});
shouldDrawLayer = layerFilter({layer, viewport, isPicking: false, renderPass: pass});
}
return shouldDrawLayer;
}
Expand Down
11 changes: 3 additions & 8 deletions modules/core/src/passes/pick-layers-pass.js
Expand Up @@ -64,7 +64,7 @@ export default class PickLayersPass extends LayersPass {
layerFilter,
viewports,
onViewportActive,
pass: 'picking',
pass: `picking:${redrawReason}`,
redrawReason,
effectProps,
parameters
Expand All @@ -74,13 +74,8 @@ export default class PickLayersPass extends LayersPass {
}

// PRIVATE
shouldDrawLayer(layer, viewport, layerFilter) {
let shouldDrawLayer = !layer.isComposite && layer.props.visible && layer.props.pickable;

if (shouldDrawLayer && layerFilter) {
shouldDrawLayer = layerFilter({layer, viewport, isPicking: true});
}
return shouldDrawLayer;
shouldDrawLayer(layer, viewport, layerFilter, pass) {
return layer.props.pickable && super.shouldDrawLayer(layer, viewport, layerFilter, pass);
}

getModuleParameters(layer, effects, effectProps) {
Expand Down
2 changes: 1 addition & 1 deletion modules/core/src/passes/shadow-pass.js
Expand Up @@ -61,7 +61,7 @@ export default class ShadowPass extends LayersPass {
target.resize({width, height});
}

super.render(Object.assign(params, {outputBuffer: target}));
super.render(Object.assign(params, {outputBuffer: target, pass: 'shadow'}));
}
);
}
Expand Down

0 comments on commit 0603347

Please sign in to comment.