@lightningjs/renderer 2.19.1 → 2.20.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/common/CommonTypes.d.ts +11 -0
- package/dist/src/core/AutosizeManager.d.ts +29 -0
- package/dist/src/core/AutosizeManager.js +171 -0
- package/dist/src/core/AutosizeManager.js.map +1 -0
- package/dist/src/core/CoreNode.d.ts +1 -1
- package/dist/src/core/CoreNode.js +8 -0
- package/dist/src/core/CoreNode.js.map +1 -1
- package/dist/src/core/Stage.js +2 -1
- package/dist/src/core/Stage.js.map +1 -1
- package/dist/src/core/animations/Animation.d.ts +16 -0
- package/dist/src/core/animations/Animation.js +111 -0
- package/dist/src/core/animations/Animation.js.map +1 -0
- package/dist/src/core/animations/CoreTransition.d.ts +24 -0
- package/dist/src/core/animations/CoreTransition.js +63 -0
- package/dist/src/core/animations/CoreTransition.js.map +1 -0
- package/dist/src/core/animations/Playback.d.ts +62 -0
- package/dist/src/core/animations/Playback.js +155 -0
- package/dist/src/core/animations/Playback.js.map +1 -0
- package/dist/src/core/animations/Transition.d.ts +25 -0
- package/dist/src/core/animations/Transition.js +63 -0
- package/dist/src/core/animations/Transition.js.map +1 -0
- package/dist/src/core/animations/utils.d.ts +2 -0
- package/dist/src/core/animations/utils.js +137 -0
- package/dist/src/core/animations/utils.js.map +1 -0
- package/dist/src/core/lib/WebGlContextWrapper.d.ts +19 -5
- package/dist/src/core/lib/WebGlContextWrapper.js +35 -0
- package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
- package/dist/src/core/lib/collectionUtils.d.ts +5 -0
- package/dist/src/core/lib/collectionUtils.js +100 -0
- package/dist/src/core/lib/collectionUtils.js.map +1 -0
- package/dist/src/core/lib/textureCompression.d.ts +14 -2
- package/dist/src/core/lib/textureCompression.js +301 -65
- package/dist/src/core/lib/textureCompression.js.map +1 -1
- package/dist/src/core/platforms/Platform.d.ts +5 -0
- package/dist/src/core/platforms/Platform.js.map +1 -1
- package/dist/src/core/platforms/web/WebPlatform.d.ts +1 -0
- package/dist/src/core/platforms/web/WebPlatform.js +3 -0
- package/dist/src/core/platforms/web/WebPlatform.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +4 -0
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +14 -11
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js +1 -1
- package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +43 -8
- package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCoreShader.d.ts +2 -7
- package/dist/src/core/renderers/webgl/WebGlCoreShader.js +18 -49
- package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +1 -1
- package/dist/src/core/renderers/webgl/internal/ShaderUtils.d.ts +0 -2
- package/dist/src/core/renderers/webgl/internal/ShaderUtils.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +3 -6
- package/dist/src/core/renderers/webgl/shaders/DefaultShader.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +0 -11
- package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +5 -10
- package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +5 -10
- package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/SdfShader.js +0 -12
- package/dist/src/core/renderers/webgl/shaders/SdfShader.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +5 -5
- package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +5 -5
- package/dist/src/core/shaders/webgl/LinearGradient.js +2 -1
- package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -1
- package/dist/src/core/shaders/webgl/RadialGradient.js +7 -6
- package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -1
- package/dist/src/core/text-rendering/CanvasFontHandler.js +4 -1
- package/dist/src/core/text-rendering/CanvasFontHandler.js.map +1 -1
- package/dist/src/core/text-rendering/CanvasTextRenderer.d.ts +4 -6
- package/dist/src/core/text-rendering/CanvasTextRenderer.js +15 -23
- package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -1
- package/dist/src/core/text-rendering/SdfFontHandler.d.ts +125 -28
- package/dist/src/core/text-rendering/SdfFontHandler.js +337 -4
- package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -1
- package/dist/src/core/text-rendering/SdfTextRenderer.d.ts +5 -6
- package/dist/src/core/text-rendering/SdfTextRenderer.js +19 -23
- package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -1
- package/dist/src/core/text-rendering/TextLayoutEngine.d.ts +14 -16
- package/dist/src/core/text-rendering/TextLayoutEngine.js +248 -192
- package/dist/src/core/text-rendering/TextLayoutEngine.js.map +1 -1
- package/dist/src/core/text-rendering/TextRenderer.d.ts +25 -11
- package/dist/src/core/textures/Texture.d.ts +12 -5
- package/dist/src/core/textures/Texture.js.map +1 -1
- package/dist/src/main-api/Inspector.js +9 -5
- package/dist/src/main-api/Inspector.js.map +1 -1
- package/dist/tsconfig.dist.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/common/CommonTypes.ts +16 -0
- package/src/core/CoreNode.test.ts +49 -0
- package/src/core/CoreNode.ts +10 -0
- package/src/core/Stage.ts +3 -1
- package/src/core/lib/WebGlContextWrapper.ts +49 -0
- package/src/core/lib/textureCompression.ts +416 -75
- package/src/core/renderers/webgl/WebGlCoreCtxTexture.ts +16 -14
- package/src/core/renderers/webgl/WebGlCoreRenderOp.ts +1 -1
- package/src/core/renderers/webgl/WebGlCoreRenderer.ts +44 -11
- package/src/core/renderers/webgl/WebGlCoreShader.ts +27 -75
- package/src/core/renderers/webgl/internal/ShaderUtils.ts +0 -2
- package/src/core/renderers/webgl/shaders/DefaultShader.ts +3 -6
- package/src/core/renderers/webgl/shaders/DefaultShaderBatched.ts +0 -11
- package/src/core/renderers/webgl/shaders/DynamicShader.ts +5 -10
- package/src/core/renderers/webgl/shaders/RoundedRectangle.ts +5 -10
- package/src/core/renderers/webgl/shaders/SdfShader.ts +0 -12
- package/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.ts +1 -1
- package/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.ts +1 -1
- package/src/core/renderers/webgl/shaders/effects/BorderRightEffect.ts +1 -1
- package/src/core/renderers/webgl/shaders/effects/BorderTopEffect.ts +1 -1
- package/src/core/renderers/webgl/shaders/effects/FadeOutEffect.ts +5 -5
- package/src/core/renderers/webgl/shaders/effects/HolePunchEffect.ts +1 -1
- package/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.ts +1 -1
- package/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.ts +1 -1
- package/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.ts +1 -1
- package/src/core/renderers/webgl/shaders/effects/RadiusEffect.ts +5 -5
- package/src/core/textures/Texture.ts +13 -6
- package/src/main-api/Inspector.ts +9 -5
- package/dist/src/core/text-rendering/CanvasFont.d.ts +0 -14
- package/dist/src/core/text-rendering/CanvasFont.js +0 -111
- package/dist/src/core/text-rendering/CanvasFont.js.map +0 -1
- package/dist/src/core/text-rendering/CoreFont.d.ts +0 -33
- package/dist/src/core/text-rendering/CoreFont.js +0 -48
- package/dist/src/core/text-rendering/CoreFont.js.map +0 -1
- package/dist/src/core/text-rendering/FontManager.d.ts +0 -11
- package/dist/src/core/text-rendering/FontManager.js +0 -42
- package/dist/src/core/text-rendering/FontManager.js.map +0 -1
- package/dist/src/core/text-rendering/SdfFont.d.ts +0 -29
- package/dist/src/core/text-rendering/SdfFont.js +0 -142
- package/dist/src/core/text-rendering/SdfFont.js.map +0 -1
|
@@ -21,6 +21,7 @@ import type { Dimensions } from '../../../common/CommonTypes.js';
|
|
|
21
21
|
import { assertTruthy } from '../../../utils.js';
|
|
22
22
|
import type { TextureMemoryManager } from '../../TextureMemoryManager.js';
|
|
23
23
|
import type { WebGlContextWrapper } from '../../lib/WebGlContextWrapper.js';
|
|
24
|
+
import { uploadCompressedTexture } from '../../lib/textureCompression.js';
|
|
24
25
|
import type { Texture } from '../../textures/Texture.js';
|
|
25
26
|
import { CoreContextTexture } from '../CoreContextTexture.js';
|
|
26
27
|
import { isHTMLImageElement } from './internal/RendererUtils.js';
|
|
@@ -43,6 +44,11 @@ export class WebGlCoreCtxTexture extends CoreContextTexture {
|
|
|
43
44
|
private _w = 0;
|
|
44
45
|
private _h = 0;
|
|
45
46
|
|
|
47
|
+
txCoordX1 = 0;
|
|
48
|
+
txCoordY1 = 0;
|
|
49
|
+
txCoordX2 = 1;
|
|
50
|
+
txCoordY2 = 1;
|
|
51
|
+
|
|
46
52
|
constructor(
|
|
47
53
|
protected glw: WebGlContextWrapper,
|
|
48
54
|
memManager: TextureMemoryManager,
|
|
@@ -211,26 +217,22 @@ export class WebGlCoreCtxTexture extends CoreContextTexture {
|
|
|
211
217
|
|
|
212
218
|
this.setTextureMemUse(height * width * formatBytes * memoryPadding);
|
|
213
219
|
} else if (tdata && 'mipmaps' in tdata && tdata.mipmaps) {
|
|
214
|
-
const { mipmaps,
|
|
215
|
-
|
|
216
|
-
type === 'ktx'
|
|
217
|
-
? new DataView(mipmaps[0] ?? new ArrayBuffer(0))
|
|
218
|
-
: (mipmaps[0] as unknown as ArrayBufferView);
|
|
219
|
-
|
|
220
|
-
glw.bindTexture(this._nativeCtxTexture);
|
|
221
|
-
|
|
222
|
-
glw.compressedTexImage2D(0, glInternalFormat, width, height, 0, view);
|
|
223
|
-
glw.texParameteri(glw.TEXTURE_WRAP_S, glw.CLAMP_TO_EDGE);
|
|
224
|
-
glw.texParameteri(glw.TEXTURE_WRAP_T, glw.CLAMP_TO_EDGE);
|
|
225
|
-
glw.texParameteri(glw.TEXTURE_MAG_FILTER, glw.LINEAR);
|
|
226
|
-
glw.texParameteri(glw.TEXTURE_MIN_FILTER, glw.LINEAR);
|
|
220
|
+
const { mipmaps, type, blockInfo } = tdata;
|
|
221
|
+
uploadCompressedTexture[type]!(glw, this._nativeCtxTexture, tdata);
|
|
227
222
|
|
|
228
223
|
// Check for errors after compressed texture operations
|
|
229
224
|
if (this.checkGLError() === true) {
|
|
230
225
|
return { width: 0, height: 0 };
|
|
231
226
|
}
|
|
232
227
|
|
|
233
|
-
|
|
228
|
+
width = tdata.width;
|
|
229
|
+
height = tdata.height;
|
|
230
|
+
this.txCoordX2 =
|
|
231
|
+
width / (Math.ceil(width / blockInfo.width) * blockInfo.width);
|
|
232
|
+
this.txCoordY2 =
|
|
233
|
+
height / (Math.ceil(height / blockInfo.height) * blockInfo.height);
|
|
234
|
+
|
|
235
|
+
this.setTextureMemUse(mipmaps[0]?.byteLength ?? 0);
|
|
234
236
|
} else if (tdata && tdata instanceof Uint8Array) {
|
|
235
237
|
// Color Texture
|
|
236
238
|
width = 1;
|
|
@@ -88,7 +88,7 @@ export class WebGlCoreRenderOp extends CoreRenderOp {
|
|
|
88
88
|
shader.bindRenderOp(this, shaderProps);
|
|
89
89
|
|
|
90
90
|
// TODO: Reduce calculations required
|
|
91
|
-
const quadIdx = (this.bufferIdx /
|
|
91
|
+
const quadIdx = (this.bufferIdx / 32) * 6 * 2;
|
|
92
92
|
|
|
93
93
|
// Clipping
|
|
94
94
|
if (this.clippingRect.valid) {
|
|
@@ -136,7 +136,7 @@ export class WebGlCoreRenderer extends CoreRenderer {
|
|
|
136
136
|
this.defaultShader = this.defShaderCtrl.shader as WebGlCoreShader;
|
|
137
137
|
const quadBuffer = glw.createBuffer();
|
|
138
138
|
assertTruthy(quadBuffer);
|
|
139
|
-
const stride =
|
|
139
|
+
const stride = 8 * Float32Array.BYTES_PER_ELEMENT;
|
|
140
140
|
this.quadBufferCollection = new BufferCollection([
|
|
141
141
|
{
|
|
142
142
|
buffer: quadBuffer,
|
|
@@ -173,6 +173,14 @@ export class WebGlCoreRenderer extends CoreRenderer {
|
|
|
173
173
|
stride,
|
|
174
174
|
offset: 5 * Float32Array.BYTES_PER_ELEMENT,
|
|
175
175
|
},
|
|
176
|
+
a_nodeCoordinate: {
|
|
177
|
+
name: 'a_nodeCoordinate',
|
|
178
|
+
size: 2,
|
|
179
|
+
type: glw.FLOAT,
|
|
180
|
+
normalized: false,
|
|
181
|
+
stride,
|
|
182
|
+
offset: 6 * Float32Array.BYTES_PER_ELEMENT,
|
|
183
|
+
},
|
|
176
184
|
},
|
|
177
185
|
},
|
|
178
186
|
]);
|
|
@@ -261,6 +269,8 @@ export class WebGlCoreRenderer extends CoreRenderer {
|
|
|
261
269
|
assertTruthy(curRenderOp);
|
|
262
270
|
}
|
|
263
271
|
|
|
272
|
+
let ctxTexture = undefined;
|
|
273
|
+
|
|
264
274
|
let texCoordX1 = 0;
|
|
265
275
|
let texCoordY1 = 0;
|
|
266
276
|
let texCoordX2 = 1;
|
|
@@ -281,6 +291,13 @@ export class WebGlCoreRenderer extends CoreRenderer {
|
|
|
281
291
|
texCoordY1 = ty / parentH;
|
|
282
292
|
texCoordY2 = texCoordY1 + th / parentH;
|
|
283
293
|
texture = (texture as SubTexture).parentTexture;
|
|
294
|
+
ctxTexture = texture.ctxTexture as WebGlCoreCtxTexture;
|
|
295
|
+
} else {
|
|
296
|
+
ctxTexture = texture.ctxTexture as WebGlCoreCtxTexture;
|
|
297
|
+
texCoordX1 = ctxTexture.txCoordX1;
|
|
298
|
+
texCoordY1 = ctxTexture.txCoordY1;
|
|
299
|
+
texCoordX2 = ctxTexture.txCoordX2;
|
|
300
|
+
texCoordY2 = ctxTexture.txCoordY2;
|
|
284
301
|
}
|
|
285
302
|
|
|
286
303
|
if (
|
|
@@ -327,14 +344,6 @@ export class WebGlCoreRenderer extends CoreRenderer {
|
|
|
327
344
|
[texCoordY1, texCoordY2] = [texCoordY2, texCoordY1];
|
|
328
345
|
}
|
|
329
346
|
|
|
330
|
-
let ctxTexture = texture.ctxTexture as WebGlCoreCtxTexture;
|
|
331
|
-
if (ctxTexture === undefined) {
|
|
332
|
-
ctxTexture = this.stage.defaultTexture?.ctxTexture as WebGlCoreCtxTexture;
|
|
333
|
-
console.warn(
|
|
334
|
-
'WebGL Renderer: Texture does not have a ctxTexture, using default texture instead',
|
|
335
|
-
);
|
|
336
|
-
}
|
|
337
|
-
|
|
338
347
|
const textureIdx = this.addTexture(ctxTexture, bufferIdx);
|
|
339
348
|
|
|
340
349
|
assertTruthy(this.curRenderOp !== null);
|
|
@@ -346,6 +355,8 @@ export class WebGlCoreRenderer extends CoreRenderer {
|
|
|
346
355
|
fQuadBuffer[bufferIdx++] = texCoordY1; // texCoordY
|
|
347
356
|
uiQuadBuffer[bufferIdx++] = params.colorTl; // color
|
|
348
357
|
fQuadBuffer[bufferIdx++] = textureIdx; // texIndex
|
|
358
|
+
fQuadBuffer[bufferIdx++] = 0;
|
|
359
|
+
fQuadBuffer[bufferIdx++] = 0;
|
|
349
360
|
|
|
350
361
|
// Upper-Right
|
|
351
362
|
fQuadBuffer[bufferIdx++] = params.renderCoords.x2;
|
|
@@ -354,6 +365,8 @@ export class WebGlCoreRenderer extends CoreRenderer {
|
|
|
354
365
|
fQuadBuffer[bufferIdx++] = texCoordY1;
|
|
355
366
|
uiQuadBuffer[bufferIdx++] = params.colorTr;
|
|
356
367
|
fQuadBuffer[bufferIdx++] = textureIdx;
|
|
368
|
+
fQuadBuffer[bufferIdx++] = 1;
|
|
369
|
+
fQuadBuffer[bufferIdx++] = 0;
|
|
357
370
|
|
|
358
371
|
// Lower-Left
|
|
359
372
|
fQuadBuffer[bufferIdx++] = params.renderCoords.x4;
|
|
@@ -362,6 +375,8 @@ export class WebGlCoreRenderer extends CoreRenderer {
|
|
|
362
375
|
fQuadBuffer[bufferIdx++] = texCoordY2;
|
|
363
376
|
uiQuadBuffer[bufferIdx++] = params.colorBl;
|
|
364
377
|
fQuadBuffer[bufferIdx++] = textureIdx;
|
|
378
|
+
fQuadBuffer[bufferIdx++] = 0;
|
|
379
|
+
fQuadBuffer[bufferIdx++] = 1;
|
|
365
380
|
|
|
366
381
|
// Lower-Right
|
|
367
382
|
fQuadBuffer[bufferIdx++] = params.renderCoords.x3;
|
|
@@ -370,6 +385,9 @@ export class WebGlCoreRenderer extends CoreRenderer {
|
|
|
370
385
|
fQuadBuffer[bufferIdx++] = texCoordY2;
|
|
371
386
|
uiQuadBuffer[bufferIdx++] = params.colorBr;
|
|
372
387
|
fQuadBuffer[bufferIdx++] = textureIdx;
|
|
388
|
+
|
|
389
|
+
fQuadBuffer[bufferIdx++] = 1;
|
|
390
|
+
fQuadBuffer[bufferIdx++] = 1;
|
|
373
391
|
} else if (params.tb !== 0 || params.tc !== 0) {
|
|
374
392
|
// Upper-Left
|
|
375
393
|
fQuadBuffer[bufferIdx++] = params.tx; // vertexX
|
|
@@ -378,6 +396,8 @@ export class WebGlCoreRenderer extends CoreRenderer {
|
|
|
378
396
|
fQuadBuffer[bufferIdx++] = texCoordY1; // texCoordY
|
|
379
397
|
uiQuadBuffer[bufferIdx++] = params.colorTl; // color
|
|
380
398
|
fQuadBuffer[bufferIdx++] = textureIdx; // texIndex
|
|
399
|
+
fQuadBuffer[bufferIdx++] = 0;
|
|
400
|
+
fQuadBuffer[bufferIdx++] = 0;
|
|
381
401
|
|
|
382
402
|
// Upper-Right
|
|
383
403
|
fQuadBuffer[bufferIdx++] = params.tx + params.width * params.ta;
|
|
@@ -386,6 +406,8 @@ export class WebGlCoreRenderer extends CoreRenderer {
|
|
|
386
406
|
fQuadBuffer[bufferIdx++] = texCoordY1;
|
|
387
407
|
uiQuadBuffer[bufferIdx++] = params.colorTr;
|
|
388
408
|
fQuadBuffer[bufferIdx++] = textureIdx;
|
|
409
|
+
fQuadBuffer[bufferIdx++] = 1;
|
|
410
|
+
fQuadBuffer[bufferIdx++] = 0;
|
|
389
411
|
|
|
390
412
|
// Lower-Left
|
|
391
413
|
fQuadBuffer[bufferIdx++] = params.tx + params.height * params.tb;
|
|
@@ -394,6 +416,8 @@ export class WebGlCoreRenderer extends CoreRenderer {
|
|
|
394
416
|
fQuadBuffer[bufferIdx++] = texCoordY2;
|
|
395
417
|
uiQuadBuffer[bufferIdx++] = params.colorBl;
|
|
396
418
|
fQuadBuffer[bufferIdx++] = textureIdx;
|
|
419
|
+
fQuadBuffer[bufferIdx++] = 0;
|
|
420
|
+
fQuadBuffer[bufferIdx++] = 1;
|
|
397
421
|
|
|
398
422
|
// Lower-Right
|
|
399
423
|
fQuadBuffer[bufferIdx++] =
|
|
@@ -404,6 +428,8 @@ export class WebGlCoreRenderer extends CoreRenderer {
|
|
|
404
428
|
fQuadBuffer[bufferIdx++] = texCoordY2;
|
|
405
429
|
uiQuadBuffer[bufferIdx++] = params.colorBr;
|
|
406
430
|
fQuadBuffer[bufferIdx++] = textureIdx;
|
|
431
|
+
fQuadBuffer[bufferIdx++] = 1;
|
|
432
|
+
fQuadBuffer[bufferIdx++] = 1;
|
|
407
433
|
} else {
|
|
408
434
|
// Calculate the right corner of the quad
|
|
409
435
|
// multiplied by the scale
|
|
@@ -417,6 +443,8 @@ export class WebGlCoreRenderer extends CoreRenderer {
|
|
|
417
443
|
fQuadBuffer[bufferIdx++] = texCoordY1; // texCoordY
|
|
418
444
|
uiQuadBuffer[bufferIdx++] = params.colorTl; // color
|
|
419
445
|
fQuadBuffer[bufferIdx++] = textureIdx; // texIndex
|
|
446
|
+
fQuadBuffer[bufferIdx++] = 0;
|
|
447
|
+
fQuadBuffer[bufferIdx++] = 0;
|
|
420
448
|
|
|
421
449
|
// Upper-Right
|
|
422
450
|
fQuadBuffer[bufferIdx++] = rightCornerX;
|
|
@@ -425,6 +453,8 @@ export class WebGlCoreRenderer extends CoreRenderer {
|
|
|
425
453
|
fQuadBuffer[bufferIdx++] = texCoordY1;
|
|
426
454
|
uiQuadBuffer[bufferIdx++] = params.colorTr;
|
|
427
455
|
fQuadBuffer[bufferIdx++] = textureIdx;
|
|
456
|
+
fQuadBuffer[bufferIdx++] = 1;
|
|
457
|
+
fQuadBuffer[bufferIdx++] = 0;
|
|
428
458
|
|
|
429
459
|
// Lower-Left
|
|
430
460
|
fQuadBuffer[bufferIdx++] = params.tx;
|
|
@@ -433,6 +463,8 @@ export class WebGlCoreRenderer extends CoreRenderer {
|
|
|
433
463
|
fQuadBuffer[bufferIdx++] = texCoordY2;
|
|
434
464
|
uiQuadBuffer[bufferIdx++] = params.colorBl;
|
|
435
465
|
fQuadBuffer[bufferIdx++] = textureIdx;
|
|
466
|
+
fQuadBuffer[bufferIdx++] = 0;
|
|
467
|
+
fQuadBuffer[bufferIdx++] = 1;
|
|
436
468
|
|
|
437
469
|
// Lower-Right
|
|
438
470
|
fQuadBuffer[bufferIdx++] = rightCornerX;
|
|
@@ -441,9 +473,10 @@ export class WebGlCoreRenderer extends CoreRenderer {
|
|
|
441
473
|
fQuadBuffer[bufferIdx++] = texCoordY2;
|
|
442
474
|
uiQuadBuffer[bufferIdx++] = params.colorBr;
|
|
443
475
|
fQuadBuffer[bufferIdx++] = textureIdx;
|
|
476
|
+
fQuadBuffer[bufferIdx++] = 1;
|
|
477
|
+
fQuadBuffer[bufferIdx++] = 1;
|
|
444
478
|
}
|
|
445
479
|
// Update the length of the current render op
|
|
446
|
-
this.curRenderOp.length += WORDS_PER_QUAD;
|
|
447
480
|
this.curRenderOp.numQuads++;
|
|
448
481
|
this.curBufferIdx = bufferIdx;
|
|
449
482
|
}
|
|
@@ -595,7 +628,7 @@ export class WebGlCoreRenderer extends CoreRenderer {
|
|
|
595
628
|
this.quadBufferUsage = this.curBufferIdx * arr.BYTES_PER_ELEMENT;
|
|
596
629
|
|
|
597
630
|
// Calculate the size of each quad in bytes (4 vertices per quad) times the size of each vertex in bytes
|
|
598
|
-
const QUAD_SIZE_IN_BYTES = 4 * (
|
|
631
|
+
const QUAD_SIZE_IN_BYTES = 4 * (8 * arr.BYTES_PER_ELEMENT); // 8 attributes per vertex
|
|
599
632
|
this.numQuadsRendered = this.quadBufferUsage / QUAD_SIZE_IN_BYTES;
|
|
600
633
|
}
|
|
601
634
|
|
|
@@ -65,7 +65,6 @@ export interface AlphaShaderProp {
|
|
|
65
65
|
}
|
|
66
66
|
|
|
67
67
|
export abstract class WebGlCoreShader extends CoreShader {
|
|
68
|
-
protected boundBufferCollection: BufferCollection | null = null;
|
|
69
68
|
protected buffersBound = false;
|
|
70
69
|
protected program: WebGLProgram;
|
|
71
70
|
/**
|
|
@@ -77,11 +76,8 @@ export abstract class WebGlCoreShader extends CoreShader {
|
|
|
77
76
|
protected vao: WebGLVertexArrayObject | undefined;
|
|
78
77
|
protected renderer: WebGlCoreRenderer;
|
|
79
78
|
protected glw: WebGlContextWrapper;
|
|
80
|
-
protected
|
|
81
|
-
protected attributeLocations: Record<string, number>;
|
|
82
|
-
protected attributeNames: string[];
|
|
79
|
+
protected attributeLocations: string[];
|
|
83
80
|
protected uniformLocations: Record<string, WebGLUniformLocation>;
|
|
84
|
-
protected uniformTypes: Record<string, keyof UniformMethodMap>;
|
|
85
81
|
readonly supportsIndexedTextures: boolean;
|
|
86
82
|
|
|
87
83
|
constructor(options: ShaderOptions) {
|
|
@@ -160,61 +156,8 @@ export abstract class WebGlCoreShader extends CoreShader {
|
|
|
160
156
|
}
|
|
161
157
|
this.program = program;
|
|
162
158
|
|
|
163
|
-
this.attributeLocations =
|
|
164
|
-
this.
|
|
165
|
-
this.attributeNames = [];
|
|
166
|
-
|
|
167
|
-
[...options.attributes].forEach((attributeName) => {
|
|
168
|
-
const location = glw.getAttribLocation(this.program, attributeName);
|
|
169
|
-
if (location < 0) {
|
|
170
|
-
throw new Error(
|
|
171
|
-
`${this.constructor.name}: Vertex shader must have an attribute "${attributeName}"!`,
|
|
172
|
-
);
|
|
173
|
-
}
|
|
174
|
-
const buffer = glw.createBuffer();
|
|
175
|
-
if (!buffer) {
|
|
176
|
-
throw new Error(
|
|
177
|
-
`${this.constructor.name}: Could not create buffer for attribute "${attributeName}"`,
|
|
178
|
-
);
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
this.attributeLocations[attributeName] = location;
|
|
182
|
-
this.attributeBuffers[attributeName] = buffer;
|
|
183
|
-
this.attributeNames.push(attributeName);
|
|
184
|
-
});
|
|
185
|
-
|
|
186
|
-
this.uniformLocations = {} as Record<string, WebGLRenderingContext>;
|
|
187
|
-
this.uniformTypes = {} as Record<string, keyof UniformMethodMap>;
|
|
188
|
-
options.uniforms.forEach((uniform: UniformInfo) => {
|
|
189
|
-
const location = glw.getUniformLocation(this.program, uniform.name);
|
|
190
|
-
this.uniformTypes[uniform.name] = uniform.uniform;
|
|
191
|
-
if (!location) {
|
|
192
|
-
console.warn(
|
|
193
|
-
`Shader "${this.constructor.name}" could not get uniform location for "${uniform.name}"`,
|
|
194
|
-
);
|
|
195
|
-
return;
|
|
196
|
-
}
|
|
197
|
-
this.uniformLocations[uniform.name] = location;
|
|
198
|
-
});
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
private bindBufferAttribute(
|
|
202
|
-
location: number,
|
|
203
|
-
buffer: WebGLBuffer,
|
|
204
|
-
attribute: AttributeInfo,
|
|
205
|
-
) {
|
|
206
|
-
const { glw } = this;
|
|
207
|
-
glw.enableVertexAttribArray(location);
|
|
208
|
-
|
|
209
|
-
glw.vertexAttribPointer(
|
|
210
|
-
buffer,
|
|
211
|
-
location,
|
|
212
|
-
attribute.size,
|
|
213
|
-
attribute.type,
|
|
214
|
-
attribute.normalized,
|
|
215
|
-
attribute.stride,
|
|
216
|
-
attribute.offset,
|
|
217
|
-
);
|
|
159
|
+
this.attributeLocations = glw.getAttributeLocations(this.program);
|
|
160
|
+
this.uniformLocations = glw.getUniformLocations(this.program);
|
|
218
161
|
}
|
|
219
162
|
|
|
220
163
|
disableAttribute(location: number) {
|
|
@@ -222,10 +165,11 @@ export abstract class WebGlCoreShader extends CoreShader {
|
|
|
222
165
|
}
|
|
223
166
|
|
|
224
167
|
disableAttributes() {
|
|
225
|
-
|
|
226
|
-
|
|
168
|
+
const glw = this.glw;
|
|
169
|
+
const attribLen = this.attributeLocations.length;
|
|
170
|
+
for (let i = 0; i < attribLen; i++) {
|
|
171
|
+
glw.disableVertexAttribArray(i);
|
|
227
172
|
}
|
|
228
|
-
this.boundBufferCollection = null;
|
|
229
173
|
}
|
|
230
174
|
|
|
231
175
|
/**
|
|
@@ -325,21 +269,29 @@ export abstract class WebGlCoreShader extends CoreShader {
|
|
|
325
269
|
}
|
|
326
270
|
|
|
327
271
|
bindBufferCollection(buffer: BufferCollection) {
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
const
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
272
|
+
const { glw } = this;
|
|
273
|
+
const attribs = this.attributeLocations;
|
|
274
|
+
const attribLen = attribs.length;
|
|
275
|
+
|
|
276
|
+
for (let i = 0; i < attribLen; i++) {
|
|
277
|
+
const name = attribs[i]!;
|
|
278
|
+
|
|
279
|
+
const resolvedBuffer = buffer.getBuffer(name);
|
|
280
|
+
const resolvedInfo = buffer.getAttributeInfo(name);
|
|
281
|
+
if (resolvedBuffer === undefined || resolvedInfo === undefined) {
|
|
282
|
+
continue;
|
|
283
|
+
}
|
|
284
|
+
glw.enableVertexAttribArray(i);
|
|
285
|
+
glw.vertexAttribPointer(
|
|
338
286
|
resolvedBuffer,
|
|
339
|
-
|
|
287
|
+
i,
|
|
288
|
+
resolvedInfo.size,
|
|
289
|
+
resolvedInfo.type,
|
|
290
|
+
resolvedInfo.normalized,
|
|
291
|
+
resolvedInfo.stride,
|
|
292
|
+
resolvedInfo.offset,
|
|
340
293
|
);
|
|
341
294
|
}
|
|
342
|
-
this.boundBufferCollection = buffer;
|
|
343
295
|
}
|
|
344
296
|
|
|
345
297
|
protected override bindProps(props: Record<string, unknown>) {
|
|
@@ -37,8 +37,6 @@ export interface UniformInfo {
|
|
|
37
37
|
|
|
38
38
|
export interface ShaderOptions {
|
|
39
39
|
renderer: WebGlCoreRenderer;
|
|
40
|
-
attributes: string[];
|
|
41
|
-
uniforms: UniformInfo[];
|
|
42
40
|
shaderSources?: ShaderProgramSources;
|
|
43
41
|
supportsIndexedTextures?: boolean;
|
|
44
42
|
webgl1Extensions?: string[];
|
|
@@ -26,12 +26,6 @@ export class DefaultShader extends WebGlCoreShader {
|
|
|
26
26
|
constructor(renderer: WebGlCoreRenderer) {
|
|
27
27
|
super({
|
|
28
28
|
renderer,
|
|
29
|
-
attributes: ['a_position', 'a_textureCoordinate', 'a_color'],
|
|
30
|
-
uniforms: [
|
|
31
|
-
{ name: 'u_resolution', uniform: 'uniform2fv' },
|
|
32
|
-
{ name: 'u_pixelRatio', uniform: 'uniform1f' },
|
|
33
|
-
{ name: 'u_texture', uniform: 'uniform2fv' },
|
|
34
|
-
],
|
|
35
29
|
});
|
|
36
30
|
}
|
|
37
31
|
|
|
@@ -51,6 +45,7 @@ export class DefaultShader extends WebGlCoreShader {
|
|
|
51
45
|
|
|
52
46
|
attribute vec2 a_position;
|
|
53
47
|
attribute vec2 a_textureCoordinate;
|
|
48
|
+
attribute vec2 a_nodeCoordinate;
|
|
54
49
|
attribute vec4 a_color;
|
|
55
50
|
|
|
56
51
|
uniform vec2 u_resolution;
|
|
@@ -59,6 +54,7 @@ export class DefaultShader extends WebGlCoreShader {
|
|
|
59
54
|
|
|
60
55
|
varying vec4 v_color;
|
|
61
56
|
varying vec2 v_textureCoordinate;
|
|
57
|
+
varying vec2 v_nodeCoordinate;
|
|
62
58
|
|
|
63
59
|
void main() {
|
|
64
60
|
vec2 normalized = a_position * u_pixelRatio;
|
|
@@ -66,6 +62,7 @@ export class DefaultShader extends WebGlCoreShader {
|
|
|
66
62
|
|
|
67
63
|
v_color = a_color;
|
|
68
64
|
v_textureCoordinate = a_textureCoordinate;
|
|
65
|
+
v_nodeCoordinate = a_nodeCoordinate;
|
|
69
66
|
|
|
70
67
|
gl_Position = vec4(normalized.x * screenSpace.x - 1.0, normalized.y * -abs(screenSpace.y) + 1.0, 0.0, 1.0);
|
|
71
68
|
gl_Position.y = -sign(screenSpace.y) * gl_Position.y;
|
|
@@ -29,17 +29,6 @@ export class DefaultShaderBatched extends WebGlCoreShader {
|
|
|
29
29
|
constructor(renderer: WebGlCoreRenderer) {
|
|
30
30
|
super({
|
|
31
31
|
renderer,
|
|
32
|
-
attributes: [
|
|
33
|
-
'a_position',
|
|
34
|
-
'a_textureCoordinate',
|
|
35
|
-
'a_color',
|
|
36
|
-
'a_textureIndex',
|
|
37
|
-
],
|
|
38
|
-
uniforms: [
|
|
39
|
-
{ name: 'u_resolution', uniform: 'uniform2fv' },
|
|
40
|
-
{ name: 'u_pixelRatio', uniform: 'uniform1f' },
|
|
41
|
-
{ name: 'u_textures[0]', uniform: 'uniform1iv' },
|
|
42
|
-
],
|
|
43
32
|
});
|
|
44
33
|
}
|
|
45
34
|
|
|
@@ -118,15 +118,6 @@ export class DynamicShader extends WebGlCoreShader {
|
|
|
118
118
|
const shader = DynamicShader.createShader(props, effectContructors);
|
|
119
119
|
super({
|
|
120
120
|
renderer,
|
|
121
|
-
attributes: ['a_position', 'a_textureCoordinate', 'a_color'],
|
|
122
|
-
uniforms: [
|
|
123
|
-
{ name: 'u_resolution', uniform: 'uniform2fv' },
|
|
124
|
-
{ name: 'u_pixelRatio', uniform: 'uniform1f' },
|
|
125
|
-
{ name: 'u_texture', uniform: 'uniform2fv' },
|
|
126
|
-
{ name: 'u_dimensions', uniform: 'uniform2fv' },
|
|
127
|
-
{ name: 'u_alpha', uniform: 'uniform1f' },
|
|
128
|
-
...shader.uniforms,
|
|
129
|
-
],
|
|
130
121
|
shaderSources: {
|
|
131
122
|
vertex: shader.vertex,
|
|
132
123
|
fragment: shader.fragment,
|
|
@@ -504,6 +495,7 @@ export class DynamicShader extends WebGlCoreShader {
|
|
|
504
495
|
# endif
|
|
505
496
|
|
|
506
497
|
attribute vec2 a_textureCoordinate;
|
|
498
|
+
attribute vec2 a_nodeCoordinate;
|
|
507
499
|
attribute vec2 a_position;
|
|
508
500
|
attribute vec4 a_color;
|
|
509
501
|
attribute float a_textureIndex;
|
|
@@ -514,6 +506,7 @@ export class DynamicShader extends WebGlCoreShader {
|
|
|
514
506
|
varying vec4 v_color;
|
|
515
507
|
varying vec2 v_textureCoordinate;
|
|
516
508
|
varying float v_textureIndex;
|
|
509
|
+
varying vec2 v_nodeCoordinate;
|
|
517
510
|
|
|
518
511
|
void main(){
|
|
519
512
|
vec2 normalized = a_position * u_pixelRatio / u_resolution;
|
|
@@ -524,6 +517,7 @@ export class DynamicShader extends WebGlCoreShader {
|
|
|
524
517
|
v_color = a_color;
|
|
525
518
|
v_textureCoordinate = a_textureCoordinate;
|
|
526
519
|
v_textureIndex = a_textureIndex;
|
|
520
|
+
v_nodeCoordinate = a_nodeCoordinate;
|
|
527
521
|
|
|
528
522
|
// flip y
|
|
529
523
|
gl_Position = vec4(clip_space * vec2(1.0, -1.0), 0, 1);
|
|
@@ -555,13 +549,14 @@ export class DynamicShader extends WebGlCoreShader {
|
|
|
555
549
|
|
|
556
550
|
varying vec4 v_color;
|
|
557
551
|
varying vec2 v_textureCoordinate;
|
|
552
|
+
varying vec2 v_nodeCoordinate;
|
|
558
553
|
|
|
559
554
|
${methods}
|
|
560
555
|
|
|
561
556
|
${effectMethods}
|
|
562
557
|
|
|
563
558
|
void main() {
|
|
564
|
-
vec2 p =
|
|
559
|
+
vec2 p = v_nodeCoordinate.xy * u_dimensions - u_dimensions * 0.5;
|
|
565
560
|
vec2 d = abs(p) - (u_dimensions) * 0.5;
|
|
566
561
|
float lng_DefaultMask = min(max(d.x, d.y), 0.0) + length(max(d, 0.0));
|
|
567
562
|
|
|
@@ -45,14 +45,6 @@ export class RoundedRectangle extends WebGlCoreShader {
|
|
|
45
45
|
constructor(renderer: WebGlCoreRenderer) {
|
|
46
46
|
super({
|
|
47
47
|
renderer,
|
|
48
|
-
attributes: ['a_position', 'a_textureCoordinate', 'a_color'],
|
|
49
|
-
uniforms: [
|
|
50
|
-
{ name: 'u_resolution', uniform: 'uniform2fv' },
|
|
51
|
-
{ name: 'u_pixelRatio', uniform: 'uniform1f' },
|
|
52
|
-
{ name: 'u_texture', uniform: 'uniform2f' },
|
|
53
|
-
{ name: 'u_dimensions', uniform: 'uniform2fv' },
|
|
54
|
-
{ name: 'u_radius', uniform: 'uniform1f' },
|
|
55
|
-
],
|
|
56
48
|
});
|
|
57
49
|
}
|
|
58
50
|
|
|
@@ -109,13 +101,14 @@ export class RoundedRectangle extends WebGlCoreShader {
|
|
|
109
101
|
attribute vec2 a_textureCoordinate;
|
|
110
102
|
attribute vec4 a_color;
|
|
111
103
|
attribute float a_textureIndex;
|
|
112
|
-
attribute
|
|
104
|
+
attribute vec2 a_nodeCoordinate;
|
|
113
105
|
|
|
114
106
|
uniform vec2 u_resolution;
|
|
115
107
|
uniform float u_pixelRatio;
|
|
116
108
|
|
|
117
109
|
varying vec4 v_color;
|
|
118
110
|
varying vec2 v_textureCoordinate;
|
|
111
|
+
varying vec2 v_nodeCoordinate;
|
|
119
112
|
|
|
120
113
|
void main() {
|
|
121
114
|
vec2 normalized = a_position * u_pixelRatio / u_resolution;
|
|
@@ -125,6 +118,7 @@ export class RoundedRectangle extends WebGlCoreShader {
|
|
|
125
118
|
// pass to fragment
|
|
126
119
|
v_color = a_color;
|
|
127
120
|
v_textureCoordinate = a_textureCoordinate;
|
|
121
|
+
v_nodeCoordinate = a_nodeCoordinate;
|
|
128
122
|
|
|
129
123
|
// flip y
|
|
130
124
|
gl_Position = vec4(clip_space * vec2(1.0, -1.0), 0, 1);
|
|
@@ -144,6 +138,7 @@ export class RoundedRectangle extends WebGlCoreShader {
|
|
|
144
138
|
|
|
145
139
|
varying vec4 v_color;
|
|
146
140
|
varying vec2 v_textureCoordinate;
|
|
141
|
+
varying vec2 v_nodeCoordinate;
|
|
147
142
|
|
|
148
143
|
float boxDist(vec2 p, vec2 size, float radius){
|
|
149
144
|
size -= vec2(radius);
|
|
@@ -159,7 +154,7 @@ export class RoundedRectangle extends WebGlCoreShader {
|
|
|
159
154
|
vec4 color = texture2D(u_texture, v_textureCoordinate) * v_color;
|
|
160
155
|
vec2 halfDimensions = u_dimensions * 0.5;
|
|
161
156
|
|
|
162
|
-
float d = boxDist(
|
|
157
|
+
float d = boxDist(v_nodeCoordinate.xy * u_dimensions - halfDimensions, halfDimensions + 0.5, u_radius);
|
|
163
158
|
gl_FragColor = mix(vec4(0.0), color, fillMask(d));
|
|
164
159
|
}
|
|
165
160
|
`,
|
|
@@ -64,18 +64,6 @@ export class SdfShader extends WebGlCoreShader {
|
|
|
64
64
|
constructor(renderer: WebGlCoreRenderer) {
|
|
65
65
|
super({
|
|
66
66
|
renderer,
|
|
67
|
-
attributes: ['a_position', 'a_textureCoordinate'],
|
|
68
|
-
uniforms: [
|
|
69
|
-
{ name: 'u_resolution', uniform: 'uniform2fv' },
|
|
70
|
-
{ name: 'u_transform', uniform: 'uniformMatrix3fv' },
|
|
71
|
-
{ name: 'u_scrollY', uniform: 'uniform1f' },
|
|
72
|
-
{ name: 'u_pixelRatio', uniform: 'uniform1f' },
|
|
73
|
-
{ name: 'u_texture', uniform: 'uniform2f' },
|
|
74
|
-
{ name: 'u_color', uniform: 'uniform4fv' },
|
|
75
|
-
{ name: 'u_size', uniform: 'uniform1f' },
|
|
76
|
-
{ name: 'u_distanceRange', uniform: 'uniform1f' },
|
|
77
|
-
{ name: 'u_debug', uniform: 'uniform1i' },
|
|
78
|
-
],
|
|
79
67
|
});
|
|
80
68
|
}
|
|
81
69
|
|
|
@@ -91,7 +91,7 @@ export class BorderBottomEffect extends ShaderEffect {
|
|
|
91
91
|
|
|
92
92
|
static override onEffectMask = `
|
|
93
93
|
vec2 pos = vec2(0.0, u_dimensions.y - width * 0.5);
|
|
94
|
-
float mask = $rectDist(
|
|
94
|
+
float mask = $rectDist(v_nodeCoordinate.xy * u_dimensions - pos, vec2(u_dimensions.x, width*0.5));
|
|
95
95
|
return mix(shaderColor, maskColor, $fillMask(mask));
|
|
96
96
|
`;
|
|
97
97
|
|
|
@@ -91,7 +91,7 @@ export class BorderLeftEffect extends ShaderEffect {
|
|
|
91
91
|
|
|
92
92
|
static override onEffectMask = `
|
|
93
93
|
vec2 pos = vec2(width * 0.5, 0.0);
|
|
94
|
-
float mask = $rectDist(
|
|
94
|
+
float mask = $rectDist(v_nodeCoordinate.xy * u_dimensions - pos, vec2(width*0.5, u_dimensions.y));
|
|
95
95
|
return mix(shaderColor, maskColor, $fillMask(mask));
|
|
96
96
|
`;
|
|
97
97
|
|
|
@@ -91,7 +91,7 @@ export class BorderRightEffect extends ShaderEffect {
|
|
|
91
91
|
|
|
92
92
|
static override onEffectMask = `
|
|
93
93
|
vec2 pos = vec2(u_dimensions.x - width * 0.5, 0.0);
|
|
94
|
-
float mask = $rectDist(
|
|
94
|
+
float mask = $rectDist(v_nodeCoordinate.xy * u_dimensions - pos, vec2(width*0.5, u_dimensions.y));
|
|
95
95
|
return mix(shaderColor, maskColor, $fillMask(mask));
|
|
96
96
|
`;
|
|
97
97
|
|
|
@@ -91,7 +91,7 @@ export class BorderTopEffect extends ShaderEffect {
|
|
|
91
91
|
|
|
92
92
|
static override onEffectMask = `
|
|
93
93
|
vec2 pos = vec2(0.0, width * 0.5);
|
|
94
|
-
float mask = $rectDist(
|
|
94
|
+
float mask = $rectDist(v_nodeCoordinate.xy * u_dimensions - pos, vec2(u_dimensions.x, width*0.5));
|
|
95
95
|
return mix(shaderColor, maskColor, $fillMask(mask));
|
|
96
96
|
`;
|
|
97
97
|
|
|
@@ -82,7 +82,7 @@ export class FadeOutEffect extends ShaderEffect {
|
|
|
82
82
|
}
|
|
83
83
|
|
|
84
84
|
static override onColorize = `
|
|
85
|
-
vec2 point =
|
|
85
|
+
vec2 point = v_nodeCoordinate.xy * u_dimensions.xy;
|
|
86
86
|
vec2 pos1;
|
|
87
87
|
vec2 pos2;
|
|
88
88
|
vec2 d;
|
|
@@ -99,16 +99,16 @@ export class FadeOutEffect extends ShaderEffect {
|
|
|
99
99
|
}
|
|
100
100
|
|
|
101
101
|
if(fade[1] > 0.0) {
|
|
102
|
-
pos1 = vec2(point.x - u_dimensions.x - fade[1],
|
|
103
|
-
pos2 = vec2(point.x - u_dimensions.x,
|
|
102
|
+
pos1 = vec2(point.x - u_dimensions.x - fade[1], v_nodeCoordinate.y);
|
|
103
|
+
pos2 = vec2(point.x - u_dimensions.x, v_nodeCoordinate.y);
|
|
104
104
|
d = pos1 - pos2;
|
|
105
105
|
c = dot(pos2, d) / dot(d, d);
|
|
106
106
|
result = mix(vec4(0.0), result, smoothstep(0.0, 1.0, clamp(c, 0.0, 1.0)));
|
|
107
107
|
}
|
|
108
108
|
|
|
109
109
|
if(fade[2] > 0.0) {
|
|
110
|
-
pos1 = vec2(
|
|
111
|
-
pos2 = vec2(
|
|
110
|
+
pos1 = vec2(v_nodeCoordinate.x, point.y - u_dimensions.y - fade[2]);
|
|
111
|
+
pos2 = vec2(v_nodeCoordinate.x, point.y - u_dimensions.y);
|
|
112
112
|
d = pos1 - pos2;
|
|
113
113
|
c = dot(pos2, d) / dot(d, d);
|
|
114
114
|
result = mix(vec4(0.0), result, smoothstep(0.0, 1.0, clamp(c, 0.0, 1.0)));
|
|
@@ -142,7 +142,7 @@ export class HolePunchEffect extends ShaderEffect {
|
|
|
142
142
|
static override onShaderMask = `
|
|
143
143
|
vec2 halfDimensions = u_dimensions * 0.5;
|
|
144
144
|
vec2 size = vec2(width, height) * 0.5;
|
|
145
|
-
vec2 basePos =
|
|
145
|
+
vec2 basePos = v_nodeCoordinate.xy * u_dimensions.xy - vec2(x, y);
|
|
146
146
|
vec2 pos = basePos - size;
|
|
147
147
|
float r = radius[0] * step(pos.x, 0.5) * step(pos.y, 0.5);
|
|
148
148
|
r = r + radius[1] * step(0.5, pos.x) * step(pos.y, 0.5);
|
|
@@ -146,7 +146,7 @@ export class LinearGradientEffect extends ShaderEffect {
|
|
|
146
146
|
vec2 f = $calcPoint(lineDist * 0.5, a);
|
|
147
147
|
vec2 t = $calcPoint(lineDist * 0.5, a + PI);
|
|
148
148
|
vec2 gradVec = t - f;
|
|
149
|
-
float dist = dot(
|
|
149
|
+
float dist = dot(v_nodeCoordinate.xy * u_dimensions - f, gradVec) / dot(gradVec, gradVec);
|
|
150
150
|
|
|
151
151
|
//return early if dist is lower or equal to first stop
|
|
152
152
|
if(dist <= stops[0]) {
|