Skip to content

Commit 1cf1b65

Browse files
committed
Merge branch 'main' into texture-management-replace-finalizationregistry
2 parents c1d5223 + d173446 commit 1cf1b65

File tree

10 files changed

+226
-10
lines changed

10 files changed

+226
-10
lines changed

examples/tests/dynamic-shader.ts

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ export default async function ({ renderer }: ExampleSettings) {
4040
angle: 220,
4141
colors: [
4242
0xff0000ff, 0x00ff00ff, 0xff0000ff, 0x0000ffff, 0xffff00ff,
43-
0xff0000ff,
43+
0xff000000,
4444
],
4545
},
4646
},
@@ -154,7 +154,7 @@ export default async function ({ renderer }: ExampleSettings) {
154154
y: 100,
155155
width: 250,
156156
height: 500,
157-
color: 0xff0000ff,
157+
color: 0x00000000,
158158
shader: renderer.createShader('DynamicShader', {
159159
effects: [
160160
{
@@ -200,6 +200,28 @@ export default async function ({ renderer }: ExampleSettings) {
200200
parent: renderer.root,
201201
});
202202

203+
const t7 = renderer.createNode({
204+
x: 1000,
205+
y: 700,
206+
width: 750,
207+
height: 250,
208+
shader: renderer.makeShader('DynamicShader', {
209+
effects: [
210+
{
211+
type: 'radialGradient',
212+
props: {
213+
colors: [0xff0000ff, 0x00ff00ff, 0x00000000],
214+
stops: [0.1, 0.4, 1.0],
215+
height: 200,
216+
width: 1000,
217+
pivot: [0, 0.5],
218+
},
219+
},
220+
],
221+
}),
222+
parent: renderer.root,
223+
});
224+
203225
/*
204226
* End: Sprite Map Demo
205227
*/

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@lightningjs/renderer",
3-
"version": "0.3.1",
3+
"version": "0.3.2",
44
"description": "Lightning 3 Renderer",
55
"type": "module",
66
"main": "./dist/exports/index.js",
@@ -69,6 +69,7 @@
6969
},
7070
"files": [
7171
"dist",
72+
"src",
7273
"LICENSE",
7374
"NOTICE",
7475
"README.md"

src/core/renderers/webgl/WebGlCoreRenderOp.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ export class WebGlCoreRenderOp extends CoreRenderOp {
4343
readonly buffers: BufferCollection,
4444
readonly shader: WebGlCoreShader,
4545
readonly shaderProps: Record<string, unknown>,
46+
readonly alpha: number,
4647
readonly clippingRect: Rect | null,
4748
readonly dimensions: Dimensions,
4849
readonly bufferIdx: number,

src/core/renderers/webgl/WebGlCoreRenderer.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,7 @@ export class WebGlCoreRenderer extends CoreRenderer {
285285
this.newRenderOp(
286286
targetShader,
287287
shaderProps as any,
288+
alpha,
288289
targetDims,
289290
clippingRect,
290291
bufferIdx,
@@ -447,6 +448,7 @@ export class WebGlCoreRenderer extends CoreRenderer {
447448
private newRenderOp(
448449
shader: WebGlCoreShader,
449450
shaderProps: Record<string, unknown>,
451+
alpha: number,
450452
dimensions: Dimensions,
451453
clippingRect: Rect | null,
452454
bufferIdx: number,
@@ -457,6 +459,7 @@ export class WebGlCoreRenderer extends CoreRenderer {
457459
this.quadBufferCollection,
458460
shader,
459461
shaderProps,
462+
alpha,
460463
clippingRect,
461464
dimensions,
462465
bufferIdx,
@@ -491,10 +494,13 @@ export class WebGlCoreRenderer extends CoreRenderer {
491494
if (recursive) {
492495
throw new Error('Unable to add texture to render op');
493496
}
494-
const { shader, shaderProps, dimensions, clippingRect } = curRenderOp;
497+
498+
const { shader, shaderProps, dimensions, clippingRect, alpha } =
499+
curRenderOp;
495500
this.newRenderOp(
496501
shader,
497502
shaderProps,
503+
alpha,
498504
dimensions,
499505
clippingRect,
500506
bufferIdx,

src/core/renderers/webgl/WebGlCoreShader.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,17 @@ export interface DimensionsShaderProp {
5353
$dimensions?: Dimensions;
5454
}
5555

56+
export interface AlphaShaderProp {
57+
/**
58+
* Alpha of the Node being rendered (Auto-set by the renderer)
59+
*
60+
* @remarks
61+
* DO NOT SET THIS. It is set automatically by the renderer.
62+
* Any values set here will be ignored.
63+
*/
64+
$alpha?: number;
65+
}
66+
5667
export abstract class WebGlCoreShader extends CoreShader {
5768
protected boundBufferCollection: BufferCollection | null = null;
5869
protected buffersBound = false;
@@ -260,6 +271,13 @@ export abstract class WebGlCoreShader extends CoreShader {
260271
}
261272
this.setUniform('u_dimensions', [dimensions.width, dimensions.height]);
262273
}
274+
if (hasOwn(props, '$alpha')) {
275+
let alpha = props.$alpha as number | null;
276+
if (!alpha) {
277+
alpha = renderOp.alpha;
278+
}
279+
this.setUniform('u_alpha', alpha);
280+
}
263281
this.bindProps(props);
264282
}
265283
}

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

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@ import type { WebGlCoreRenderer } from '../WebGlCoreRenderer.js';
2121
import {
2222
WebGlCoreShader,
2323
type DimensionsShaderProp,
24+
type AlphaShaderProp,
2425
} from '../WebGlCoreShader.js';
2526
import type { UniformInfo } from '../internal/ShaderUtils.js';
26-
import type { WebGlCoreRenderOp } from '../WebGlCoreRenderOp.js';
2727
import type { WebGlCoreCtxTexture } from '../WebGlCoreCtxTexture.js';
2828
import { RadiusEffect } from './effects/RadiusEffect.js';
2929
import { BorderEffect } from './effects/BorderEffect.js';
@@ -36,6 +36,7 @@ import { BorderBottomEffect } from './effects/BorderBottomEffect.js';
3636
import { BorderLeftEffect } from './effects/BorderLeftEffect.js';
3737
import { GlitchEffect } from './effects/GlitchEffect.js';
3838
import { FadeOutEffect } from './effects/FadeOutEffect.js';
39+
import { RadialGradientEffect } from './effects/RadialGradientEffect.js';
3940

4041
/**
4142
* Allows the `keyof EffectMap` to be mapped over and form an discriminated
@@ -75,7 +76,9 @@ type MapEffectDescs<T extends keyof EffectMap> = T extends keyof EffectMap
7576

7677
type EffectDesc = MapEffectDescs<keyof EffectMap>;
7778

78-
export interface DynamicShaderProps extends DimensionsShaderProp {
79+
export interface DynamicShaderProps
80+
extends DimensionsShaderProp,
81+
AlphaShaderProp {
7982
effects?: EffectDesc[];
8083
}
8184

@@ -88,6 +91,7 @@ export interface EffectMap {
8891
borderTop: typeof BorderTopEffect;
8992
fadeOut: typeof FadeOutEffect;
9093
linearGradient: typeof LinearGradientEffect;
94+
radialGradient: typeof RadialGradientEffect;
9195
grayscale: typeof GrayscaleEffect;
9296
glitch: typeof GlitchEffect;
9397
}
@@ -101,6 +105,7 @@ const Effects = {
101105
borderTop: BorderTopEffect,
102106
fadeOut: FadeOutEffect,
103107
linearGradient: LinearGradientEffect,
108+
radialGradient: RadialGradientEffect,
104109
grayscale: GrayscaleEffect,
105110
glitch: GlitchEffect,
106111
};
@@ -125,6 +130,7 @@ export class DynamicShader extends WebGlCoreShader {
125130
{ name: 'u_pixelRatio', uniform: 'uniform1f' },
126131
{ name: 'u_texture', uniform: 'uniform2fv' },
127132
{ name: 'u_dimensions', uniform: 'uniform2fv' },
133+
{ name: 'u_alpha', uniform: 'uniform1f' },
128134
...shader.uniforms,
129135
],
130136
shaderSources: {
@@ -364,6 +370,7 @@ export class DynamicShader extends WebGlCoreShader {
364370
width: 0,
365371
height: 0,
366372
},
373+
$alpha: 0,
367374
};
368375
}
369376

@@ -429,6 +436,7 @@ export class DynamicShader extends WebGlCoreShader {
429436
430437
uniform vec2 u_resolution;
431438
uniform vec2 u_dimensions;
439+
uniform float u_alpha;
432440
uniform float u_radius;
433441
uniform sampler2D u_texture;
434442
@@ -456,7 +464,7 @@ export class DynamicShader extends WebGlCoreShader {
456464
457465
${drawEffects}
458466
459-
gl_FragColor = shaderColor * v_color.a;
467+
gl_FragColor = shaderColor * u_alpha;
460468
}
461469
`;
462470
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ export class LinearGradientEffect extends ShaderEffect {
176176
stopCalc = (dist - stops[i]) / (stops[i + 1] - stops[i]);
177177
colorOut = mix(colorOut, colors[i + 1], clamp(stopCalc, 0.0, 1.0));
178178
}
179-
return colorOut;
179+
return mix(maskColor, colorOut, colorOut.a);
180180
`;
181181
};
182182
}

0 commit comments

Comments
 (0)