Skip to content

Commit

Permalink
Simplify ArcLayer
Browse files Browse the repository at this point in the history
  • Loading branch information
Pessimistress committed May 1, 2024
1 parent a9acdf8 commit 841da65
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 23 deletions.
15 changes: 11 additions & 4 deletions modules/layers/src/arc-layer/arc-layer-vertex.glsl.ts
Expand Up @@ -22,7 +22,6 @@ export default `\
#version 300 es
#define SHADER_NAME arc-layer-vertex-shader
in vec3 positions;
in vec4 instanceSourceColors;
in vec4 instanceTargetColors;
in vec3 instanceSourcePositions;
Expand Down Expand Up @@ -137,7 +136,15 @@ void main(void) {
geometry.worldPosition = instanceSourcePositions;
geometry.worldPositionAlt = instanceTargetPositions;
float segmentIndex = positions.x;
/*
* --(i, -1)-----------_(i+1, -1)--
* | _,-" |
* o _,-" o
* | _,-" |
* --(i, 1)"-------------(i+1, 1)--
*/
float segmentIndex = float(gl_VertexID / 2);
float segmentSide = mod(float(gl_VertexID), 2.) == 0. ? -1. : 1.;
float segmentRatio = getSegmentRatio(segmentIndex);
float prevSegmentRatio = getSegmentRatio(max(0.0, segmentIndex - 1.0));
float nextSegmentRatio = getSegmentRatio(min(numSegments - 1.0, segmentIndex + 1.0));
Expand All @@ -147,7 +154,7 @@ void main(void) {
float indexDir = mix(-1.0, 1.0, step(segmentIndex, 0.0));
isValid = 1.0;
uv = vec2(segmentRatio, positions.y);
uv = vec2(segmentRatio, segmentSide);
geometry.uv = uv;
geometry.pickingColor = instancePickingColors;
Expand Down Expand Up @@ -244,7 +251,7 @@ void main(void) {
// extrude
vec3 offset = vec3(
getExtrusionOffset((next.xy - curr.xy) * indexDir, positions.y, widthPixels),
getExtrusionOffset((next.xy - curr.xy) * indexDir, segmentSide, widthPixels),
0.0);
DECKGL_FILTER_SIZE(offset, geometry);
DECKGL_FILTER_GL_POSITION(curr, geometry);
Expand Down
24 changes: 5 additions & 19 deletions modules/layers/src/arc-layer/arc-layer.ts
Expand Up @@ -34,7 +34,6 @@ import {
DefaultProps
} from '@deck.gl/core';

import {Geometry} from '@luma.gl/engine';
import {Model} from '@luma.gl/engine';

import vs from './arc-layer-vertex.glsl';
Expand Down Expand Up @@ -231,11 +230,14 @@ export default class ArcLayer<DataT = any, ExtraPropsT extends {} = {}> extends
super.updateState(opts);
const {props, oldProps, changeFlags} = opts;
// Re-generate model if geometry changed
if (changeFlags.extensionsChanged || props.numSegments !== oldProps.numSegments) {
if (changeFlags.extensionsChanged) {
this.state.model?.destroy();
this.state.model = this._getModel();
this.getAttributeManager()!.invalidateAll();
}
if (props.numSegments !== oldProps.numSegments) {
this.state.model!.setVertexCount(props.numSegments * 2);
}
}

draw({uniforms}) {
Expand All @@ -257,28 +259,12 @@ export default class ArcLayer<DataT = any, ExtraPropsT extends {} = {}> extends

protected _getModel(): Model {
const {numSegments} = this.props;
let positions: number[] = [];
/*
* (0, -1)-------------_(1, -1)
* | _,-" |
* o _,-" o
* | _,-" |
* (0, 1)"-------------(1, 1)
*/
for (let i = 0; i < numSegments; i++) {
positions = positions.concat([i, 1, 0, i, -1, 0]);
}

const model = new Model(this.context.device, {
...this.getShaders(),
id: this.props.id,
bufferLayout: this.getAttributeManager()!.getBufferLayouts(),
geometry: new Geometry({
topology: 'triangle-strip',
attributes: {
positions: {size: 3, value: new Float32Array(positions)}
}
}),
topology: 'triangle-strip',
isInstanced: true
});

Expand Down

0 comments on commit 841da65

Please sign in to comment.