Skip to content

Commit 32f5fe0

Browse files
committed
fixed mixing gradient colors with maskcolor
1 parent d173446 commit 32f5fe0

File tree

4 files changed

+18
-14
lines changed

4 files changed

+18
-14
lines changed

examples/tests/dynamic-shader.ts

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -154,20 +154,23 @@ export default async function ({ renderer }: ExampleSettings) {
154154
y: 100,
155155
width: 250,
156156
height: 500,
157-
color: 0x00000000,
157+
color: 0xff0000ff,
158158
shader: renderer.makeShader('DynamicShader', {
159159
effects: [
160160
{
161-
type: 'radius',
161+
type: 'linearGradient',
162162
props: {
163-
radius: 100,
163+
angle: 180,
164+
stops: [0.4, 0.8],
165+
colors: [0x0000ffff, '#00000000'],
164166
},
165167
},
166168
{
167-
type: 'border',
169+
type: 'linearGradient',
168170
props: {
169-
width: 20,
170-
color: 0x00ff00ff,
171+
angle: -90,
172+
stops: [0.1, 0.75],
173+
colors: [0x0000ffff, '#00000000'],
171174
},
172175
},
173176
],

src/core/renderers/webgl/shaders/DynamicShader.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,7 @@ export class DynamicShader extends WebGlCoreShader {
252252
}
253253

254254
//fill main functions
255-
let currentMask = `mix(shaderColor, maskColor, clamp(-lng_DefaultMask, 0.0, 1.0))`;
255+
let currentMask = `mix(shaderColor, maskColor, clamp(-(lng_DefaultMask), 0.0, 1.0))`;
256256
let drawEffects = `
257257
258258
`;
@@ -399,6 +399,7 @@ export class DynamicShader extends WebGlCoreShader {
399399
uniform float u_alpha;
400400
uniform float u_radius;
401401
uniform sampler2D u_texture;
402+
uniform float u_pixelRatio;
402403
403404
${uniforms}
404405
@@ -410,17 +411,16 @@ export class DynamicShader extends WebGlCoreShader {
410411
${effectMethods}
411412
412413
void main() {
413-
vec2 uv = v_textureCoordinate.xy * u_dimensions.xy;
414414
vec2 p = v_textureCoordinate.xy * u_dimensions - u_dimensions * 0.5;
415-
vec2 d = abs(p) - u_dimensions * 0.5;
415+
vec2 d = abs(p) - (u_dimensions) * 0.5;
416416
float lng_DefaultMask = min(max(d.x, d.y), 0.0) + length(max(d, 0.0));
417417
418418
vec4 shaderColor = vec4(0.0);
419419
float shaderMask = lng_DefaultMask;
420420
421421
vec4 maskColor = texture2D(u_texture, v_textureCoordinate) * v_color;
422422
423-
shaderColor = mix(shaderColor, maskColor, clamp(-lng_DefaultMask, 0.0, 1.0));
423+
shaderColor = mix(shaderColor, maskColor, clamp(-(lng_DefaultMask + 0.5), 0.0, 1.0));
424424
425425
${drawEffects}
426426

src/core/renderers/webgl/shaders/effects/LinearGradientEffect.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -165,18 +165,19 @@ export class LinearGradientEffect extends ShaderEffect {
165165
float d = angle - 90.0;
166166
float a = $degToRad(d);
167167
float lineDist = abs(u_dimensions.x * cos(a)) + abs(u_dimensions.y * sin(a));
168+
168169
vec2 f = $calcPoint(lineDist * 0.5, a);
169170
vec2 t = $calcPoint(lineDist * 0.5, $degToRad(d + 180.0));
170171
vec2 gradVec = t - f;
171-
float dist = dot((v_textureCoordinate.xy * u_dimensions) - f, gradVec) / dot(gradVec, gradVec);
172+
float dist = dot(v_textureCoordinate.xy * u_dimensions - f, gradVec) / dot(gradVec, gradVec);
172173
173174
float stopCalc = (dist - stops[0]) / (stops[1] - stops[0]);
174-
vec4 colorOut = mix(colors[0], colors[1], stopCalc);
175+
vec4 colorOut = $fromLinear(mix($toLinear(colors[0]), $toLinear(colors[1]), stopCalc));
175176
for(int i = 1; i < ${colors}-1; i++) {
176177
stopCalc = (dist - stops[i]) / (stops[i + 1] - stops[i]);
177178
colorOut = mix(colorOut, colors[i + 1], clamp(stopCalc, 0.0, 1.0));
178179
}
179-
return mix(maskColor, colorOut, colorOut.a);
180+
return mix(maskColor, colorOut, clamp(colorOut.a, 0.0, 1.0));
180181
`;
181182
};
182183
}

src/core/renderers/webgl/shaders/effects/RadialGradientEffect.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ export class RadialGradientEffect extends ShaderEffect {
153153
stopCalc = (dist - stops[i]) / (stops[i + 1] - stops[i]);
154154
colorOut = mix(colorOut, colors[i + 1], clamp(stopCalc, 0.0, 1.0));
155155
}
156-
return mix(maskColor, colorOut, colorOut.a);
156+
return mix(maskColor, colorOut, clamp(colorOut.a, 0.0, 1.0));
157157
`;
158158
};
159159
}

0 commit comments

Comments
 (0)