antvis / antvis/L7

重构 shader 里非标给 uniform 声明默认值逻辑

Open
#2,430 0 comments 0 reactions 1 assignee Claimed by @heiyexing View on GitHub
Dominant language
TypeScript
Stars
4.1k
Forks
656
PR merge metrics
No merged PRs in 30d

Description

### AntV Open Source Contribution Plan(可选)

- [ ] 我同意将这个 Issue 参与 OSCP 计划

### Issue 类型

中级任务

### 任务介绍

shader 里给 uniform 声明默认值是 glsl 非标准语法,设计之初用于方便运行时[读取默认值](https://github.com/antvis/L7/blob/fd086021e5dad29c453fc49a698da88bc5f6fc98/packages/core/src/utils/shader-module.ts),读取完成后再删除。

```glsl
// line_vert.glsl
layout(std140) uniform commonUniorm {
vec4 u_animate: [ 1., 2., 1.0, 0.2 ];
vec4 u_dash_array;
vec4 u_blur;
vec4 u_sourceColor;
vec4 u_targetColor;
vec2 u_textSize;
float u_icon_step: 100;
float u_heightfixed: 0.0;
float u_vertexScale: 1.0;
float u_raisingHeight: 0.0;
float u_strokeWidth: 0.0;
float u_textureBlend;
float u_line_texture;
float u_linearDir: 1.0;
float u_linearColor: 0;
float u_time;
};
```

将所有 shader 中默认值给删除,在对应使用 shader 的 model 中声明默认值。

### 参考说明

比如 LineLayer 的 line model,line_frag.glsl 与 line_vert.glsl 给 uniform 声明默认值,将其删除

```diff
// packages/layers/src/line/shaders/line/line_vert.glsl
layout(std140) uniform commonUniorm {
- vec4 u_animate: [ 1., 2., 1.0, 0.2 ];
+ vec4 u_animate;
vec4 u_dash_array;
vec4 u_blur;
vec4 u_sourceColor;
vec4 u_targetColor;
vec2 u_textSize;
- float u_icon_step: 100;
+ float u_icon_step;
...
};
```

删除默认值后,在对应的 model getCommonUniformsInfo 方法确保有设置默认值即可

```js
// packages/layers/src/line/models/line.ts
const commonOptions = {
u_animate: this.animateOption2Array(animateOption as IAnimateOption),
u_dash_array,
u_blur: blur,
u_sourceColor: sourceColorArr,
u_targetColor: targetColorArr,
u_textSize: [1024, this.iconService.canvasHeight || 128],
u_icon_step: iconStep,
// 是否固定高度
u_heightfixed: Number(heightfixed),
// 顶点高度 scale
u_vertexScale: vertexHeightScale,
u_raisingHeight: Number(raisingHeight),
// line border 参数
u_strokeWidth: strokeWidth,
u_textureBlend: textureBlend === TextureBlend.NORMAL ? 0.0 : 1.0,
u_line_texture: lineTexture ? 1.0 : 0.0, // 传入线的标识
u_linearDir: linearDir === LinearDir.VERTICAL ? 1.0 : 0.0,
u_linearColor: useLinearColor,
u_time: this.layer.getLayerAnimateTime() || 0,
};
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.