fragment-tools 0.2.7 → 0.2.9
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/.changeset/README.md +8 -0
- package/.changeset/config.json +11 -0
- package/.prettierignore +1 -0
- package/CHANGELOG.md +10 -0
- package/README.md +14 -10
- package/bin/index.js +4 -0
- package/package.json +9 -2
- package/src/cli/build.js +1 -3
- package/src/cli/create.js +55 -6
- package/src/cli/createConfig.js +8 -23
- package/src/cli/createFragmentFile.js +44 -46
- package/src/cli/getEntries.js +13 -5
- package/src/cli/plugins/check-dependencies.js +1 -1
- package/src/cli/run.js +12 -3
- package/src/cli/templates/blank/index.js +4 -4
- package/src/cli/templates/blank/index.ts +15 -0
- package/src/cli/templates/default/index.js +7 -6
- package/src/cli/templates/default/index.ts +20 -0
- package/src/cli/templates/fragment-gl/fragment.fs +1 -1
- package/src/cli/templates/fragment-gl/index.js +3 -3
- package/src/cli/templates/fragment-gl/index.ts +20 -0
- package/src/cli/templates/p5/index.js +6 -6
- package/src/cli/templates/p5/index.ts +14 -0
- package/src/cli/templates/p5-webgl/fragment.fs +2 -4
- package/src/cli/templates/p5-webgl/index.js +9 -15
- package/src/cli/templates/p5-webgl/index.ts +43 -0
- package/src/cli/templates/three-fragment/fragment.fs +1 -1
- package/src/cli/templates/three-fragment/index.js +10 -4
- package/src/cli/templates/three-fragment/index.ts +68 -0
- package/src/cli/templates/three-orthographic/index.js +10 -4
- package/src/cli/templates/three-orthographic/index.ts +29 -0
- package/src/cli/templates/three-perspective/index.js +10 -4
- package/src/cli/templates/three-perspective/index.ts +26 -0
- package/src/cli/utils.js +3 -0
- package/src/client/app/components/HintRecord.svelte +3 -3
- package/src/client/app/hooks.js +5 -5
- package/src/client/app/lib/gl/Renderer.js +1 -1
- package/src/client/app/lib/gl/Texture.js +1 -1
- package/src/client/app/lib/gl/index.js +2 -2
- package/src/client/app/modules/AudioAnalyser/Range.svelte +2 -2
- package/src/client/app/modules/AudioAnalyser/Spectrum.svelte +3 -3
- package/src/client/app/modules/Console/ConsoleLine.svelte +13 -13
- package/src/client/app/modules/Console.svelte +6 -4
- package/src/client/app/renderers/2DRenderer.js +6 -3
- package/src/client/app/renderers/FragmentRenderer.js +39 -2
- package/src/client/app/renderers/P5GLRenderer.js +28 -26
- package/src/client/app/renderers/P5Renderer.js +49 -9
- package/src/client/app/renderers/THREERenderer.js +64 -12
- package/src/client/app/state/Sketch.svelte.js +0 -4
- package/src/client/app/state/rendering.svelte.js +2 -2
- package/src/client/app/state/utils.svelte.js +9 -2
- package/src/client/app/stores/sketches.js +2 -1
- package/src/client/app/ui/ErrorOverlay.svelte +5 -5
- package/src/client/app/ui/Field.svelte +5 -5
- package/src/client/app/ui/FieldGroup.svelte +5 -5
- package/src/client/app/ui/FieldSection.svelte +7 -7
- package/src/client/app/ui/FieldSpace.svelte +2 -2
- package/src/client/app/ui/FieldTrigger.svelte +6 -6
- package/src/client/app/ui/FloatingParams.svelte +1 -1
- package/src/client/app/ui/LayoutComponent.svelte +7 -7
- package/src/client/app/ui/LayoutResizer.svelte +1 -1
- package/src/client/app/ui/LayoutToolbar.svelte +6 -6
- package/src/client/app/ui/Module.svelte +6 -4
- package/src/client/app/ui/ModuleRenderer.svelte +3 -3
- package/src/client/app/ui/OutputRenderer.svelte +4 -1
- package/src/client/app/ui/SketchRenderer.svelte +4 -1
- package/src/client/app/ui/fields/ButtonInput.svelte +11 -11
- package/src/client/app/ui/fields/CheckboxInput.svelte +18 -12
- package/src/client/app/ui/fields/ColorInput.svelte +9 -7
- package/src/client/app/ui/fields/ImageInput.svelte +10 -8
- package/src/client/app/ui/fields/Input.svelte +13 -13
- package/src/client/app/ui/fields/IntervalInput.svelte +11 -14
- package/src/client/app/ui/fields/ListInput.svelte +9 -8
- package/src/client/app/ui/fields/ProgressInput.svelte +9 -9
- package/src/client/app/ui/fields/Select.svelte +11 -11
- package/src/client/app/ui/fields/VectorInput.svelte +1 -1
- package/src/client/public/css/global.css +26 -27
- package/src/client/public/preview.html +59 -0
- package/src/types/client.d.ts +36 -0
- package/src/types/gl.d.ts +130 -0
- package/src/types/helpers.d.ts +5 -0
- package/src/types/hooks.d.ts +14 -0
- package/src/types/index.d.ts +8 -0
- package/src/types/midi.d.ts +176 -0
- package/src/types/props.d.ts +72 -0
- package/src/types/renderers.d.ts +100 -0
- package/src/types/sketch.d.ts +45 -0
- package/src/types/triggers.d.ts +45 -0
- package/src/types/utils.ts +11 -0
- package/tsconfig.json +38 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export
|
|
1
|
+
export const props = {};
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* @param {object} params
|
|
@@ -8,7 +8,7 @@ export let props = {};
|
|
|
8
8
|
* @param {number} params.height
|
|
9
9
|
* @param {number} params.pixelRatio
|
|
10
10
|
*/
|
|
11
|
-
export
|
|
11
|
+
export const init = ({ canvas, context, width, height }) => {};
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
14
|
* @param {object} params
|
|
@@ -23,8 +23,9 @@ export let init = ({ canvas, context, width, height }) => {};
|
|
|
23
23
|
* @param {number} params.playhead
|
|
24
24
|
* @param {number} params.playcount
|
|
25
25
|
*/
|
|
26
|
-
export
|
|
27
|
-
context.
|
|
26
|
+
export const update = ({ context, width, height, pixelRatio }) => {
|
|
27
|
+
context.fillStyle = 'rgb(0, 255, 0)';
|
|
28
|
+
context.fillRect(0, 0, width * pixelRatio, height * pixelRatio);
|
|
28
29
|
};
|
|
29
30
|
|
|
30
31
|
/**
|
|
@@ -34,6 +35,6 @@ export let update = ({ context, width, height, pixelRatio }) => {
|
|
|
34
35
|
* @param {number} params.height
|
|
35
36
|
* @param {number} params.pixelRatio
|
|
36
37
|
*/
|
|
37
|
-
export
|
|
38
|
+
export const resize = ({ width, height }) => {};
|
|
38
39
|
|
|
39
|
-
export
|
|
40
|
+
export const rendering = '2d';
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Init, Rendering, Resize, Update } from '@fragment/types';
|
|
2
|
+
import { defineProps } from '@fragment/types/utils';
|
|
3
|
+
|
|
4
|
+
export const props = defineProps({});
|
|
5
|
+
|
|
6
|
+
export const init: Init<'2d'> = ({}) => {};
|
|
7
|
+
|
|
8
|
+
export const update: Update<'2d'> = ({
|
|
9
|
+
context,
|
|
10
|
+
width,
|
|
11
|
+
height,
|
|
12
|
+
pixelRatio,
|
|
13
|
+
}) => {
|
|
14
|
+
context.fillStyle = 'rgb(0, 255, 0)';
|
|
15
|
+
context.fillRect(0, 0, width * pixelRatio, height * pixelRatio);
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
export const resize: Resize<'2d'> = ({}) => {};
|
|
19
|
+
|
|
20
|
+
export const rendering: Rendering = '2d';
|
|
@@ -11,7 +11,7 @@ let uniforms = {
|
|
|
11
11
|
* @param {number} params.height
|
|
12
12
|
* @param {number} params.pixelRatio
|
|
13
13
|
*/
|
|
14
|
-
export
|
|
14
|
+
export const init = ({ frag }) => {
|
|
15
15
|
frag.uniforms = uniforms;
|
|
16
16
|
frag.shader = fragmentShader;
|
|
17
17
|
};
|
|
@@ -28,10 +28,10 @@ export let init = ({ frag }) => {
|
|
|
28
28
|
* @param {number} params.playhead
|
|
29
29
|
* @param {number} params.playcount
|
|
30
30
|
*/
|
|
31
|
-
export
|
|
31
|
+
export const update = ({ frag, deltaTime }) => {
|
|
32
32
|
uniforms.uTime.value += deltaTime;
|
|
33
33
|
|
|
34
34
|
frag.render();
|
|
35
35
|
};
|
|
36
36
|
|
|
37
|
-
export
|
|
37
|
+
export const rendering = 'fragment';
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Init, Rendering, Update } from '@fragment/types';
|
|
2
|
+
|
|
3
|
+
import fragmentShader from './fragment.fs';
|
|
4
|
+
|
|
5
|
+
const uniforms = {
|
|
6
|
+
uTime: { value: 0, type: 'float' }
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
export const init: Init<'fragment'> = ({ frag }) => {
|
|
10
|
+
frag.uniforms = uniforms;
|
|
11
|
+
frag.shader = fragmentShader;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export const update: Update<'fragment'> = ({ frag, deltaTime }) => {
|
|
15
|
+
uniforms.uTime.value += deltaTime;
|
|
16
|
+
|
|
17
|
+
frag.render();
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export const rendering: Rendering = 'fragment';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import p5 from 'p5';
|
|
2
2
|
|
|
3
|
-
export
|
|
3
|
+
export const props = {};
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* @param {object} params
|
|
@@ -10,7 +10,7 @@ export let props = {};
|
|
|
10
10
|
* @param {number} params.height
|
|
11
11
|
* @param {number} params.pixelRatio
|
|
12
12
|
*/
|
|
13
|
-
export
|
|
13
|
+
export const setup = ({ p, width, height }) => {};
|
|
14
14
|
|
|
15
15
|
/**
|
|
16
16
|
* @param {object} params
|
|
@@ -25,8 +25,8 @@ export function setup({ p, width, height }) {}
|
|
|
25
25
|
* @param {number} params.playhead
|
|
26
26
|
* @param {number} params.playcount
|
|
27
27
|
*/
|
|
28
|
-
export
|
|
29
|
-
p.background(
|
|
30
|
-
}
|
|
28
|
+
export const draw = ({ p }) => {
|
|
29
|
+
p.background(0, 255, 0);
|
|
30
|
+
};
|
|
31
31
|
|
|
32
|
-
export
|
|
32
|
+
export const rendering = 'p5';
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import p5 from 'p5';
|
|
2
|
+
|
|
3
|
+
import { Init, Rendering, Update } from '@fragment/types';
|
|
4
|
+
import { defineProps } from '@fragment/types/utils';
|
|
5
|
+
|
|
6
|
+
export const props = defineProps({});
|
|
7
|
+
|
|
8
|
+
export const setup: Init<'p5'> = ({}) => {};
|
|
9
|
+
|
|
10
|
+
export const draw: Update<'p5'> = ({ p }) => {
|
|
11
|
+
p.background(0, 255, 0);
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export const rendering: Rendering = 'p5';
|
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
precision mediump float;
|
|
2
2
|
|
|
3
|
-
#define PI 3.141592653589793
|
|
4
|
-
|
|
5
3
|
uniform float uTime;
|
|
6
4
|
|
|
7
5
|
varying vec2 vUv;
|
|
8
6
|
|
|
9
7
|
void main() {
|
|
10
8
|
vec2 uv = vUv;
|
|
11
|
-
vec3 color = vec3(
|
|
12
|
-
|
|
9
|
+
vec3 color = vec3(0., 1., 0.);
|
|
10
|
+
|
|
13
11
|
gl_FragColor = vec4(color, 1.0);
|
|
14
12
|
}
|
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
import p5 from 'p5';
|
|
2
|
+
|
|
2
3
|
import fragmentShader from './fragment.fs';
|
|
3
4
|
|
|
4
|
-
export let props = {
|
|
5
|
-
backgroundColor: {
|
|
6
|
-
value: 'rgb(255, 0, 0)',
|
|
7
|
-
},
|
|
8
|
-
};
|
|
5
|
+
export let props = {};
|
|
9
6
|
|
|
10
7
|
let shader;
|
|
11
8
|
|
|
@@ -17,7 +14,7 @@ let shader;
|
|
|
17
14
|
* @param {number} params.height
|
|
18
15
|
* @param {number} params.pixelRatio
|
|
19
16
|
*/
|
|
20
|
-
export
|
|
17
|
+
export const setup = ({ p, width, height }) => {
|
|
21
18
|
shader = p.createShader(
|
|
22
19
|
/* glsl */ `
|
|
23
20
|
attribute vec3 aPosition;
|
|
@@ -31,15 +28,14 @@ varying vec2 vUv;
|
|
|
31
28
|
void main() {
|
|
32
29
|
vUv = aTexCoord;
|
|
33
30
|
|
|
34
|
-
vec3 transformed = aPosition
|
|
35
|
-
|
|
36
|
-
|
|
31
|
+
vec3 transformed = (aPosition - 0.5) * 2.;
|
|
32
|
+
|
|
37
33
|
gl_Position = vec4(transformed, 1.);
|
|
38
34
|
}
|
|
39
35
|
`,
|
|
40
36
|
fragmentShader,
|
|
41
37
|
);
|
|
42
|
-
}
|
|
38
|
+
};
|
|
43
39
|
|
|
44
40
|
/**
|
|
45
41
|
* @param {object} params
|
|
@@ -54,14 +50,12 @@ void main() {
|
|
|
54
50
|
* @param {number} params.playhead
|
|
55
51
|
* @param {number} params.playcount
|
|
56
52
|
*/
|
|
57
|
-
export
|
|
58
|
-
p.background(props.backgroundColor.value);
|
|
59
|
-
|
|
53
|
+
export const draw = ({ p, width, height, time }) => {
|
|
60
54
|
p.shader(shader);
|
|
61
55
|
|
|
62
56
|
shader.setUniform('uTime', time / 1000);
|
|
63
57
|
|
|
64
58
|
p.rect(0, 0, width, height);
|
|
65
|
-
}
|
|
59
|
+
};
|
|
66
60
|
|
|
67
|
-
export
|
|
61
|
+
export const rendering = 'p5-webgl';
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import p5, { type Shader } from 'p5';
|
|
2
|
+
|
|
3
|
+
import { Init, Rendering, Update } from '@fragment/types';
|
|
4
|
+
import { defineProps } from '@fragment/types/utils';
|
|
5
|
+
|
|
6
|
+
import fragmentShader from './fragment.fs';
|
|
7
|
+
|
|
8
|
+
export const props = defineProps({});
|
|
9
|
+
|
|
10
|
+
let shader: Shader;
|
|
11
|
+
|
|
12
|
+
export const setup: Init<'p5-webgl'> = ({ p }) => {
|
|
13
|
+
shader = p.createShader(
|
|
14
|
+
/* glsl */ `
|
|
15
|
+
attribute vec3 aPosition;
|
|
16
|
+
attribute vec2 aTexCoord;
|
|
17
|
+
|
|
18
|
+
uniform mat4 uProjectionMatrix;
|
|
19
|
+
uniform mat4 uModelViewMatrix;
|
|
20
|
+
|
|
21
|
+
varying vec2 vUv;
|
|
22
|
+
|
|
23
|
+
void main() {
|
|
24
|
+
vUv = aTexCoord;
|
|
25
|
+
|
|
26
|
+
vec3 transformed = (aPosition - 0.5) * 2.;
|
|
27
|
+
|
|
28
|
+
gl_Position = vec4(transformed, 1.);
|
|
29
|
+
}
|
|
30
|
+
`,
|
|
31
|
+
fragmentShader,
|
|
32
|
+
);
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
export const draw: Update<'p5-webgl'> = ({ p, width, height, time }) => {
|
|
36
|
+
p.shader(shader);
|
|
37
|
+
|
|
38
|
+
shader.setUniform('uTime', time / 1000);
|
|
39
|
+
|
|
40
|
+
p.rect(0, 0, width, height);
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
export const rendering: Rendering = 'p5-webgl';
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
import * as THREE from 'three';
|
|
2
|
+
|
|
2
3
|
import fragmentShader from './fragment.fs';
|
|
3
4
|
|
|
5
|
+
/** @type {THREE.Scene} */
|
|
6
|
+
let scene;
|
|
7
|
+
/** @type {THREE.OrthographicCamera} */
|
|
4
8
|
let camera;
|
|
9
|
+
|
|
5
10
|
let uniforms = {
|
|
6
11
|
uResolution: { value: new THREE.Vector2() },
|
|
7
12
|
uTime: { value: 0 },
|
|
@@ -16,7 +21,8 @@ let uniforms = {
|
|
|
16
21
|
* @param {number} params.height
|
|
17
22
|
* @param {number} params.pixelRatio
|
|
18
23
|
*/
|
|
19
|
-
export
|
|
24
|
+
export const init = ({ width, height }) => {
|
|
25
|
+
scene = new THREE.Scene();
|
|
20
26
|
camera = new THREE.OrthographicCamera(1, 1, 1, 1, 1, 1000);
|
|
21
27
|
|
|
22
28
|
let geometry = new THREE.BufferGeometry();
|
|
@@ -65,7 +71,7 @@ export let init = ({ scene, width, height }) => {
|
|
|
65
71
|
* @param {number} params.playhead
|
|
66
72
|
* @param {number} params.playcount
|
|
67
73
|
*/
|
|
68
|
-
export
|
|
74
|
+
export const update = ({ renderer, time, deltaTime }) => {
|
|
69
75
|
uniforms.uTime.value = time;
|
|
70
76
|
|
|
71
77
|
renderer.render(scene, camera);
|
|
@@ -80,7 +86,7 @@ export let update = ({ renderer, scene, time, deltaTime }) => {
|
|
|
80
86
|
* @param {number} params.height
|
|
81
87
|
* @param {number} params.pixelRatio
|
|
82
88
|
*/
|
|
83
|
-
export
|
|
89
|
+
export const resize = ({ width, height, pixelRatio }) => {
|
|
84
90
|
uniforms.uResolution.value.x = width * pixelRatio;
|
|
85
91
|
uniforms.uResolution.value.y = height * pixelRatio;
|
|
86
92
|
|
|
@@ -92,4 +98,4 @@ export let resize = ({ width, height, pixelRatio }) => {
|
|
|
92
98
|
camera.updateProjectionMatrix();
|
|
93
99
|
};
|
|
94
100
|
|
|
95
|
-
export
|
|
101
|
+
export const rendering = 'three';
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import * as THREE from 'three';
|
|
2
|
+
|
|
3
|
+
import { Init, Rendering, Resize, Update } from '@fragment/types';
|
|
4
|
+
|
|
5
|
+
import fragmentShader from './fragment.fs';
|
|
6
|
+
|
|
7
|
+
let scene: THREE.Scene;
|
|
8
|
+
let camera: THREE.OrthographicCamera;
|
|
9
|
+
let uniforms = {
|
|
10
|
+
uResolution: { value: new THREE.Vector2() },
|
|
11
|
+
uTime: { value: 0 },
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export const init: Init<'three'> = () => {
|
|
15
|
+
scene = new THREE.Scene();
|
|
16
|
+
camera = new THREE.OrthographicCamera(1, 1, 1, 1, 1, 1000);
|
|
17
|
+
|
|
18
|
+
const geometry = new THREE.BufferGeometry();
|
|
19
|
+
geometry.setAttribute(
|
|
20
|
+
'position',
|
|
21
|
+
new THREE.Float32BufferAttribute([-1, 3, 0, -1, -1, 0, 3, -1, 0], 3),
|
|
22
|
+
);
|
|
23
|
+
geometry.setAttribute(
|
|
24
|
+
'uv',
|
|
25
|
+
new THREE.Float32BufferAttribute([0, 2, 0, 0, 2, 0], 2),
|
|
26
|
+
);
|
|
27
|
+
|
|
28
|
+
const mesh = new THREE.Mesh(
|
|
29
|
+
geometry,
|
|
30
|
+
new THREE.RawShaderMaterial({
|
|
31
|
+
vertexShader: `
|
|
32
|
+
attribute vec3 position;
|
|
33
|
+
attribute vec2 uv;
|
|
34
|
+
|
|
35
|
+
varying vec2 vUv;
|
|
36
|
+
|
|
37
|
+
void main() {
|
|
38
|
+
vUv = uv;
|
|
39
|
+
gl_Position = vec4(position, 1.);
|
|
40
|
+
}
|
|
41
|
+
`,
|
|
42
|
+
fragmentShader,
|
|
43
|
+
uniforms,
|
|
44
|
+
}),
|
|
45
|
+
);
|
|
46
|
+
|
|
47
|
+
scene.add(mesh);
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
export const update: Update<'three'> = ({ renderer, time }) => {
|
|
51
|
+
uniforms.uTime.value = time;
|
|
52
|
+
|
|
53
|
+
renderer.render(scene, camera);
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
export const resize: Resize<'three'> = ({ width, height, pixelRatio }) => {
|
|
57
|
+
uniforms.uResolution.value.x = width * pixelRatio;
|
|
58
|
+
uniforms.uResolution.value.y = height * pixelRatio;
|
|
59
|
+
|
|
60
|
+
camera.left = -width * 0.5;
|
|
61
|
+
camera.right = width * 0.5;
|
|
62
|
+
camera.top = height * 0.5;
|
|
63
|
+
camera.bottom = -height * 0.5;
|
|
64
|
+
|
|
65
|
+
camera.updateProjectionMatrix();
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
export const rendering: Rendering = 'three';
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import * as THREE from 'three';
|
|
2
2
|
|
|
3
|
+
/** @type {THREE.Scene} */
|
|
4
|
+
let scene;
|
|
5
|
+
/** @type {THREE.OrthographicCamera} */
|
|
3
6
|
let camera;
|
|
4
7
|
|
|
5
8
|
/**
|
|
@@ -11,7 +14,10 @@ let camera;
|
|
|
11
14
|
* @param {number} params.height
|
|
12
15
|
* @param {number} params.pixelRatio
|
|
13
16
|
*/
|
|
14
|
-
export
|
|
17
|
+
export const init = ({ width, height }) => {
|
|
18
|
+
scene = new THREE.Scene();
|
|
19
|
+
scene.background = new THREE.Color(0x00ff00);
|
|
20
|
+
|
|
15
21
|
camera = new THREE.OrthographicCamera(1, 1, 1, 1, 1, 1000);
|
|
16
22
|
camera.position.z = 1;
|
|
17
23
|
};
|
|
@@ -30,7 +36,7 @@ export let init = ({ scene, width, height }) => {
|
|
|
30
36
|
* @param {number} params.playhead
|
|
31
37
|
* @param {number} params.playcount
|
|
32
38
|
*/
|
|
33
|
-
export
|
|
39
|
+
export const update = ({ renderer, time, deltaTime }) => {
|
|
34
40
|
renderer.render(scene, camera);
|
|
35
41
|
};
|
|
36
42
|
|
|
@@ -43,7 +49,7 @@ export let update = ({ renderer, scene, time, deltaTime }) => {
|
|
|
43
49
|
* @param {number} params.height
|
|
44
50
|
* @param {number} params.pixelRatio
|
|
45
51
|
*/
|
|
46
|
-
export
|
|
52
|
+
export const resize = ({ width, height }) => {
|
|
47
53
|
camera.left = -width * 0.5;
|
|
48
54
|
camera.right = width * 0.5;
|
|
49
55
|
camera.top = height * 0.5;
|
|
@@ -52,4 +58,4 @@ export let resize = ({ width, height }) => {
|
|
|
52
58
|
camera.updateProjectionMatrix();
|
|
53
59
|
};
|
|
54
60
|
|
|
55
|
-
export
|
|
61
|
+
export const rendering = 'three';
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import * as THREE from 'three';
|
|
2
|
+
|
|
3
|
+
import { Init, Rendering, Resize, Update } from '@fragment/types';
|
|
4
|
+
|
|
5
|
+
let scene: THREE.Scene;
|
|
6
|
+
let camera: THREE.OrthographicCamera;
|
|
7
|
+
|
|
8
|
+
export const init: Init<'three'> = ({}) => {
|
|
9
|
+
scene = new THREE.Scene();
|
|
10
|
+
scene.background = new THREE.Color(0x00ff00);
|
|
11
|
+
|
|
12
|
+
camera = new THREE.OrthographicCamera(1, 1, 1, 1, 1, 1000);
|
|
13
|
+
camera.position.z = 1;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
export const update: Update<'three'> = ({ renderer }) => {
|
|
17
|
+
renderer.render(scene, camera);
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export const resize: Resize<'three'> = ({ width, height }) => {
|
|
21
|
+
camera.left = -width * 0.5;
|
|
22
|
+
camera.right = width * 0.5;
|
|
23
|
+
camera.top = height * 0.5;
|
|
24
|
+
camera.bottom = -height * 0.5;
|
|
25
|
+
|
|
26
|
+
camera.updateProjectionMatrix();
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export const rendering: Rendering = 'three';
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import * as THREE from 'three';
|
|
2
2
|
|
|
3
|
+
/** @type {THREE.Scene} */
|
|
4
|
+
let scene;
|
|
5
|
+
/** @type {THREE.OrthographicCamera} */
|
|
3
6
|
let camera;
|
|
4
7
|
|
|
5
8
|
/**
|
|
@@ -11,7 +14,10 @@ let camera;
|
|
|
11
14
|
* @param {number} params.height
|
|
12
15
|
* @param {number} params.pixelRatio
|
|
13
16
|
*/
|
|
14
|
-
export
|
|
17
|
+
export const init = ({ width, height }) => {
|
|
18
|
+
scene = new THREE.Scene();
|
|
19
|
+
scene.background = new THREE.Color(0x00ff00);
|
|
20
|
+
|
|
15
21
|
camera = new THREE.PerspectiveCamera(45, 1, 0.1, 100);
|
|
16
22
|
camera.position.z = 10;
|
|
17
23
|
camera.lookAt(new THREE.Vector3());
|
|
@@ -31,7 +37,7 @@ export let init = ({ scene, width, height }) => {
|
|
|
31
37
|
* @param {number} params.playhead
|
|
32
38
|
* @param {number} params.playcount
|
|
33
39
|
*/
|
|
34
|
-
export
|
|
40
|
+
export const update = ({ renderer, time, deltaTime }) => {
|
|
35
41
|
renderer.render(scene, camera);
|
|
36
42
|
};
|
|
37
43
|
|
|
@@ -44,9 +50,9 @@ export let update = ({ renderer, scene, time, deltaTime }) => {
|
|
|
44
50
|
* @param {number} params.height
|
|
45
51
|
* @param {number} params.pixelRatio
|
|
46
52
|
*/
|
|
47
|
-
export
|
|
53
|
+
export const resize = ({ width, height }) => {
|
|
48
54
|
camera.aspect = width / height;
|
|
49
55
|
camera.updateProjectionMatrix();
|
|
50
56
|
};
|
|
51
57
|
|
|
52
|
-
export
|
|
58
|
+
export const rendering = 'three';
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import * as THREE from 'three';
|
|
2
|
+
|
|
3
|
+
import { Init, Rendering, Resize, Update } from '@fragment/types';
|
|
4
|
+
|
|
5
|
+
let scene: THREE.Scene;
|
|
6
|
+
let camera: THREE.PerspectiveCamera;
|
|
7
|
+
|
|
8
|
+
export const init: Init<'three'> = ({}) => {
|
|
9
|
+
scene = new THREE.Scene();
|
|
10
|
+
scene.background = new THREE.Color(0x00ff00);
|
|
11
|
+
|
|
12
|
+
camera = new THREE.PerspectiveCamera(45, 1, 0.1, 100);
|
|
13
|
+
camera.position.z = 10;
|
|
14
|
+
camera.lookAt(new THREE.Vector3());
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
export const update: Update<'three'> = ({ renderer }) => {
|
|
18
|
+
renderer.render(scene, camera);
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export const resize: Resize<'three'> = ({ width, height }) => {
|
|
22
|
+
camera.aspect = width / height;
|
|
23
|
+
camera.updateProjectionMatrix();
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
export const rendering: Rendering = 'three';
|
package/src/cli/utils.js
CHANGED
|
@@ -7,6 +7,9 @@ import { log } from './log.js';
|
|
|
7
7
|
/** @type {string} */
|
|
8
8
|
export const packageManager = getPackageManager() || 'npm';
|
|
9
9
|
|
|
10
|
+
/** @type {string} */
|
|
11
|
+
export const __dirname = file('../..');
|
|
12
|
+
|
|
10
13
|
/**
|
|
11
14
|
* From https://github.com/sveltejs/kit/blob/main/packages/create-svelte/utils.js#L56
|
|
12
15
|
*/
|
|
@@ -25,10 +25,10 @@
|
|
|
25
25
|
height: 16px;
|
|
26
26
|
padding: 0 2px;
|
|
27
27
|
|
|
28
|
-
color: var(--color-red);
|
|
28
|
+
color: var(--fragment-color-red);
|
|
29
29
|
font-size: 10px;
|
|
30
30
|
|
|
31
|
-
border: 1px solid var(--color-red);
|
|
31
|
+
border: 1px solid var(--fragment-color-red);
|
|
32
32
|
border-radius: 2px;
|
|
33
33
|
}
|
|
34
34
|
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
height: var(--size);
|
|
41
41
|
margin: 0 3px 0 1px;
|
|
42
42
|
|
|
43
|
-
background-color: var(--color-red);
|
|
43
|
+
background-color: var(--fragment-color-red);
|
|
44
44
|
border-radius: 50%;
|
|
45
45
|
|
|
46
46
|
animation: fade 1s ease-in-out infinite;
|
package/src/client/app/hooks.js
CHANGED
|
@@ -2,19 +2,19 @@ import { rendering } from './state/rendering.svelte';
|
|
|
2
2
|
import { sketchesManager } from './state/sketches.svelte';
|
|
3
3
|
import { getContext } from './triggers/shared';
|
|
4
4
|
|
|
5
|
-
export
|
|
5
|
+
export const onBeforeCapture = (listener, context = getContext()) => {
|
|
6
6
|
sketchesManager.sketches[context]?.onBeforeCapture(listener);
|
|
7
7
|
};
|
|
8
8
|
|
|
9
|
-
export
|
|
9
|
+
export const onAfterCapture = (listener, context = getContext()) => {
|
|
10
10
|
sketchesManager.sketches[context]?.onAfterCapture(listener);
|
|
11
11
|
};
|
|
12
12
|
|
|
13
|
-
export
|
|
13
|
+
export const onBeforeRecord = (listener, context = getContext()) => {
|
|
14
14
|
sketchesManager.sketches[context]?.onBeforeRecord(listener);
|
|
15
15
|
};
|
|
16
16
|
|
|
17
|
-
export
|
|
17
|
+
export const onAfterRecord = (listener, context = getContext()) => {
|
|
18
18
|
sketchesManager.sketches[context]?.onAfterRecord(listener);
|
|
19
19
|
};
|
|
20
20
|
|
|
@@ -23,7 +23,7 @@ export let onAfterRecord = (listener, context = getContext()) => {
|
|
|
23
23
|
* @param {object} options
|
|
24
24
|
* @param {string} [options.filename]
|
|
25
25
|
* @param {function} [options.pattern]
|
|
26
|
-
* @param {exportDir} [options.pattern
|
|
26
|
+
* @param {exportDir} [options.pattern]
|
|
27
27
|
*/
|
|
28
28
|
export async function screenshot({ filename, pattern, exportDir } = {}) {
|
|
29
29
|
const context = getContext();
|
|
@@ -9,7 +9,7 @@ export function fragment({
|
|
|
9
9
|
canvas = document.createElement('canvas'),
|
|
10
10
|
shader = defaultFragment,
|
|
11
11
|
uniforms = {},
|
|
12
|
-
}) {
|
|
12
|
+
} = {}) {
|
|
13
13
|
let _fragmentShader = shader;
|
|
14
14
|
let _vertexShader = defaultVertex;
|
|
15
15
|
let _uniforms = uniforms;
|
|
@@ -30,7 +30,7 @@ export function fragment({
|
|
|
30
30
|
|
|
31
31
|
let w, h, pr;
|
|
32
32
|
|
|
33
|
-
function resize({ width = w, height = h, pixelRatio = pr }) {
|
|
33
|
+
function resize({ width = w, height = h, pixelRatio = pr } = {}) {
|
|
34
34
|
renderer.setPixelRatio(pixelRatio);
|
|
35
35
|
renderer.setSize({ width, height });
|
|
36
36
|
|
|
@@ -64,7 +64,7 @@
|
|
|
64
64
|
bottom: 0;
|
|
65
65
|
width: 1px;
|
|
66
66
|
|
|
67
|
-
background-color: var(--
|
|
67
|
+
background-color: var(--fragment-input-border-color);
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
.row {
|
|
@@ -83,7 +83,7 @@
|
|
|
83
83
|
width: 100%;
|
|
84
84
|
height: 100%;
|
|
85
85
|
|
|
86
|
-
background-color: var(--color
|
|
86
|
+
background-color: var(--fragment-accent-color);
|
|
87
87
|
opacity: var(--opacity, 0);
|
|
88
88
|
border-radius: 2px;
|
|
89
89
|
}
|
|
@@ -25,8 +25,8 @@
|
|
|
25
25
|
grid-template-columns: repeat(10, 1fr);
|
|
26
26
|
padding: 0 3px;
|
|
27
27
|
|
|
28
|
-
border-radius: var(--border-radius
|
|
29
|
-
background-color: var(--
|
|
30
|
-
box-shadow: inset 0 0 0 1px var(--
|
|
28
|
+
border-radius: var(--fragment-input-border-radius);
|
|
29
|
+
background-color: var(--fragment-input-background-color);
|
|
30
|
+
box-shadow: inset 0 0 0 1px var(--fragment-input-border-color);
|
|
31
31
|
}
|
|
32
32
|
</style>
|