fra.ktu.red-component 0.1.0
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/LICENSE +44 -0
- package/README.md +1 -0
- package/dist/components/red_viewer.d.ts +5 -0
- package/dist/components/red_viewer.d.ts.map +1 -0
- package/dist/components/red_viewer.js +86 -0
- package/dist/components/red_viewer.js.map +1 -0
- package/dist/ffmpeg/ffmpeg-core.js +21 -0
- package/dist/ffmpeg/ffmpeg-core.wasm +0 -0
- package/dist/helpers/assets.d.ts +8 -0
- package/dist/helpers/assets.d.ts.map +1 -0
- package/dist/helpers/assets.js +63 -0
- package/dist/helpers/assets.js.map +1 -0
- package/dist/helpers/export.d.ts +8 -0
- package/dist/helpers/export.d.ts.map +1 -0
- package/dist/helpers/export.js +58 -0
- package/dist/helpers/export.js.map +1 -0
- package/dist/helpers/ffmpeg-core.js +21 -0
- package/dist/helpers/ffmpeg-core.wasm +0 -0
- package/dist/helpers/ids.d.ts +2 -0
- package/dist/helpers/ids.d.ts.map +1 -0
- package/dist/helpers/ids.js +11 -0
- package/dist/helpers/ids.js.map +1 -0
- package/dist/helpers/layers.d.ts +8 -0
- package/dist/helpers/layers.d.ts.map +1 -0
- package/dist/helpers/layers.js +32 -0
- package/dist/helpers/layers.js.map +1 -0
- package/dist/helpers/signals.d.ts +13 -0
- package/dist/helpers/signals.d.ts.map +1 -0
- package/dist/helpers/signals.js +61 -0
- package/dist/helpers/signals.js.map +1 -0
- package/dist/helpers/sparkle.d.ts +4 -0
- package/dist/helpers/sparkle.d.ts.map +1 -0
- package/dist/helpers/sparkle.js +4742 -0
- package/dist/helpers/sparkle.js.map +1 -0
- package/dist/index.d.ts +57 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +31 -0
- package/dist/index.js.map +1 -0
- package/dist/ktu/ui/core/data_store.d.ts +12 -0
- package/dist/ktu/ui/core/data_store.d.ts.map +1 -0
- package/dist/ktu/ui/core/data_store.js +71 -0
- package/dist/ktu/ui/core/data_store.js.map +1 -0
- package/dist/ktu/ui/core/event_dispatcher.d.ts +11 -0
- package/dist/ktu/ui/core/event_dispatcher.d.ts.map +1 -0
- package/dist/ktu/ui/core/event_dispatcher.js +37 -0
- package/dist/ktu/ui/core/event_dispatcher.js.map +1 -0
- package/dist/ktu/ui/core/ktu_component.d.ts +22 -0
- package/dist/ktu/ui/core/ktu_component.d.ts.map +1 -0
- package/dist/ktu/ui/core/ktu_component.js +74 -0
- package/dist/ktu/ui/core/ktu_component.js.map +1 -0
- package/dist/ktu/ui/core/translation_manager.d.ts +12 -0
- package/dist/ktu/ui/core/translation_manager.d.ts.map +1 -0
- package/dist/ktu/ui/core/translation_manager.js +34 -0
- package/dist/ktu/ui/core/translation_manager.js.map +1 -0
- package/dist/layers/base_layer.d.ts +18 -0
- package/dist/layers/base_layer.d.ts.map +1 -0
- package/dist/layers/base_layer.js +68 -0
- package/dist/layers/base_layer.js.map +1 -0
- package/dist/layers/display/background_layer.d.ts +15 -0
- package/dist/layers/display/background_layer.d.ts.map +1 -0
- package/dist/layers/display/background_layer.js +40 -0
- package/dist/layers/display/background_layer.js.map +1 -0
- package/dist/layers/display/display_layer.d.ts +24 -0
- package/dist/layers/display/display_layer.d.ts.map +1 -0
- package/dist/layers/display/display_layer.js +131 -0
- package/dist/layers/display/display_layer.js.map +1 -0
- package/dist/layers/display/video_layer.d.ts +36 -0
- package/dist/layers/display/video_layer.d.ts.map +1 -0
- package/dist/layers/display/video_layer.js +296 -0
- package/dist/layers/display/video_layer.js.map +1 -0
- package/dist/layers/ilayer.d.ts +21 -0
- package/dist/layers/ilayer.d.ts.map +1 -0
- package/dist/layers/ilayer.js +2 -0
- package/dist/layers/ilayer.js.map +1 -0
- package/dist/layers/shaders/anaglyph/anaglyph_shader.d.ts +16 -0
- package/dist/layers/shaders/anaglyph/anaglyph_shader.d.ts.map +1 -0
- package/dist/layers/shaders/anaglyph/anaglyph_shader.frag +36 -0
- package/dist/layers/shaders/anaglyph/anaglyph_shader.js +28 -0
- package/dist/layers/shaders/anaglyph/anaglyph_shader.js.map +1 -0
- package/dist/layers/shaders/blur/blur_shader.d.ts +17 -0
- package/dist/layers/shaders/blur/blur_shader.d.ts.map +1 -0
- package/dist/layers/shaders/blur/blur_shader.frag +47 -0
- package/dist/layers/shaders/blur/blur_shader.js +36 -0
- package/dist/layers/shaders/blur/blur_shader.js.map +1 -0
- package/dist/layers/shaders/bnw/bnw_shader.d.ts +11 -0
- package/dist/layers/shaders/bnw/bnw_shader.d.ts.map +1 -0
- package/dist/layers/shaders/bnw/bnw_shader.frag +13 -0
- package/dist/layers/shaders/bnw/bnw_shader.js +21 -0
- package/dist/layers/shaders/bnw/bnw_shader.js.map +1 -0
- package/dist/layers/shaders/chroma/chroma_shader.d.ts +18 -0
- package/dist/layers/shaders/chroma/chroma_shader.d.ts.map +1 -0
- package/dist/layers/shaders/chroma/chroma_shader.frag +32 -0
- package/dist/layers/shaders/chroma/chroma_shader.js +45 -0
- package/dist/layers/shaders/chroma/chroma_shader.js.map +1 -0
- package/dist/layers/shaders/crosses/crosses_shader.d.ts +20 -0
- package/dist/layers/shaders/crosses/crosses_shader.d.ts.map +1 -0
- package/dist/layers/shaders/crosses/crosses_shader.frag +78 -0
- package/dist/layers/shaders/crosses/crosses_shader.js +51 -0
- package/dist/layers/shaders/crosses/crosses_shader.js.map +1 -0
- package/dist/layers/shaders/defaultFilter.vert +27 -0
- package/dist/layers/shaders/hlines/hlines_shader.d.ts +17 -0
- package/dist/layers/shaders/hlines/hlines_shader.d.ts.map +1 -0
- package/dist/layers/shaders/hlines/hlines_shader.frag +43 -0
- package/dist/layers/shaders/hlines/hlines_shader.js +31 -0
- package/dist/layers/shaders/hlines/hlines_shader.js.map +1 -0
- package/dist/layers/shaders/hnoise/hnoise_shader.d.ts +19 -0
- package/dist/layers/shaders/hnoise/hnoise_shader.d.ts.map +1 -0
- package/dist/layers/shaders/hnoise/hnoise_shader.frag +68 -0
- package/dist/layers/shaders/hnoise/hnoise_shader.js +40 -0
- package/dist/layers/shaders/hnoise/hnoise_shader.js.map +1 -0
- package/dist/layers/shaders/hsb_blur/hsb_blur_shader.d.ts +19 -0
- package/dist/layers/shaders/hsb_blur/hsb_blur_shader.d.ts.map +1 -0
- package/dist/layers/shaders/hsb_blur/hsb_blur_shader.frag +73 -0
- package/dist/layers/shaders/hsb_blur/hsb_blur_shader.js +50 -0
- package/dist/layers/shaders/hsb_blur/hsb_blur_shader.js.map +1 -0
- package/dist/layers/shaders/light_split/light_split_shader.d.ts +20 -0
- package/dist/layers/shaders/light_split/light_split_shader.d.ts.map +1 -0
- package/dist/layers/shaders/light_split/light_split_shader.frag +54 -0
- package/dist/layers/shaders/light_split/light_split_shader.js +40 -0
- package/dist/layers/shaders/light_split/light_split_shader.js.map +1 -0
- package/dist/layers/shaders/montecarlo/montecarlo_shader.d.ts +17 -0
- package/dist/layers/shaders/montecarlo/montecarlo_shader.d.ts.map +1 -0
- package/dist/layers/shaders/montecarlo/montecarlo_shader.frag +31 -0
- package/dist/layers/shaders/montecarlo/montecarlo_shader.js +31 -0
- package/dist/layers/shaders/montecarlo/montecarlo_shader.js.map +1 -0
- package/dist/layers/shaders/negative/negative_shader.d.ts +11 -0
- package/dist/layers/shaders/negative/negative_shader.d.ts.map +1 -0
- package/dist/layers/shaders/negative/negative_shader.frag +13 -0
- package/dist/layers/shaders/negative/negative_shader.js +21 -0
- package/dist/layers/shaders/negative/negative_shader.js.map +1 -0
- package/dist/layers/shaders/pixelate/pixelate_shader.d.ts +16 -0
- package/dist/layers/shaders/pixelate/pixelate_shader.d.ts.map +1 -0
- package/dist/layers/shaders/pixelate/pixelate_shader.frag +50 -0
- package/dist/layers/shaders/pixelate/pixelate_shader.js +28 -0
- package/dist/layers/shaders/pixelate/pixelate_shader.js.map +1 -0
- package/dist/layers/shaders/posterize/posterize_shader.d.ts +16 -0
- package/dist/layers/shaders/posterize/posterize_shader.d.ts.map +1 -0
- package/dist/layers/shaders/posterize/posterize_shader.frag +24 -0
- package/dist/layers/shaders/posterize/posterize_shader.js +28 -0
- package/dist/layers/shaders/posterize/posterize_shader.js.map +1 -0
- package/dist/layers/shaders/recolour/recolour_shader.d.ts +22 -0
- package/dist/layers/shaders/recolour/recolour_shader.d.ts.map +1 -0
- package/dist/layers/shaders/recolour/recolour_shader.frag +68 -0
- package/dist/layers/shaders/recolour/recolour_shader.js +83 -0
- package/dist/layers/shaders/recolour/recolour_shader.js.map +1 -0
- package/dist/layers/shaders/scramble/scramble_shader.d.ts +16 -0
- package/dist/layers/shaders/scramble/scramble_shader.d.ts.map +1 -0
- package/dist/layers/shaders/scramble/scramble_shader.frag +45 -0
- package/dist/layers/shaders/scramble/scramble_shader.js +28 -0
- package/dist/layers/shaders/scramble/scramble_shader.js.map +1 -0
- package/dist/layers/shaders/shader_layer.d.ts +36 -0
- package/dist/layers/shaders/shader_layer.d.ts.map +1 -0
- package/dist/layers/shaders/shader_layer.js +100 -0
- package/dist/layers/shaders/shader_layer.js.map +1 -0
- package/dist/layers/shaders/vlines/vlines_shader.d.ts +17 -0
- package/dist/layers/shaders/vlines/vlines_shader.d.ts.map +1 -0
- package/dist/layers/shaders/vlines/vlines_shader.frag +43 -0
- package/dist/layers/shaders/vlines/vlines_shader.js +31 -0
- package/dist/layers/shaders/vlines/vlines_shader.js.map +1 -0
- package/dist/managers/export_manager.d.ts +2 -0
- package/dist/managers/export_manager.d.ts.map +1 -0
- package/dist/managers/export_manager.js +51 -0
- package/dist/managers/export_manager.js.map +1 -0
- package/dist/managers/layer_manager.d.ts +2 -0
- package/dist/managers/layer_manager.d.ts.map +1 -0
- package/dist/managers/layer_manager.js +62 -0
- package/dist/managers/layer_manager.js.map +1 -0
- package/dist/managers/modulator_manager.d.ts +2 -0
- package/dist/managers/modulator_manager.d.ts.map +1 -0
- package/dist/managers/modulator_manager.js +54 -0
- package/dist/managers/modulator_manager.js.map +1 -0
- package/dist/managers/shader_manager.d.ts +2 -0
- package/dist/managers/shader_manager.d.ts.map +1 -0
- package/dist/managers/shader_manager.js +106 -0
- package/dist/managers/shader_manager.js.map +1 -0
- package/dist/modulators/base_modulator.d.ts +20 -0
- package/dist/modulators/base_modulator.d.ts.map +1 -0
- package/dist/modulators/base_modulator.js +109 -0
- package/dist/modulators/base_modulator.js.map +1 -0
- package/dist/modulators/compressor_modulator.d.ts +17 -0
- package/dist/modulators/compressor_modulator.d.ts.map +1 -0
- package/dist/modulators/compressor_modulator.js +34 -0
- package/dist/modulators/compressor_modulator.js.map +1 -0
- package/dist/modulators/imodulator.d.ts +22 -0
- package/dist/modulators/imodulator.d.ts.map +1 -0
- package/dist/modulators/imodulator.js +2 -0
- package/dist/modulators/imodulator.js.map +1 -0
- package/dist/modulators/lfo_modulator.d.ts +13 -0
- package/dist/modulators/lfo_modulator.d.ts.map +1 -0
- package/dist/modulators/lfo_modulator.js +53 -0
- package/dist/modulators/lfo_modulator.js.map +1 -0
- package/dist/modulators/random_modulator.d.ts +12 -0
- package/dist/modulators/random_modulator.d.ts.map +1 -0
- package/dist/modulators/random_modulator.js +22 -0
- package/dist/modulators/random_modulator.js.map +1 -0
- package/dist/modulators/ring_modulator.d.ts +15 -0
- package/dist/modulators/ring_modulator.d.ts.map +1 -0
- package/dist/modulators/ring_modulator.js +39 -0
- package/dist/modulators/ring_modulator.js.map +1 -0
- package/dist/types/red_scene_state.d.ts +16 -0
- package/dist/types/red_scene_state.d.ts.map +1 -0
- package/dist/types/red_scene_state.js +2 -0
- package/dist/types/red_scene_state.js.map +1 -0
- package/dist/util.d.ts +2 -0
- package/dist/util.d.ts.map +1 -0
- package/dist/util.js +2 -0
- package/dist/util.js.map +1 -0
- package/package.json +39 -0
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
precision highp float;
|
|
2
|
+
in vec2 vTextureCoord;
|
|
3
|
+
|
|
4
|
+
uniform sampler2D uTexture;
|
|
5
|
+
uniform vec4 uInputSize;
|
|
6
|
+
|
|
7
|
+
uniform float uDistance;
|
|
8
|
+
uniform float uThickness;
|
|
9
|
+
uniform vec4 uDryWet;
|
|
10
|
+
|
|
11
|
+
vec2 mapCoord( vec2 coord )
|
|
12
|
+
{
|
|
13
|
+
coord *= uInputSize.xy;
|
|
14
|
+
coord += uInputSize.zw;
|
|
15
|
+
|
|
16
|
+
return coord;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
vec2 unmapCoord( vec2 coord )
|
|
20
|
+
{
|
|
21
|
+
coord -= uInputSize.zw;
|
|
22
|
+
coord /= uInputSize.xy;
|
|
23
|
+
|
|
24
|
+
return coord;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
vec2 pixelate(vec2 coord, float uDistance)
|
|
28
|
+
{
|
|
29
|
+
return (floor( coord / vec2(uDistance,uDistance) ) * vec2(uDistance,uDistance)) + (uDistance / 2.0);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
void main(){
|
|
33
|
+
vec2 pixelCoord = mapCoord(vTextureCoord);
|
|
34
|
+
vec2 newCoords = pixelate(pixelCoord, uDistance);
|
|
35
|
+
vec4 oTex = texture(uTexture, vTextureCoord);
|
|
36
|
+
vec4 tex = vec4(0.0, 0.0, 0.0, 0.0);
|
|
37
|
+
if(pixelCoord.y > newCoords.y-(uThickness/2.0) && pixelCoord.y < newCoords.y+(uThickness/2.0)){
|
|
38
|
+
tex = vec4(oTex.r, oTex.g, oTex.b, oTex.a);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
//DRY/WET
|
|
42
|
+
gl_FragColor = (1.0-uDryWet)*oTex +uDryWet * tex;
|
|
43
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { getCount } from "../../../helpers/ids.js";
|
|
2
|
+
import { ShaderLayer } from "../shader_layer.js";
|
|
3
|
+
import fragment from "./hlines_shader.frag?raw";
|
|
4
|
+
export class HLinesShader extends ShaderLayer {
|
|
5
|
+
fragment = fragment;
|
|
6
|
+
static getDefaultState(sceneStateId) {
|
|
7
|
+
return {
|
|
8
|
+
...ShaderLayer.getDefaultState(sceneStateId),
|
|
9
|
+
type: "hlines",
|
|
10
|
+
name: "hlines_" + getCount(sceneStateId),
|
|
11
|
+
distance: 10,
|
|
12
|
+
thickness: 2,
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
constructor(sceneStateId, state, owner) {
|
|
16
|
+
super(sceneStateId, state, owner);
|
|
17
|
+
console.trace();
|
|
18
|
+
}
|
|
19
|
+
setupUniformValues() {
|
|
20
|
+
return {
|
|
21
|
+
uDistance: { value: this.getFieldValue("distance"), type: "f32" },
|
|
22
|
+
uThickness: { value: this.getFieldValue("thickness"), type: "f32" },
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
updateUniforms() {
|
|
26
|
+
super.updateUniforms();
|
|
27
|
+
this.uniforms.uniforms.uDistance = this.getFieldValue("distance");
|
|
28
|
+
this.uniforms.uniforms.uThickness = this.getFieldValue("thickness");
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=hlines_shader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hlines_shader.js","sourceRoot":"","sources":["../../../../src/layers/shaders/hlines/hlines_shader.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAyB,MAAM,oBAAoB,CAAC;AACxE,OAAO,QAAQ,MAAM,0BAA0B,CAAC;AAOhD,MAAM,OAAO,YAAa,SAAQ,WAAW;IAE3C,QAAQ,GAAW,QAAQ,CAAC;IAE5B,MAAM,CAAC,eAAe,CAAC,YAAoB;QACzC,OAAO;YACL,GAAG,WAAW,CAAC,eAAe,CAAC,YAAY,CAAC;YAC5C,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,SAAS,GAAG,QAAQ,CAAC,YAAY,CAAC;YACxC,QAAQ,EAAE,EAAE;YACZ,SAAS,EAAE,CAAC;SACb,CAAC;IACJ,CAAC;IAED,YAAY,YAAoB,EAAE,KAAwB,EAAE,KAAa;QACvE,KAAK,CAAC,YAAY,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAClC,OAAO,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;IAED,kBAAkB;QAChB,OAAO;YACL,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE;YACjE,UAAU,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE;SACpE,CAAC;IACJ,CAAC;IAED,cAAc;QACZ,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QAClE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IACtE,CAAC;CACF"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { UniformData } from "pixi.js";
|
|
2
|
+
import { ShaderLayer, type ShaderLayerState } from "../shader_layer.js";
|
|
3
|
+
export type HNoiseShaderState = ShaderLayerState & {
|
|
4
|
+
noiseSize: number;
|
|
5
|
+
lineThickness: number;
|
|
6
|
+
strength: number;
|
|
7
|
+
negative: boolean;
|
|
8
|
+
};
|
|
9
|
+
export declare class HNoiseShader extends ShaderLayer {
|
|
10
|
+
_state: HNoiseShaderState;
|
|
11
|
+
fragment: string;
|
|
12
|
+
static getDefaultState(sceneStateId: string): HNoiseShaderState;
|
|
13
|
+
constructor(sceneStateId: string, state: HNoiseShaderState, owner: string);
|
|
14
|
+
setupUniformValues(): {
|
|
15
|
+
[key: string]: UniformData;
|
|
16
|
+
};
|
|
17
|
+
updateUniforms(): void;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=hnoise_shader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hnoise_shader.d.ts","sourceRoot":"","sources":["../../../../src/layers/shaders/hnoise/hnoise_shader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGxE,MAAM,MAAM,iBAAiB,GAAG,gBAAgB,GAAG;IACjD,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,qBAAa,YAAa,SAAQ,WAAW;IACnC,MAAM,EAAE,iBAAiB,CAAC;IAClC,QAAQ,EAAE,MAAM,CAAY;IAE5B,MAAM,CAAC,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,iBAAiB;gBAYnD,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM;IAKzE,kBAAkB,IAAI;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAAA;KAAE;IAYpD,cAAc,IAAI,IAAI;CAOvB"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
precision highp float;
|
|
2
|
+
in vec2 vTextureCoord;
|
|
3
|
+
|
|
4
|
+
uniform sampler2D uTexture;
|
|
5
|
+
uniform vec4 uInputSize;
|
|
6
|
+
|
|
7
|
+
uniform float uNoiseSize;
|
|
8
|
+
uniform float uTime;
|
|
9
|
+
uniform float uStrength;
|
|
10
|
+
uniform float uLineThickness;
|
|
11
|
+
uniform int uNegative;
|
|
12
|
+
uniform vec4 uDryWet;
|
|
13
|
+
|
|
14
|
+
float PHI = 1.61803398874989484820459; // Φ = Golden Ratio
|
|
15
|
+
|
|
16
|
+
float gold_noise(vec2 xy, float seed){
|
|
17
|
+
return fract(tan(distance(xy*PHI, xy)*seed)*xy.x);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
vec2 mapCoord( vec2 coord )
|
|
21
|
+
{
|
|
22
|
+
coord *= uInputSize.xy;
|
|
23
|
+
coord += uInputSize.zw;
|
|
24
|
+
|
|
25
|
+
return coord;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
vec2 unmapCoord( vec2 coord )
|
|
29
|
+
{
|
|
30
|
+
coord -= uInputSize.zw;
|
|
31
|
+
coord /= uInputSize.xy;
|
|
32
|
+
|
|
33
|
+
return coord;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
vec2 pixelate(vec2 coord, float uNoiseSize, float uLineThickness)
|
|
37
|
+
{
|
|
38
|
+
return vec2((floor( coord.x / uNoiseSize ) * uNoiseSize) + (uNoiseSize / 2.0), (floor( coord.y / uLineThickness ) * uLineThickness));
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
void main(){
|
|
42
|
+
vec4 oTex = texture(uTexture, vTextureCoord);
|
|
43
|
+
|
|
44
|
+
vec2 pixelCoord = mapCoord(vTextureCoord);
|
|
45
|
+
float rowNoiseSize = gold_noise(vec2(floor(pixelCoord.y/uLineThickness)+1080.0, floor(pixelCoord.y/uLineThickness))+1080.0, uTime+2.0)*uNoiseSize;
|
|
46
|
+
vec2 newCoord = pixelate(pixelCoord, rowNoiseSize, uLineThickness);
|
|
47
|
+
float factor = gold_noise(newCoord, uTime+0.0);
|
|
48
|
+
float elegible = gold_noise(newCoord, uTime+1.0);
|
|
49
|
+
|
|
50
|
+
vec4 tex = oTex;
|
|
51
|
+
if(pixelCoord.x >= newCoord.x - (rowNoiseSize * factor) && pixelCoord.x <= newCoord.x + (rowNoiseSize * factor) &&
|
|
52
|
+
pixelCoord.y >= newCoord.y-1.0 && pixelCoord.y < newCoord.y + (uLineThickness)
|
|
53
|
+
&& elegible < uStrength){
|
|
54
|
+
if(uNegative == 0){
|
|
55
|
+
tex = texture(uTexture, unmapCoord(newCoord));
|
|
56
|
+
}else{
|
|
57
|
+
vec4 ntex = texture(uTexture, unmapCoord(newCoord));
|
|
58
|
+
if(oTex.a != 0.0){
|
|
59
|
+
tex = 1.0-ntex;
|
|
60
|
+
}else{
|
|
61
|
+
tex = vec4(0.0,0.0,0.0,0.0);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
//DRY/WET
|
|
67
|
+
gl_FragColor = ((1.0-uDryWet)*oTex) + (uDryWet * tex);
|
|
68
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { getCount } from "../../../helpers/ids.js";
|
|
2
|
+
import { ShaderLayer } from "../shader_layer.js";
|
|
3
|
+
import fragment from "./hnoise_shader.frag?raw";
|
|
4
|
+
export class HNoiseShader extends ShaderLayer {
|
|
5
|
+
fragment = fragment;
|
|
6
|
+
static getDefaultState(sceneStateId) {
|
|
7
|
+
return {
|
|
8
|
+
...ShaderLayer.getDefaultState(sceneStateId),
|
|
9
|
+
type: "hnoise",
|
|
10
|
+
name: "hnoise_" + getCount(sceneStateId),
|
|
11
|
+
noiseSize: 1,
|
|
12
|
+
lineThickness: 1,
|
|
13
|
+
strength: 0.1,
|
|
14
|
+
negative: false,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
constructor(sceneStateId, state, owner) {
|
|
18
|
+
super(sceneStateId, state, owner);
|
|
19
|
+
console.trace();
|
|
20
|
+
}
|
|
21
|
+
setupUniformValues() {
|
|
22
|
+
return {
|
|
23
|
+
uNoiseSize: { value: this.getFieldValue("noiseSize"), type: "f32" },
|
|
24
|
+
uLineThickness: {
|
|
25
|
+
value: this.getFieldValue("lineThickness"),
|
|
26
|
+
type: "f32",
|
|
27
|
+
},
|
|
28
|
+
uStrength: { value: this.getFieldValue("strength"), type: "f32" },
|
|
29
|
+
uNegative: { value: this.getFieldValue("negative") ? 1 : 0, type: "i32" },
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
updateUniforms() {
|
|
33
|
+
super.updateUniforms();
|
|
34
|
+
this.uniforms.uniforms.uNoiseSize = this.getFieldValue("noiseSize");
|
|
35
|
+
this.uniforms.uniforms.uLineThickness = this.getFieldValue("lineThickness");
|
|
36
|
+
this.uniforms.uniforms.uStrength = this.getFieldValue("strength");
|
|
37
|
+
this.uniforms.uniforms.uNegative = this.getFieldValue("negative") ? 1 : 0;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=hnoise_shader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hnoise_shader.js","sourceRoot":"","sources":["../../../../src/layers/shaders/hnoise/hnoise_shader.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAyB,MAAM,oBAAoB,CAAC;AACxE,OAAO,QAAQ,MAAM,0BAA0B,CAAC;AAShD,MAAM,OAAO,YAAa,SAAQ,WAAW;IAE3C,QAAQ,GAAW,QAAQ,CAAC;IAE5B,MAAM,CAAC,eAAe,CAAC,YAAoB;QACzC,OAAO;YACL,GAAG,WAAW,CAAC,eAAe,CAAC,YAAY,CAAC;YAC5C,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,SAAS,GAAG,QAAQ,CAAC,YAAY,CAAC;YACxC,SAAS,EAAE,CAAC;YACZ,aAAa,EAAE,CAAC;YAChB,QAAQ,EAAE,GAAG;YACb,QAAQ,EAAE,KAAK;SAChB,CAAC;IACJ,CAAC;IAED,YAAY,YAAoB,EAAE,KAAwB,EAAE,KAAa;QACvE,KAAK,CAAC,YAAY,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAClC,OAAO,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;IAED,kBAAkB;QAChB,OAAO;YACL,UAAU,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE;YACnE,cAAc,EAAE;gBACd,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC;gBAC1C,IAAI,EAAE,KAAK;aACZ;YACD,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE;YACjE,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE;SAC1E,CAAC;IACJ,CAAC;IAED,cAAc;QACZ,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;QACpE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;QAC5E,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QAClE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5E,CAAC;CACF"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { UniformData } from "pixi.js";
|
|
2
|
+
import { ShaderLayer, type ShaderLayerState } from "../shader_layer.js";
|
|
3
|
+
export type HSBBlurShaderState = ShaderLayerState & {
|
|
4
|
+
hueRadius: number;
|
|
5
|
+
saturationRadius: number;
|
|
6
|
+
lightnessRadius: number;
|
|
7
|
+
ignoreAlpha: boolean;
|
|
8
|
+
};
|
|
9
|
+
export declare class HSBBlurShader extends ShaderLayer {
|
|
10
|
+
_state: HSBBlurShaderState;
|
|
11
|
+
fragment: string;
|
|
12
|
+
static getDefaultState(sceneStateId: string): HSBBlurShaderState;
|
|
13
|
+
constructor(sceneStateId: string, state: HSBBlurShaderState, owner: string);
|
|
14
|
+
setupUniformValues(): {
|
|
15
|
+
[key: string]: UniformData;
|
|
16
|
+
};
|
|
17
|
+
updateUniforms(): void;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=hsb_blur_shader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hsb_blur_shader.d.ts","sourceRoot":"","sources":["../../../../src/layers/shaders/hsb_blur/hsb_blur_shader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGxE,MAAM,MAAM,kBAAkB,GAAG,gBAAgB,GAAG;IAClD,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF,qBAAa,aAAc,SAAQ,WAAW;IACpC,MAAM,EAAE,kBAAkB,CAAC;IACnC,QAAQ,EAAE,MAAM,CAAY;IAE5B,MAAM,CAAC,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,kBAAkB;gBAYpD,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM;IAK1E,kBAAkB,IAAI;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAAA;KAAE;IAkBpD,cAAc,IAAI,IAAI;CAWvB"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
in vec2 vTextureCoord;
|
|
2
|
+
|
|
3
|
+
uniform sampler2D uTexture;
|
|
4
|
+
uniform highp vec4 uInputSize;
|
|
5
|
+
uniform float uHueRadius;
|
|
6
|
+
uniform float uSaturationRadius;
|
|
7
|
+
uniform float uLightnessRadius;
|
|
8
|
+
uniform int uIgnoreAlpha;
|
|
9
|
+
uniform vec4 uDryWet;
|
|
10
|
+
|
|
11
|
+
const float Pi = 6.28318530718;
|
|
12
|
+
const float uQuality = 4.0;
|
|
13
|
+
const float Directions = 16.0;
|
|
14
|
+
const float stepSize = Pi / Directions;
|
|
15
|
+
const float qualityStep = 1.0 / uQuality;
|
|
16
|
+
|
|
17
|
+
vec3 rgb2hsv(vec3 c) {
|
|
18
|
+
vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0);
|
|
19
|
+
vec4 p = mix(vec4(c.bg, K.wz), vec4(c.gb, K.xy), step(c.b, c.g));
|
|
20
|
+
vec4 q = mix(vec4(p.xyw, c.r), vec4(c.r, p.yzx), step(p.x, c.r));
|
|
21
|
+
|
|
22
|
+
float d = q.x - min(q.w, q.y);
|
|
23
|
+
float e = 1.0e-10;
|
|
24
|
+
return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
vec3 hsv2rgb(vec3 c) {
|
|
28
|
+
vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);
|
|
29
|
+
vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);
|
|
30
|
+
return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
void main() {
|
|
34
|
+
vec4 oTex = texture(uTexture, vTextureCoord);
|
|
35
|
+
vec2 hueRadius = uHueRadius / uInputSize.xy;
|
|
36
|
+
vec2 saturationRadius = uSaturationRadius / uInputSize.xy;
|
|
37
|
+
vec2 lightnessRadius = uLightnessRadius / uInputSize.xy;
|
|
38
|
+
vec2 alphaRadius = (hueRadius + saturationRadius + lightnessRadius) / 3.0;
|
|
39
|
+
|
|
40
|
+
vec4 color = oTex;
|
|
41
|
+
color.xyz = rgb2hsv(color.xyz);
|
|
42
|
+
|
|
43
|
+
for (float d = 0.0; d < Pi; d += stepSize) {
|
|
44
|
+
for (float i = qualityStep; i < 1.001; i += qualityStep) {
|
|
45
|
+
vec2 hueCoord = vTextureCoord + vec2(cos(d), sin(d)) * hueRadius * i;
|
|
46
|
+
vec2 saturationCoord = vTextureCoord + vec2(cos(d), sin(d)) * saturationRadius * i;
|
|
47
|
+
vec2 lightnessCoord = vTextureCoord + vec2(cos(d), sin(d)) * lightnessRadius * i;
|
|
48
|
+
vec2 alphaCoord = vTextureCoord + vec2(cos(d), sin(d)) * alphaRadius * i;
|
|
49
|
+
|
|
50
|
+
color.x += rgb2hsv(texture(uTexture, hueCoord).xyz).x;
|
|
51
|
+
color.y += rgb2hsv(texture(uTexture, saturationCoord).xyz).y;
|
|
52
|
+
color.z += rgb2hsv(texture(uTexture, lightnessCoord).xyz).z;
|
|
53
|
+
|
|
54
|
+
if (uIgnoreAlpha == 1) {
|
|
55
|
+
color.a += 1.0;
|
|
56
|
+
} else if (
|
|
57
|
+
alphaCoord.x < 0.0 ||
|
|
58
|
+
alphaCoord.x >= 0.99 ||
|
|
59
|
+
alphaCoord.y < 0.0 ||
|
|
60
|
+
alphaCoord.y >= 0.99
|
|
61
|
+
) {
|
|
62
|
+
color.a += oTex.a;
|
|
63
|
+
} else {
|
|
64
|
+
color.a += texture(uTexture, alphaCoord).a;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
color /= uQuality * Directions + 1.0;
|
|
70
|
+
color.xyz = hsv2rgb(color.xyz);
|
|
71
|
+
|
|
72
|
+
gl_FragColor = (1.0 - uDryWet) * oTex + uDryWet * color;
|
|
73
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { getCount } from "../../../helpers/ids.js";
|
|
2
|
+
import { ShaderLayer } from "../shader_layer.js";
|
|
3
|
+
import fragment from "./hsb_blur_shader.frag?raw";
|
|
4
|
+
export class HSBBlurShader extends ShaderLayer {
|
|
5
|
+
fragment = fragment;
|
|
6
|
+
static getDefaultState(sceneStateId) {
|
|
7
|
+
return {
|
|
8
|
+
...ShaderLayer.getDefaultState(sceneStateId),
|
|
9
|
+
type: "hsb_blur",
|
|
10
|
+
name: "hsb_blur_" + getCount(sceneStateId),
|
|
11
|
+
hueRadius: 5,
|
|
12
|
+
saturationRadius: 5,
|
|
13
|
+
lightnessRadius: 5,
|
|
14
|
+
ignoreAlpha: false,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
constructor(sceneStateId, state, owner) {
|
|
18
|
+
super(sceneStateId, state, owner);
|
|
19
|
+
console.trace();
|
|
20
|
+
}
|
|
21
|
+
setupUniformValues() {
|
|
22
|
+
return {
|
|
23
|
+
uHueRadius: { value: this.getFieldValue("hueRadius"), type: "f32" },
|
|
24
|
+
uSaturationRadius: {
|
|
25
|
+
value: this.getFieldValue("saturationRadius"),
|
|
26
|
+
type: "f32",
|
|
27
|
+
},
|
|
28
|
+
uLightnessRadius: {
|
|
29
|
+
value: this.getFieldValue("lightnessRadius"),
|
|
30
|
+
type: "f32",
|
|
31
|
+
},
|
|
32
|
+
uIgnoreAlpha: {
|
|
33
|
+
value: this.getFieldBoolean("ignoreAlpha") ? 1 : 0,
|
|
34
|
+
type: "i32",
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
updateUniforms() {
|
|
39
|
+
super.updateUniforms();
|
|
40
|
+
this.uniforms.uniforms.uHueRadius = this.getFieldValue("hueRadius");
|
|
41
|
+
this.uniforms.uniforms.uSaturationRadius =
|
|
42
|
+
this.getFieldValue("saturationRadius");
|
|
43
|
+
this.uniforms.uniforms.uLightnessRadius =
|
|
44
|
+
this.getFieldValue("lightnessRadius");
|
|
45
|
+
this.uniforms.uniforms.uIgnoreAlpha = this.getFieldBoolean("ignoreAlpha")
|
|
46
|
+
? 1
|
|
47
|
+
: 0;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=hsb_blur_shader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hsb_blur_shader.js","sourceRoot":"","sources":["../../../../src/layers/shaders/hsb_blur/hsb_blur_shader.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAyB,MAAM,oBAAoB,CAAC;AACxE,OAAO,QAAQ,MAAM,4BAA4B,CAAC;AASlD,MAAM,OAAO,aAAc,SAAQ,WAAW;IAE5C,QAAQ,GAAW,QAAQ,CAAC;IAE5B,MAAM,CAAC,eAAe,CAAC,YAAoB;QACzC,OAAO;YACL,GAAG,WAAW,CAAC,eAAe,CAAC,YAAY,CAAC;YAC5C,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,WAAW,GAAG,QAAQ,CAAC,YAAY,CAAC;YAC1C,SAAS,EAAE,CAAC;YACZ,gBAAgB,EAAE,CAAC;YACnB,eAAe,EAAE,CAAC;YAClB,WAAW,EAAE,KAAK;SACnB,CAAC;IACJ,CAAC;IAED,YAAY,YAAoB,EAAE,KAAyB,EAAE,KAAa;QACxE,KAAK,CAAC,YAAY,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAClC,OAAO,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;IAED,kBAAkB;QAChB,OAAO;YACL,UAAU,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE;YACnE,iBAAiB,EAAE;gBACjB,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC;gBAC7C,IAAI,EAAE,KAAK;aACZ;YACD,gBAAgB,EAAE;gBAChB,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC;gBAC5C,IAAI,EAAE,KAAK;aACZ;YACD,YAAY,EAAE;gBACZ,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAClD,IAAI,EAAE,KAAK;aACZ;SACF,CAAC;IACJ,CAAC;IAED,cAAc;QACZ,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;QACpE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,iBAAiB;YACtC,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC;QACzC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,gBAAgB;YACrC,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC;QACxC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC;YACvE,CAAC,CAAC,CAAC;YACH,CAAC,CAAC,CAAC,CAAC;IACR,CAAC;CACF"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { UniformData } from "pixi.js";
|
|
2
|
+
import { ShaderLayer, type ShaderLayerState } from "../shader_layer.js";
|
|
3
|
+
export type LightSplitShaderState = ShaderLayerState & {
|
|
4
|
+
threshold: number;
|
|
5
|
+
power: number;
|
|
6
|
+
darken: boolean;
|
|
7
|
+
lighten: boolean;
|
|
8
|
+
inverse: boolean;
|
|
9
|
+
};
|
|
10
|
+
export declare class LightSplitShader extends ShaderLayer {
|
|
11
|
+
_state: LightSplitShaderState;
|
|
12
|
+
fragment: string;
|
|
13
|
+
static getDefaultState(sceneStateId: string): LightSplitShaderState;
|
|
14
|
+
constructor(sceneStateId: string, state: LightSplitShaderState, owner: string);
|
|
15
|
+
setupUniformValues(): {
|
|
16
|
+
[key: string]: UniformData;
|
|
17
|
+
};
|
|
18
|
+
updateUniforms(): void;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=light_split_shader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"light_split_shader.d.ts","sourceRoot":"","sources":["../../../../src/layers/shaders/light_split/light_split_shader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGxE,MAAM,MAAM,qBAAqB,GAAG,gBAAgB,GAAG;IACrD,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,qBAAa,gBAAiB,SAAQ,WAAW;IACvC,MAAM,EAAE,qBAAqB,CAAC;IACtC,QAAQ,EAAE,MAAM,CAAY;IAE5B,MAAM,CAAC,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,qBAAqB;gBAcjE,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,qBAAqB,EAC5B,KAAK,EAAE,MAAM;IAMf,kBAAkB,IAAI;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAAA;KAAE;IAUpD,cAAc,IAAI,IAAI;CAQvB"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
in vec2 vTextureCoord;
|
|
2
|
+
|
|
3
|
+
uniform sampler2D uTexture;
|
|
4
|
+
|
|
5
|
+
uniform float uThreshold;
|
|
6
|
+
uniform float uPower;
|
|
7
|
+
uniform int uDarken;
|
|
8
|
+
uniform int uLighten;
|
|
9
|
+
uniform int uInverse;
|
|
10
|
+
uniform vec4 uDryWet;
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
vec3 rgb2hsv(vec3 c)
|
|
14
|
+
{
|
|
15
|
+
vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0);
|
|
16
|
+
vec4 p = mix(vec4(c.bg, K.wz), vec4(c.gb, K.xy), step(c.b, c.g));
|
|
17
|
+
vec4 q = mix(vec4(p.xyw, c.r), vec4(c.r, p.yzx), step(p.x, c.r));
|
|
18
|
+
|
|
19
|
+
float d = q.x - min(q.w, q.y);
|
|
20
|
+
float e = 1.0e-10;
|
|
21
|
+
return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
vec3 hsv2rgb(vec3 c)
|
|
25
|
+
{
|
|
26
|
+
vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);
|
|
27
|
+
vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);
|
|
28
|
+
return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
void main(){
|
|
32
|
+
vec4 oTex = texture(uTexture, vTextureCoord);
|
|
33
|
+
|
|
34
|
+
vec3 hsv = rgb2hsv(oTex.rgb);
|
|
35
|
+
if(hsv.z <= uThreshold && uDarken == 1){
|
|
36
|
+
if(uInverse == 0){
|
|
37
|
+
hsv.z = pow(hsv.z-0.01, uPower);
|
|
38
|
+
}else{
|
|
39
|
+
hsv.z = pow(hsv.z+0.01, 1.0/uPower);
|
|
40
|
+
}
|
|
41
|
+
}else if(hsv.z >= uThreshold && uLighten == 1){
|
|
42
|
+
if(uInverse == 0){
|
|
43
|
+
hsv.z = pow(hsv.z+0.01, 1.0/uPower);
|
|
44
|
+
}else{
|
|
45
|
+
hsv.z = pow(hsv.z-0.01, uPower);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
vec3 tex3 = hsv2rgb(hsv);
|
|
49
|
+
|
|
50
|
+
vec4 tex = vec4(tex3.r, tex3.g, tex3.b, oTex.a);
|
|
51
|
+
|
|
52
|
+
//DRY/WET
|
|
53
|
+
gl_FragColor = ((1.0-uDryWet)*oTex) + (uDryWet * tex);
|
|
54
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { getCount } from "../../../helpers/ids.js";
|
|
2
|
+
import { ShaderLayer } from "../shader_layer.js";
|
|
3
|
+
import fragment from "./light_split_shader.frag?raw";
|
|
4
|
+
export class LightSplitShader extends ShaderLayer {
|
|
5
|
+
fragment = fragment;
|
|
6
|
+
static getDefaultState(sceneStateId) {
|
|
7
|
+
return {
|
|
8
|
+
...ShaderLayer.getDefaultState(sceneStateId),
|
|
9
|
+
type: "light_split",
|
|
10
|
+
name: "light_split_" + getCount(sceneStateId),
|
|
11
|
+
threshold: 0.5,
|
|
12
|
+
power: 2,
|
|
13
|
+
darken: false,
|
|
14
|
+
lighten: false,
|
|
15
|
+
inverse: false,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
constructor(sceneStateId, state, owner) {
|
|
19
|
+
super(sceneStateId, state, owner);
|
|
20
|
+
console.trace();
|
|
21
|
+
}
|
|
22
|
+
setupUniformValues() {
|
|
23
|
+
return {
|
|
24
|
+
uThreshold: { value: this.getFieldValue("threshold"), type: "f32" },
|
|
25
|
+
uPower: { value: this.getFieldValue("power"), type: "f32" },
|
|
26
|
+
uDarken: { value: this.getFieldValue("darken") ? 1 : 0, type: "i32" },
|
|
27
|
+
uLighten: { value: this.getFieldValue("lighten") ? 1 : 0, type: "i32" },
|
|
28
|
+
uInverse: { value: this.getFieldValue("inverse") ? 1 : 0, type: "i32" },
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
updateUniforms() {
|
|
32
|
+
super.updateUniforms();
|
|
33
|
+
this.uniforms.uniforms.uThreshold = this.getFieldValue("threshold");
|
|
34
|
+
this.uniforms.uniforms.uPower = this.getFieldValue("power");
|
|
35
|
+
this.uniforms.uniforms.uDarken = this.getFieldValue("darken") ? 1 : 0;
|
|
36
|
+
this.uniforms.uniforms.uLighten = this.getFieldValue("lighten") ? 1 : 0;
|
|
37
|
+
this.uniforms.uniforms.uInverse = this.getFieldValue("inverse") ? 1 : 0;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=light_split_shader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"light_split_shader.js","sourceRoot":"","sources":["../../../../src/layers/shaders/light_split/light_split_shader.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAyB,MAAM,oBAAoB,CAAC;AACxE,OAAO,QAAQ,MAAM,+BAA+B,CAAC;AAUrD,MAAM,OAAO,gBAAiB,SAAQ,WAAW;IAE/C,QAAQ,GAAW,QAAQ,CAAC;IAE5B,MAAM,CAAC,eAAe,CAAC,YAAoB;QACzC,OAAO;YACL,GAAG,WAAW,CAAC,eAAe,CAAC,YAAY,CAAC;YAC5C,IAAI,EAAE,aAAa;YACnB,IAAI,EAAE,cAAc,GAAG,QAAQ,CAAC,YAAY,CAAC;YAC7C,SAAS,EAAE,GAAG;YACd,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,KAAK;SACf,CAAC;IACJ,CAAC;IAED,YACE,YAAoB,EACpB,KAA4B,EAC5B,KAAa;QAEb,KAAK,CAAC,YAAY,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAClC,OAAO,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;IAED,kBAAkB;QAChB,OAAO;YACL,UAAU,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE;YACnE,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE;YAC3D,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE;YACrE,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE;YACvE,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE;SACxE,CAAC;IACJ,CAAC;IAED,cAAc;QACZ,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;QACpE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC5D,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1E,CAAC;CACF"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { UniformData } from "pixi.js";
|
|
2
|
+
import { ShaderLayer, type ShaderLayerState } from "../shader_layer.js";
|
|
3
|
+
export type MontecarloShaderState = ShaderLayerState & {
|
|
4
|
+
strength: number;
|
|
5
|
+
not: boolean;
|
|
6
|
+
};
|
|
7
|
+
export declare class MontecarloShader extends ShaderLayer {
|
|
8
|
+
_state: MontecarloShaderState;
|
|
9
|
+
fragment: string;
|
|
10
|
+
static getDefaultState(sceneStateId: string): MontecarloShaderState;
|
|
11
|
+
constructor(sceneStateId: string, state: MontecarloShaderState, owner: string);
|
|
12
|
+
setupUniformValues(): {
|
|
13
|
+
[key: string]: UniformData;
|
|
14
|
+
};
|
|
15
|
+
updateUniforms(): void;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=montecarlo_shader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"montecarlo_shader.d.ts","sourceRoot":"","sources":["../../../../src/layers/shaders/montecarlo/montecarlo_shader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGxE,MAAM,MAAM,qBAAqB,GAAG,gBAAgB,GAAG;IACrD,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,OAAO,CAAC;CACd,CAAC;AAEF,qBAAa,gBAAiB,SAAQ,WAAW;IACvC,MAAM,EAAE,qBAAqB,CAAC;IACtC,QAAQ,EAAE,MAAM,CAAY;IAE5B,MAAM,CAAC,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,qBAAqB;gBAWjE,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,qBAAqB,EAC5B,KAAK,EAAE,MAAM;IAMf,kBAAkB,IAAI;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAAA;KAAE;IAOpD,cAAc,IAAI,IAAI;CAKvB"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
in vec2 vTextureCoord;
|
|
2
|
+
|
|
3
|
+
uniform sampler2D uTexture;
|
|
4
|
+
|
|
5
|
+
uniform vec2 uSize;
|
|
6
|
+
uniform float uTime;
|
|
7
|
+
uniform float uStrength;
|
|
8
|
+
uniform int uNot;
|
|
9
|
+
uniform vec4 uDryWet;
|
|
10
|
+
|
|
11
|
+
float PHI = 1.61803398874989484820459; // Φ = Golden Ratio
|
|
12
|
+
|
|
13
|
+
float gold_noise(vec2 xy, float seed){
|
|
14
|
+
return fract(tan(distance(xy*PHI, xy)*seed)*xy.x);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
void main(){
|
|
18
|
+
vec4 oTex = texture(uTexture, vTextureCoord);
|
|
19
|
+
float noise = gold_noise(vTextureCoord*uSize, uTime);
|
|
20
|
+
vec4 tex = vec4(0.0, 0.0, 0.0, 0.0);
|
|
21
|
+
if(noise < 1.0-uStrength){
|
|
22
|
+
if(uNot == 0){
|
|
23
|
+
tex = oTex;
|
|
24
|
+
}
|
|
25
|
+
}else if(uNot == 1){
|
|
26
|
+
tex = oTex;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
//DRY/WET
|
|
30
|
+
gl_FragColor = (1.0-uDryWet)*oTex +uDryWet * tex;
|
|
31
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { getCount } from "../../../helpers/ids.js";
|
|
2
|
+
import { ShaderLayer } from "../shader_layer.js";
|
|
3
|
+
import fragment from "./montecarlo_shader.frag?raw";
|
|
4
|
+
export class MontecarloShader extends ShaderLayer {
|
|
5
|
+
fragment = fragment;
|
|
6
|
+
static getDefaultState(sceneStateId) {
|
|
7
|
+
return {
|
|
8
|
+
...ShaderLayer.getDefaultState(sceneStateId),
|
|
9
|
+
type: "montecarlo",
|
|
10
|
+
name: "montecarlo_" + getCount(sceneStateId),
|
|
11
|
+
strength: 0.1,
|
|
12
|
+
not: false,
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
constructor(sceneStateId, state, owner) {
|
|
16
|
+
super(sceneStateId, state, owner);
|
|
17
|
+
console.trace();
|
|
18
|
+
}
|
|
19
|
+
setupUniformValues() {
|
|
20
|
+
return {
|
|
21
|
+
uStrength: { value: this.getFieldValue("strength"), type: "f32" },
|
|
22
|
+
uNot: { value: this.getFieldValue("not"), type: "i32" },
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
updateUniforms() {
|
|
26
|
+
super.updateUniforms();
|
|
27
|
+
this.uniforms.uniforms.uStrength = this.getFieldValue("strength");
|
|
28
|
+
this.uniforms.uniforms.uNot = this.getFieldValue("not");
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=montecarlo_shader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"montecarlo_shader.js","sourceRoot":"","sources":["../../../../src/layers/shaders/montecarlo/montecarlo_shader.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAyB,MAAM,oBAAoB,CAAC;AACxE,OAAO,QAAQ,MAAM,8BAA8B,CAAC;AAOpD,MAAM,OAAO,gBAAiB,SAAQ,WAAW;IAE/C,QAAQ,GAAW,QAAQ,CAAC;IAE5B,MAAM,CAAC,eAAe,CAAC,YAAoB;QACzC,OAAO;YACL,GAAG,WAAW,CAAC,eAAe,CAAC,YAAY,CAAC;YAC5C,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,aAAa,GAAG,QAAQ,CAAC,YAAY,CAAC;YAC5C,QAAQ,EAAE,GAAG;YACb,GAAG,EAAE,KAAK;SACX,CAAC;IACJ,CAAC;IAED,YACE,YAAoB,EACpB,KAA4B,EAC5B,KAAa;QAEb,KAAK,CAAC,YAAY,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAClC,OAAO,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;IAED,kBAAkB;QAChB,OAAO;YACL,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE;YACjE,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE;SACxD,CAAC;IACJ,CAAC;IAED,cAAc;QACZ,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QAClE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC1D,CAAC;CACF"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { UniformData } from "pixi.js";
|
|
2
|
+
import { ShaderLayer, type ShaderLayerState } from "../shader_layer.js";
|
|
3
|
+
export declare class NegativeShader extends ShaderLayer {
|
|
4
|
+
fragment: string;
|
|
5
|
+
static getDefaultState(sceneStateId: string): ShaderLayerState;
|
|
6
|
+
constructor(sceneStateId: string, state: ShaderLayerState, owner: string);
|
|
7
|
+
setupUniformValues(): {
|
|
8
|
+
[key: string]: UniformData;
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=negative_shader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"negative_shader.d.ts","sourceRoot":"","sources":["../../../../src/layers/shaders/negative/negative_shader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGxE,qBAAa,cAAe,SAAQ,WAAW;IAC7C,QAAQ,EAAE,MAAM,CAAY;IAE5B,MAAM,CAAC,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,gBAAgB;gBAQlD,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM;IAKxE,kBAAkB,IAAI;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAAA;KAAE;CAGrD"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
in vec2 vTextureCoord;
|
|
2
|
+
|
|
3
|
+
uniform sampler2D uTexture;
|
|
4
|
+
uniform vec4 uDryWet;
|
|
5
|
+
|
|
6
|
+
void main(){
|
|
7
|
+
vec4 oTex = texture(uTexture, vTextureCoord);
|
|
8
|
+
vec4 tex = 1.0-oTex;
|
|
9
|
+
tex.a = oTex.a;
|
|
10
|
+
|
|
11
|
+
//DRY/WET
|
|
12
|
+
gl_FragColor = (1.0-uDryWet)*oTex +uDryWet * tex;
|
|
13
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { getCount } from "../../../helpers/ids.js";
|
|
2
|
+
import { ShaderLayer } from "../shader_layer.js";
|
|
3
|
+
import fragment from "./negative_shader.frag?raw";
|
|
4
|
+
export class NegativeShader extends ShaderLayer {
|
|
5
|
+
fragment = fragment;
|
|
6
|
+
static getDefaultState(sceneStateId) {
|
|
7
|
+
return {
|
|
8
|
+
...ShaderLayer.getDefaultState(sceneStateId),
|
|
9
|
+
type: "negative",
|
|
10
|
+
name: "negative_" + getCount(sceneStateId),
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
constructor(sceneStateId, state, owner) {
|
|
14
|
+
super(sceneStateId, state, owner);
|
|
15
|
+
console.trace();
|
|
16
|
+
}
|
|
17
|
+
setupUniformValues() {
|
|
18
|
+
return {};
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=negative_shader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"negative_shader.js","sourceRoot":"","sources":["../../../../src/layers/shaders/negative/negative_shader.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAyB,MAAM,oBAAoB,CAAC;AACxE,OAAO,QAAQ,MAAM,4BAA4B,CAAC;AAElD,MAAM,OAAO,cAAe,SAAQ,WAAW;IAC7C,QAAQ,GAAW,QAAQ,CAAC;IAE5B,MAAM,CAAC,eAAe,CAAC,YAAoB;QACzC,OAAO;YACL,GAAG,WAAW,CAAC,eAAe,CAAC,YAAY,CAAC;YAC5C,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,WAAW,GAAG,QAAQ,CAAC,YAAY,CAAC;SAC3C,CAAC;IACJ,CAAC;IAED,YAAY,YAAoB,EAAE,KAAuB,EAAE,KAAa;QACtE,KAAK,CAAC,YAAY,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAClC,OAAO,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;IAED,kBAAkB;QAChB,OAAO,EAAE,CAAC;IACZ,CAAC;CACF"}
|