Compare commits
7
Commits
118fc0d67e
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
dcd35af4f1 | ||
|
|
7a2bafc8de | ||
|
|
2a7d1f6df4 | ||
|
|
80add2ec67 | ||
|
|
9d300a69c1 | ||
|
|
1f7291fce9 | ||
|
|
674dc50ff7 |
@@ -133,7 +133,7 @@ make install
|
|||||||
|
|
||||||
```shell
|
```shell
|
||||||
git clone --recursive https://git.klemek.fr/klemek/forge-steel
|
git clone --recursive https://git.klemek.fr/klemek/forge-steel
|
||||||
cd forge
|
cd forge-steel
|
||||||
makepkg -si
|
makepkg -si
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -142,11 +142,11 @@ makepkg -si
|
|||||||
|
|
||||||
```shell
|
```shell
|
||||||
git clone --recursive https://git.klemek.fr/klemek/forge-steel
|
git clone --recursive https://git.klemek.fr/klemek/forge-steel
|
||||||
cd forge
|
cd forge-steel
|
||||||
aclocal
|
aclocal
|
||||||
autoconf
|
autoconf
|
||||||
automake --add-missing
|
automake --add-missing
|
||||||
./configure
|
./configure --prefix=$HOME/.local
|
||||||
make
|
make
|
||||||
make install
|
make install
|
||||||
```
|
```
|
||||||
@@ -174,9 +174,7 @@ These are configurable in the [`forge_project.cfg`](#forge_projectcfg).
|
|||||||
### CLI arguments
|
### CLI arguments
|
||||||
|
|
||||||
```txt
|
```txt
|
||||||
forge steel-dev
|
usage: forge [-h] [-v] [-p=PROJECT_PATH] [-c=CFG_FILE] [-hr] [-s=SCREEN] [-m=SCREEN] [-mo] [-w] [-t=TEMPO] [-d] [-ar / -nar] [-arc=CYCLES] [-is=SIZE] [-ls / -nls] [-ss / -nss] [-mr / -nmr] [-tm] [-tf] [--x11] [--wayland] [--cocoa] [--win32] [-as / -nas] [-oma=MAJOR] [-omi=MINOR]
|
||||||
|
|
||||||
usage: forge [-h] [-v] [-p=PROJECT_PATH] [-c=CFG_FILE] [-hr] [-s=SCREEN] [-m=SCREEN] [-mo] [-w] [-t=TEMPO] [-d] [-ar / -nar] [-arc=CYCLES] [-vi=FILE] [-vs=SIZE] [-vb=COUNT] [-vr / -nvr] [-vf=FOURCC] [-is=SIZE] [-ls / -nls] [-ss / -nss] [-mr / -nmr] [-tm] [-tf]
|
|
||||||
|
|
||||||
Fusion Of Real-time Generative Effects.
|
Fusion Of Real-time Generative Effects.
|
||||||
|
|
||||||
@@ -195,21 +193,23 @@ options:
|
|||||||
-ar, --auto-random randomize state every cycle (4 beats)
|
-ar, --auto-random randomize state every cycle (4 beats)
|
||||||
-nar, --no-auto-random do not randomize state (default)
|
-nar, --no-auto-random do not randomize state (default)
|
||||||
-arc, --auto-random-cycle auto random cycle length (default: 4)
|
-arc, --auto-random-cycle auto random cycle length (default: 4)
|
||||||
-vi, --video-in path to video capture device (multiple allowed)
|
|
||||||
-vb, --video-buffers number of video buffers to use (default: 1)
|
|
||||||
-vs, --video-size video capture desired height (default: internal texture height)
|
|
||||||
-vr, --video-reconnect auto-reconnect video (default)
|
|
||||||
-nvr, --no-video-reconnect do not auto-reconnect video
|
|
||||||
-vf, --video-fourcc video codec fourcc (default: YUYV)
|
|
||||||
-is, --internal-size internal texture height (default: 720)
|
-is, --internal-size internal texture height (default: 720)
|
||||||
-ls, --load-state load saved state (default)
|
-ls, --load-state load saved state (default)
|
||||||
-nls, --no-load-state do not load saved state
|
-nls, --no-load-state do not load saved state
|
||||||
-ss, --save-state save state (default)
|
-ss, --save-state save state (default)
|
||||||
-nss, --no-save-state do not save state
|
-nss, --no-save-state do not save state
|
||||||
|
-as, --auto-save continuously save state (every ~10ms)
|
||||||
|
-nas, --no-auto-save do not continuously save state (default)
|
||||||
-mr, --midi-reconnect auto-reconnect midi (default)
|
-mr, --midi-reconnect auto-reconnect midi (default)
|
||||||
-nmr, --no-midi-reconnect do not auto-reconnect midi
|
-nmr, --no-midi-reconnect do not auto-reconnect midi
|
||||||
-tm, --trace-midi print midi code and values
|
-tm, --trace-midi print midi code and values
|
||||||
-tf, --trace-fps print fps status of subsystems
|
-tf, --trace-fps print fps status of subsystems
|
||||||
|
--x11 force X11 GLFW backend
|
||||||
|
--wayland force Wayland GLFW backend
|
||||||
|
--cocoa force Cocoa GLFW backend
|
||||||
|
--win32 force Win32 GLFW backend
|
||||||
|
-oma, --opengl-major-version OpenGL major version (default: 4)
|
||||||
|
-omi, --opengl-minor-version OpenGL minor version (default: 6)
|
||||||
```
|
```
|
||||||
|
|
||||||
## Default Project
|
## Default Project
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
#version 460
|
#version 140
|
||||||
|
|
||||||
// VIDEO 1
|
// VIDEO 1
|
||||||
// -----------
|
// -----------
|
||||||
|
|||||||
+28
-102
@@ -1,4 +1,4 @@
|
|||||||
#version 460
|
#version 140
|
||||||
|
|
||||||
// MONITOR
|
// MONITOR
|
||||||
// ---
|
// ---
|
||||||
@@ -25,92 +25,18 @@ float s(vec2 uv, float x0, float y0) {
|
|||||||
step(-y0 - 1, -uv.y);
|
step(-y0 - 1, -uv.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
const int texts[12][5] = {
|
const int textINA[] = int[5](0x49, 0x4E, 0x20, 0x41, 0x00);
|
||||||
{
|
const int textINB[] = int[5](0x49, 0x4E, 0x20, 0x42, 0x00);
|
||||||
0x49,
|
const int textSRCA[] = int[5](0x49, 0x4E, 0x20, 0x41, 0x00);
|
||||||
0x4E,
|
const int textSRCB[] = int[5](0x49, 0x4E, 0x20, 0x42, 0x00);
|
||||||
0x20,
|
const int textFXA[] = int[5](0x46, 0x58, 0x20, 0x41, 0x00);
|
||||||
0x41,
|
const int textFXB[] = int[5](0x46, 0x58, 0x20, 0x42, 0x00);
|
||||||
0x00
|
const int textAB[] = int[5](0x41, 0x2B, 0x42, 0x00, 0x00);
|
||||||
}, // IN A
|
const int textMFX[] = int[5](0x4D, 0x46, 0x58, 0x00, 0x00);
|
||||||
{
|
const int textFPS[] = int[5](0x46, 0x50, 0x53, 0x00, 0x00);
|
||||||
0x49,
|
const int textOFF[] = int[5](0x4F, 0x46, 0x46, 0x00, 0x00);
|
||||||
0x4E,
|
const int textDEMO[] = int[5](0x44, 0x45, 0x4D, 0x4F, 0x00);
|
||||||
0x20,
|
const int textLIVE[] = int[5](0x4C, 0x49, 0x56, 0x45, 0x00);
|
||||||
0x42,
|
|
||||||
0x00
|
|
||||||
}, // IN B
|
|
||||||
{
|
|
||||||
0x53,
|
|
||||||
0x52,
|
|
||||||
0x43,
|
|
||||||
0x20,
|
|
||||||
0x41
|
|
||||||
}, // SRC A
|
|
||||||
{
|
|
||||||
0x53,
|
|
||||||
0x52,
|
|
||||||
0x43,
|
|
||||||
0x20,
|
|
||||||
0x42
|
|
||||||
}, // SRC B
|
|
||||||
{
|
|
||||||
0x46,
|
|
||||||
0x58,
|
|
||||||
0x20,
|
|
||||||
0x41,
|
|
||||||
0x00
|
|
||||||
}, // FX A
|
|
||||||
{
|
|
||||||
0x46,
|
|
||||||
0x58,
|
|
||||||
0x20,
|
|
||||||
0x42,
|
|
||||||
0x00
|
|
||||||
}, // FX B
|
|
||||||
{
|
|
||||||
0x41,
|
|
||||||
0x2B,
|
|
||||||
0x42,
|
|
||||||
0x00,
|
|
||||||
0x00
|
|
||||||
}, // A+B
|
|
||||||
{
|
|
||||||
0x4D,
|
|
||||||
0x46,
|
|
||||||
0x58,
|
|
||||||
0x00,
|
|
||||||
0x00
|
|
||||||
}, // MFX
|
|
||||||
{
|
|
||||||
0x46,
|
|
||||||
0x50,
|
|
||||||
0x53,
|
|
||||||
0x00,
|
|
||||||
0x00
|
|
||||||
}, // FPS
|
|
||||||
{
|
|
||||||
0x4F,
|
|
||||||
0x46,
|
|
||||||
0x46,
|
|
||||||
0x00,
|
|
||||||
0x00
|
|
||||||
}, // OFF
|
|
||||||
{
|
|
||||||
0x44,
|
|
||||||
0x45,
|
|
||||||
0x4D,
|
|
||||||
0x4F,
|
|
||||||
0x00
|
|
||||||
}, // DEMO
|
|
||||||
{
|
|
||||||
0x4C,
|
|
||||||
0x49,
|
|
||||||
0x56,
|
|
||||||
0x45,
|
|
||||||
0x00
|
|
||||||
}, // LIVE
|
|
||||||
};
|
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
vec2 uv0 = vUV.st;
|
vec2 uv0 = vUV.st;
|
||||||
@@ -146,65 +72,65 @@ void main() {
|
|||||||
float t = 0;
|
float t = 0;
|
||||||
|
|
||||||
f += rect(uv3, vec2(-35, 28.5), vec2(2.1, 0.7));
|
f += rect(uv3, vec2(-35, 28.5), vec2(2.1, 0.7));
|
||||||
t += write_5(uv3, vec2(-37, 28), texts[0]);
|
t += write_5(uv3, vec2(-37, 28), textINA);
|
||||||
|
|
||||||
if (iInputFormat1 == YUYV_FOURCC) {
|
if (iInputFormat1 == YUYV_FOURCC) {
|
||||||
c += s(uv2, 0, 2) * texture(iTex3, uv2);
|
c += s(uv2, 0, 2) * texture(iTex3, uv2);
|
||||||
f += rect(uv3, vec2(-35, 26.75), vec2(2.8, 0.7));
|
f += rect(uv3, vec2(-35, 26.75), vec2(2.8, 0.7));
|
||||||
t += write_int(uv3, vec2(-37.6, 26.1), iInputFPS1, 2);
|
t += write_int(uv3, vec2(-37.6, 26.1), iInputFPS1, 2);
|
||||||
t += write_5(uv3, vec2(-35.1, 26.1), texts[8]);
|
t += write_5(uv3, vec2(-35.1, 26.1), textFPS);
|
||||||
} else {
|
} else {
|
||||||
f += rect(uv3, vec2(-35, 26.75), vec2(1.6, 0.7));
|
f += rect(uv3, vec2(-35, 26.75), vec2(1.6, 0.7));
|
||||||
t += write_5(uv3, vec2(-36.5, 26.1), texts[9]);
|
t += write_5(uv3, vec2(-36.5, 26.1), textOFF);
|
||||||
}
|
}
|
||||||
|
|
||||||
f += rect(uv3, vec2(-35, -11.5), vec2(2.1, 0.7));
|
f += rect(uv3, vec2(-35, -11.5), vec2(2.1, 0.7));
|
||||||
t += write_5(uv3, vec2(-37, -12), texts[1]);
|
t += write_5(uv3, vec2(-37, -12), textINB);
|
||||||
|
|
||||||
if (iInputFormat2 == YUYV_FOURCC) {
|
if (iInputFormat2 == YUYV_FOURCC) {
|
||||||
c += s(uv2, 0, 0) * texture(iTex4, uv2);
|
c += s(uv2, 0, 0) * texture(iTex4, uv2);
|
||||||
f += rect(uv3, vec2(-35, -13.25), vec2(2.8, 0.7));
|
f += rect(uv3, vec2(-35, -13.25), vec2(2.8, 0.7));
|
||||||
t += write_int(uv3, vec2(-37.6, -13.9), iInputFPS2, 2);
|
t += write_int(uv3, vec2(-37.6, -13.9), iInputFPS2, 2);
|
||||||
t += write_5(uv3, vec2(-35.1, -13.9), texts[8]);
|
t += write_5(uv3, vec2(-35.1, -13.9), textFPS);
|
||||||
} else {
|
} else {
|
||||||
f += rect(uv3, vec2(-35, -13.25), vec2(1.6, 0.7));
|
f += rect(uv3, vec2(-35, -13.25), vec2(1.6, 0.7));
|
||||||
t += write_5(uv3, vec2(-36.5, -13.9), texts[9]);
|
t += write_5(uv3, vec2(-36.5, -13.9), textOFF);
|
||||||
}
|
}
|
||||||
|
|
||||||
f += rect(uv3, vec2(-35, 8.5), vec2(2.1, 0.7));
|
f += rect(uv3, vec2(-35, 8.5), vec2(2.1, 0.7));
|
||||||
|
|
||||||
if (iDemo > 0) {
|
if (iDemo > 0) {
|
||||||
t += write_5(uv3, vec2(-37, 8), texts[10]);
|
t += write_5(uv3, vec2(-37, 8), textDEMO);
|
||||||
} else {
|
} else {
|
||||||
t += write_5(uv3, vec2(-37, 8), texts[11]);
|
t += write_5(uv3, vec2(-37, 8), textLIVE);
|
||||||
}
|
}
|
||||||
|
|
||||||
f += rect(uv3, vec2(0, 28.5), vec2(2.6, 0.7));
|
f += rect(uv3, vec2(0, 28.5), vec2(2.6, 0.7));
|
||||||
f += iActive1 == 1 ? h_rect(uv3, vec2(0, 28.5), vec2(3, 1), 0.2) : 0;
|
f += iActive1 == 1 ? h_rect(uv3, vec2(0, 28.5), vec2(3, 1), 0.2) : 0;
|
||||||
t += write_5(uv3, vec2(-2.5, 28), texts[2]);
|
t += write_5(uv3, vec2(-2.5, 28), textSRCA);
|
||||||
|
|
||||||
f += rect(uv3, vec2(0, -11.5), vec2(2.6, 0.7));
|
f += rect(uv3, vec2(0, -11.5), vec2(2.6, 0.7));
|
||||||
f += iActive1 == 2 ? h_rect(uv3, vec2(0, -11.5), vec2(3, 1), 0.2) : 0;
|
f += iActive1 == 2 ? h_rect(uv3, vec2(0, -11.5), vec2(3, 1), 0.2) : 0;
|
||||||
t += write_5(uv3, vec2(-2.5, -12), texts[3]);
|
t += write_5(uv3, vec2(-2.5, -12), textSRCB);
|
||||||
|
|
||||||
f += rect(uv3, vec2(35, 28.5), vec2(2.1, 0.7));
|
f += rect(uv3, vec2(35, 28.5), vec2(2.1, 0.7));
|
||||||
f += iActive2 == 1 ? h_rect(uv3, vec2(35, 28.5), vec2(2.5, 1), 0.2) : 0;
|
f += iActive2 == 1 ? h_rect(uv3, vec2(35, 28.5), vec2(2.5, 1), 0.2) : 0;
|
||||||
t += write_5(uv3, vec2(33, 28), texts[4]);
|
t += write_5(uv3, vec2(33, 28), textFXA);
|
||||||
|
|
||||||
f += rect(uv3, vec2(35, -11.5), vec2(2.1, 0.7));
|
f += rect(uv3, vec2(35, -11.5), vec2(2.1, 0.7));
|
||||||
f += iActive2 == 2 ? h_rect(uv3, vec2(35, -11.5), vec2(2.5, 1), 0.2) : 0;
|
f += iActive2 == 2 ? h_rect(uv3, vec2(35, -11.5), vec2(2.5, 1), 0.2) : 0;
|
||||||
t += write_5(uv3, vec2(33, -12), texts[5]);
|
t += write_5(uv3, vec2(33, -12), textFXB);
|
||||||
|
|
||||||
f += rect(uv3, vec2(0, 8.5), vec2(1.6, 0.7));
|
f += rect(uv3, vec2(0, 8.5), vec2(1.6, 0.7));
|
||||||
t += write_5(uv3, vec2(-1.5, 8), texts[6]);
|
t += write_5(uv3, vec2(-1.5, 8), textAB);
|
||||||
|
|
||||||
f += rect(uv3, vec2(35, 8.5), vec2(1.6, 0.7));
|
f += rect(uv3, vec2(35, 8.5), vec2(1.6, 0.7));
|
||||||
f += iActive2 == 3 ? h_rect(uv3, vec2(35, 8.5), vec2(2, 1), 0.2) : 0;
|
f += iActive2 == 3 ? h_rect(uv3, vec2(35, 8.5), vec2(2, 1), 0.2) : 0;
|
||||||
t += write_5(uv3, vec2(33.5, 8), texts[7]);
|
t += write_5(uv3, vec2(33.5, 8), textMFX);
|
||||||
|
|
||||||
f += rect(uv3, vec2(35, 6.75), vec2(2.8, 0.7));
|
f += rect(uv3, vec2(35, 6.75), vec2(2.8, 0.7));
|
||||||
t += write_int(uv3, vec2(32.4, 6.1), iFPS, 2);
|
t += write_int(uv3, vec2(32.4, 6.1), iFPS, 2);
|
||||||
t += write_5(uv3, vec2(34.9, 6.1), texts[8]);
|
t += write_5(uv3, vec2(34.9, 6.1), textFPS);
|
||||||
|
|
||||||
fragColor = mix(c, vec4(min(1, f) - t), min(1, f));
|
fragColor = mix(c, vec4(min(1, f) - t), min(1, f));
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
#version 460
|
#version 140
|
||||||
|
|
||||||
// VIDEO 2
|
// VIDEO 2
|
||||||
// -----------
|
// -----------
|
||||||
|
|||||||
@@ -10,8 +10,6 @@ out vec4 fragColor;
|
|||||||
|
|
||||||
#include inc_src.glsl
|
#include inc_src.glsl
|
||||||
|
|
||||||
subroutine uniform src_stage_sub src_stage;
|
|
||||||
|
|
||||||
uniform int iSeed3;
|
uniform int iSeed3;
|
||||||
uniform vec3 iGroup1_1[6];
|
uniform vec3 iGroup1_1[6];
|
||||||
|
|
||||||
|
|||||||
@@ -9,8 +9,6 @@ out vec4 fragColor;
|
|||||||
|
|
||||||
#include inc_src.glsl
|
#include inc_src.glsl
|
||||||
|
|
||||||
subroutine uniform src_stage_sub src_stage;
|
|
||||||
|
|
||||||
uniform int iSeed4;
|
uniform int iSeed4;
|
||||||
uniform vec3 iGroup1_2[6];
|
uniform vec3 iGroup1_2[6];
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
#version 460
|
#version 140
|
||||||
|
|
||||||
// A+B
|
// A+B
|
||||||
// ------------
|
// ------------
|
||||||
|
|||||||
+9
-1
@@ -1,4 +1,4 @@
|
|||||||
#version 460
|
#version 140
|
||||||
|
|
||||||
// OUT
|
// OUT
|
||||||
// ---
|
// ---
|
||||||
@@ -7,12 +7,17 @@ in vec2 vUV;
|
|||||||
out vec4 fragColor;
|
out vec4 fragColor;
|
||||||
|
|
||||||
#include inc_map.glsl
|
#include inc_map.glsl
|
||||||
|
#include inc_cp437.glsl
|
||||||
|
|
||||||
uniform sampler2D iTex0;
|
uniform sampler2D iTex0;
|
||||||
uniform vec3 iGroup2_4[7];
|
uniform vec3 iGroup2_4[7];
|
||||||
uniform vec3 iGroup2_5[7];
|
uniform vec3 iGroup2_5[7];
|
||||||
uniform vec3 iGroup2_6[7];
|
uniform vec3 iGroup2_6[7];
|
||||||
uniform vec3 iGroup2_7[7];
|
uniform vec3 iGroup2_7[7];
|
||||||
|
uniform int iFPS;
|
||||||
|
uniform int iDemo;
|
||||||
|
|
||||||
|
const int[] textDEMO = int[5](0x44, 0x45, 0x4D, 0x4F, 0x00);
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
bool visible = (iGroup2_4[4].x + iGroup2_5[4].x + iGroup2_6[4].x + iGroup2_7[4].x) > 0;
|
bool visible = (iGroup2_4[4].x + iGroup2_5[4].x + iGroup2_6[4].x + iGroup2_7[4].x) > 0;
|
||||||
@@ -104,6 +109,9 @@ void main() {
|
|||||||
|
|
||||||
vec4 color = texture(iTex0, invert ? vUV : uv);
|
vec4 color = texture(iTex0, invert ? vUV : uv);
|
||||||
|
|
||||||
|
color = mix(color, 1. - color, iDemo * write_int_left(uv * 20., vec2(1., 1.), iFPS, 3));
|
||||||
|
color = mix(color, 1. - color, iDemo * write_5(uv * 20., vec2(1., 18.), textDEMO));
|
||||||
|
|
||||||
if (visible) {
|
if (visible) {
|
||||||
float mask = step(0.0001, length(uv));
|
float mask = step(0.0001, length(uv));
|
||||||
color *= mix(mask, 1 - mask, invert ? 1 : 0);
|
color *= mix(mask, 1 - mask, invert ? 1 : 0);
|
||||||
|
|||||||
@@ -364,7 +364,7 @@ float write_int(vec2 uv, vec2 pos, int value, int magnitude)
|
|||||||
{
|
{
|
||||||
value = max(0, value);
|
value = max(0, value);
|
||||||
int i;
|
int i;
|
||||||
uint m = 1;
|
int m = 1;
|
||||||
float d = 0.;
|
float d = 0.;
|
||||||
for (i = 0; i < magnitude; i++) {
|
for (i = 0; i < magnitude; i++) {
|
||||||
if (i == 0 || value >= m) {
|
if (i == 0 || value >= m) {
|
||||||
@@ -381,6 +381,7 @@ float write_int_left(vec2 uv, vec2 pos, int value, int magnitude)
|
|||||||
int i;
|
int i;
|
||||||
int m = 1;
|
int m = 1;
|
||||||
float d = 0.;
|
float d = 0.;
|
||||||
|
pos.x -= magnitude;
|
||||||
for (i = 0; i < magnitude; i++) {
|
for (i = 0; i < magnitude; i++) {
|
||||||
if (i == 0 || value >= m) {
|
if (i == 0 || value >= m) {
|
||||||
pos.x += 1.;
|
pos.x += 1.;
|
||||||
|
|||||||
+15
-80
@@ -103,78 +103,13 @@ vec4 debug(vec2 vUV)
|
|||||||
|
|
||||||
// logic
|
// logic
|
||||||
|
|
||||||
const int texts[10][5] = {
|
const int textTEMPO[] = int[5](0x54, 0x45, 0x4D, 0x50, 0x4F);
|
||||||
{
|
const int textTIME[] = int[5](0x54, 0x49, 0x4D, 0x45, 0x00);
|
||||||
0x46,
|
const int textRAND[] = int[5](0x52, 0x41, 0x4E, 0x44, 0x00);
|
||||||
0x50,
|
const int textSRC[] = int[5](0x53, 0x52, 0x43, 0x00, 0x00);
|
||||||
0x53,
|
const int textFX[] = int[5](0x46, 0x58, 0x00, 0x00, 0x00);
|
||||||
0x00,
|
const int textIN[] = int[5](0x49, 0x4E, 0x00, 0x00, 0x00);
|
||||||
0x00
|
const int textMFX[] = int[5](0x4D, 0x46, 0x58, 0x00, 0x00);
|
||||||
}, // FPS
|
|
||||||
{
|
|
||||||
0x54,
|
|
||||||
0x45,
|
|
||||||
0x4D,
|
|
||||||
0x50,
|
|
||||||
0x4F
|
|
||||||
}, // TEMPO
|
|
||||||
{
|
|
||||||
0x54,
|
|
||||||
0x49,
|
|
||||||
0x4D,
|
|
||||||
0x45,
|
|
||||||
0x00
|
|
||||||
}, // TIME
|
|
||||||
{
|
|
||||||
0x44,
|
|
||||||
0x45,
|
|
||||||
0x4D,
|
|
||||||
0x4F,
|
|
||||||
0x00
|
|
||||||
}, // DEMO
|
|
||||||
{
|
|
||||||
0x4C,
|
|
||||||
0x49,
|
|
||||||
0x56,
|
|
||||||
0x45,
|
|
||||||
0x00
|
|
||||||
}, // LIVE
|
|
||||||
{
|
|
||||||
0x52,
|
|
||||||
0x41,
|
|
||||||
0x4E,
|
|
||||||
0x44,
|
|
||||||
0x00
|
|
||||||
}, // RAND
|
|
||||||
{
|
|
||||||
0x53,
|
|
||||||
0x52,
|
|
||||||
0x43,
|
|
||||||
0x00,
|
|
||||||
0x00
|
|
||||||
}, // SRC
|
|
||||||
{
|
|
||||||
0x46,
|
|
||||||
0x58,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00
|
|
||||||
}, // FX
|
|
||||||
{
|
|
||||||
0x49,
|
|
||||||
0x4E,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00
|
|
||||||
}, // IN
|
|
||||||
{
|
|
||||||
0x4D,
|
|
||||||
0x46,
|
|
||||||
0x58,
|
|
||||||
0x00,
|
|
||||||
0x00
|
|
||||||
}, // MFX
|
|
||||||
};
|
|
||||||
|
|
||||||
vec2 uv2 = uv1;
|
vec2 uv2 = uv1;
|
||||||
|
|
||||||
@@ -241,14 +176,14 @@ vec4 debug(vec2 vUV)
|
|||||||
|
|
||||||
// show src/fx
|
// show src/fx
|
||||||
|
|
||||||
f += write_5(uv3 * .75, vec2(-11.6, -1.8), texts[6]);
|
f += write_5(uv3 * .75, vec2(-11.6, -1.8), textSRC);
|
||||||
f += write_5(uv3 * .75, vec2(-4.2, -1.8), texts[7]);
|
f += write_5(uv3 * .75, vec2(-4.2, -1.8), textFX);
|
||||||
f += char_at(uv3 * .5, vec2(-11.5, 3.5), 0x41);
|
f += char_at(uv3 * .5, vec2(-11.5, 3.5), 0x41);
|
||||||
f += char_at(uv3 * .5, vec2(-11.5, -6.), 0x42);
|
f += char_at(uv3 * .5, vec2(-11.5, -6.), 0x42);
|
||||||
if (iDemo < 1 && (iInputFormat1 == YUYV_FOURCC || iInputFormat2 == YUYV_FOURCC)) {
|
if (iDemo < 1 && (iInputFormat1 == YUYV_FOURCC || iInputFormat2 == YUYV_FOURCC)) {
|
||||||
f += write_5(uv3 * .75, vec2(-19.7, -1.8), texts[8]);
|
f += write_5(uv3 * .75, vec2(-19.7, -1.8), textIN);
|
||||||
}
|
}
|
||||||
f += write_5(uv3 * .75, vec2(10.9, 2.), texts[9]);
|
f += write_5(uv3 * .75, vec2(10.9, 2.), textMFX);
|
||||||
|
|
||||||
// show inputs / feedback
|
// show inputs / feedback
|
||||||
float line_a_a = rect(uv2, vec2(-7.5, 2.), vec2(1.5, .1));
|
float line_a_a = rect(uv2, vec2(-7.5, 2.), vec2(1.5, .1));
|
||||||
@@ -287,14 +222,14 @@ vec4 debug(vec2 vUV)
|
|||||||
|
|
||||||
// show mix
|
// show mix
|
||||||
f += char_at(uv2, vec2(1.55, -.6), mix_type ? 0x4B : 0x4D);
|
f += char_at(uv2, vec2(1.55, -.6), mix_type ? 0x4B : 0x4D);
|
||||||
f = mix(f, 1 - f, rect(uv2, vec2(.2, -.9 + .9 * mix_value), vec2(.9, .9 * mix_value)));
|
f = mix(f, 1 - f, rect(uv2, vec2(2., -.9 + .9 * mix_value), vec2(.9, .9 * mix_value)));
|
||||||
|
|
||||||
// show debug info
|
// show debug info
|
||||||
float v = 0.;
|
float v = 0.;
|
||||||
float x = 0.;
|
float x = 0.;
|
||||||
|
|
||||||
x = -15.;
|
x = -15.;
|
||||||
f += write_5(uv3, vec2(x - 4.5, 13.), texts[1]);
|
f += write_5(uv3, vec2(x - 4.5, 13.), textTEMPO);
|
||||||
f += write_int(uv3, vec2(x + 1.5, 13.), int(iTempo), 3);
|
f += write_int(uv3, vec2(x + 1.5, 13.), int(iTempo), 3);
|
||||||
v = fract(iBeats);
|
v = fract(iBeats);
|
||||||
f += h_rect(uv3, vec2(x, 12.), vec2(4., .5), .2);
|
f += h_rect(uv3, vec2(x, 12.), vec2(4., .5), .2);
|
||||||
@@ -302,13 +237,13 @@ vec4 debug(vec2 vUV)
|
|||||||
|
|
||||||
x = 15.;
|
x = 15.;
|
||||||
if (iAutoRand > 0) {
|
if (iAutoRand > 0) {
|
||||||
f += write_5(uv3, vec2(x - 4.5, 13.), texts[5]);
|
f += write_5(uv3, vec2(x - 4.5, 13.), textRAND);
|
||||||
f += write_int(uv3, vec2(x - .5, 13.), int(iAutoRandCycle), 5);
|
f += write_int(uv3, vec2(x - .5, 13.), int(iAutoRandCycle), 5);
|
||||||
v = fract(iBeats / iAutoRandCycle);
|
v = fract(iBeats / iAutoRandCycle);
|
||||||
} else {
|
} else {
|
||||||
f += write_int(uv3, vec2(x - .5, 13.), int(iTime), 5);
|
f += write_int(uv3, vec2(x - .5, 13.), int(iTime), 5);
|
||||||
v = fract(iTime);
|
v = fract(iTime);
|
||||||
f += write_5(uv3, vec2(x - 4.5, 13.), texts[2]);
|
f += write_5(uv3, vec2(x - 4.5, 13.), textTIME);
|
||||||
}
|
}
|
||||||
f += h_rect(uv3, vec2(x, 12.), vec2(4., .5), .2);
|
f += h_rect(uv3, vec2(x, 12.), vec2(4., .5), .2);
|
||||||
f += rect(uv3, vec2(x + 4. * v - 4., 12), vec2(4. * v, .4));
|
f += rect(uv3, vec2(x + 4. * v - 4., 12), vec2(4. * v, .4));
|
||||||
|
|||||||
+122
-123
@@ -1,19 +1,20 @@
|
|||||||
#include inc_res.glsl
|
#include inc_res.glsl
|
||||||
#include inc_magic.glsl
|
#include inc_magic.glsl
|
||||||
#include inc_functions.glsl
|
#include inc_functions.glsl
|
||||||
|
#include inc_cp437.glsl
|
||||||
|
|
||||||
#ifndef INC_FX
|
#ifndef INC_FX
|
||||||
#define INC_FX
|
#define INC_FX
|
||||||
|
|
||||||
vec4 fx_master(vec3 c0, vec3 c, int seed, vec3 m0) {
|
vec4 fx_master(vec3 c0, vec3 c, int seed, vec3 m0) {
|
||||||
float fx = magic(m0.xy, vec3(1,0,0), seed);
|
float fx = magic(m0.xy, vec3(1., 0., 0.), seed);
|
||||||
bool invert = magic_trigger(vec3(m0.z, 0, 0), seed);
|
bool invert = magic_trigger(vec3(m0.z, 0., 0.), seed);
|
||||||
|
|
||||||
vec3 c_out = mix(c0, c, fx);
|
vec3 c_out = mix(c0, c, fx);
|
||||||
|
|
||||||
c_out = mix(c_out, 1 - c_out, invert ? 1 : 0);
|
c_out = mix(c_out, 1. - c_out, invert ? 1. : 0.);
|
||||||
|
|
||||||
return vec4(c_out, 1.0);
|
return vec4(c_out, 1.);
|
||||||
}
|
}
|
||||||
|
|
||||||
subroutine vec4 fx_stage_sub(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0);
|
subroutine vec4 fx_stage_sub(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0);
|
||||||
@@ -29,29 +30,29 @@ subroutine(fx_stage_sub) vec4 fx_1(vec2 vUV, sampler2D previous, sampler2D feedb
|
|||||||
|
|
||||||
// controls
|
// controls
|
||||||
|
|
||||||
float hue = magic(f1, b1, seed + 10);
|
float hue = magic(f1, b1, seed + 10.);
|
||||||
float saturation = magic(f2, b2, seed + 20);
|
float saturation = magic(f2, b2, seed + 20.);
|
||||||
float light = magic(f3, b3, seed + 30);
|
float light = magic(f3, b3, seed + 30.);
|
||||||
|
|
||||||
// logic
|
// logic
|
||||||
|
|
||||||
vec3 c0 = texture(previous, uv0).xyz;
|
vec3 c0 = texture(previous, uv0).xyz;
|
||||||
vec3 c = c0;
|
vec3 c = c0;
|
||||||
c = shift3(c, hue);
|
c = shift3(c, hue);
|
||||||
c *= 1 + saturation;
|
c *= 1. + saturation;
|
||||||
c = mix(c + light * 2.0, c - (1 - light) * 2.0, step(0.5, light));
|
c = mix(c + light * 2., c - (1. - light) * 2., step(.5, light));
|
||||||
|
|
||||||
return fx_master(c0, c, seed, m0);
|
return fx_master(c0, c, seed, m0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// FX 2 : feedback + shift
|
// FX 2 : feedback + shift
|
||||||
vec4 fx_shift(vec2 vUV, sampler2D src0, sampler2D src1, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0)
|
subroutine(fx_stage_sub) vec4 fx_shift(vec2 vUV, sampler2D src0, sampler2D src1, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0)
|
||||||
{
|
{
|
||||||
// start
|
// start
|
||||||
|
|
||||||
vec2 uv0 = vUV.st;
|
vec2 uv0 = vUV.st;
|
||||||
float ratio = iResolution.x / iResolution.y;
|
float ratio = iResolution.x / iResolution.y;
|
||||||
vec2 uv1 = (uv0 - .5) * vec2(ratio, 1);
|
vec2 uv1 = (uv0 - .5) * vec2(ratio, 1.);
|
||||||
|
|
||||||
// controls
|
// controls
|
||||||
|
|
||||||
@@ -64,7 +65,7 @@ vec4 fx_shift(vec2 vUV, sampler2D src0, sampler2D src1, int seed, vec3 b1, vec2
|
|||||||
vec3 c0 = texture(src0, uv0).xyz;
|
vec3 c0 = texture(src0, uv0).xyz;
|
||||||
|
|
||||||
vec2 uv2 = uv1;
|
vec2 uv2 = uv1;
|
||||||
uv2 = mix(uv2 * (1 + zoom * 2), uv2 * (zoom), step(0.5, zoom));
|
uv2 = mix(uv2 * (1 + zoom * 2), uv2 * (zoom), step(.5, zoom));
|
||||||
uv2 += vec2(x_shift * ratio, y_shift) * 2;
|
uv2 += vec2(x_shift * ratio, y_shift) * 2;
|
||||||
vec3 c = reframe(src1, uv2).xyz;
|
vec3 c = reframe(src1, uv2).xyz;
|
||||||
|
|
||||||
@@ -115,28 +116,28 @@ subroutine(fx_stage_sub) vec4 fx_5(vec2 vUV, sampler2D previous, sampler2D feedb
|
|||||||
|
|
||||||
vec2 uv0 = vUV.st;
|
vec2 uv0 = vUV.st;
|
||||||
float ratio = iResolution.x / iResolution.y;
|
float ratio = iResolution.x / iResolution.y;
|
||||||
vec2 uv1 = (uv0 - .5) * vec2(ratio, 1);
|
vec2 uv1 = (uv0 - .5) * vec2(ratio, 1.);
|
||||||
|
|
||||||
// controls
|
// controls
|
||||||
|
|
||||||
float pixel_size = magic(f1, b1, seed + 10);
|
float pixel_size = magic(f1, b1, seed + 10.);
|
||||||
float quantize = magic(f2, b2, seed + 20);
|
float quantize = magic(f2, b2, seed + 20.);
|
||||||
bool quantize_trigger = magic_trigger(b2, seed + 20);
|
bool quantize_trigger = magic_trigger(b2, seed + 20.);
|
||||||
float blur = magic(f3, b3, seed + 30);
|
float blur = magic(f3, b3, seed + 30.);
|
||||||
|
|
||||||
// logic
|
// logic
|
||||||
|
|
||||||
vec3 c0 = texture(previous, uv0).xyz;
|
vec3 c0 = texture(previous, uv0).xyz;
|
||||||
|
|
||||||
vec2 uv2 = uv1;
|
vec2 uv2 = uv1;
|
||||||
float pixel = (1 - pixel_size) * 250 + 25;
|
float pixel = (1., - pixel_size) * 250. + 25.;
|
||||||
uv2 = round(uv2 * pixel) / pixel;
|
uv2 = round(uv2 * pixel) / pixel;
|
||||||
vec3 c = gauss(previous, uv2 * vec2(1 / ratio, 1) + .5, 3, 0.005 * blur).xyz;
|
vec3 c = gauss(previous, uv2 * vec2(1. / ratio, 1.) + .5, 3, .005 * blur).xyz;
|
||||||
float colors = (1 - quantize) * 10 + 1;
|
float colors = (1. - quantize) * 10. + 1.;
|
||||||
if (quantize_trigger) {
|
if (quantize_trigger) {
|
||||||
c = round(c * colors) / colors;
|
c = round(c * colors) / colors;
|
||||||
}
|
}
|
||||||
// c = mix(c, 1 - c, step(noise_f(uv0 * 10 + vec2(iTime * 0.1, 0), 5), 0.5));
|
// c = mix(c, 1 - c, step(noise_f(uv0 * 10 + vec2(iTime * .1, 0), 5), .5));
|
||||||
|
|
||||||
return fx_master(c0, c, seed, m0);
|
return fx_master(c0, c, seed, m0);
|
||||||
}
|
}
|
||||||
@@ -148,7 +149,7 @@ subroutine(fx_stage_sub) vec4 fx_6(vec2 vUV, sampler2D previous, sampler2D feedb
|
|||||||
|
|
||||||
vec2 uv0 = vUV.st;
|
vec2 uv0 = vUV.st;
|
||||||
float ratio = iResolution.x / iResolution.y;
|
float ratio = iResolution.x / iResolution.y;
|
||||||
vec2 uv1 = (uv0 - .5) * vec2(ratio, 1);
|
vec2 uv1 = (uv0 - .5) * vec2(ratio, 1.);
|
||||||
|
|
||||||
// controls
|
// controls
|
||||||
|
|
||||||
@@ -168,7 +169,7 @@ subroutine(fx_stage_sub) vec4 fx_6(vec2 vUV, sampler2D previous, sampler2D feedb
|
|||||||
if (pixel_size_trigger) {
|
if (pixel_size_trigger) {
|
||||||
uv2 = floor(uv2 * k1) / k1;
|
uv2 = floor(uv2 * k1) / k1;
|
||||||
}
|
}
|
||||||
vec3 c = gauss(previous, uv2 * vec2(1 / ratio, 1) + .5, 3, 0.005 * blur).xyz;
|
vec3 c = gauss(previous, uv2 * vec2(1 / ratio, 1) + .5, 3, .005 * blur).xyz;
|
||||||
float k3 = pow(2, 5 - floor(quantize * 5));
|
float k3 = pow(2, 5 - floor(quantize * 5));
|
||||||
if (quantize_trigger) {
|
if (quantize_trigger) {
|
||||||
c *= k3;
|
c *= k3;
|
||||||
@@ -190,26 +191,26 @@ subroutine(fx_stage_sub) vec4 fx_7(vec2 vUV, sampler2D previous, sampler2D feedb
|
|||||||
|
|
||||||
vec2 uv0 = vUV.st;
|
vec2 uv0 = vUV.st;
|
||||||
float ratio = iResolution.x / iResolution.y;
|
float ratio = iResolution.x / iResolution.y;
|
||||||
vec2 uv1 = (uv0 - .5) * vec2(ratio, 1);
|
vec2 uv1 = (uv0 - .5) * vec2(ratio, 1.);
|
||||||
|
|
||||||
// controls
|
// controls
|
||||||
|
|
||||||
float lens_v = magic(f1, b1, seed + 10);
|
float lens_v = magic(f1, b1, seed + 10.);
|
||||||
float horizontal_noise = magic(f2, b2, seed + 20);
|
float horizontal_noise = magic(f2, b2, seed + 20.);
|
||||||
float zoom = magic(f3, b3, seed + 30);
|
float zoom = magic(f3, b3, seed + 30.);
|
||||||
|
|
||||||
// logic
|
// logic
|
||||||
|
|
||||||
vec3 c0 = texture(previous, uv0).xyz;
|
vec3 c0 = texture(previous, uv0).xyz;
|
||||||
|
|
||||||
vec2 uv2 = uv1;
|
vec2 uv2 = uv1;
|
||||||
float k1 = lens_v * 0.5;
|
float k1 = lens_v * .5;
|
||||||
uv2 *= 1 + zoom * 2;
|
uv2 *= 1. + zoom * 2.;
|
||||||
uv2 = lens(uv2, -k1, k1);
|
uv2 = lens(uv2, -k1, k1);
|
||||||
float k = horizontal_noise;
|
float k = horizontal_noise;
|
||||||
vec3 c = vec3(
|
vec3 c = vec3(
|
||||||
reframe_b(previous, uv2 + vec2((rand(uv0.y * 1000 + iTime) - 0.5) * k * 0.1)).x,
|
reframe_b(previous, uv2 + vec2((rand(uv0.y * 1000. + iTime) - .5) * k * .1)).x,
|
||||||
reframe_b(previous, uv2 + vec2((rand(uv0.y * 1100 + iTime) - 0.5) * k * 0.1)).y,
|
reframe_b(previous, uv2 + vec2((rand(uv0.y * 1100. + iTime) - .5) * k * .1)).y,
|
||||||
reframe_b(previous, uv2).z
|
reframe_b(previous, uv2).z
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -223,30 +224,28 @@ subroutine(fx_stage_sub) vec4 fx_8(vec2 vUV, sampler2D previous, sampler2D feedb
|
|||||||
|
|
||||||
vec2 uv0 = vUV.st;
|
vec2 uv0 = vUV.st;
|
||||||
float ratio = iResolution.x / iResolution.y;
|
float ratio = iResolution.x / iResolution.y;
|
||||||
vec2 uv1 = (uv0 - .5) * vec2(ratio, 1);
|
vec2 uv1 = (uv0 - .5) * vec2(ratio, 1.);
|
||||||
|
|
||||||
// controls
|
// controls
|
||||||
|
|
||||||
float axes = magic(f1, b1, seed + 10);
|
float axes = magic(f1, b1, seed + 10.);
|
||||||
float axes_trigger = magic_b(b1, seed + 10).x;
|
float axes_trigger = magic_b(b1, seed + 10.).x;
|
||||||
float rotation = magic(f2, b2, seed + 20);
|
float rotation = magic(f2, b2, seed + 20.);
|
||||||
float h_scroll = magic(f3, b3, seed + 30);
|
float h_scroll = magic(f3, b3, seed + 30.);
|
||||||
|
|
||||||
// logic
|
// logic
|
||||||
|
|
||||||
vec3 c0 = texture(previous, uv0).xyz;
|
vec3 c0 = texture(previous, uv0).xyz;
|
||||||
|
|
||||||
vec2 uv2 = uv1;
|
vec2 uv2 = uv1;
|
||||||
uv2 = mix(uv2, kal2(uv2 * rot(0.25), floor(axes * 9 + 1)) * vec2(1, -2) + vec2(0, -0.5), axes_trigger);
|
uv2 = mix(uv2, kal2(uv2 * rot(.25), floor(axes * 9. + 1.)) * vec2(1., -2.) + vec2(0., -.5), axes_trigger);
|
||||||
uv2 *= rot(rotation);
|
uv2 *= rot(rotation);
|
||||||
uv2.x = (saw(uv2.x / ratio + 0.5 + h_scroll * 2) - 0.5) * ratio;
|
uv2.x = (saw(uv2.x / ratio + .5 + h_scroll * 2.) - .5) * ratio;
|
||||||
vec3 c = reframe(previous, uv2).xyz;
|
vec3 c = reframe(previous, uv2).xyz;
|
||||||
|
|
||||||
return fx_master(c0, c, seed, m0);
|
return fx_master(c0, c, seed, m0);
|
||||||
}
|
}
|
||||||
|
|
||||||
#include inc_cp437.glsl
|
|
||||||
|
|
||||||
// FX 9 : cp437
|
// FX 9 : cp437
|
||||||
subroutine(fx_stage_sub) vec4 fx_9(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0)
|
subroutine(fx_stage_sub) vec4 fx_9(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0)
|
||||||
{
|
{
|
||||||
@@ -254,35 +253,35 @@ subroutine(fx_stage_sub) vec4 fx_9(vec2 vUV, sampler2D previous, sampler2D feedb
|
|||||||
|
|
||||||
vec2 uv0 = vUV.st;
|
vec2 uv0 = vUV.st;
|
||||||
float ratio = iResolution.x / iResolution.y;
|
float ratio = iResolution.x / iResolution.y;
|
||||||
vec2 uv1 = (uv0 - .5) * vec2(ratio, 1);
|
vec2 uv1 = (uv0 - .5) * vec2(ratio, 1.);
|
||||||
|
|
||||||
// controls
|
// controls
|
||||||
|
|
||||||
float zoom = magic(f1, b1, seed + 10);
|
float zoom = magic(f1, b1, seed + 10.);
|
||||||
vec2 charset = magic_f(f2, b2, seed + 20);
|
vec2 charset = magic_f(f2, b2, seed + 20.);
|
||||||
vec3 charset_ctrl = magic_b(b2, seed + 20);
|
vec3 charset_ctrl = magic_b(b2, seed + 20.);
|
||||||
float char_delta = magic(f3, b3, seed + 30);
|
float char_delta = magic(f3, b3, seed + 30.);
|
||||||
float t = magic(seed + 40);
|
float t = magic(seed + 40.);
|
||||||
|
|
||||||
// logic
|
// logic
|
||||||
|
|
||||||
vec3 c0 = texture(previous, uv0).xyz;
|
vec3 c0 = texture(previous, uv0).xyz;
|
||||||
|
|
||||||
vec2 uv2 = uv1;
|
vec2 uv2 = uv1;
|
||||||
float k1 = 100 * (1 - zoom) + 10;
|
float k1 = 100. * (1. - zoom) + 10.;
|
||||||
float inv_k = 1 / k1;
|
float inv_k = 1. / k1;
|
||||||
uv2 = floor(uv2 * k1) * inv_k;
|
uv2 = floor(uv2 * k1) * inv_k;
|
||||||
int start_char = charset_ctrl.x > 0 ? charsets[int(charset.x * CHARSETS) * 2] : 0x01;
|
int start_char = charset_ctrl.x > 0. ? charsets[int(charset.x * CHARSETS) * 2] : 0x01;
|
||||||
int char_span = int((charset_ctrl.x > 0 ? charsets[int(charset.x * CHARSETS) * 2 + 1] : 255));
|
int char_span = int((charset_ctrl.x > 0. ? charsets[int(charset.x * CHARSETS) * 2 + 1] : 255));
|
||||||
char_span = int(char_span * max(1 - charset.y, 1 / (char_span * 0.75)));
|
char_span = int(char_span * max(1. - charset.y, 1. / (char_span * .75)));
|
||||||
ivec2 uv2i = ivec2(uv2 * k1);
|
ivec2 uv2i = ivec2(uv2 * k1);
|
||||||
int code = ((charset_ctrl.y < 1 || (uv2i.x % 2 ^ uv2i.y % 2) > 0) ? 1 : 0) * (start_char + int((rand(uv2i) + char_delta) * char_span) % char_span);
|
int code = ((charset_ctrl.y < 1. || (uv2i.x % 2 ^ uv2i.y % 2) > 0) ? 1 : 0) * (start_char + int((rand(uv2i) + char_delta) * char_span) % char_span);
|
||||||
vec3 c = reframe(previous, uv2 + vec2(0, 0) * inv_k * 0.125).xyz * 0.2
|
vec3 c = reframe(previous, uv2 + vec2(0., 0.) * inv_k * .125).xyz * .2
|
||||||
+ reframe(previous, uv2 + vec2(1, 0) * inv_k * 0.125).xyz * 0.2
|
+ reframe(previous, uv2 + vec2(1., 0.) * inv_k * .125).xyz * .2
|
||||||
+ reframe(previous, uv2 + vec2(1, 1) * inv_k * 0.125).xyz * 0.2
|
+ reframe(previous, uv2 + vec2(1., 1.) * inv_k * .125).xyz * .2
|
||||||
+ reframe(previous, uv2 + vec2(0, 1) * inv_k * 0.125).xyz * 0.2
|
+ reframe(previous, uv2 + vec2(0., 1.) * inv_k * .125).xyz * .2
|
||||||
+ reframe(previous, uv2 + vec2(0.5, 0.5) * inv_k * 0.125).xyz * 0.2;
|
+ reframe(previous, uv2 + vec2(.5, .5) * inv_k * .125).xyz * .2;
|
||||||
c = char(mod(uv1 * k1, 1), code) ? c : vec3(0);
|
c = char(mod(uv1 * k1, 1.), code) ? c : vec3(0.);
|
||||||
|
|
||||||
return fx_master(c0, c, seed, m0);
|
return fx_master(c0, c, seed, m0);
|
||||||
}
|
}
|
||||||
@@ -294,22 +293,22 @@ subroutine(fx_stage_sub) vec4 fx_10(vec2 vUV, sampler2D previous, sampler2D feed
|
|||||||
|
|
||||||
vec2 uv0 = vUV.st;
|
vec2 uv0 = vUV.st;
|
||||||
float ratio = iResolution.x / iResolution.y;
|
float ratio = iResolution.x / iResolution.y;
|
||||||
vec2 uv1 = (uv0 - .5) * vec2(ratio, 1);
|
vec2 uv1 = (uv0 - .5) * vec2(ratio, 1.);
|
||||||
|
|
||||||
// controls
|
// controls
|
||||||
|
|
||||||
float lens_v1 = magic(f1, b1, seed + 10);
|
float lens_v1 = magic(f1, b1, seed + 10.);
|
||||||
float lens_v2 = magic(f2, b2, seed + 20);
|
float lens_v2 = magic(f2, b2, seed + 20.);
|
||||||
float zoom = magic(f3, b3, seed + 30);
|
float zoom = magic(f3, b3, seed + 30.);
|
||||||
float k = magic(seed + 40);
|
float k = magic(seed + 40.);
|
||||||
|
|
||||||
// logic
|
// logic
|
||||||
|
|
||||||
vec3 c0 = texture(previous, uv0).xyz;
|
vec3 c0 = texture(previous, uv0).xyz;
|
||||||
|
|
||||||
vec2 uv2 = uv1;
|
vec2 uv2 = uv1;
|
||||||
uv2 *= 1 + zoom * 2;
|
uv2 *= 1. + zoom * 2.;
|
||||||
uv2 = lens(uv2, -lens_v2 * 10, lens_v1 * 10);
|
uv2 = lens(uv2, -lens_v2 * 10., lens_v1 * 10.);
|
||||||
vec3 c = reframe(previous, uv2).xyz;
|
vec3 c = reframe(previous, uv2).xyz;
|
||||||
|
|
||||||
return fx_master(c0, c, seed, m0);
|
return fx_master(c0, c, seed, m0);
|
||||||
@@ -322,13 +321,13 @@ subroutine(fx_stage_sub) vec4 fx_11(vec2 vUV, sampler2D previous, sampler2D feed
|
|||||||
|
|
||||||
vec2 uv0 = vUV.st;
|
vec2 uv0 = vUV.st;
|
||||||
float ratio = iResolution.x / iResolution.y;
|
float ratio = iResolution.x / iResolution.y;
|
||||||
vec2 uv1 = (uv0 - .5) * vec2(ratio, 1);
|
vec2 uv1 = (uv0 - .5) * vec2(ratio, 1.);
|
||||||
|
|
||||||
// controls
|
// controls
|
||||||
|
|
||||||
float wall1 = magic(f1, b1, seed + 10);
|
float wall1 = magic(f1, b1, seed + 10.);
|
||||||
float wall2 = magic(f2, b2, seed + 20);
|
float wall2 = magic(f2, b2, seed + 20.);
|
||||||
float angle = magic(f3, b3, seed + 30);
|
float angle = magic(f3, b3, seed + 30.);
|
||||||
|
|
||||||
// logic
|
// logic
|
||||||
|
|
||||||
@@ -336,8 +335,8 @@ subroutine(fx_stage_sub) vec4 fx_11(vec2 vUV, sampler2D previous, sampler2D feed
|
|||||||
|
|
||||||
vec2 uv2 = uv1;
|
vec2 uv2 = uv1;
|
||||||
uv2 *= rot(angle);
|
uv2 *= rot(angle);
|
||||||
uv2.y = min(uv2.y, 1 - wall1);
|
uv2.y = min(uv2.y, 1. - wall1);
|
||||||
uv2.y = -min(-uv2.y, 1 - wall2);
|
uv2.y = -min(-uv2.y, 1. - wall2);
|
||||||
uv2 *= rot(-angle);
|
uv2 *= rot(-angle);
|
||||||
vec3 c = reframe(previous, uv2).xyz;
|
vec3 c = reframe(previous, uv2).xyz;
|
||||||
|
|
||||||
@@ -351,33 +350,33 @@ subroutine(fx_stage_sub) vec4 fx_12(vec2 vUV, sampler2D previous, sampler2D feed
|
|||||||
|
|
||||||
vec2 uv0 = vUV.st;
|
vec2 uv0 = vUV.st;
|
||||||
float ratio = iResolution.x / iResolution.y;
|
float ratio = iResolution.x / iResolution.y;
|
||||||
vec2 uv1 = (uv0 - 0.5) * vec2(ratio, 1);
|
vec2 uv1 = (uv0 - .5) * vec2(ratio, 1.);
|
||||||
|
|
||||||
// controls
|
// controls
|
||||||
|
|
||||||
float pixel_size = magic(f1, b1, seed + 10);
|
float pixel_size = magic(f1, b1, seed + 10.);
|
||||||
bool pixel_size_trigger = magic_trigger(b1, seed + 10);
|
bool pixel_size_trigger = magic_trigger(b1, seed + 10.);
|
||||||
f2 = magic_f(f2, b2, seed + 20);
|
f2 = magic_f(f2, b2, seed + 20.);
|
||||||
int rule = int(f2.x * 12);
|
int rule = int(f2.x * 12.);
|
||||||
float threshold = f2.y * 0.9 + 0.05;
|
float threshold = f2.y * .9 + .05;
|
||||||
float fb = magic(f3, b3, seed + 30);
|
float fb = magic(f3, b3, seed + 30.);
|
||||||
|
|
||||||
// logic
|
// logic
|
||||||
|
|
||||||
vec3 c0 = texture(previous, uv0).xyz;
|
vec3 c0 = texture(previous, uv0).xyz;
|
||||||
|
|
||||||
vec2 uv2 = uv1;
|
vec2 uv2 = uv1;
|
||||||
float k1 = pow(2, 9 - floor(pixel_size * 5));
|
float k1 = pow(2., 9. - floor(pixel_size * 5.));
|
||||||
float p = 1 / k1;
|
float p = 1. / k1;
|
||||||
uv2 = round(uv2 * k1) / k1;
|
uv2 = round(uv2 * k1) / k1;
|
||||||
vec3 c1 = mix(
|
vec3 c1 = mix(
|
||||||
reframe(previous, uv2 + vec2(0.5, 0.5) * p).xyz,
|
reframe(previous, uv2 + vec2(.5, .5) * p).xyz,
|
||||||
reframe(feedback, uv2 + vec2(0.5, 0.5) * p).xyz,
|
reframe(feedback, uv2 + vec2(.5, .5) * p).xyz,
|
||||||
fb
|
fb
|
||||||
);
|
);
|
||||||
vec3 c2 = mix(
|
vec3 c2 = mix(
|
||||||
reframe(previous, uv2 + vec2(1.5, 0.5) * p).xyz,
|
reframe(previous, uv2 + vec2(1.5, .5) * p).xyz,
|
||||||
reframe(feedback, uv2 + vec2(1.5, 0.5) * p).xyz,
|
reframe(feedback, uv2 + vec2(1.5, .5) * p).xyz,
|
||||||
fb
|
fb
|
||||||
);
|
);
|
||||||
vec3 c3 = mix(
|
vec3 c3 = mix(
|
||||||
@@ -386,33 +385,33 @@ subroutine(fx_stage_sub) vec4 fx_12(vec2 vUV, sampler2D previous, sampler2D feed
|
|||||||
fb
|
fb
|
||||||
);
|
);
|
||||||
vec3 c4 = mix(
|
vec3 c4 = mix(
|
||||||
reframe(previous, uv2 + vec2(0.5, 1.5) * p).xyz,
|
reframe(previous, uv2 + vec2(.5, 1.5) * p).xyz,
|
||||||
reframe(feedback, uv2 + vec2(0.5, 1.5) * p).xyz,
|
reframe(feedback, uv2 + vec2(.5, 1.5) * p).xyz,
|
||||||
fb
|
fb
|
||||||
);
|
);
|
||||||
vec3 c5 = mix(
|
vec3 c5 = mix(
|
||||||
reframe(previous, uv2 + vec2(-0.5, 1.5) * p).xyz,
|
reframe(previous, uv2 + vec2(-.5, 1.5) * p).xyz,
|
||||||
reframe(feedback, uv2 + vec2(-0.5, 1.5) * p).xyz,
|
reframe(feedback, uv2 + vec2(-.5, 1.5) * p).xyz,
|
||||||
fb
|
fb
|
||||||
);
|
);
|
||||||
vec3 c6 = mix(
|
vec3 c6 = mix(
|
||||||
reframe(previous, uv2 + vec2(-0.5, 0.5) * p).xyz,
|
reframe(previous, uv2 + vec2(-.5, .5) * p).xyz,
|
||||||
reframe(feedback, uv2 + vec2(-0.5, 0.5) * p).xyz,
|
reframe(feedback, uv2 + vec2(-.5, .5) * p).xyz,
|
||||||
fb
|
fb
|
||||||
);
|
);
|
||||||
vec3 c7 = mix(
|
vec3 c7 = mix(
|
||||||
reframe(previous, uv2 + vec2(-0.5, -0.5) * p).xyz,
|
reframe(previous, uv2 + vec2(-.5, -.5) * p).xyz,
|
||||||
reframe(feedback, uv2 + vec2(-0.5, -0.5) * p).xyz,
|
reframe(feedback, uv2 + vec2(-.5, -.5) * p).xyz,
|
||||||
fb
|
fb
|
||||||
);
|
);
|
||||||
vec3 c8 = mix(
|
vec3 c8 = mix(
|
||||||
reframe(previous, uv2 + vec2(0.5, -0.5) * p).xyz,
|
reframe(previous, uv2 + vec2(.5, -.5) * p).xyz,
|
||||||
reframe(feedback, uv2 + vec2(0.5, -0.5) * p).xyz,
|
reframe(feedback, uv2 + vec2(.5, -.5) * p).xyz,
|
||||||
fb
|
fb
|
||||||
);
|
);
|
||||||
vec3 c9 = mix(
|
vec3 c9 = mix(
|
||||||
reframe(previous, uv2 + vec2(-0.5, -0.5) * p).xyz,
|
reframe(previous, uv2 + vec2(-.5, -.5) * p).xyz,
|
||||||
reframe(feedback, uv2 + vec2(-0.5, -0.5) * p).xyz,
|
reframe(feedback, uv2 + vec2(-.5, -.5) * p).xyz,
|
||||||
fb
|
fb
|
||||||
);
|
);
|
||||||
bool alive = mean(c1) >= threshold;
|
bool alive = mean(c1) >= threshold;
|
||||||
@@ -453,7 +452,7 @@ subroutine(fx_stage_sub) vec4 fx_12(vec2 vUV, sampler2D previous, sampler2D feed
|
|||||||
alive = n >= 6 || !alive && n == 4 || alive && (n == 3 || n == 5);
|
alive = n >= 6 || !alive && n == 4 || alive && (n == 3 || n == 5);
|
||||||
}
|
}
|
||||||
|
|
||||||
vec3 cout = vec3(alive ? 1 : 0);
|
vec3 cout = vec3(alive ? 1. : 0.);
|
||||||
|
|
||||||
return fx_master(c0, cout, seed, m0);
|
return fx_master(c0, cout, seed, m0);
|
||||||
}
|
}
|
||||||
@@ -465,20 +464,20 @@ subroutine(fx_stage_sub) vec4 fx_13(vec2 vUV, sampler2D previous, sampler2D feed
|
|||||||
|
|
||||||
vec2 uv0 = vUV.st;
|
vec2 uv0 = vUV.st;
|
||||||
float ratio = iResolution.x / iResolution.y;
|
float ratio = iResolution.x / iResolution.y;
|
||||||
vec2 uv1 = (uv0 - .5) * vec2(ratio, 1);
|
vec2 uv1 = (uv0 - .5) * vec2(ratio, 1.);
|
||||||
|
|
||||||
// controls
|
// controls
|
||||||
|
|
||||||
float sx = magic(f1, b1, seed + 10) * 2;
|
float sx = magic(f1, b1, seed + 10.) * 2.;
|
||||||
float sy = magic(f2, b2, seed + 20) * 2;
|
float sy = magic(f2, b2, seed + 20.) * 2.;
|
||||||
float disp = 0.005 * magic(f3, b3, seed + 30);
|
float disp = .005 * magic(f3, b3, seed + 30.);
|
||||||
|
|
||||||
// logic
|
// logic
|
||||||
|
|
||||||
vec3 c0 = texture(previous, uv0).xyz;
|
vec3 c0 = texture(previous, uv0).xyz;
|
||||||
|
|
||||||
const mat3x3 sobelx = {{-1, -2, -1}, {0, 0, 0}, {1, 2, 1}};
|
const mat3x3 sobelx = mat3x3(-1., -2., -1., 0., 0., 0., 1., 2., 1.);
|
||||||
const mat3x3 sobely = {{-1, 0, 1}, {-2, 0, 2}, {-1, 0, 1}};
|
const mat3x3 sobely = mat3x3(-1., 0., 1., -2., 0., 2., -1., 0., 1.);
|
||||||
|
|
||||||
mat3x3 sobel = sobelx * sx + sobely * sy;
|
mat3x3 sobel = sobelx * sx + sobely * sy;
|
||||||
|
|
||||||
@@ -494,13 +493,13 @@ subroutine(fx_stage_sub) vec4 fx_14(vec2 vUV, sampler2D previous, sampler2D feed
|
|||||||
|
|
||||||
vec2 uv0 = vUV.st;
|
vec2 uv0 = vUV.st;
|
||||||
float ratio = iResolution.x / iResolution.y;
|
float ratio = iResolution.x / iResolution.y;
|
||||||
vec2 uv1 = (uv0 - .5) * vec2(ratio, 1);
|
vec2 uv1 = (uv0 - .5) * vec2(ratio, 1.);
|
||||||
|
|
||||||
// controls
|
// controls
|
||||||
|
|
||||||
float zoom = 1 + magic(f1, b1, seed + 10) * 9;
|
float zoom = 1 + magic(f1, b1, seed + 10.) * 9.;
|
||||||
float h_scroll = magic(f2, b2, seed + 20);
|
float h_scroll = magic(f2, b2, seed + 20.);
|
||||||
float angle = magic(f3, b3, seed + 30);
|
float angle = magic(f3, b3, seed + 30.);
|
||||||
|
|
||||||
// logic
|
// logic
|
||||||
|
|
||||||
@@ -512,11 +511,11 @@ subroutine(fx_stage_sub) vec4 fx_14(vec2 vUV, sampler2D previous, sampler2D feed
|
|||||||
|
|
||||||
uv3 *= rot(angle);
|
uv3 *= rot(angle);
|
||||||
|
|
||||||
uv3 += vec2(h_scroll, 0);
|
uv3 += vec2(h_scroll, 0.);
|
||||||
|
|
||||||
uv3 *= round(zoom);
|
uv3 *= round(zoom);
|
||||||
|
|
||||||
vec2 umax = vec2(round(zoom), 300);
|
vec2 umax = vec2(round(zoom), 300.);
|
||||||
|
|
||||||
vec3 c = reframe(previous, mod(uv3, umax)).xyz;
|
vec3 c = reframe(previous, mod(uv3, umax)).xyz;
|
||||||
|
|
||||||
@@ -526,33 +525,33 @@ subroutine(fx_stage_sub) vec4 fx_14(vec2 vUV, sampler2D previous, sampler2D feed
|
|||||||
// FX 15 : Random
|
// FX 15 : Random
|
||||||
subroutine(fx_stage_sub) vec4 fx_15(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0)
|
subroutine(fx_stage_sub) vec4 fx_15(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0)
|
||||||
{
|
{
|
||||||
int fx = int(randTime(seed + 100) * 14);
|
int fx = int(randTime(seed + 100.) * 14.) + 1;
|
||||||
|
|
||||||
if (fx == 0) {
|
if (fx == 1) {
|
||||||
return fx_1(vUV, previous, feedback, seed, b1, f1, b2, f2, b3, f3, m0);
|
return fx_1(vUV, previous, feedback, seed, b1, f1, b2, f2, b3, f3, m0);
|
||||||
} else if (fx == 1) {
|
|
||||||
return fx_2(vUV, previous, feedback, seed, b1, f1, b2, f2, b3, f3, m0);
|
|
||||||
} else if (fx == 2) {
|
} else if (fx == 2) {
|
||||||
return fx_3(vUV, previous, feedback, seed, b1, f1, b2, f2, b3, f3, m0);
|
return fx_2(vUV, previous, feedback, seed, b1, f1, b2, f2, b3, f3, m0);
|
||||||
} else if (fx == 3) {
|
} else if (fx == 3) {
|
||||||
return fx_4(vUV, previous, feedback, seed, b1, f1, b2, f2, b3, f3, m0);
|
return fx_3(vUV, previous, feedback, seed, b1, f1, b2, f2, b3, f3, m0);
|
||||||
} else if (fx == 4) {
|
} else if (fx == 4) {
|
||||||
return fx_5(vUV, previous, feedback, seed, b1, f1, b2, f2, b3, f3, m0);
|
return fx_4(vUV, previous, feedback, seed, b1, f1, b2, f2, b3, f3, m0);
|
||||||
} else if (fx == 5) {
|
} else if (fx == 5) {
|
||||||
return fx_6(vUV, previous, feedback, seed, b1, f1, b2, f2, b3, f3, m0);
|
return fx_5(vUV, previous, feedback, seed, b1, f1, b2, f2, b3, f3, m0);
|
||||||
} else if (fx == 6) {
|
} else if (fx == 6) {
|
||||||
return fx_7(vUV, previous, feedback, seed, b1, f1, b2, f2, b3, f3, m0);
|
return fx_6(vUV, previous, feedback, seed, b1, f1, b2, f2, b3, f3, m0);
|
||||||
} else if (fx == 7) {
|
} else if (fx == 7) {
|
||||||
return fx_8(vUV, previous, feedback, seed, b1, f1, b2, f2, b3, f3, m0);
|
return fx_7(vUV, previous, feedback, seed, b1, f1, b2, f2, b3, f3, m0);
|
||||||
} else if (fx == 8) {
|
} else if (fx == 8) {
|
||||||
return fx_9(vUV, previous, feedback, seed, b1, f1, b2, f2, b3, f3, m0);
|
return fx_8(vUV, previous, feedback, seed, b1, f1, b2, f2, b3, f3, m0);
|
||||||
} else if (fx == 9) {
|
} else if (fx == 9) {
|
||||||
return fx_10(vUV, previous, feedback, seed, b1, f1, b2, f2, b3, f3, m0);
|
return fx_9(vUV, previous, feedback, seed, b1, f1, b2, f2, b3, f3, m0);
|
||||||
} else if (fx == 10) {
|
} else if (fx == 10) {
|
||||||
return fx_11(vUV, previous, feedback, seed, b1, f1, b2, f2, b3, f3, m0);
|
return fx_10(vUV, previous, feedback, seed, b1, f1, b2, f2, b3, f3, m0);
|
||||||
} else if (fx == 11) {
|
} else if (fx == 11) {
|
||||||
return fx_12(vUV, previous, feedback, seed, b1, f1, b2, f2, b3, f3, m0);
|
return fx_11(vUV, previous, feedback, seed, b1, f1, b2, f2, b3, f3, m0);
|
||||||
} else if (fx == 12) {
|
} else if (fx == 12) {
|
||||||
|
return fx_12(vUV, previous, feedback, seed, b1, f1, b2, f2, b3, f3, m0);
|
||||||
|
} else if (fx == 13) {
|
||||||
return fx_13(vUV, previous, feedback, seed, b1, f1, b2, f2, b3, f3, m0);
|
return fx_13(vUV, previous, feedback, seed, b1, f1, b2, f2, b3, f3, m0);
|
||||||
} else {
|
} else {
|
||||||
return fx_14(vUV, previous, feedback, seed, b1, f1, b2, f2, b3, f3, m0);
|
return fx_14(vUV, previous, feedback, seed, b1, f1, b2, f2, b3, f3, m0);
|
||||||
|
|||||||
+11
-5
@@ -1,14 +1,20 @@
|
|||||||
#ifndef INC_RAND
|
#ifndef INC_RAND
|
||||||
#define INC_RAND
|
#define INC_RAND
|
||||||
|
|
||||||
|
// https://thebookofshaders.com/10/
|
||||||
|
// https://byteblacksmith.com/improvements-to-the-canonical-one-liner-glsl-rand-for-opengl-es-2-0/
|
||||||
|
|
||||||
float rand(float seed){
|
float rand(float seed){
|
||||||
float v = pow(abs(seed), .8571429); // 6. / 7.
|
const float c = 43758.5453;
|
||||||
v *= sin(v) + 1.;
|
return fract(sin(seed) * c);
|
||||||
return fract(v);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
float rand(vec2 n){
|
float rand(vec2 co)
|
||||||
return rand(n.x * 1234. + n.y * 9876.);
|
{
|
||||||
|
const float a = 12.9898;
|
||||||
|
const float b = 78.233;
|
||||||
|
float dt= dot(co.xy ,vec2(a,b));
|
||||||
|
return rand(dt);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
+160
-290
@@ -1,6 +1,7 @@
|
|||||||
#include inc_res.glsl
|
#include inc_res.glsl
|
||||||
#include inc_magic.glsl
|
#include inc_magic.glsl
|
||||||
#include inc_functions.glsl
|
#include inc_functions.glsl
|
||||||
|
#include inc_cp437.glsl
|
||||||
|
|
||||||
#ifndef INC_SRC
|
#ifndef INC_SRC
|
||||||
#define INC_SRC
|
#define INC_SRC
|
||||||
@@ -13,6 +14,8 @@ uniform sampler2D iTex4;
|
|||||||
|
|
||||||
subroutine vec4 src_stage_sub(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3);
|
subroutine vec4 src_stage_sub(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3);
|
||||||
|
|
||||||
|
subroutine uniform src_stage_sub src_stage;
|
||||||
|
|
||||||
vec4 src_thru(vec2 vUV, sampler2D tex, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)
|
vec4 src_thru(vec2 vUV, sampler2D tex, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)
|
||||||
{
|
{
|
||||||
// start
|
// start
|
||||||
@@ -21,9 +24,9 @@ vec4 src_thru(vec2 vUV, sampler2D tex, int seed, vec3 b1, vec2 f1, vec3 b2, vec2
|
|||||||
|
|
||||||
// controls
|
// controls
|
||||||
|
|
||||||
float hue = magic(f1, b1, seed + 10);
|
float hue = magic(f1, b1, seed + 10.);
|
||||||
float saturation = magic(f2, b2, seed + 20);
|
float saturation = magic(f2, b2, seed + 20.);
|
||||||
float light = magic(f3, b3, seed + 30);
|
float light = magic(f3, b3, seed + 30.);
|
||||||
|
|
||||||
// logic
|
// logic
|
||||||
|
|
||||||
@@ -31,8 +34,8 @@ vec4 src_thru(vec2 vUV, sampler2D tex, int seed, vec3 b1, vec2 f1, vec3 b2, vec2
|
|||||||
|
|
||||||
c = shift3(c, hue);
|
c = shift3(c, hue);
|
||||||
|
|
||||||
c *= 1 + saturation;
|
c *= 1. + saturation;
|
||||||
c = mix(c + light * 2.0, c - (1 - light) * 2.0, step(0.5, light));
|
c = mix(c + light * 2., c - (1. - light) * 2., step(.5, light));
|
||||||
|
|
||||||
// output
|
// output
|
||||||
|
|
||||||
@@ -40,259 +43,128 @@ vec4 src_thru(vec2 vUV, sampler2D tex, int seed, vec3 b1, vec2 f1, vec3 b2, vec2
|
|||||||
}
|
}
|
||||||
|
|
||||||
// SRC 1: feedback + thru
|
// SRC 1: feedback + thru
|
||||||
subroutine ( src_stage_sub ) vec4 src_1(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)
|
subroutine(src_stage_sub) vec4 src_1(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)
|
||||||
{
|
{
|
||||||
return src_thru(vUV, iTex0, seed, b1, f1, b2, f2, b3, f3);
|
return src_thru(vUV, iTex0, seed, b1, f1, b2, f2, b3, f3);
|
||||||
}
|
}
|
||||||
|
|
||||||
// SRC 2 : lines
|
// SRC 2 : lines
|
||||||
subroutine ( src_stage_sub ) vec4 src_2(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)
|
subroutine(src_stage_sub) vec4 src_2(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)
|
||||||
{
|
{
|
||||||
// start
|
// start
|
||||||
|
|
||||||
vec2 uv0 = vUV.st;
|
vec2 uv0 = vUV.st;
|
||||||
float ratio = iResolution.x / iResolution.y;
|
float ratio = iResolution.x / iResolution.y;
|
||||||
vec2 uv1 = (uv0 - .5) * vec2(ratio, 1);
|
vec2 uv1 = (uv0 - .5) * vec2(ratio, 1.);
|
||||||
|
|
||||||
// controls
|
// controls
|
||||||
|
|
||||||
float thickness = magic(f1, b1, seed + 10);
|
float thickness = magic(f1, b1, seed + 10.);
|
||||||
float rotation = magic(f2, b2, seed + 20);
|
float rotation = magic(f2, b2, seed + 20.);
|
||||||
float distort = magic(f3, b3, seed + 30);
|
float distort = magic(f3, b3, seed + 30.);
|
||||||
|
|
||||||
// logic
|
// logic
|
||||||
|
|
||||||
vec2 uv2 = uv1;
|
vec2 uv2 = uv1;
|
||||||
uv2.y *= cos(uv2.x * 5 * distort);
|
uv2.y *= cos(uv2.x * 5. * distort);
|
||||||
uv2 *= rot(rotation + iBeats / 16);
|
uv2 *= rot(rotation + iBeats * .0625);
|
||||||
float k = thickness * 2;
|
float k = thickness * 2.;
|
||||||
uv2.y = cmod(uv2.y, k * 2 + 0.1);
|
uv2.y = cmod(uv2.y, k * 2. + .1);
|
||||||
float f = istep(k * 0.125 + 0.05, uv2.y) * istep(k * 0.125 + 0.01, -uv2.y);
|
float f = istep(k * .125 + .05, uv2.y) * istep(k * .125 + .01, -uv2.y);
|
||||||
|
|
||||||
return vec4(f);
|
return vec4(f);
|
||||||
}
|
}
|
||||||
|
|
||||||
// SRC 3 : dots
|
// SRC 3 : dots
|
||||||
subroutine ( src_stage_sub ) vec4 src_3(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)
|
subroutine(src_stage_sub) vec4 src_3(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)
|
||||||
{
|
{
|
||||||
// start
|
// start
|
||||||
|
|
||||||
vec2 uv0 = vUV.st;
|
vec2 uv0 = vUV.st;
|
||||||
float ratio = iResolution.x / iResolution.y;
|
float ratio = iResolution.x / iResolution.y;
|
||||||
vec2 uv1 = (uv0 - .5) * vec2(ratio, 1);
|
vec2 uv1 = (uv0 - .5) * vec2(ratio, 1.);
|
||||||
|
|
||||||
// controls
|
// controls
|
||||||
|
|
||||||
float zoom = magic(f1, b1, seed + 10);
|
float zoom = magic(f1, b1, seed + 10.);
|
||||||
float rotation = magic(f2, b2, seed + 20);
|
float rotation = magic(f2, b2, seed + 20.);
|
||||||
float lens_v = magic(f3, b3, seed + 30);
|
float lens_v = magic(f3, b3, seed + 30.);
|
||||||
|
|
||||||
// logic
|
// logic
|
||||||
|
|
||||||
vec2 uv2 = uv1;
|
vec2 uv2 = uv1;
|
||||||
float k1 = lens_v * 5;
|
float k1 = lens_v * 5.;
|
||||||
uv2 = lens(uv2, -k1, k1);
|
uv2 = lens(uv2, -k1, k1);
|
||||||
uv2 = kal(uv2, 5);
|
uv2 = kal(uv2, 5.);
|
||||||
uv2 *= rot(rotation + iBeats / 16);
|
uv2 *= rot(rotation + iBeats * .0625);
|
||||||
float k = zoom * 0.1 + 0.05;
|
float k = zoom * .1 + .05;
|
||||||
uv2 = cmod(uv2, k * 2);
|
uv2 = cmod(uv2, k * 2.);
|
||||||
float f = istep(k / (1 + length(uv1) * 2), length(uv2));
|
float f = istep(k / (1. + length(uv1) * 2.), length(uv2));
|
||||||
|
|
||||||
return vec4(f);
|
return vec4(f);
|
||||||
}
|
}
|
||||||
|
|
||||||
// // SRC 4 : circuit
|
|
||||||
// subroutine ( src_stage_sub ) vec4 src_4(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)
|
|
||||||
// {
|
|
||||||
// // start
|
|
||||||
|
|
||||||
// vec2 uv0 = vUV.st;
|
|
||||||
// float ratio = iResolution.x / iResolution.y;
|
|
||||||
// vec2 uv1 = (uv0 - .5) * vec2(ratio, 1);
|
|
||||||
|
|
||||||
// // controls
|
|
||||||
|
|
||||||
// float z = 10 + magic(f1, b1, 123) * 20;
|
|
||||||
// float h = magic(f2, b2, seed + 20) * 0.8 + 0.1;
|
|
||||||
// float v = magic_reverse(f3, b3, seed + 30) * 0.8 + 0.1;
|
|
||||||
|
|
||||||
// // logic
|
|
||||||
|
|
||||||
// uv1 *= z;
|
|
||||||
// uv1 += iBeats;
|
|
||||||
|
|
||||||
// float s0 = rand(floor(mod(uv1, 1000))) * 1000;
|
|
||||||
// float s1 = rand(floor(mod(uv1 + vec2(0, 1), 1000))) * 1000;
|
|
||||||
// float s2 = rand(floor(mod(uv1 - vec2(1, 0), 1000))) * 1000;
|
|
||||||
|
|
||||||
// bool up = rand(s1 + 1) < h;
|
|
||||||
// bool left = rand(s2 + 2) < v;
|
|
||||||
// bool down = rand(s0 + 1) < h;
|
|
||||||
// bool right = rand(s0 + 2) < v;
|
|
||||||
// bool up_down = up && down;
|
|
||||||
// bool left_right = left && right;
|
|
||||||
|
|
||||||
// uv1 = mod(uv1, 1.0) - 0.5;
|
|
||||||
|
|
||||||
// const float t = 0.1;
|
|
||||||
|
|
||||||
// float f = 0;
|
|
||||||
// int c = 0;
|
|
||||||
|
|
||||||
// if (up) {
|
|
||||||
// f += stripe(uv1.x, -t * 0.5, t * 0.5) * step(-t * 0.5, uv1.y);
|
|
||||||
// c += 1;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// if (down) {
|
|
||||||
// f += stripe(uv1.x, -t * 0.5, t * 0.5) * istep(t * 0.5, uv1.y);
|
|
||||||
// c += 1;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// if (left) {
|
|
||||||
// f += stripe(uv1.y, -t * 0.5, t * 0.5) * istep(t * 0.5, uv1.x);
|
|
||||||
// c += 1;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// if (right) {
|
|
||||||
// f += stripe(uv1.y, -t * 0.5, t * 0.5) * step(-t * 0.5, uv1.x);
|
|
||||||
// c += 1;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// if (c == 1) {
|
|
||||||
// f += istep(t, length(uv1));
|
|
||||||
// }
|
|
||||||
|
|
||||||
// f = min(f, 1);
|
|
||||||
|
|
||||||
// if ((up_down ^^ left_right) && c == 2) {
|
|
||||||
// if (up_down) {
|
|
||||||
// uv1.xy = uv1.yx;
|
|
||||||
// }
|
|
||||||
// if (rand(s0 + 3) < 0.5) {
|
|
||||||
// uv1.x = -uv1.x;
|
|
||||||
// }
|
|
||||||
// float k = rand(s0 + 4) * 60;
|
|
||||||
// f -= rect(uv1, vec2(0), vec2(t * 3, t));
|
|
||||||
// f = max(0, f);
|
|
||||||
// if (k < 10) { // resistor
|
|
||||||
// f += line(uv1, vec2(-t * 3.25, -t * 0.5), vec2(-t * 2.5, t * 2), t * 0.75);
|
|
||||||
// f += line(uv1, vec2(-t * 2.5, t * 2), vec2(-t * 1.5, -t * 2), t * 0.75);
|
|
||||||
// f += line(uv1, vec2(-t * 1.5, -t * 2), vec2(-t * 0.5, t * 2), t * 0.75);
|
|
||||||
// f += line(uv1, vec2(-t * 0.5, t * 2), vec2(t * 0.5, -t * 2), t * 0.75);
|
|
||||||
// f += line(uv1, vec2(t * 0.5, -t * 2), vec2(t * 1.5, t * 2), t * 0.75);
|
|
||||||
// f += line(uv1, vec2(t * 1.5, t * 2), vec2(t * 2.5, -t * 2), t * 0.75);
|
|
||||||
// f += line(uv1, vec2(t * 2.5, -t * 2), vec2(t * 3.25, t * 0.5), t * 0.75);
|
|
||||||
// } else if (k < 20) { // capacitor
|
|
||||||
// f += rect(uv1, vec2(-t * 2, 0), vec2(t, t * 0.5));
|
|
||||||
// f += rect(uv1, vec2(t * 2, 0), vec2(t, t * 0.5));
|
|
||||||
// f += rect(uv1, vec2(t, 0), vec2(t * 0.5, t * 3.5));
|
|
||||||
// f += rect(uv1, vec2(-t, 0), vec2(t * 0.5, t * 3.5));
|
|
||||||
// } else if (k < 30) { // diode
|
|
||||||
// f += line(uv1, vec2(-t * 2, t * 2.5), vec2(t * 2, 0), t);
|
|
||||||
// f += line(uv1, vec2(-t * 2, -t * 2.5), vec2(t * 2, 0), t);
|
|
||||||
// f += rect(uv1, vec2(t * 2.5, 0), vec2(t * 0.5, t * 3));
|
|
||||||
// f += rect(uv1, vec2(-t * 2.5, 0), vec2(t * 0.5, t * 3));
|
|
||||||
// } else if (k < 40) { // lamp
|
|
||||||
// f += istep(t * 3.5, length(uv1));
|
|
||||||
// f -= istep(t * 2.5, length(uv1));
|
|
||||||
// f += line(uv1, vec2(-t * 2), vec2(t * 2), t);
|
|
||||||
// f += line(uv1, vec2(-t * 2, t * 2), vec2(t * 2, -t * 2), t);
|
|
||||||
// } else if (k < 50) { // inductor
|
|
||||||
// f += istep(t * 2, length(uv1 - vec2(t * 2.5, 0)));
|
|
||||||
// f += istep(t * 2, length(uv1 - vec2(0, 0)));
|
|
||||||
// f += istep(t * 2, length(uv1 - vec2(-t * 2.5, 0)));
|
|
||||||
// f -= 2 * istep(t, length(uv1 - vec2(t * 2.5, 0)));
|
|
||||||
// f -= 2 * istep(t, length(uv1 - vec2(0, 0)));
|
|
||||||
// f -= 2 * istep(t, length(uv1 - vec2(-t * 2.5, 0)));
|
|
||||||
// f *= step(-t * 0.5, uv1.y);
|
|
||||||
// } else if (k < 60) { // switch
|
|
||||||
// f += istep(t, length(uv1 - vec2(t * 2.5, 0)));
|
|
||||||
// f += istep(t, length(uv1 + vec2(t * 2.5, 0)));
|
|
||||||
// f += line(uv1, vec2(t * 2, 0), vec2(-t * 2.5, t * (k < 55 ? 3 : 1)), t);
|
|
||||||
// }
|
|
||||||
// } else if (c == 3) {
|
|
||||||
// if (left_right) {
|
|
||||||
// uv1.xy = uv1.yx;
|
|
||||||
// if (up) {
|
|
||||||
// uv1.x = -uv1.x;
|
|
||||||
// }
|
|
||||||
// } else if (right) {
|
|
||||||
// uv1.x = -uv1.x;
|
|
||||||
// }
|
|
||||||
// float k = rand(s0 + 4) * 20;
|
|
||||||
// if (k < 10) {
|
|
||||||
// f -= rect(uv1, vec2(0), vec2(t * 3));
|
|
||||||
// f = max(0, f);
|
|
||||||
// f += rect(uv1, vec2(-t * 3, 0), vec2(t * 0.5, t * 3));
|
|
||||||
// f += line(uv1, vec2(t * 0.25, t * 3.25), vec2(-t * 3, t), t);
|
|
||||||
// f += line(uv1, vec2(t * 0.25, -t * 3.25), vec2(-t * 3, -t), t);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// return vec4(f);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// SRC 4 : bacteria
|
// SRC 4 : bacteria
|
||||||
subroutine ( src_stage_sub ) vec4 src_4(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)
|
subroutine(src_stage_sub) vec4 src_4(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)
|
||||||
{
|
{
|
||||||
// start
|
// start
|
||||||
|
|
||||||
vec2 uv0 = vUV.st;
|
vec2 uv0 = vUV.st;
|
||||||
float ratio = iResolution.x / iResolution.y;
|
float ratio = iResolution.x / iResolution.y;
|
||||||
vec2 uv1 = (uv0 - .5) * vec2(ratio, 1);
|
vec2 uv1 = (uv0 - .5) * vec2(ratio, 1.);
|
||||||
|
|
||||||
// controls
|
// controls
|
||||||
|
|
||||||
float zoom = 2 + magic(f1, b1, seed + 10) * 20;
|
float zoom = 2. + magic(f1, b1, seed + 10.) * 20.;
|
||||||
float details = 5 * magic(f2, b2, seed + 20);
|
float details = 5. * magic(f2, b2, seed + 20.);
|
||||||
float delta = magic(f3, b3, seed + 30);
|
float delta = magic(f3, b3, seed + 30.);
|
||||||
|
|
||||||
// logic
|
// logic
|
||||||
|
|
||||||
uv1 *= zoom;
|
uv1 *= zoom;
|
||||||
|
|
||||||
vec4 data = voronoi(uv1, 1, seed + 40, iBeats * 0.25);
|
vec4 data = voronoi(uv1, 1., seed + 40, iBeats * .25);
|
||||||
|
|
||||||
float f = ease(data.x) + ease(data.y);
|
float f = ease(data.x) + ease(data.y);
|
||||||
|
|
||||||
f = saw(f * (1 + data.x * details) - delta * 2.0);
|
f = saw(f * (1. + data.x * details) - delta * 2.);
|
||||||
|
|
||||||
return vec4(f);
|
return vec4(f);
|
||||||
}
|
}
|
||||||
|
|
||||||
// SRC 5 : noise
|
// SRC 5 : noise
|
||||||
subroutine ( src_stage_sub ) vec4 src_5(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)
|
subroutine(src_stage_sub) vec4 src_5(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)
|
||||||
{
|
{
|
||||||
// start
|
// start
|
||||||
|
|
||||||
vec2 uv0 = vUV.st;
|
vec2 uv0 = vUV.st;
|
||||||
float ratio = iResolution.x / iResolution.y;
|
float ratio = iResolution.x / iResolution.y;
|
||||||
vec2 uv1 = (uv0 - .5) * vec2(ratio, 1);
|
vec2 uv1 = (uv0 - .5) * vec2(ratio, 1.);
|
||||||
|
|
||||||
// controls
|
// controls
|
||||||
|
|
||||||
float zoom = magic(f1, b1, seed + 10);
|
float zoom = magic(f1, b1, seed + 10.);
|
||||||
float voronoi_distort = magic(f2, b2, seed + 20);
|
float voronoi_distort = magic(f2, b2, seed + 20.);
|
||||||
float details = magic(f3, b3, seed + 30);
|
float details = magic(f3, b3, seed + 30.);
|
||||||
float noise_factor = magic(seed + 40);
|
float noise_factor = magic(seed + 40.);
|
||||||
|
|
||||||
// logic
|
// logic
|
||||||
|
|
||||||
vec2 uv2 = uv1;
|
vec2 uv2 = uv1;
|
||||||
uv2 *= zoom * 20 + 3;
|
uv2 *= zoom * 20. + 3.;
|
||||||
uv2.x += iBeats;
|
uv2.x += iBeats;
|
||||||
vec4 data = voronoi(uv2, voronoi_distort, seed + 50, iBeats);
|
vec4 data = voronoi(uv2, voronoi_distort, seed + 50, iBeats);
|
||||||
float f = data.x / (data.x + data.y);
|
float f = data.x / (data.x + data.y);
|
||||||
f = sin(f * PI * (details * 20)) * 0.5 + 1;
|
f = sin(f * PI * (details * 20.)) * .5 + 1.;
|
||||||
int nf = int(noise_factor * 6);
|
int nf = int(noise_factor * 6.);
|
||||||
f *= mix(1, noise_f(uv2, nf - 1), step(0.0, float(nf)));
|
f *= mix(1., noise_f(uv2, nf - 1), step(.0, float(nf)));
|
||||||
|
|
||||||
return vec4(f);
|
return vec4(f);
|
||||||
}
|
}
|
||||||
|
|
||||||
// SRC 6 : video in 1 + thru
|
// SRC 6 : video in 1 + thru
|
||||||
subroutine ( src_stage_sub ) vec4 src_6(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)
|
subroutine(src_stage_sub) vec4 src_6(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)
|
||||||
{
|
{
|
||||||
if (iDemo > 0) {
|
if (iDemo > 0) {
|
||||||
return src_2(vUV, seed, b1, f1, b2, f2, b3, f3);
|
return src_2(vUV, seed, b1, f1, b2, f2, b3, f3);
|
||||||
@@ -301,121 +173,119 @@ subroutine ( src_stage_sub ) vec4 src_6(vec2 vUV, int seed, vec3 b1, vec2 f1, ve
|
|||||||
return src_thru(vUV, iTex3, seed, b1, f1, b2, f2, b3, f3);
|
return src_thru(vUV, iTex3, seed, b1, f1, b2, f2, b3, f3);
|
||||||
}
|
}
|
||||||
|
|
||||||
#include inc_cp437.glsl
|
|
||||||
|
|
||||||
// SRC 7 : cp437
|
// SRC 7 : cp437
|
||||||
subroutine ( src_stage_sub ) vec4 src_7(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)
|
subroutine(src_stage_sub) vec4 src_7(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)
|
||||||
{
|
{
|
||||||
// start
|
// start
|
||||||
|
|
||||||
vec2 uv0 = vUV.st;
|
vec2 uv0 = vUV.st;
|
||||||
float ratio = iResolution.x / iResolution.y;
|
float ratio = iResolution.x / iResolution.y;
|
||||||
vec2 uv1 = (uv0 - .5) * vec2(ratio, 1);
|
vec2 uv1 = (uv0 - .5) * vec2(ratio, 1.);
|
||||||
|
|
||||||
// controls
|
// controls
|
||||||
|
|
||||||
float zoom = magic(f1, b1, seed + 10);
|
float zoom = magic(f1, b1, seed + 10.);
|
||||||
vec2 charset = magic_f(f2, b2, seed + 20);
|
vec2 charset = magic_f(f2, b2, seed + 20.);
|
||||||
vec3 charset_ctrl = magic_b(b2, seed + 20);
|
vec3 charset_ctrl = magic_b(b2, seed + 20.);
|
||||||
float char_delta = magic(f3, b3, seed + 30);
|
float char_delta = magic(f3, b3, seed + 30.);
|
||||||
|
|
||||||
// logic
|
// logic
|
||||||
|
|
||||||
vec2 uv2 = uv1;
|
vec2 uv2 = uv1;
|
||||||
uv2 *= zoom * 20 + 3;
|
uv2 *= zoom * 20. + 3.;
|
||||||
uv2 += iBeats;
|
uv2 += iBeats;
|
||||||
uv2 = mod(uv2, 100) + 100;
|
uv2 = mod(uv2, 100.) + 100.;
|
||||||
int start_char = charset_ctrl.x > 0 ? charsets[int(charset.x * CHARSETS) * 2] : 0x01;
|
int start_char = charset_ctrl.x > 0. ? charsets[int(charset.x * CHARSETS) * 2] : 0x01;
|
||||||
int char_span = int((charset_ctrl.x > 0 ? charsets[int(charset.x * CHARSETS) * 2 + 1] : 255));
|
int char_span = int((charset_ctrl.x > 0. ? charsets[int(charset.x * CHARSETS) * 2 + 1] : 255));
|
||||||
char_span = int(char_span * max(1 - charset.y, 1 / (char_span * 0.75)));
|
char_span = int(char_span * max(1. - charset.y, 1. / (char_span * .75)));
|
||||||
ivec2 uv2i = ivec2(uv2);
|
ivec2 uv2i = ivec2(uv2);
|
||||||
int code = ((charset_ctrl.y < 1 || (uv2i.x % 2 ^ uv2i.y % 2) > 0) ? 1 : 0) * (start_char + int((rand(uv2i) + char_delta) * char_span) % char_span);
|
int code = ((charset_ctrl.y < 1. || (uv2i.x % 2 ^ uv2i.y % 2) > 0) ? 1 : 0) * (start_char + int((rand(uv2i) + char_delta) * char_span) % char_span);
|
||||||
uv2 = mod(uv2, 1);
|
uv2 = mod(uv2, 1.);
|
||||||
float f = char(uv2, code) ? 1 : 0;
|
float f = char(uv2, code) ? 1. : 0.;
|
||||||
|
|
||||||
return vec4(f);
|
return vec4(f);
|
||||||
}
|
}
|
||||||
|
|
||||||
// SRC 8 : sentences
|
// SRC 8 : sentences
|
||||||
|
|
||||||
subroutine ( src_stage_sub ) vec4 src_8(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)
|
subroutine(src_stage_sub) vec4 src_8(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)
|
||||||
{
|
{
|
||||||
// start
|
// start
|
||||||
|
|
||||||
vec2 uv0 = vUV.st;
|
vec2 uv0 = vUV.st;
|
||||||
float ratio = iResolution.x / iResolution.y;
|
float ratio = iResolution.x / iResolution.y;
|
||||||
vec2 uv1 = (uv0 - .5) * vec2(ratio, 1);
|
vec2 uv1 = (uv0 - .5) * vec2(ratio, 1.);
|
||||||
|
|
||||||
// controls
|
// controls
|
||||||
|
|
||||||
float zoom = magic(f1, b1, seed + 10);
|
float zoom = magic(f1, b1, seed + 10.);
|
||||||
float sentence = magic_reverse(f2, b2, seed + 20);
|
float sentence = magic_reverse(f2, b2, seed + 20.);
|
||||||
float h_delta = magic(f3, b3, seed + 30);
|
float h_delta = magic(f3, b3, seed + 30.);
|
||||||
vec3 h_delta_b = magic_b(b3, seed + 30);
|
vec3 h_delta_b = magic_b(b3, seed + 30.);
|
||||||
|
|
||||||
// logic
|
// logic
|
||||||
|
|
||||||
vec2 uv2 = uv1;
|
vec2 uv2 = uv1;
|
||||||
uv2 *= (1 + zoom) * 12;
|
uv2 *= (1. + zoom) * 12.;
|
||||||
uv2.y += 0.5;
|
uv2.y += .5;
|
||||||
int s = int(sentence * (SENTENCE_COUNT - 1));
|
int s = int(sentence * (SENTENCE_COUNT - 1));
|
||||||
uv2.x += floor(uv2.y) * (h_delta - 0.5) * 2;
|
uv2.x += floor(uv2.y) * (h_delta - .5) * 2.;
|
||||||
uv2.y = mix(uv2.y, mod(uv2.y, 1), h_delta_b.x);
|
uv2.y = mix(uv2.y, mod(uv2.y, 1.), h_delta_b.x);
|
||||||
float f = write_sentence(uv2, vec2(-float(lengths[s]) * 0.5, 0), s);
|
float f = write_sentence(uv2, vec2(-float(lengths[s]) * .5, 0.), s);
|
||||||
|
|
||||||
return vec4(f);
|
return vec4(f);
|
||||||
}
|
}
|
||||||
|
|
||||||
// SRC 9 : sentences repeat
|
// SRC 9 : sentences repeat
|
||||||
subroutine ( src_stage_sub ) vec4 src_9(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)
|
subroutine(src_stage_sub) vec4 src_9(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)
|
||||||
{
|
{
|
||||||
// start
|
// start
|
||||||
|
|
||||||
vec2 uv0 = vUV.st;
|
vec2 uv0 = vUV.st;
|
||||||
float ratio = iResolution.x / iResolution.y;
|
float ratio = iResolution.x / iResolution.y;
|
||||||
vec2 uv1 = (uv0 - .5) * vec2(ratio, 1);
|
vec2 uv1 = (uv0 - .5) * vec2(ratio, 1.);
|
||||||
|
|
||||||
// controls
|
// controls
|
||||||
|
|
||||||
float h_shift = magic(f1, b1, seed + 10);
|
float h_shift = magic(f1, b1, seed + 10.);
|
||||||
float sentence = magic_reverse(f2, b2, seed + 20);
|
float sentence = magic_reverse(f2, b2, seed + 20.);
|
||||||
float h_delta = magic(f3, b3, seed + 30);
|
float h_delta = magic(f3, b3, seed + 30.);
|
||||||
vec3 h_delta_b = magic_b(b3, seed + 30);
|
vec3 h_delta_b = magic_b(b3, seed + 30.);
|
||||||
|
|
||||||
// logic
|
// logic
|
||||||
|
|
||||||
vec2 uv2 = uv1;
|
vec2 uv2 = uv1;
|
||||||
uv2.x += h_shift;
|
uv2.x += h_shift;
|
||||||
uv2 *= 15;
|
uv2 *= 15.;
|
||||||
uv2.y += 0.5;
|
uv2.y += .5;
|
||||||
int s = int(sentence * (SENTENCE_COUNT - 1));
|
int s = int(sentence * (SENTENCE_COUNT - 1));
|
||||||
float slen = float(lengths[s]);
|
float slen = float(lengths[s]);
|
||||||
uv2.x += floor(uv2.y) * (h_delta - 0.5) * 2;
|
uv2.x += floor(uv2.y) * (h_delta - .5) * 2.;
|
||||||
uv2.x = cmod(uv2.x, slen + 1);
|
uv2.x = cmod(uv2.x, slen + 1.);
|
||||||
vec2 uv3 = uv2;
|
vec2 uv3 = uv2;
|
||||||
uv3.y = mix(uv3.y, mod(uv3.y, 1), h_delta_b.x);
|
uv3.y = mix(uv3.y, mod(uv3.y, 1.), h_delta_b.x);
|
||||||
float f = write_sentence(uv3, vec2(-slen * 0.5, 0), s);
|
float f = write_sentence(uv3, vec2(-slen * .5, 0.), s);
|
||||||
|
|
||||||
f *= (1 - abs(floor(uv2.y) * 0.125)) * (1 - abs(floor(uv2.y) * 0.125));
|
f *= (1. - abs(floor(uv2.y) * .125)) * (1. - abs(floor(uv2.y) * .125));
|
||||||
|
|
||||||
return vec4(f);
|
return vec4(f);
|
||||||
}
|
}
|
||||||
|
|
||||||
// SRC 10 : isometric grid
|
// SRC 10 : isometric grid
|
||||||
subroutine ( src_stage_sub ) vec4 src_10(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)
|
subroutine(src_stage_sub) vec4 src_10(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)
|
||||||
{
|
{
|
||||||
// start
|
// start
|
||||||
|
|
||||||
vec2 uv0 = vUV.st;
|
vec2 uv0 = vUV.st;
|
||||||
float ratio = iResolution.x / iResolution.y;
|
float ratio = iResolution.x / iResolution.y;
|
||||||
vec2 uv1 = (uv0 - .5) * vec2(ratio, 1);
|
vec2 uv1 = (uv0 - .5) * vec2(ratio, 1.);
|
||||||
|
|
||||||
// controls
|
// controls
|
||||||
|
|
||||||
float zoom = 5 + magic(f1, b1, seed + 10) * 15;
|
float zoom = 5. + magic(f1, b1, seed + 10.) * 15.;
|
||||||
float h_scroll = magic(f2, b2, seed + 20);
|
float h_scroll = magic(f2, b2, seed + 20.);
|
||||||
float max_elevation = magic(f3, b3, seed + 30) * 0.5;
|
float max_elevation = magic(f3, b3, seed + 30.) * .5;
|
||||||
float thick = 0.1;
|
float thick = .1;
|
||||||
|
|
||||||
// logic
|
// logic
|
||||||
|
|
||||||
@@ -423,38 +293,38 @@ subroutine ( src_stage_sub ) vec4 src_10(vec2 vUV, int seed, vec3 b1, vec2 f1, v
|
|||||||
|
|
||||||
vec2 uv3 = iso(uv2);
|
vec2 uv3 = iso(uv2);
|
||||||
|
|
||||||
uv3 += vec2(h_scroll, 0);
|
uv3 += vec2(h_scroll, 0.);
|
||||||
|
|
||||||
uv3 *= round(zoom);
|
uv3 *= round(zoom);
|
||||||
|
|
||||||
vec2 umax = vec2(round(zoom), 300);
|
vec2 umax = vec2(round(zoom), 300.);
|
||||||
|
|
||||||
vec2 u0 = mod(floor(uv3), umax);
|
vec2 u0 = mod(floor(uv3), umax);
|
||||||
vec2 u1 = mod(floor(uv3 + vec2(1, 0)), umax);
|
vec2 u1 = mod(floor(uv3 + vec2(1., 0.)), umax);
|
||||||
vec2 u2 = mod(floor(uv3 + vec2(0, 1)), umax);
|
vec2 u2 = mod(floor(uv3 + vec2(0., 1.)), umax);
|
||||||
vec2 u3 = mod(floor(uv3 + vec2(-1, 0)), umax);
|
vec2 u3 = mod(floor(uv3 + vec2(-1., 0.)), umax);
|
||||||
vec2 u4 = mod(floor(uv3 + vec2(0, -1)), umax);
|
vec2 u4 = mod(floor(uv3 + vec2(0., -1.)), umax);
|
||||||
|
|
||||||
float e0 = (rand(floor(u0)) * 2 - 1) * max_elevation;
|
float e0 = (rand(floor(u0)) * 2. - 1.) * max_elevation;
|
||||||
float e1 = (rand(floor(u1)) * 2 - 1) * max_elevation;
|
float e1 = (rand(floor(u1)) * 2. - 1.) * max_elevation;
|
||||||
float e2 = (rand(floor(u2)) * 2 - 1) * max_elevation;
|
float e2 = (rand(floor(u2)) * 2. - 1.) * max_elevation;
|
||||||
float e3 = (rand(floor(u3)) * 2 - 1) * max_elevation;
|
float e3 = (rand(floor(u3)) * 2. - 1.) * max_elevation;
|
||||||
float e4 = (rand(floor(u4)) * 2 - 1) * max_elevation;
|
float e4 = (rand(floor(u4)) * 2. - 1.) * max_elevation;
|
||||||
|
|
||||||
uv3 = mod(uv3, 1.0) - 0.5;
|
uv3 = mod(uv3, 1.) - .5;
|
||||||
|
|
||||||
float f = 0;
|
float f = 0.;
|
||||||
|
|
||||||
f = line(uv3, vec2(0, 0) - iso_z(e0), vec2(1, 0) - iso_z(e1), thick)
|
f = line(uv3, vec2(0., 0.) - iso_z(e0), vec2(1., 0.) - iso_z(e1), thick)
|
||||||
+ line(uv3, vec2(0, 0) - iso_z(e0), vec2(0, 1) - iso_z(e2), thick)
|
+ line(uv3, vec2(0., 0.) - iso_z(e0), vec2(0., 1.) - iso_z(e2), thick)
|
||||||
+ line(uv3, vec2(0, 0) - iso_z(e0), vec2(-1, 0) - iso_z(e3), thick)
|
+ line(uv3, vec2(0., 0.) - iso_z(e0), vec2(-1., 0.) - iso_z(e3), thick)
|
||||||
+ line(uv3, vec2(0, 0) - iso_z(e0), vec2(0, -1) - iso_z(e4), thick);
|
+ line(uv3, vec2(0., 0.) - iso_z(e0), vec2(0., -1.) - iso_z(e4), thick);
|
||||||
|
|
||||||
return vec4(f);
|
return vec4(f);
|
||||||
}
|
}
|
||||||
|
|
||||||
// SRC 11 : video in 2 + thru
|
// SRC 11 : video in 2 + thru
|
||||||
subroutine ( src_stage_sub ) vec4 src_11(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)
|
subroutine(src_stage_sub) vec4 src_11(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)
|
||||||
{
|
{
|
||||||
if (iDemo > 0) {
|
if (iDemo > 0) {
|
||||||
return src_3(vUV, seed, b1, f1, b2, f2, b3, f3);
|
return src_3(vUV, seed, b1, f1, b2, f2, b3, f3);
|
||||||
@@ -464,62 +334,62 @@ subroutine ( src_stage_sub ) vec4 src_11(vec2 vUV, int seed, vec3 b1, vec2 f1, v
|
|||||||
}
|
}
|
||||||
|
|
||||||
// SRC 12 : Scales
|
// SRC 12 : Scales
|
||||||
subroutine ( src_stage_sub ) vec4 src_12(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)
|
subroutine(src_stage_sub) vec4 src_12(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)
|
||||||
{
|
{
|
||||||
// start
|
// start
|
||||||
|
|
||||||
vec2 uv0 = vUV.st;
|
vec2 uv0 = vUV.st;
|
||||||
float ratio = iResolution.x / iResolution.y;
|
float ratio = iResolution.x / iResolution.y;
|
||||||
vec2 uv1 = (uv0 - .5) * vec2(ratio, 1);
|
vec2 uv1 = (uv0 - .5) * vec2(ratio, 1.);
|
||||||
|
|
||||||
// controls
|
// controls
|
||||||
|
|
||||||
float zoom = 5 + magic(f1, b1, seed + 10) * 15;
|
float zoom = 5. + magic(f1, b1, seed + 10.) * 15.;
|
||||||
float shape = magic(f2, b2, seed + 20);
|
float shape = magic(f2, b2, seed + 20.);
|
||||||
float repeat = 1 + magic(f3, b3, seed + 30) * 10;
|
float repeat = 1. + magic(f3, b3, seed + 30.) * 10.;
|
||||||
|
|
||||||
// logic
|
// logic
|
||||||
|
|
||||||
float f = 0;
|
float f = 0.;
|
||||||
|
|
||||||
vec2 uv2 = uv1;
|
vec2 uv2 = uv1;
|
||||||
|
|
||||||
uv2 *= zoom;
|
uv2 *= zoom;
|
||||||
|
|
||||||
uv2 = mod(uv2, 4);
|
uv2 = mod(uv2, 4.);
|
||||||
|
|
||||||
vec2 uv3 = uv2;
|
vec2 uv3 = uv2;
|
||||||
|
|
||||||
uv3.y = mix(uv3.y, -uv3.y, step(2, uv2.x) * step(2, uv2.y));
|
uv3.y = mix(uv3.y, -uv3.y, step(2., uv2.x) * step(2., uv2.y));
|
||||||
uv3.y = mix(uv3.y, -uv3.y, istep(2, uv2.x) * istep(2, uv2.y));
|
uv3.y = mix(uv3.y, -uv3.y, istep(2., uv2.x) * istep(2., uv2.y));
|
||||||
|
|
||||||
uv3.y = -uv3.y;
|
uv3.y = -uv3.y;
|
||||||
|
|
||||||
uv3.x = mix(-uv3.x, uv3.x, istep(3, uv2.x) * step(1, uv2.x));
|
uv3.x = mix(-uv3.x, uv3.x, istep(3., uv2.x) * step(1., uv2.x));
|
||||||
uv3.x = mix(-uv3.x, uv3.x, istep(3, uv2.y) * step(1, uv2.y));
|
uv3.x = mix(-uv3.x, uv3.x, istep(3., uv2.y) * step(1., uv2.y));
|
||||||
|
|
||||||
f = istep(0.5, saw((length(mod(uv3, 1)) + shape + 0.5) * repeat));
|
f = istep(.5, saw((length(mod(uv3, 1.)) + shape + .5) * repeat));
|
||||||
|
|
||||||
f = mix(1 - f, f, istep(1, abs(uv2.y - 2)) * istep(2, uv2.x));
|
f = mix(1. - f, f, istep(1., abs(uv2.y - 2.)) * istep(2., uv2.x));
|
||||||
f = mix(1 - f, f, step(1, abs(uv2.y - 2)) * step(2, uv2.x));
|
f = mix(1. - f, f, step(1., abs(uv2.y - 2.)) * step(2., uv2.x));
|
||||||
|
|
||||||
return vec4(f);
|
return vec4(f);
|
||||||
}
|
}
|
||||||
|
|
||||||
// SRC 13 : Credenza
|
// SRC 13 : Credenza
|
||||||
subroutine ( src_stage_sub ) vec4 src_13(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)
|
subroutine(src_stage_sub) vec4 src_13(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)
|
||||||
{
|
{
|
||||||
// start
|
// start
|
||||||
|
|
||||||
vec2 uv0 = vUV.st;
|
vec2 uv0 = vUV.st;
|
||||||
float ratio = iResolution.x / iResolution.y;
|
float ratio = iResolution.x / iResolution.y;
|
||||||
vec2 uv1 = (uv0 - .5) * vec2(ratio, 1);
|
vec2 uv1 = (uv0 - .5) * vec2(ratio, 1.);
|
||||||
|
|
||||||
// controls
|
// controls
|
||||||
|
|
||||||
float zoom = 5 + magic(f1, b1, seed + 10) * 15;
|
float zoom = 5. + magic(f1, b1, seed + 10.) * 15.;
|
||||||
float shape = 0.1 + magic(f2, b2, seed + 20) * 0.9;
|
float shape = .1 + magic(f2, b2, seed + 20.) * .9;
|
||||||
float repeat = 1 + magic(f3, b3, seed + 30) * 10;
|
float repeat = 1. + magic(f3, b3, seed + 30.) * 10.;
|
||||||
|
|
||||||
// logic
|
// logic
|
||||||
|
|
||||||
@@ -527,33 +397,33 @@ subroutine ( src_stage_sub ) vec4 src_13(vec2 vUV, int seed, vec3 b1, vec2 f1, v
|
|||||||
|
|
||||||
uv2 *= zoom;
|
uv2 *= zoom;
|
||||||
|
|
||||||
uv2 = mod(uv2, 2);
|
uv2 = mod(uv2, 2.);
|
||||||
|
|
||||||
uv2 = abs(uv2 - 1);
|
uv2 = abs(uv2 - 1.);
|
||||||
|
|
||||||
float f = istep(1, length(uv2)) * istep(1, length(1 - uv2));
|
float f = istep(1., length(uv2)) * istep(1., length(1. - uv2));
|
||||||
|
|
||||||
f *= istep(0.5, saw((length(uv2) + shape + 0.5) * repeat)) * istep(0.5, saw((length(1 - uv2) + shape + 0.5) * repeat));
|
f *= istep(.5, saw((length(uv2) + shape + .5) * repeat)) * istep(.5, saw((length(1. - uv2) + shape + .5) * repeat));
|
||||||
|
|
||||||
return vec4(f);
|
return vec4(f);
|
||||||
}
|
}
|
||||||
|
|
||||||
// SRC 14 : Cursor
|
// SRC 14 : Cursor
|
||||||
subroutine ( src_stage_sub ) vec4 src_14(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)
|
subroutine(src_stage_sub) vec4 src_14(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)
|
||||||
{
|
{
|
||||||
// start
|
// start
|
||||||
|
|
||||||
vec2 uv0 = vUV.st;
|
vec2 uv0 = vUV.st;
|
||||||
float ratio = iResolution.x / iResolution.y;
|
float ratio = iResolution.x / iResolution.y;
|
||||||
vec2 uv1 = (uv0 - .5) * vec2(ratio, 1);
|
vec2 uv1 = (uv0 - .5) * vec2(ratio, 1.);
|
||||||
|
|
||||||
// controls
|
// controls
|
||||||
|
|
||||||
float size = magic(f1, b1, seed + 10) * 2 + 0.1;
|
float size = magic(f1, b1, seed + 10.) * 2. + .1;
|
||||||
float dx = (fmagic(f2, b2, seed + 20) * (1 - size * 0.06) - 0.5) * ratio;
|
float dx = (fmagic(f2, b2, seed + 20.) * (1. - size * .06) - .5) * ratio;
|
||||||
bool flip_x = magic_trigger(b2, seed + 20);
|
bool flip_x = magic_trigger(b2, seed + 20.);
|
||||||
float dy = fmagic(f3, b3, seed + 30) * (1 - size * 0.17) - 0.5;
|
float dy = fmagic(f3, b3, seed + 30.) * (1. - size * .17) - .5;
|
||||||
bool flip_y = magic_trigger(b3, seed + 30);
|
bool flip_y = magic_trigger(b3, seed + 30.);
|
||||||
|
|
||||||
// logic
|
// logic
|
||||||
|
|
||||||
@@ -571,49 +441,49 @@ subroutine ( src_stage_sub ) vec4 src_14(vec2 vUV, int seed, vec3 b1, vec2 f1, v
|
|||||||
|
|
||||||
uv2 /= size;
|
uv2 /= size;
|
||||||
|
|
||||||
uv2 *= -rot(-PI / 2);
|
uv2 *= -rot(-PI * 0.5);
|
||||||
|
|
||||||
float f = istep(0, (uv2.x * 2 + uv2.y) * (uv2.x * 2 - uv2.y)) * istep(0, uv2.y);
|
float f = istep(0., (uv2.x * 2. + uv2.y) * (uv2.x * 2. - uv2.y)) * istep(0., uv2.y);
|
||||||
|
|
||||||
uv2.y += 0.1;
|
uv2.y += .1;
|
||||||
|
|
||||||
f -= istep(0, (uv2.x + uv2.y * 3) * (uv2.x - uv2.y * 3)) * istep(0, uv2.y);
|
f -= istep(0., (uv2.x + uv2.y * 3.) * (uv2.x - uv2.y * 3.)) * istep(0., uv2.y);
|
||||||
|
|
||||||
f += rect(uv2, vec2(0, -0.04), vec2(0.01, 0.04));
|
f += rect(uv2, vec2(0., -.04), vec2(.01, .04));
|
||||||
|
|
||||||
return vec4(f);
|
return vec4(f);
|
||||||
}
|
}
|
||||||
|
|
||||||
// SRC 15 : Random
|
// SRC 15 : Random
|
||||||
subroutine ( src_stage_sub ) vec4 src_15(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)
|
subroutine(src_stage_sub) vec4 src_15(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)
|
||||||
{
|
{
|
||||||
int src = int(randTime(seed + 100) * 14);
|
int src = int(randTime(seed + 100.) * 14.) + 1;
|
||||||
|
|
||||||
if (src == 0) {
|
if (src == 1) {
|
||||||
return src_1(vUV, seed, b1, f1, b2, f2, b3, f3);
|
return src_1(vUV, seed, b1, f1, b2, f2, b3, f3);
|
||||||
} else if (src == 1) {
|
|
||||||
return src_2(vUV, seed, b1, f1, b2, f2, b3, f3);
|
|
||||||
} else if (src == 2) {
|
} else if (src == 2) {
|
||||||
return src_3(vUV, seed, b1, f1, b2, f2, b3, f3);
|
return src_2(vUV, seed, b1, f1, b2, f2, b3, f3);
|
||||||
} else if (src == 3) {
|
} else if (src == 3) {
|
||||||
return src_4(vUV, seed, b1, f1, b2, f2, b3, f3);
|
return src_3(vUV, seed, b1, f1, b2, f2, b3, f3);
|
||||||
} else if (src == 4) {
|
} else if (src == 4) {
|
||||||
return src_5(vUV, seed, b1, f1, b2, f2, b3, f3);
|
return src_4(vUV, seed, b1, f1, b2, f2, b3, f3);
|
||||||
} else if (src == 5) {
|
} else if (src == 5) {
|
||||||
return src_6(vUV, seed, b1, f1, b2, f2, b3, f3);
|
return src_5(vUV, seed, b1, f1, b2, f2, b3, f3);
|
||||||
} else if (src == 6) {
|
} else if (src == 6) {
|
||||||
return src_7(vUV, seed, b1, f1, b2, f2, b3, f3);
|
return src_6(vUV, seed, b1, f1, b2, f2, b3, f3);
|
||||||
} else if (src == 7) {
|
} else if (src == 7) {
|
||||||
return src_8(vUV, seed, b1, f1, b2, f2, b3, f3);
|
return src_7(vUV, seed, b1, f1, b2, f2, b3, f3);
|
||||||
} else if (src == 8) {
|
} else if (src == 8) {
|
||||||
return src_9(vUV, seed, b1, f1, b2, f2, b3, f3);
|
return src_8(vUV, seed, b1, f1, b2, f2, b3, f3);
|
||||||
} else if (src == 9) {
|
} else if (src == 9) {
|
||||||
return src_10(vUV, seed, b1, f1, b2, f2, b3, f3);
|
return src_9(vUV, seed, b1, f1, b2, f2, b3, f3);
|
||||||
} else if (src == 10) {
|
} else if (src == 10) {
|
||||||
return src_11(vUV, seed, b1, f1, b2, f2, b3, f3);
|
return src_10(vUV, seed, b1, f1, b2, f2, b3, f3);
|
||||||
} else if (src == 11) {
|
} else if (src == 11) {
|
||||||
return src_12(vUV, seed, b1, f1, b2, f2, b3, f3);
|
return src_11(vUV, seed, b1, f1, b2, f2, b3, f3);
|
||||||
} else if (src == 12) {
|
} else if (src == 12) {
|
||||||
|
return src_12(vUV, seed, b1, f1, b2, f2, b3, f3);
|
||||||
|
} else if (src == 13) {
|
||||||
return src_13(vUV, seed, b1, f1, b2, f2, b3, f3);
|
return src_13(vUV, seed, b1, f1, b2, f2, b3, f3);
|
||||||
} else {
|
} else {
|
||||||
return src_14(vUV, seed, b1, f1, b2, f2, b3, f3);
|
return src_14(vUV, seed, b1, f1, b2, f2, b3, f3);
|
||||||
|
|||||||
@@ -49,6 +49,7 @@ static void print_help(int status_code) {
|
|||||||
"[--wayland] "
|
"[--wayland] "
|
||||||
"[--cocoa] "
|
"[--cocoa] "
|
||||||
"[--win32] "
|
"[--win32] "
|
||||||
|
"[-as / -nas] "
|
||||||
"[-oma=MAJOR] "
|
"[-oma=MAJOR] "
|
||||||
"[-omi=MINOR] "
|
"[-omi=MINOR] "
|
||||||
"\n\n"
|
"\n\n"
|
||||||
@@ -87,6 +88,8 @@ static void print_help(int status_code) {
|
|||||||
" -nls, --no-load-state do not load saved state\n"
|
" -nls, --no-load-state do not load saved state\n"
|
||||||
" -ss, --save-state save state (default)\n"
|
" -ss, --save-state save state (default)\n"
|
||||||
" -nss, --no-save-state do not save state\n"
|
" -nss, --no-save-state do not save state\n"
|
||||||
|
" -as, --auto-save continuously save state (every ~10ms)\n"
|
||||||
|
" -nas, --no-auto-save do not continuously save state (default)\n"
|
||||||
" -mr, --midi-reconnect auto-reconnect midi (default)\n"
|
" -mr, --midi-reconnect auto-reconnect midi (default)\n"
|
||||||
" -nmr, --no-midi-reconnect do not auto-reconnect midi\n"
|
" -nmr, --no-midi-reconnect do not auto-reconnect midi\n"
|
||||||
" -tm, --trace-midi print midi code and values\n"
|
" -tm, --trace-midi print midi code and values\n"
|
||||||
@@ -168,6 +171,7 @@ void args_parse(Parameters *params, int argc, char **argv) {
|
|||||||
params->internal_size = 720;
|
params->internal_size = 720;
|
||||||
params->load_state = true;
|
params->load_state = true;
|
||||||
params->save_state = true;
|
params->save_state = true;
|
||||||
|
params->auto_save = false;
|
||||||
params->midi_reconnect = true;
|
params->midi_reconnect = true;
|
||||||
params->trace_midi = false;
|
params->trace_midi = false;
|
||||||
params->trace_fps = false;
|
params->trace_fps = false;
|
||||||
@@ -234,6 +238,10 @@ void args_parse(Parameters *params, int argc, char **argv) {
|
|||||||
params->save_state = true;
|
params->save_state = true;
|
||||||
} else if (is_arg(arg, "-nss") || is_arg(arg, "--no-save-state")) {
|
} else if (is_arg(arg, "-nss") || is_arg(arg, "--no-save-state")) {
|
||||||
params->save_state = false;
|
params->save_state = false;
|
||||||
|
} else if (is_arg(arg, "-as") || is_arg(arg, "--auto-save")) {
|
||||||
|
params->auto_save = true;
|
||||||
|
} else if (is_arg(arg, "-nas") || is_arg(arg, "--no-auto-save")) {
|
||||||
|
params->auto_save = false;
|
||||||
} else if (is_arg(arg, "-mr") || is_arg(arg, "--midi-reconnect")) {
|
} else if (is_arg(arg, "-mr") || is_arg(arg, "--midi-reconnect")) {
|
||||||
params->midi_reconnect = true;
|
params->midi_reconnect = true;
|
||||||
} else if (is_arg(arg, "-nmr") || is_arg(arg, "--no-midi-reconnect")) {
|
} else if (is_arg(arg, "-nmr") || is_arg(arg, "--no-midi-reconnect")) {
|
||||||
|
|||||||
@@ -87,6 +87,12 @@
|
|||||||
#define MAX_TAP_VALUES 10
|
#define MAX_TAP_VALUES 10
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* STATE */
|
||||||
|
|
||||||
|
#ifndef STATE_AUTO_SAVE_SECONDS
|
||||||
|
#define STATE_AUTO_SAVE_SECONDS 0.1
|
||||||
|
#endif
|
||||||
|
|
||||||
/* OPENGL */
|
/* OPENGL */
|
||||||
|
|
||||||
#ifndef OPENGL_MAJOR_VERSION
|
#ifndef OPENGL_MAJOR_VERSION
|
||||||
@@ -98,6 +104,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* GLFW CONSTANTS */
|
/* GLFW CONSTANTS */
|
||||||
|
|
||||||
#ifndef GLFW_BACKENDS
|
#ifndef GLFW_BACKENDS
|
||||||
#define GLFW_BACKEND_ANY 0
|
#define GLFW_BACKEND_ANY 0
|
||||||
#define GLFW_BACKEND_X11 1
|
#define GLFW_BACKEND_X11 1
|
||||||
|
|||||||
+3
-1
@@ -109,10 +109,12 @@ void file_dump(const char *path, const char *content) {
|
|||||||
fclose(file_pointer);
|
fclose(file_pointer);
|
||||||
}
|
}
|
||||||
|
|
||||||
void file_write(const char *path, const StringArray *lines) {
|
void file_write(const char *path, const StringArray *lines, const bool log) {
|
||||||
FILE *file_pointer;
|
FILE *file_pointer;
|
||||||
|
|
||||||
|
if (log) {
|
||||||
log_info("Writing %s...", path);
|
log_info("Writing %s...", path);
|
||||||
|
}
|
||||||
|
|
||||||
// open file
|
// open file
|
||||||
file_pointer = fopen(path, "w");
|
file_pointer = fopen(path, "w");
|
||||||
|
|||||||
+1
-1
@@ -9,7 +9,7 @@ bool file_should_update(const File *file);
|
|||||||
|
|
||||||
bool file_update(File *file);
|
bool file_update(File *file);
|
||||||
|
|
||||||
void file_write(const char *path, const StringArray *lines);
|
void file_write(const char *path, const StringArray *lines, const bool log);
|
||||||
|
|
||||||
void file_dump(const char *path, const char *content);
|
void file_dump(const char *path, const char *content);
|
||||||
|
|
||||||
|
|||||||
@@ -207,6 +207,7 @@ static void start_state_background_write() {
|
|||||||
process_args->context = &context;
|
process_args->context = &context;
|
||||||
process_args->state_config = project.state_config;
|
process_args->state_config = project.state_config;
|
||||||
process_args->midi = &midi;
|
process_args->midi = &midi;
|
||||||
|
process_args->auto_save = init_params.auto_save;
|
||||||
if (pthread_create(&thread, NULL, state_background_write, process_args) ==
|
if (pthread_create(&thread, NULL, state_background_write, process_args) ==
|
||||||
0) {
|
0) {
|
||||||
pthread_detach(thread);
|
pthread_detach(thread);
|
||||||
|
|||||||
+51
-6
@@ -12,6 +12,7 @@
|
|||||||
#include "rand.h"
|
#include "rand.h"
|
||||||
#include "state.h"
|
#include "state.h"
|
||||||
#include "tempo.h"
|
#include "tempo.h"
|
||||||
|
#include "timer.h"
|
||||||
|
|
||||||
static void safe_midi_write(MidiDevice midi, unsigned int code,
|
static void safe_midi_write(MidiDevice midi, unsigned int code,
|
||||||
unsigned char value) {
|
unsigned char value) {
|
||||||
@@ -179,13 +180,44 @@ static void load_from_index_file(Context *context, StateConfig state_config,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void save_to_file(const Context *context, StateConfig state_config,
|
static void save_to_file(const Context *context, StateConfig state_config,
|
||||||
const char *state_file) {
|
const char *state_file, const bool log) {
|
||||||
StringArray lines;
|
StringArray lines;
|
||||||
|
|
||||||
|
if (log) {
|
||||||
log_info("Saving state to '%s'...", state_file);
|
log_info("Saving state to '%s'...", state_file);
|
||||||
|
}
|
||||||
|
|
||||||
lines.length = 0;
|
lines.length = 0;
|
||||||
|
|
||||||
|
snprintf(lines.values[lines.length++], STR_LEN, "time=%f", context->time);
|
||||||
|
if (lines.length > ARRAY_SIZE) {
|
||||||
|
log_error("Too many values to save");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
snprintf(lines.values[lines.length++], STR_LEN, "beats=%f",
|
||||||
|
context->tempo_total);
|
||||||
|
if (lines.length > ARRAY_SIZE) {
|
||||||
|
log_error("Too many values to save");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
snprintf(lines.values[lines.length++], STR_LEN, "demo=%d",
|
||||||
|
context->demo ? 1 : 0);
|
||||||
|
if (lines.length > ARRAY_SIZE) {
|
||||||
|
log_error("Too many values to save");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
snprintf(lines.values[lines.length++], STR_LEN, "auto_random=%d",
|
||||||
|
context->auto_random ? 1 : 0);
|
||||||
|
if (lines.length > ARRAY_SIZE) {
|
||||||
|
log_error("Too many values to save");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
snprintf(lines.values[lines.length++], STR_LEN, "auto_random_cycle=%d",
|
||||||
|
context->auto_random_cycle);
|
||||||
|
if (lines.length > ARRAY_SIZE) {
|
||||||
|
log_error("Too many values to save");
|
||||||
|
return;
|
||||||
|
}
|
||||||
snprintf(lines.values[lines.length++], STR_LEN, "tempo=%d",
|
snprintf(lines.values[lines.length++], STR_LEN, "tempo=%d",
|
||||||
(unsigned int)context->tempo.tempo);
|
(unsigned int)context->tempo.tempo);
|
||||||
if (lines.length > ARRAY_SIZE) {
|
if (lines.length > ARRAY_SIZE) {
|
||||||
@@ -249,16 +281,16 @@ static void save_to_file(const Context *context, StateConfig state_config,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
file_write(state_file, &lines);
|
file_write(state_file, &lines, log);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void save_to_default_file(const Context *context,
|
static void save_to_default_file(const Context *context,
|
||||||
StateConfig state_config) {
|
StateConfig state_config, const bool log) {
|
||||||
char state_file[STR_LEN];
|
char state_file[STR_LEN];
|
||||||
|
|
||||||
snprintf(state_file, STR_LEN, "%s.txt", state_config.save_file_prefix);
|
snprintf(state_file, STR_LEN, "%s.txt", state_config.save_file_prefix);
|
||||||
|
|
||||||
save_to_file(context, state_config, state_file);
|
save_to_file(context, state_config, state_file, log);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void save_to_index_file(const Context *context, StateConfig state_config,
|
static void save_to_index_file(const Context *context, StateConfig state_config,
|
||||||
@@ -268,7 +300,7 @@ static void save_to_index_file(const Context *context, StateConfig state_config,
|
|||||||
snprintf(state_file, STR_LEN, "%s.%d.txt", state_config.save_file_prefix,
|
snprintf(state_file, STR_LEN, "%s.%d.txt", state_config.save_file_prefix,
|
||||||
index);
|
index);
|
||||||
|
|
||||||
save_to_file(context, state_config, state_file);
|
save_to_file(context, state_config, state_file, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void state_parse_config(StateConfig *state_config, const ConfigFile *config) {
|
void state_parse_config(StateConfig *state_config, const ConfigFile *config) {
|
||||||
@@ -727,16 +759,20 @@ void *state_background_write(void *args) {
|
|||||||
Context *context = process_args->context;
|
Context *context = process_args->context;
|
||||||
StateConfig state_config = process_args->state_config;
|
StateConfig state_config = process_args->state_config;
|
||||||
MidiDevice *midi = process_args->midi;
|
MidiDevice *midi = process_args->midi;
|
||||||
|
bool auto_save = process_args->auto_save;
|
||||||
|
|
||||||
bool beat_active;
|
bool beat_active;
|
||||||
bool last_active;
|
bool last_active;
|
||||||
bool change;
|
bool change;
|
||||||
bool last_change;
|
bool last_change;
|
||||||
|
bool do_auto_save;
|
||||||
|
bool last_auto_save;
|
||||||
|
|
||||||
log_info("(state) background writing started");
|
log_info("(state) background writing started");
|
||||||
|
|
||||||
last_active = false;
|
last_active = false;
|
||||||
last_change = false;
|
last_change = false;
|
||||||
|
last_auto_save = false;
|
||||||
|
|
||||||
while (!context->stop) {
|
while (!context->stop) {
|
||||||
beat_active = tempo_progress(&context->tempo, 1.0) < 0.5;
|
beat_active = tempo_progress(&context->tempo, 1.0) < 0.5;
|
||||||
@@ -762,6 +798,15 @@ void *state_background_write(void *args) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
last_change = change;
|
last_change = change;
|
||||||
|
|
||||||
|
do_auto_save = fmod(context->time, STATE_AUTO_SAVE_SECONDS) <
|
||||||
|
STATE_AUTO_SAVE_SECONDS * 0.5;
|
||||||
|
|
||||||
|
if (auto_save && do_auto_save && !last_auto_save) {
|
||||||
|
save_to_default_file(context, state_config, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
last_auto_save = do_auto_save;
|
||||||
}
|
}
|
||||||
|
|
||||||
log_info("(state) background writing stopped by main thread");
|
log_info("(state) background writing stopped by main thread");
|
||||||
@@ -802,5 +847,5 @@ void state_init(Context *context, StateConfig state_config, bool demo,
|
|||||||
}
|
}
|
||||||
|
|
||||||
void state_save(const Context *context, StateConfig state_config) {
|
void state_save(const Context *context, StateConfig state_config) {
|
||||||
save_to_default_file(context, state_config);
|
save_to_default_file(context, state_config, true);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -55,6 +55,7 @@ typedef struct Parameters {
|
|||||||
unsigned int internal_size;
|
unsigned int internal_size;
|
||||||
bool load_state;
|
bool load_state;
|
||||||
bool save_state;
|
bool save_state;
|
||||||
|
bool auto_save;
|
||||||
bool midi_reconnect;
|
bool midi_reconnect;
|
||||||
bool trace_midi;
|
bool trace_midi;
|
||||||
bool trace_fps;
|
bool trace_fps;
|
||||||
@@ -279,6 +280,7 @@ typedef struct StateBackgroundWriteArgs {
|
|||||||
Context *context;
|
Context *context;
|
||||||
StateConfig state_config;
|
StateConfig state_config;
|
||||||
MidiDevice *midi;
|
MidiDevice *midi;
|
||||||
|
bool auto_save;
|
||||||
} StateBackgroundWriteArgs;
|
} StateBackgroundWriteArgs;
|
||||||
|
|
||||||
// timer.c
|
// timer.c
|
||||||
|
|||||||
Reference in New Issue
Block a user