Skip to content

Commit 8484984

Browse files
authored
feat(extensions): PathStyleExtension save 1 instance vertex when highPrecisionDash is not used (#10008)
1 parent 9b4f613 commit 8484984

File tree

2 files changed

+28
-13
lines changed

2 files changed

+28
-13
lines changed

modules/extensions/src/path-style/path-style-extension.ts

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44

55
import {LayerExtension, _mergeShaders as mergeShaders} from '@deck.gl/core';
66
import {vec3} from '@math.gl/core';
7-
import {dashShaders, offsetShaders} from './shaders.glsl';
7+
import {dashShaders, Defines, offsetShaders} from './shaders.glsl';
88

9-
import type {Layer, LayerContext, Accessor, UpdateParameters} from '@deck.gl/core';
9+
import type {Accessor, Layer, LayerContext, UpdateParameters} from '@deck.gl/core';
1010
import type {ShaderModule} from '@luma.gl/shadertools';
1111

1212
const defaultProps = {
@@ -87,8 +87,12 @@ export default class PathStyleExtension extends LayerExtension<PathStyleExtensio
8787

8888
// Merge shader injection
8989
let result = {} as {inject: Record<string, string>};
90+
const defines: Defines = {};
9091
if (extension.opts.dash) {
9192
result = mergeShaders(result, dashShaders);
93+
if (extension.opts.highPrecisionDash) {
94+
defines.HIGH_PRECISION_DASH = true;
95+
}
9296
}
9397
if (extension.opts.offset) {
9498
result = mergeShaders(result, offsetShaders);
@@ -104,7 +108,8 @@ export default class PathStyleExtension extends LayerExtension<PathStyleExtensio
104108
}
105109
};
106110
return {
107-
modules: [pathStyle]
111+
modules: [pathStyle],
112+
defines
108113
};
109114
}
110115

@@ -118,19 +123,15 @@ export default class PathStyleExtension extends LayerExtension<PathStyleExtensio
118123
if (extension.opts.dash) {
119124
attributeManager.addInstanced({
120125
instanceDashArrays: {size: 2, accessor: 'getDashArray'},
121-
instanceDashOffsets: extension.opts.highPrecisionDash
126+
...(extension.opts.highPrecisionDash
122127
? {
123-
size: 1,
124-
accessor: 'getPath',
125-
transform: extension.getDashOffsets.bind(this)
126-
}
127-
: {
128-
size: 1,
129-
update: attribute => {
130-
attribute.constant = true;
131-
attribute.value = [0];
128+
instanceDashOffsets: {
129+
size: 1,
130+
accessor: 'getPath',
131+
transform: extension.getDashOffsets.bind(this)
132132
}
133133
}
134+
: {})
134135
});
135136
}
136137
if (extension.opts.offset) {

modules/extensions/src/path-style/shaders.glsl.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,32 @@
22
// SPDX-License-Identifier: MIT
33
// Copyright (c) vis.gl contributors
44

5+
export type Defines = {
6+
// Defines passed externally
7+
/**
8+
* Enable high precision dash rendering.
9+
*/
10+
HIGH_PRECISION_DASH?: boolean;
11+
};
12+
513
export const dashShaders = {
614
inject: {
715
'vs:#decl': `
816
in vec2 instanceDashArrays;
17+
#ifdef HIGH_PRECISION_DASH
918
in float instanceDashOffsets;
19+
#endif
1020
out vec2 vDashArray;
1121
out float vDashOffset;
1222
`,
1323

1424
'vs:#main-end': `
1525
vDashArray = instanceDashArrays;
26+
#ifdef HIGH_PRECISION_DASH
1627
vDashOffset = instanceDashOffsets / width.x;
28+
#else
29+
vDashOffset = 0.0;
30+
#endif
1731
`,
1832

1933
'fs:#decl': `

0 commit comments

Comments
 (0)