wip
This commit is contained in:
+1
-1
Submodule forge-steel updated: 3a228122cf...6110e1df7f
@@ -68,21 +68,6 @@ UNIFORM_GROUP_PREFIX=iGroup
|
|||||||
# Internal texture X
|
# Internal texture X
|
||||||
UNIFORM_TEX_PREFIX=iTex
|
UNIFORM_TEX_PREFIX=iTex
|
||||||
|
|
||||||
# === SUBROUTINES ===
|
|
||||||
# GLSL subroutines prefixes
|
|
||||||
# You can then use them as:
|
|
||||||
# subroutine(<definition>) <type> <prefix><number>(<args>) {}
|
|
||||||
# (see: https://wikis.khronos.org/opengl/Shader_Subroutine)
|
|
||||||
# Numbers go from 1 to SELECT_PAGE_COUNT * SELECT_ITEM_COUNT
|
|
||||||
# Each fragment shader is injected its current state subroutine
|
|
||||||
|
|
||||||
# Total subroutine variants
|
|
||||||
SUB_TYPE_COUNT=2
|
|
||||||
# Each subroutine variant prefix
|
|
||||||
SUB_1_PREFIX=src_
|
|
||||||
SUB_2_PREFIX=fx_
|
|
||||||
|
|
||||||
|
|
||||||
# ===========
|
# ===========
|
||||||
# TEXTURE I/O
|
# TEXTURE I/O
|
||||||
# ===========
|
# ===========
|
||||||
@@ -159,11 +144,11 @@ TAP_TEMPO=46
|
|||||||
# You can manipulate which subroutine is sent to which fragment shader
|
# You can manipulate which subroutine is sent to which fragment shader
|
||||||
|
|
||||||
# Midi codes to select fragment X
|
# Midi codes to select fragment X
|
||||||
SELECT_FRAG_3=32
|
SELECT_FRAG_1=32
|
||||||
SELECT_FRAG_4=64
|
SELECT_FRAG_2=64
|
||||||
SELECT_FRAG_5=36
|
SELECT_FRAG_3=36
|
||||||
SELECT_FRAG_6=68
|
SELECT_FRAG_4=68
|
||||||
SELECT_FRAG_8=52
|
SELECT_FRAG_6=52
|
||||||
# Total number of pages (can be 1)
|
# Total number of pages (can be 1)
|
||||||
SELECT_PAGE_COUNT=3
|
SELECT_PAGE_COUNT=3
|
||||||
# Midi codes to select page X
|
# Midi codes to select page X
|
||||||
|
|||||||
+3
-5
@@ -1,5 +1,4 @@
|
|||||||
|
#version 330
|
||||||
#version 460
|
|
||||||
|
|
||||||
// SRC A
|
// SRC A
|
||||||
// -----------
|
// -----------
|
||||||
@@ -10,11 +9,10 @@ out vec4 fragColor;
|
|||||||
|
|
||||||
#include inc_src.glsl
|
#include inc_src.glsl
|
||||||
|
|
||||||
subroutine uniform src_stage_sub src_stage;
|
|
||||||
|
|
||||||
uniform int iSeed1;
|
uniform int iSeed1;
|
||||||
|
uniform int iState1;
|
||||||
uniform vec3 iGroup1_1[6];
|
uniform vec3 iGroup1_1[6];
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
fragColor = src_stage(vUV, iSeed1, iGroup1_1[0], iGroup1_1[1].xy, iGroup1_1[2], iGroup1_1[3].xy, iGroup1_1[4], iGroup1_1[5].xy);
|
fragColor = src_stage(iState1, vUV, iSeed1, iGroup1_1[0], iGroup1_1[1].xy, iGroup1_1[2], iGroup1_1[3].xy, iGroup1_1[4], iGroup1_1[5].xy);
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-4
@@ -1,4 +1,4 @@
|
|||||||
#version 460
|
#version 330
|
||||||
|
|
||||||
// SRC B
|
// SRC B
|
||||||
// -----------
|
// -----------
|
||||||
@@ -9,11 +9,10 @@ out vec4 fragColor;
|
|||||||
|
|
||||||
#include inc_src.glsl
|
#include inc_src.glsl
|
||||||
|
|
||||||
subroutine uniform src_stage_sub src_stage;
|
|
||||||
|
|
||||||
uniform int iSeed2;
|
uniform int iSeed2;
|
||||||
|
uniform int iState2;
|
||||||
uniform vec3 iGroup1_2[6];
|
uniform vec3 iGroup1_2[6];
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
fragColor = src_stage(vUV, iSeed2, iGroup1_2[0], iGroup1_2[1].xy, iGroup1_2[2], iGroup1_2[3].xy, iGroup1_2[4], iGroup1_2[5].xy);
|
fragColor = src_stage(iState2, vUV, iSeed2, iGroup1_2[0], iGroup1_2[1].xy, iGroup1_2[2], iGroup1_2[3].xy, iGroup1_2[4], iGroup1_2[5].xy);
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-2
@@ -1,4 +1,4 @@
|
|||||||
#version 460
|
#version 330
|
||||||
|
|
||||||
// FX A
|
// FX A
|
||||||
// -------------
|
// -------------
|
||||||
@@ -14,8 +14,9 @@ out vec4 fragColor;
|
|||||||
uniform sampler2D iTex1;
|
uniform sampler2D iTex1;
|
||||||
uniform sampler2D iTex3;
|
uniform sampler2D iTex3;
|
||||||
uniform int iSeed3;
|
uniform int iSeed3;
|
||||||
|
uniform int iState3;
|
||||||
uniform vec3 iGroup2_1[7];
|
uniform vec3 iGroup2_1[7];
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
fragColor = fx_stage(vUV, iTex1, iTex3, iSeed3, iGroup2_1[0], iGroup2_1[1].xy, iGroup2_1[2], iGroup2_1[3].xy, iGroup2_1[4], iGroup2_1[5].xy, iGroup2_1[6]);
|
fragColor = fx_stage(iState3, vUV, iTex1, iTex3, iSeed3, iGroup2_1[0], iGroup2_1[1].xy, iGroup2_1[2], iGroup2_1[3].xy, iGroup2_1[4], iGroup2_1[5].xy, iGroup2_1[6]);
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-2
@@ -1,4 +1,4 @@
|
|||||||
#version 460
|
#version 330
|
||||||
|
|
||||||
// FX B
|
// FX B
|
||||||
// -------------
|
// -------------
|
||||||
@@ -14,8 +14,9 @@ out vec4 fragColor;
|
|||||||
uniform sampler2D iTex2;
|
uniform sampler2D iTex2;
|
||||||
uniform sampler2D iTex4;
|
uniform sampler2D iTex4;
|
||||||
uniform int iSeed4;
|
uniform int iSeed4;
|
||||||
|
uniform int iState4;
|
||||||
uniform vec3 iGroup2_2[7];
|
uniform vec3 iGroup2_2[7];
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
fragColor = fx_stage(vUV, iTex2, iTex4, iSeed4, iGroup2_2[0], iGroup2_2[1].xy, iGroup2_2[2], iGroup2_2[3].xy, iGroup2_2[4], iGroup2_2[5].xy, iGroup2_2[6]);
|
fragColor = fx_stage(iState4, vUV, iTex2, iTex4, iSeed4, iGroup2_2[0], iGroup2_2[1].xy, iGroup2_2[2], iGroup2_2[3].xy, iGroup2_2[4], iGroup2_2[5].xy, iGroup2_2[6]);
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -1,4 +1,4 @@
|
|||||||
#version 460
|
#version 330
|
||||||
|
|
||||||
// A+B
|
// A+B
|
||||||
// ------------
|
// ------------
|
||||||
@@ -27,7 +27,7 @@ void main() {
|
|||||||
|
|
||||||
float k = mean(color_a);
|
float k = mean(color_a);
|
||||||
|
|
||||||
mix_value = mix(mix_value, mix_value * 0.9 + 0.05, iDemo);
|
mix_value = mix(mix_value, mix_value * .9 + .05, iDemo);
|
||||||
|
|
||||||
if (mix_type) {
|
if (mix_type) {
|
||||||
fragColor = mix(color_a, color_b, step(mix_value, k));
|
fragColor = mix(color_a, color_b, step(mix_value, k));
|
||||||
|
|||||||
+3
-2
@@ -1,4 +1,4 @@
|
|||||||
#version 460
|
#version 330
|
||||||
|
|
||||||
// MFX
|
// MFX
|
||||||
// ------------
|
// ------------
|
||||||
@@ -14,11 +14,12 @@ out vec4 fragColor;
|
|||||||
uniform sampler2D iTex5;
|
uniform sampler2D iTex5;
|
||||||
uniform sampler2D iTex0;
|
uniform sampler2D iTex0;
|
||||||
uniform int iSeed6;
|
uniform int iSeed6;
|
||||||
|
uniform int iState6;
|
||||||
uniform vec3 iGroup2_3[7];
|
uniform vec3 iGroup2_3[7];
|
||||||
uniform vec3 iGroup3_1[2];
|
uniform vec3 iGroup3_1[2];
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
vec4 color = fx_stage(vUV, iTex5, iTex0, iSeed6, iGroup2_3[0], iGroup2_3[1].xy, iGroup2_3[2], iGroup2_3[3].xy, iGroup2_3[4], iGroup2_3[5].xy, iGroup2_3[6]);
|
vec4 color = fx_stage(iState6, vUV, iTex5, iTex0, iSeed6, iGroup2_3[0], iGroup2_3[1].xy, iGroup2_3[2], iGroup2_3[3].xy, iGroup2_3[4], iGroup2_3[5].xy, iGroup2_3[6]);
|
||||||
|
|
||||||
color = mix(color, vec4(0), iGroup3_1[0].y);
|
color = mix(color, vec4(0), iGroup3_1[0].y);
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -1,4 +1,4 @@
|
|||||||
#version 460
|
#version 330
|
||||||
|
|
||||||
// OUT
|
// OUT
|
||||||
|
|
||||||
@@ -15,6 +15,6 @@ void main() {
|
|||||||
vec2 uv = 1 - vUV;
|
vec2 uv = 1 - vUV;
|
||||||
// vec2 uv = vUV;
|
// vec2 uv = vUV;
|
||||||
vec3 c = texture(iTex0, uv).xyz;
|
vec3 c = texture(iTex0, uv).xyz;
|
||||||
c = mix(c, 1 - c, write_int(uv * 20, vec2(0.1, 0.1), iFPS, 2));
|
c = mix(c, 1 - c, write_int(uv * 20, vec2(.1, .1), iFPS, 2));
|
||||||
fragColor = vec4(c, 1);
|
fragColor = vec4(c, 1);
|
||||||
}
|
}
|
||||||
|
|||||||
+47
-47
@@ -1,7 +1,7 @@
|
|||||||
#ifndef INC_CP437
|
#ifndef INC_CP437
|
||||||
#define INC_CP437
|
#define INC_CP437
|
||||||
|
|
||||||
const int cp437[] = {
|
const int cp437[] = int[1024](
|
||||||
0x0000, 0x0000, 0x0000, 0x0000, // 0x00, NUL
|
0x0000, 0x0000, 0x0000, 0x0000, // 0x00, NUL
|
||||||
0x151E, 0x8A87, 0xE19D, 0x789B, // 0x01, SOH, SMILEY BLACK
|
0x151E, 0x8A87, 0xE19D, 0x789B, // 0x01, SOH, SMILEY BLACK
|
||||||
0xFBFE, 0xFDF7, 0xEF73, 0x7FEC, // 0x02, STX, SMILEY LIGHT
|
0xFBFE, 0xFDF7, 0xEF73, 0x7FEC, // 0x02, STX, SMILEY LIGHT
|
||||||
@@ -257,10 +257,10 @@ const int cp437[] = {
|
|||||||
0x666E, 0x3331, 0x0006, 0x0003, // 0xFC, ⁿ
|
0x666E, 0x3331, 0x0006, 0x0003, // 0xFC, ⁿ
|
||||||
0x6C8E, 0x0010, 0x000E, 0x0001, // 0xFD, ²
|
0x6C8E, 0x0010, 0x000E, 0x0001, // 0xFD, ²
|
||||||
0xCC00, 0x3300, 0x00CC, 0x0033, // 0xFE, ■
|
0xCC00, 0x3300, 0x00CC, 0x0033, // 0xFE, ■
|
||||||
0x0000, 0x0000, 0x0000, 0x0000, // 0xFF, NBSP
|
0x0000, 0x0000, 0x0000, 0x0000 // 0xFF, NBSP
|
||||||
};
|
);
|
||||||
|
|
||||||
const int charsets[] = {
|
const int charsets[] = int[18](
|
||||||
0x30, 10, // NUMBERS
|
0x30, 10, // NUMBERS
|
||||||
0x41, 26, // UPPERCASE LETTERS
|
0x41, 26, // UPPERCASE LETTERS
|
||||||
0x61, 26, // LOWERCASE LETTERS
|
0x61, 26, // LOWERCASE LETTERS
|
||||||
@@ -269,12 +269,12 @@ const int charsets[] = {
|
|||||||
0xB3, 40, // BARS
|
0xB3, 40, // BARS
|
||||||
0xE0, 16, // GREEK
|
0xE0, 16, // GREEK
|
||||||
0x80, 28, // ACCENTS
|
0x80, 28, // ACCENTS
|
||||||
0xB0, 3, // SHADES
|
0xB0, 3 // SHADES
|
||||||
};
|
);
|
||||||
|
|
||||||
#define CHARSETS 8
|
#define CHARSETS 8
|
||||||
|
|
||||||
const int hex_chars[] = {
|
const int hex_chars[] = int[16](
|
||||||
0x30,
|
0x30,
|
||||||
0x31,
|
0x31,
|
||||||
0x32,
|
0x32,
|
||||||
@@ -290,29 +290,29 @@ const int hex_chars[] = {
|
|||||||
0x43,
|
0x43,
|
||||||
0x44,
|
0x44,
|
||||||
0x45,
|
0x45,
|
||||||
0x46,
|
0x46
|
||||||
};
|
);
|
||||||
|
|
||||||
bool char(vec2 pos, int code)
|
bool char(vec2 pos, int code)
|
||||||
{
|
{
|
||||||
if (pos.x < 0.0 || pos.y < 0.0 || pos.x >= 1.0 || pos.y >= 1.0) {
|
if (pos.x < .0 || pos.y < .0 || pos.x >= 1. || pos.y >= 1.) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
ivec2 pos2 = ivec2(pos.x * 8.0, (1 - pos.y) * 8.0);
|
ivec2 pos2 = ivec2(pos.x * 8., (1 - pos.y) * 8.);
|
||||||
ivec2 subpos = pos2 % 4;
|
ivec2 subpos = pos2 % 4;
|
||||||
int v = int(pow(2, subpos.y * 4 + subpos.x));
|
int v = int(pow(2., subpos.y * 4. + subpos.x));
|
||||||
int d = int(pos2.y * 0.25) * 2 + int(pos2.x * 0.25);
|
int d = int(pos2.y * .25) * 2 + int(pos2.x * .25);
|
||||||
return (cp437[code * 4 + d] & v) > 0;
|
return (cp437[code * 4 + d] & v) > 0.;
|
||||||
}
|
}
|
||||||
|
|
||||||
float char_at(vec2 uv, vec2 pos, int code)
|
float char_at(vec2 uv, vec2 pos, int code)
|
||||||
{
|
{
|
||||||
return char(uv - pos, code) ? 1 : 0;
|
return char(uv - pos, code) ? 1. : 0.;
|
||||||
}
|
}
|
||||||
|
|
||||||
float write_5(vec2 uv, vec2 pos, int str[5])
|
float write_5(vec2 uv, vec2 pos, int str[5])
|
||||||
{
|
{
|
||||||
float d = 0;
|
float d = 0.;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < 5; i++) {
|
for (i = 0; i < 5; i++) {
|
||||||
@@ -320,7 +320,7 @@ float write_5(vec2 uv, vec2 pos, int str[5])
|
|||||||
return d;
|
return d;
|
||||||
}
|
}
|
||||||
|
|
||||||
d += char_at(uv, pos + vec2(i, 0), str[i]);
|
d += char_at(uv, pos + vec2(i, 0.), str[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
return d;
|
return d;
|
||||||
@@ -328,7 +328,7 @@ float write_5(vec2 uv, vec2 pos, int str[5])
|
|||||||
|
|
||||||
float write_10(vec2 uv, vec2 pos, int str[10])
|
float write_10(vec2 uv, vec2 pos, int str[10])
|
||||||
{
|
{
|
||||||
float d = 0;
|
float d = 0.;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < 10; i++) {
|
for (i = 0; i < 10; i++) {
|
||||||
@@ -344,7 +344,7 @@ float write_10(vec2 uv, vec2 pos, int str[10])
|
|||||||
|
|
||||||
float write_20(vec2 uv, vec2 pos, int str[20])
|
float write_20(vec2 uv, vec2 pos, int str[20])
|
||||||
{
|
{
|
||||||
float d = 0;
|
float d = 0.;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < 20; i++) {
|
for (i = 0; i < 20; i++) {
|
||||||
@@ -352,35 +352,35 @@ float write_20(vec2 uv, vec2 pos, int str[20])
|
|||||||
return d;
|
return d;
|
||||||
}
|
}
|
||||||
|
|
||||||
d += char_at(uv, pos + vec2(i, 0), str[i]);
|
d += char_at(uv, pos + vec2(i, 0.), str[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
return d;
|
return d;
|
||||||
}
|
}
|
||||||
|
|
||||||
float write_int(vec2 uv, vec2 pos, uint value, uint magnitude)
|
float write_int(vec2 uv, vec2 pos, int value, int magnitude)
|
||||||
{
|
{
|
||||||
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) {
|
||||||
d += char_at(uv, pos + vec2(magnitude - i - 1, 0), int(0x30 + (value % (m * 10u)) / m));
|
d += char_at(uv, pos + vec2(magnitude - i - 1., 0.), int(0x30 + (value % (m * 10)) / m));
|
||||||
m *= 10u;
|
m *= 10;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return d;
|
return d;
|
||||||
}
|
}
|
||||||
|
|
||||||
float write_int_left(vec2 uv, vec2 pos, uint value, uint magnitude)
|
float write_int_left(vec2 uv, vec2 pos, int value, int magnitude)
|
||||||
{
|
{
|
||||||
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) {
|
||||||
pos.x += 1;
|
pos.x += 1.;
|
||||||
m *= 10u;
|
m *= 10;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return write_int(uv, pos, value, magnitude);
|
return write_int(uv, pos, value, magnitude);
|
||||||
@@ -390,24 +390,24 @@ int read(sampler2D tex, vec2 uv, float k, int d, float t)
|
|||||||
{
|
{
|
||||||
float inv_k = 1 / k;
|
float inv_k = 1 / k;
|
||||||
vec2 tex_uv = floor(uv * k) * inv_k;
|
vec2 tex_uv = floor(uv * k) * inv_k;
|
||||||
tex_uv += vec2(d % 2, floor(d * 0.5)) * 0.5 * inv_k;
|
tex_uv += vec2(d % 2, floor(d * .5)) * .5 * inv_k;
|
||||||
return
|
return
|
||||||
((mean(reframe(tex, tex_uv + vec2(0, 3) * inv_k * 0.125)) > t) ? 1 : 0) +
|
((mean(reframe(tex, tex_uv + vec2(0, 3) * inv_k * .125)) > t) ? 1 : 0) +
|
||||||
((mean(reframe(tex, tex_uv + vec2(0, 2) * inv_k * 0.125)) > t) ? 2 : 0) +
|
((mean(reframe(tex, tex_uv + vec2(0, 2) * inv_k * .125)) > t) ? 2 : 0) +
|
||||||
((mean(reframe(tex, tex_uv + vec2(0, 1) * inv_k * 0.125)) > t) ? 4 : 0) +
|
((mean(reframe(tex, tex_uv + vec2(0, 1) * inv_k * .125)) > t) ? 4 : 0) +
|
||||||
((mean(reframe(tex, tex_uv + vec2(0, 0) * inv_k * 0.125)) > t) ? 8 : 0) +
|
((mean(reframe(tex, tex_uv + vec2(0, 0) * inv_k * .125)) > t) ? 8 : 0) +
|
||||||
((mean(reframe(tex, tex_uv + vec2(1, 3) * inv_k * 0.125)) > t) ? 16 : 0) +
|
((mean(reframe(tex, tex_uv + vec2(1, 3) * inv_k * .125)) > t) ? 16 : 0) +
|
||||||
((mean(reframe(tex, tex_uv + vec2(1, 2) * inv_k * 0.125)) > t) ? 32 : 0) +
|
((mean(reframe(tex, tex_uv + vec2(1, 2) * inv_k * .125)) > t) ? 32 : 0) +
|
||||||
((mean(reframe(tex, tex_uv + vec2(1, 1) * inv_k * 0.125)) > t) ? 64 : 0) +
|
((mean(reframe(tex, tex_uv + vec2(1, 1) * inv_k * .125)) > t) ? 64 : 0) +
|
||||||
((mean(reframe(tex, tex_uv + vec2(1, 0) * inv_k * 0.125)) > t) ? 128 : 0) +
|
((mean(reframe(tex, tex_uv + vec2(1, 0) * inv_k * .125)) > t) ? 128 : 0) +
|
||||||
((mean(reframe(tex, tex_uv + vec2(2, 3) * inv_k * 0.125)) > t) ? 256 : 0) +
|
((mean(reframe(tex, tex_uv + vec2(2, 3) * inv_k * .125)) > t) ? 256 : 0) +
|
||||||
((mean(reframe(tex, tex_uv + vec2(2, 2) * inv_k * 0.125)) > t) ? 512 : 0) +
|
((mean(reframe(tex, tex_uv + vec2(2, 2) * inv_k * .125)) > t) ? 512 : 0) +
|
||||||
((mean(reframe(tex, tex_uv + vec2(2, 1) * inv_k * 0.125)) > t) ? 1024 : 0) +
|
((mean(reframe(tex, tex_uv + vec2(2, 1) * inv_k * .125)) > t) ? 1024 : 0) +
|
||||||
((mean(reframe(tex, tex_uv + vec2(2, 0) * inv_k * 0.125)) > t) ? 2048 : 0) +
|
((mean(reframe(tex, tex_uv + vec2(2, 0) * inv_k * .125)) > t) ? 2048 : 0) +
|
||||||
((mean(reframe(tex, tex_uv + vec2(3, 3) * inv_k * 0.125)) > t) ? 4096 : 0) +
|
((mean(reframe(tex, tex_uv + vec2(3, 3) * inv_k * .125)) > t) ? 4096 : 0) +
|
||||||
((mean(reframe(tex, tex_uv + vec2(3, 2) * inv_k * 0.125)) > t) ? 8192 : 0) +
|
((mean(reframe(tex, tex_uv + vec2(3, 2) * inv_k * .125)) > t) ? 8192 : 0) +
|
||||||
((mean(reframe(tex, tex_uv + vec2(3, 1) * inv_k * 0.125)) > t) ? 16384 : 0) +
|
((mean(reframe(tex, tex_uv + vec2(3, 1) * inv_k * .125)) > t) ? 16384 : 0) +
|
||||||
((mean(reframe(tex, tex_uv + vec2(3, 0) * inv_k * 0.125)) > t) ? 32768 : 0);
|
((mean(reframe(tex, tex_uv + vec2(3, 0) * inv_k * .125)) > t) ? 32768 : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://web.archive.org/web/20151229003112/http://blogs.msdn.com/b/jeuge/archive/2005/06/08/hakmem-bit-count.aspx
|
// https://web.archive.org/web/20151229003112/http://blogs.msdn.com/b/jeuge/archive/2005/06/08/hakmem-bit-count.aspx
|
||||||
|
|||||||
+97
-102
@@ -12,51 +12,51 @@
|
|||||||
// BASICS
|
// BASICS
|
||||||
|
|
||||||
float istep(float x, float y) {
|
float istep(float x, float y) {
|
||||||
return 1 - step(x, y);
|
return 1. - step(x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
float estep(float x, float y) {
|
float estep(float x, float y) {
|
||||||
return smoothstep(x - 0.0001, x + 0.0001, y);
|
return smoothstep(x - .0001, x + .0001, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
float iestep(float x, float y) {
|
float iestep(float x, float y) {
|
||||||
return 1 - estep(x, y);
|
return 1. - estep(x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
float ease(float x) {
|
float ease(float x) {
|
||||||
return 0.5 - cos(max(min(x, 1.0), 0.0) * PI) * 0.5;
|
return .5 - cos(max(min(x, 1.), 0.) * PI) * .5;
|
||||||
}
|
}
|
||||||
|
|
||||||
vec2 ease(vec2 x) {
|
vec2 ease(vec2 x) {
|
||||||
return 0.5 - cos(max(min(x, 1.0), 0.0) * PI) * 0.5;
|
return .5 - cos(max(min(x, 1.), 0.) * PI) * .5;
|
||||||
}
|
}
|
||||||
|
|
||||||
vec3 ease(vec3 x) {
|
vec3 ease(vec3 x) {
|
||||||
return 0.5 - cos(max(min(x, 1.0), 0.0) * PI) * 0.5;
|
return .5 - cos(max(min(x, 1.), 0.) * PI) * .5;
|
||||||
}
|
}
|
||||||
|
|
||||||
float saw(float x) {
|
float saw(float x) {
|
||||||
return abs(mod(x + 1, 2) - 1);
|
return abs(mod(x + 1., 2.) - 1.);
|
||||||
}
|
}
|
||||||
|
|
||||||
vec2 saw(vec2 x) {
|
vec2 saw(vec2 x) {
|
||||||
return abs(mod(x + 1, 2) - 1);
|
return abs(mod(x + 1., 2.) - 1.);
|
||||||
}
|
}
|
||||||
|
|
||||||
vec3 saw(vec3 x) {
|
vec3 saw(vec3 x) {
|
||||||
return abs(mod(x + 1, 2) - 1);
|
return abs(mod(x + 1., 2.) - 1.);
|
||||||
}
|
}
|
||||||
|
|
||||||
float cmod(float x, float k) {
|
float cmod(float x, float k) {
|
||||||
return mod(x + k * 0.5, k) - k * 0.5;
|
return mod(x + k * .5, k) - k * .5;
|
||||||
}
|
}
|
||||||
|
|
||||||
vec2 cmod(vec2 x, float k) {
|
vec2 cmod(vec2 x, float k) {
|
||||||
return mod(x + k * 0.5, k) - k * 0.5;
|
return mod(x + k * .5, k) - k * .5;
|
||||||
}
|
}
|
||||||
|
|
||||||
vec3 cmod(vec3 x, float k) {
|
vec3 cmod(vec3 x, float k) {
|
||||||
return mod(x + k * 0.5, k) - k * 0.5;
|
return mod(x + k * .5, k) - k * .5;
|
||||||
}
|
}
|
||||||
|
|
||||||
// COLORS
|
// COLORS
|
||||||
@@ -71,9 +71,9 @@ vec3 col(float x) {
|
|||||||
|
|
||||||
vec3 shift(vec3 c, float f) {
|
vec3 shift(vec3 c, float f) {
|
||||||
return vec3(
|
return vec3(
|
||||||
c.x * (1 - f) + c.y * f,
|
c.x * (1. - f) + c.y * f,
|
||||||
c.y * (1 - f) + c.z * f,
|
c.y * (1. - f) + c.z * f,
|
||||||
c.z * (1 - f) + c.x * f
|
c.z * (1. - f) + c.x * f
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -82,40 +82,40 @@ vec3 shift3(vec3 c, float f) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
vec3 mix3(vec3 c1, vec3 c2, vec3 c3, float x) {
|
vec3 mix3(vec3 c1, vec3 c2, vec3 c3, float x) {
|
||||||
return istep(0.5, x) * mix(c1, c2, x * 2)
|
return istep(.5, x) * mix(c1, c2, x * 2.)
|
||||||
+ step(0.5, x) * mix(c2, c3, x * 2 - 1);
|
+ step(.5, x) * mix(c2, c3, x * 2. - 1.);
|
||||||
}
|
}
|
||||||
|
|
||||||
vec3 mix4(vec3 c1, vec3 c2, vec3 c3, vec3 c4, float x) {
|
vec3 mix4(vec3 c1, vec3 c2, vec3 c3, vec3 c4, float x) {
|
||||||
return istep(0.333, x) * mix(c1, c2, x * 3)
|
return istep(.333, x) * mix(c1, c2, x * 3.)
|
||||||
+ step(0.333, x) * istep(0.667, x) * mix(c2, c3, x * 3 - 1)
|
+ step(.333, x) * istep(.667, x) * mix(c2, c3, x * 3. - 1.)
|
||||||
+ step(0.667, x) * mix(c3, c4, x * 3 - 2);
|
+ step(.667, x) * mix(c3, c4, x * 3. - 2.);
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
vec3 mix5(vec3 c1, vec3 c2, vec3 c3, vec3 c4, vec3 c5, float x) {
|
vec3 mix5(vec3 c1, vec3 c2, vec3 c3, vec3 c4, vec3 c5, float x) {
|
||||||
return istep(0.25, x) * mix(c1, c2, x * 4)
|
return istep(.25, x) * mix(c1, c2, x * 4.)
|
||||||
+ step(0.25, x) * istep(0.5, x) * mix(c2, c3, x * 4 - 1)
|
+ step(.25, x) * istep(.5, x) * mix(c2, c3, x * 4. - 1.)
|
||||||
+ step(0.5, x) * istep(0.75, x) * mix(c3, c4, x * 4 - 2)
|
+ step(.5, x) * istep(.75, x) * mix(c3, c4, x * 4. - 2.)
|
||||||
+ step(0.75, x) * mix(c4, c5, x * 4 - 3);
|
+ step(.75, x) * mix(c4, c5, x * 4. - 3.);
|
||||||
}
|
}
|
||||||
|
|
||||||
vec3 mix6(vec3 c1, vec3 c2, vec3 c3, vec3 c4, vec3 c5, vec3 c6, float x) {
|
vec3 mix6(vec3 c1, vec3 c2, vec3 c3, vec3 c4, vec3 c5, vec3 c6, float x) {
|
||||||
return istep(0.2, x) * mix(c1, c2, x * 5)
|
return istep(.2, x) * mix(c1, c2, x * 5)
|
||||||
+ step(0.2, x) * istep(0.4, x) * mix(c2, c3, x * 5 - 1)
|
+ step(.2, x) * istep(.4, x) * mix(c2, c3, x * 5. - 1.)
|
||||||
+ step(0.4, x) * istep(0.6, x) * mix(c3, c4, x * 5 - 2)
|
+ step(.4, x) * istep(.6, x) * mix(c3, c4, x * 5. - 2.)
|
||||||
+ step(0.6, x) * istep(0.8, x) * mix(c4, c5, x * 5 - 3)
|
+ step(.6, x) * istep(.8, x) * mix(c4, c5, x * 5. - 3.)
|
||||||
+ step(0.8, x) * mix(c5, c6, x * 5 - 4);
|
+ step(.8, x) * mix(c5, c6, x * 5. - 4.);
|
||||||
}
|
}
|
||||||
|
|
||||||
float mean(vec3 v)
|
float mean(vec3 v)
|
||||||
{
|
{
|
||||||
return v.x * 0.3333 + v.y * 0.3333 + v.z * 0.3333;
|
return v.x * .3333 + v.y * .3333 + v.z * .3333;
|
||||||
}
|
}
|
||||||
|
|
||||||
float mean(vec4 v)
|
float mean(vec4 v)
|
||||||
{
|
{
|
||||||
return v.x * 0.3333 + v.y * 0.3333 + v.z * 0.3333;
|
return v.x * .3333 + v.y * .3333 + v.z * .3333;
|
||||||
}
|
}
|
||||||
|
|
||||||
// OTHER
|
// OTHER
|
||||||
@@ -130,13 +130,13 @@ mat2 rot(float angle) {
|
|||||||
// EFFECTS
|
// EFFECTS
|
||||||
|
|
||||||
vec2 lens(vec2 uv, float limit, float power) {
|
vec2 lens(vec2 uv, float limit, float power) {
|
||||||
return uv * (1 + limit + length(uv * power));
|
return uv * (1. + limit + length(uv * power));
|
||||||
}
|
}
|
||||||
|
|
||||||
vec2 kal(vec2 uv, float n) {
|
vec2 kal(vec2 uv, float n) {
|
||||||
float t = atan(uv.y, uv.x) + PI * 0.5;
|
float t = atan(uv.y, uv.x) + PI * .5;
|
||||||
float q = 3.0 / (2.0 * PI);
|
float q = 3. / (2. * PI);
|
||||||
t = abs(mod(t + PI / (n), 2 * PI / n) - PI / (n));
|
t = abs(mod(t + PI / (n), 2. * PI / n) - PI / (n));
|
||||||
return length(uv) * vec2(
|
return length(uv) * vec2(
|
||||||
cos(t),
|
cos(t),
|
||||||
sin(t)
|
sin(t)
|
||||||
@@ -144,8 +144,8 @@ vec2 kal(vec2 uv, float n) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
vec2 kal2(vec2 uv, float n) {
|
vec2 kal2(vec2 uv, float n) {
|
||||||
float t = atan(uv.y, uv.x) + PI * 0.5;
|
float t = atan(uv.y, uv.x) + PI * .5;
|
||||||
float t2 = abs(mod(t + PI / n, 2 * PI / n) - PI / n);
|
float t2 = abs(mod(t + PI / n, 2. * PI / n) - PI / n);
|
||||||
return length(uv) * vec2(
|
return length(uv) * vec2(
|
||||||
cos(t2),
|
cos(t2),
|
||||||
sin(t2)
|
sin(t2)
|
||||||
@@ -156,27 +156,27 @@ vec2 kal2(vec2 uv, float n) {
|
|||||||
|
|
||||||
float noise(vec2 n)
|
float noise(vec2 n)
|
||||||
{
|
{
|
||||||
const vec2 d = vec2(0, 1);
|
const vec2 d = vec2(0., 1.);
|
||||||
vec2 b = floor(n);
|
vec2 b = floor(n);
|
||||||
vec2 f = fract(n);
|
vec2 f = fract(n);
|
||||||
f *= f * (3 - 2 * f);
|
f *= f * (3. - 2. * f);
|
||||||
return mix(mix(rand(b), rand(b + d.yx), f.x), mix(rand(b + d.xy), rand(b + d.yy), f.x), f.y);
|
return mix(mix(rand(b), rand(b + d.yx), f.x), mix(rand(b + d.xy), rand(b + d.yy), f.x), f.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
float noise_f(vec2 n, int f)
|
float noise_f(vec2 n, int f)
|
||||||
{
|
{
|
||||||
float o = noise(n) / 2;
|
float o = noise(n) * .5;
|
||||||
o += mix(o, noise(n * 2), f > 1 ? 1 : 0) / 4;
|
o += mix(o, noise(n * 2.), f > 1. ? 1. : 0.) * .25;
|
||||||
o += mix(o, noise(n * 4), f > 2 ? 1 : 0) / 8;
|
o += mix(o, noise(n * 4.), f > 2. ? 1. : 0.) * .125;
|
||||||
o += mix(o, noise(n * 8), f > 3 ? 1 : 0) / 16;
|
o += mix(o, noise(n * 8.), f > 3. ? 1. : 0.) * .0625;
|
||||||
o += mix(o, noise(n * 16), f > 4 ? 1 : 0) / 32;
|
o += mix(o, noise(n * 16.), f > 4. ? 1. : 0.) * .03125;
|
||||||
return o;
|
return o;
|
||||||
}
|
}
|
||||||
|
|
||||||
// VORONOI
|
// VORONOI
|
||||||
|
|
||||||
float v_index(vec2 uv) {
|
float v_index(vec2 uv) {
|
||||||
return floor(uv.x) + floor(uv.y) * 45;
|
return floor(uv.x) + floor(uv.y) * 45.;
|
||||||
}
|
}
|
||||||
|
|
||||||
vec2 v_pos(float i, int seed, float time) {
|
vec2 v_pos(float i, int seed, float time) {
|
||||||
@@ -184,10 +184,10 @@ vec2 v_pos(float i, int seed, float time) {
|
|||||||
float iTimeV = time - iTimeId;
|
float iTimeV = time - iTimeId;
|
||||||
|
|
||||||
float x0 = rand(i + seed + iTimeId);
|
float x0 = rand(i + seed + iTimeId);
|
||||||
float y0 = rand(i + seed + 10 + iTimeId);
|
float y0 = rand(i + seed + 10. + iTimeId);
|
||||||
|
|
||||||
float x1 = rand(i + seed + iTimeId + 1);
|
float x1 = rand(i + seed + iTimeId + 1.);
|
||||||
float y1 = rand(i + seed + 10 + iTimeId + 1);
|
float y1 = rand(i + seed + 10. + iTimeId + 1.);
|
||||||
|
|
||||||
return vec2(
|
return vec2(
|
||||||
mix(x0, x1, ease(ease(iTimeV))),
|
mix(x0, x1, ease(ease(iTimeV))),
|
||||||
@@ -196,12 +196,13 @@ vec2 v_pos(float i, int seed, float time) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
vec4 voronoi(vec2 uv, float dist, int seed, float time) {
|
vec4 voronoi(vec2 uv, float dist, int seed, float time) {
|
||||||
vec4 o = vec4(0, 0, 2, 0);
|
vec4 o = vec4(0., 0., 2., 0.);
|
||||||
vec4 t = vec4(0, 0, 2, 0);
|
vec4 t = vec4(0., 0., 2., 0.);
|
||||||
float d, i;
|
float d, i;
|
||||||
vec2 uv2, p;
|
vec2 uv2, p;
|
||||||
for (int dx = -1; dx <= 1; dx++) {
|
int dx, dy;
|
||||||
for (int dy = -1; dy <= 1; dy++) {
|
for (dx = -1; dx <= 1; dx++) {
|
||||||
|
for (dy = -1; dy <= 1; dy++) {
|
||||||
uv2 = vec2(floor(uv.x) + dx, floor(uv.y) + dy);
|
uv2 = vec2(floor(uv.x) + dx, floor(uv.y) + dy);
|
||||||
i = v_index(uv2);
|
i = v_index(uv2);
|
||||||
p = uv2 + v_pos(i, seed, time) * dist;
|
p = uv2 + v_pos(i, seed, time) * dist;
|
||||||
@@ -224,21 +225,21 @@ float circle(vec2 uv, vec2 c, float size) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
float h_circle(vec2 uv, vec2 c, float size, float k) {
|
float h_circle(vec2 uv, vec2 c, float size, float k) {
|
||||||
return circle(uv, c, size + k * 0.5) - circle(uv, c, size - k * 0.5);
|
return circle(uv, c, size + k * .5) - circle(uv, c, size - k * .5);
|
||||||
}
|
}
|
||||||
|
|
||||||
float stripe(float x, float k1, float k2)
|
float stripe(float x, float k1, float k2)
|
||||||
{
|
{
|
||||||
return k2 > k1 ? (1 - step(x, k1)) * (step(x, k2)) : ((1 - step(x, k2)) * (step(x, k1)));
|
return k2 > k1 ? (1. - step(x, k1)) * (step(x, k2)) : ((1. - step(x, k2)) * (step(x, k1)));
|
||||||
}
|
}
|
||||||
|
|
||||||
float capsule(vec2 uv, float r, float d, float a)
|
float capsule(vec2 uv, float r, float d, float a)
|
||||||
{
|
{
|
||||||
uv *= rot(a);
|
uv *= rot(a);
|
||||||
float f1 = step(uv.x, r) * step(-uv.x, r) * step(uv.y, d - r) * step(-uv.y, d - r);
|
float f1 = step(uv.x, r) * step(-uv.x, r) * step(uv.y, d - r) * step(-uv.y, d - r);
|
||||||
float f2 = step(length(uv - vec2(0, d - r)), r);
|
float f2 = step(length(uv - vec2(0., d - r)), r);
|
||||||
float f3 = step(length(uv + vec2(0, d - r)), r);
|
float f3 = step(length(uv + vec2(0., d - r)), r);
|
||||||
return min(1, f1 + f2 + f3);
|
return min(1., f1 + f2 + f3);
|
||||||
}
|
}
|
||||||
|
|
||||||
float rect(vec2 uv, vec2 c, vec2 size) {
|
float rect(vec2 uv, vec2 c, vec2 size) {
|
||||||
@@ -247,7 +248,7 @@ float rect(vec2 uv, vec2 c, vec2 size) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
float h_rect(vec2 uv, vec2 c, vec2 size, float k) {
|
float h_rect(vec2 uv, vec2 c, vec2 size, float k) {
|
||||||
return rect(uv, c, size + k * 0.5) - rect(uv, c, size - k * 0.5);
|
return rect(uv, c, size + k * .5) - rect(uv, c, size - k * .5);
|
||||||
}
|
}
|
||||||
|
|
||||||
float line(vec2 uv, vec2 p1, vec2 p2, float thick) {
|
float line(vec2 uv, vec2 p1, vec2 p2, float thick) {
|
||||||
@@ -261,33 +262,27 @@ float line(vec2 uv, vec2 p1, vec2 p2, float thick) {
|
|||||||
uv.y / p.y
|
uv.y / p.y
|
||||||
);
|
);
|
||||||
|
|
||||||
return step(k.x, thick * 0.5)
|
return step(k.x, thick * .5)
|
||||||
* step(-k.x, thick * 0.5)
|
* step(-k.x, thick * .5)
|
||||||
* step(k.y, 1)
|
* step(k.y, 1.)
|
||||||
* (1 - step(k.y, 0));
|
* (1. - step(k.y, 0.));
|
||||||
} else {
|
} else {
|
||||||
k = vec2(
|
k = vec2(
|
||||||
uv.x / p.x,
|
uv.x / p.x,
|
||||||
uv.y - p.y * uv.x / p.x
|
uv.y - p.y * uv.x / p.x
|
||||||
);
|
);
|
||||||
|
|
||||||
return step(k.y, thick * 0.5)
|
return step(k.y, thick * .5)
|
||||||
* step(-k.y, thick * 0.5)
|
* step(-k.y, thick * .5)
|
||||||
* step(k.x, 1)
|
* step(k.x, 1.)
|
||||||
* (1 - step(k.x, 0));
|
* (1. - step(k.x, 0.));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const mat2x2 ISOMETRIC_MATRIX = {
|
const mat2x2 ISOMETRIC_MATRIX = mat2x2(
|
||||||
{
|
.5, 1.,
|
||||||
0.5,
|
.5, -1.
|
||||||
1
|
);
|
||||||
},
|
|
||||||
{
|
|
||||||
0.5,
|
|
||||||
-1
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
vec2 iso(vec2 p) {
|
vec2 iso(vec2 p) {
|
||||||
return p * ISOMETRIC_MATRIX;
|
return p * ISOMETRIC_MATRIX;
|
||||||
@@ -308,14 +303,14 @@ vec2 iso(vec3 uv) {
|
|||||||
|
|
||||||
vec4 reframe(sampler2D tex, vec2 uv)
|
vec4 reframe(sampler2D tex, vec2 uv)
|
||||||
{
|
{
|
||||||
uv = uv * vec2(iResolution.y / iResolution.x, 1) + .5;
|
uv = uv * vec2(iResolution.y / iResolution.x, 1.) + .5;
|
||||||
uv = saw(uv);
|
uv = saw(uv);
|
||||||
return texture(tex, uv);
|
return texture(tex, uv);
|
||||||
}
|
}
|
||||||
|
|
||||||
vec4 reframe_b(sampler2D tex, vec2 uv)
|
vec4 reframe_b(sampler2D tex, vec2 uv)
|
||||||
{
|
{
|
||||||
uv = uv * vec2(iResolution.y / iResolution.x, 1) + .5;
|
uv = uv * vec2(iResolution.y / iResolution.x, 1.) + .5;
|
||||||
return texture(tex, uv);
|
return texture(tex, uv);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -323,7 +318,7 @@ vec4 kernel(sampler2D tex, vec2 uv, mat3x3 k, float spm)
|
|||||||
{
|
{
|
||||||
int x, y;
|
int x, y;
|
||||||
vec2 offset;
|
vec2 offset;
|
||||||
vec4 sum = vec4(0);
|
vec4 sum = vec4(0.);
|
||||||
for (y = -1; y <= 1; ++y) {
|
for (y = -1; y <= 1; ++y) {
|
||||||
for (x = -1; x <= 1; ++x) {
|
for (x = -1; x <= 1; ++x) {
|
||||||
offset = vec2(x, y) * spm;
|
offset = vec2(x, y) * spm;
|
||||||
@@ -339,7 +334,7 @@ vec4 kernel(sampler2D tex, vec2 uv, mat3x3 k, float spm)
|
|||||||
|
|
||||||
float gaussian_weight(float x, float sigma)
|
float gaussian_weight(float x, float sigma)
|
||||||
{
|
{
|
||||||
return exp(-(x * x) / (2.0 * sigma * sigma));
|
return exp(-(x * x) / (2. * sigma * sigma));
|
||||||
}
|
}
|
||||||
|
|
||||||
vec4 gauss(sampler2D tex, vec2 uv, const int kernel_size, float spm, float sigma, float bloom)
|
vec4 gauss(sampler2D tex, vec2 uv, const int kernel_size, float spm, float sigma, float bloom)
|
||||||
@@ -347,8 +342,8 @@ vec4 gauss(sampler2D tex, vec2 uv, const int kernel_size, float spm, float sigma
|
|||||||
int x, y;
|
int x, y;
|
||||||
vec2 offset;
|
vec2 offset;
|
||||||
float w;
|
float w;
|
||||||
vec4 sum = vec4(0);
|
vec4 sum = vec4(0.);
|
||||||
float weight_sum = 0;
|
float weight_sum = 0.;
|
||||||
for (y = -kernel_size; y <= kernel_size; ++y) {
|
for (y = -kernel_size; y <= kernel_size; ++y) {
|
||||||
for (x = -kernel_size; x <= kernel_size; ++x) {
|
for (x = -kernel_size; x <= kernel_size; ++x) {
|
||||||
offset = vec2(x, y) * spm;
|
offset = vec2(x, y) * spm;
|
||||||
@@ -362,17 +357,17 @@ vec4 gauss(sampler2D tex, vec2 uv, const int kernel_size, float spm, float sigma
|
|||||||
|
|
||||||
vec4 gauss(sampler2D tex, vec2 uv, const int kernel_size, float spm, float sigma)
|
vec4 gauss(sampler2D tex, vec2 uv, const int kernel_size, float spm, float sigma)
|
||||||
{
|
{
|
||||||
return gauss(tex, uv, kernel_size, spm, sigma, 1.0);
|
return gauss(tex, uv, kernel_size, spm, sigma, 1.);
|
||||||
}
|
}
|
||||||
|
|
||||||
vec4 gauss(sampler2D tex, vec2 uv, const int kernel_size, float spm)
|
vec4 gauss(sampler2D tex, vec2 uv, const int kernel_size, float spm)
|
||||||
{
|
{
|
||||||
return gauss(tex, uv, kernel_size, spm, 2.0);
|
return gauss(tex, uv, kernel_size, spm, 2.);
|
||||||
}
|
}
|
||||||
|
|
||||||
vec4 gauss(sampler2D tex, vec2 uv, const int kernel_size)
|
vec4 gauss(sampler2D tex, vec2 uv, const int kernel_size)
|
||||||
{
|
{
|
||||||
return gauss(tex, uv, kernel_size, 1 / max(iResolution.x, iResolution.y));
|
return gauss(tex, uv, kernel_size, 1. / max(iResolution.x, iResolution.y));
|
||||||
}
|
}
|
||||||
|
|
||||||
vec4 gauss(sampler2D tex, vec2 uv)
|
vec4 gauss(sampler2D tex, vec2 uv)
|
||||||
@@ -383,23 +378,23 @@ vec4 gauss(sampler2D tex, vec2 uv)
|
|||||||
float dither(vec2 uv, float x)
|
float dither(vec2 uv, float x)
|
||||||
{
|
{
|
||||||
bool o = false;
|
bool o = false;
|
||||||
o = o || x * 16 >= 1 && floor(mod(uv.x, 4)) == 0 && floor(mod(uv.y, 4)) == 0;
|
o = o || x * 16. >= 1. && floor(mod(uv.x, 4.)) == 0. && floor(mod(uv.y, 4.)) == 0.;
|
||||||
o = o || x * 16 >= 2 && floor(mod(uv.x, 4)) == 2 && floor(mod(uv.y, 4)) == 2;
|
o = o || x * 16. >= 2. && floor(mod(uv.x, 4.)) == 2. && floor(mod(uv.y, 4.)) == 2.;
|
||||||
o = o || x * 16 >= 3 && floor(mod(uv.x, 4)) == 0 && floor(mod(uv.y, 4)) == 2;
|
o = o || x * 16. >= 3. && floor(mod(uv.x, 4.)) == 0. && floor(mod(uv.y, 4.)) == 2.;
|
||||||
o = o || x * 16 >= 4 && floor(mod(uv.x, 4)) == 2 && floor(mod(uv.y, 4)) == 0;
|
o = o || x * 16. >= 4. && floor(mod(uv.x, 4.)) == 2. && floor(mod(uv.y, 4.)) == 0.;
|
||||||
o = o || x * 16 >= 5 && floor(mod(uv.x, 4)) == 1 && floor(mod(uv.y, 4)) == 1;
|
o = o || x * 16. >= 5. && floor(mod(uv.x, 4.)) == 1. && floor(mod(uv.y, 4.)) == 1.;
|
||||||
o = o || x * 16 >= 6 && floor(mod(uv.x, 4)) == 3 && floor(mod(uv.y, 4)) == 3;
|
o = o || x * 16. >= 6. && floor(mod(uv.x, 4.)) == 3. && floor(mod(uv.y, 4.)) == 3.;
|
||||||
o = o || x * 16 >= 7 && floor(mod(uv.x, 4)) == 1 && floor(mod(uv.y, 4)) == 3;
|
o = o || x * 16. >= 7. && floor(mod(uv.x, 4.)) == 1. && floor(mod(uv.y, 4.)) == 3.;
|
||||||
o = o || x * 16 >= 8 && floor(mod(uv.x, 4)) == 3 && floor(mod(uv.y, 4)) == 1;
|
o = o || x * 16. >= 8. && floor(mod(uv.x, 4.)) == 3. && floor(mod(uv.y, 4.)) == 1.;
|
||||||
o = o || x * 16 >= 9 && floor(mod(uv.x, 4)) == 1 && floor(mod(uv.y, 4)) == 0;
|
o = o || x * 16. >= 9. && floor(mod(uv.x, 4.)) == 1. && floor(mod(uv.y, 4.)) == 0.;
|
||||||
o = o || x * 16 >= 10 && floor(mod(uv.x, 4)) == 3 && floor(mod(uv.y, 4)) == 2;
|
o = o || x * 16. >= 10. && floor(mod(uv.x, 4.)) == 3. && floor(mod(uv.y, 4.)) == 2.;
|
||||||
o = o || x * 16 >= 11 && floor(mod(uv.x, 4)) == 1 && floor(mod(uv.y, 4)) == 2;
|
o = o || x * 16. >= 11. && floor(mod(uv.x, 4.)) == 1. && floor(mod(uv.y, 4.)) == 2.;
|
||||||
o = o || x * 16 >= 12 && floor(mod(uv.x, 4)) == 3 && floor(mod(uv.y, 4)) == 0;
|
o = o || x * 16. >= 12. && floor(mod(uv.x, 4.)) == 3. && floor(mod(uv.y, 4.)) == 0.;
|
||||||
o = o || x * 16 >= 13 && floor(mod(uv.x, 4)) == 0 && floor(mod(uv.y, 4)) == 1;
|
o = o || x * 16. >= 13. && floor(mod(uv.x, 4.)) == 0. && floor(mod(uv.y, 4.)) == 1.;
|
||||||
o = o || x * 16 >= 14 && floor(mod(uv.x, 4)) == 2 && floor(mod(uv.y, 4)) == 3;
|
o = o || x * 16. >= 14. && floor(mod(uv.x, 4.)) == 2. && floor(mod(uv.y, 4.)) == 3.;
|
||||||
o = o || x * 16 >= 15 && floor(mod(uv.x, 4)) == 0 && floor(mod(uv.y, 4)) == 3;
|
o = o || x * 16. >= 15. && floor(mod(uv.x, 4.)) == 0. && floor(mod(uv.y, 4.)) == 3.;
|
||||||
o = o || x * 16 >= 16 && floor(mod(uv.x, 4)) == 2 && floor(mod(uv.y, 4)) == 1;
|
o = o || x * 16. >= 16. && floor(mod(uv.x, 4.)) == 2. && floor(mod(uv.y, 4.)) == 1.;
|
||||||
return o ? 1 : 0;
|
return o ? 1. : 0.;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
+55
-60
@@ -16,12 +16,8 @@ vec4 fx_master(vec3 c0, vec3 c, int seed, vec3 m0) {
|
|||||||
return vec4(c_out, 1.0);
|
return vec4(c_out, 1.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
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 uniform fx_stage_sub fx_stage;
|
|
||||||
|
|
||||||
// FX 1 : thru
|
// FX 1 : thru
|
||||||
subroutine(fx_stage_sub) vec4 fx_1(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0)
|
vec4 fx_1(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0)
|
||||||
{
|
{
|
||||||
// start
|
// start
|
||||||
|
|
||||||
@@ -39,7 +35,7 @@ subroutine(fx_stage_sub) vec4 fx_1(vec2 vUV, sampler2D previous, sampler2D feedb
|
|||||||
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.0, c - (1 - light) * 2.0, step(.5, light));
|
||||||
|
|
||||||
return fx_master(c0, c, seed, m0);
|
return fx_master(c0, c, seed, m0);
|
||||||
}
|
}
|
||||||
@@ -64,26 +60,26 @@ 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;
|
||||||
|
|
||||||
return fx_master(c0, c, seed, m0);
|
return fx_master(c0, c, seed, m0);
|
||||||
}
|
}
|
||||||
|
|
||||||
subroutine(fx_stage_sub) vec4 fx_2(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0)
|
vec4 fx_2(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0)
|
||||||
{
|
{
|
||||||
return fx_shift(vUV, previous, feedback, seed, b1, f1, b2, f2, b3, f3, m0);
|
return fx_shift(vUV, previous, feedback, seed, b1, f1, b2, f2, b3, f3, m0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// FX 3 : shift
|
// FX 3 : shift
|
||||||
subroutine(fx_stage_sub) vec4 fx_3(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0)
|
vec4 fx_3(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0)
|
||||||
{
|
{
|
||||||
return fx_shift(vUV, previous, previous, seed, b1, f1, b2, f2, b3, f3, m0);
|
return fx_shift(vUV, previous, previous, seed, b1, f1, b2, f2, b3, f3, m0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// FX 4 : colorize
|
// FX 4 : colorize
|
||||||
subroutine(fx_stage_sub) vec4 fx_4(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0)
|
vec4 fx_4(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0)
|
||||||
{
|
{
|
||||||
// start
|
// start
|
||||||
|
|
||||||
@@ -109,7 +105,7 @@ subroutine(fx_stage_sub) vec4 fx_4(vec2 vUV, sampler2D previous, sampler2D feedb
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FX 5 : quantize
|
// FX 5 : quantize
|
||||||
subroutine(fx_stage_sub) vec4 fx_5(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0)
|
vec4 fx_5(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0)
|
||||||
{
|
{
|
||||||
// start
|
// start
|
||||||
|
|
||||||
@@ -131,18 +127,18 @@ subroutine(fx_stage_sub) vec4 fx_5(vec2 vUV, sampler2D previous, sampler2D feedb
|
|||||||
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
// FX 6 : dithering
|
// FX 6 : dithering
|
||||||
subroutine(fx_stage_sub) vec4 fx_6(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0)
|
vec4 fx_6(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0)
|
||||||
{
|
{
|
||||||
// start
|
// start
|
||||||
|
|
||||||
@@ -168,7 +164,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;
|
||||||
@@ -184,7 +180,7 @@ subroutine(fx_stage_sub) vec4 fx_6(vec2 vUV, sampler2D previous, sampler2D feedb
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FX 7 : tv
|
// FX 7 : tv
|
||||||
subroutine(fx_stage_sub) vec4 fx_7(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0)
|
vec4 fx_7(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0)
|
||||||
{
|
{
|
||||||
// start
|
// start
|
||||||
|
|
||||||
@@ -203,13 +199,13 @@ subroutine(fx_stage_sub) vec4 fx_7(vec2 vUV, sampler2D previous, sampler2D feedb
|
|||||||
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
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -217,7 +213,7 @@ subroutine(fx_stage_sub) vec4 fx_7(vec2 vUV, sampler2D previous, sampler2D feedb
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FX 8 : kaleidoscope
|
// FX 8 : kaleidoscope
|
||||||
subroutine(fx_stage_sub) vec4 fx_8(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0)
|
vec4 fx_8(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0)
|
||||||
{
|
{
|
||||||
// start
|
// start
|
||||||
|
|
||||||
@@ -237,9 +233,9 @@ subroutine(fx_stage_sub) vec4 fx_8(vec2 vUV, sampler2D previous, sampler2D feedb
|
|||||||
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);
|
||||||
@@ -248,7 +244,7 @@ subroutine(fx_stage_sub) vec4 fx_8(vec2 vUV, sampler2D previous, sampler2D feedb
|
|||||||
#include inc_cp437.glsl
|
#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)
|
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)
|
||||||
{
|
{
|
||||||
// start
|
// start
|
||||||
|
|
||||||
@@ -274,21 +270,21 @@ subroutine(fx_stage_sub) vec4 fx_9(vec2 vUV, sampler2D previous, sampler2D feedb
|
|||||||
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
// FX 10 : lens
|
// FX 10 : lens
|
||||||
subroutine(fx_stage_sub) vec4 fx_10(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0)
|
vec4 fx_10(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0)
|
||||||
{
|
{
|
||||||
// start
|
// start
|
||||||
|
|
||||||
@@ -316,7 +312,7 @@ subroutine(fx_stage_sub) vec4 fx_10(vec2 vUV, sampler2D previous, sampler2D feed
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FX 11 : spill
|
// FX 11 : spill
|
||||||
subroutine(fx_stage_sub) vec4 fx_11(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0)
|
vec4 fx_11(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0)
|
||||||
{
|
{
|
||||||
// start
|
// start
|
||||||
|
|
||||||
@@ -345,14 +341,14 @@ subroutine(fx_stage_sub) vec4 fx_11(vec2 vUV, sampler2D previous, sampler2D feed
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FX 12 : Game Of Life
|
// FX 12 : Game Of Life
|
||||||
subroutine(fx_stage_sub) vec4 fx_12(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0)
|
vec4 fx_12(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0)
|
||||||
{
|
{
|
||||||
return texture(previous, vUV); // TODO disabled
|
return texture(previous, vUV); // TODO disabled
|
||||||
// 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 - 0.5) * vec2(ratio, 1);
|
vec2 uv1 = (uv0 - .5) * vec2(ratio, 1);
|
||||||
|
|
||||||
// controls
|
// controls
|
||||||
|
|
||||||
@@ -360,7 +356,7 @@ subroutine(fx_stage_sub) vec4 fx_12(vec2 vUV, sampler2D previous, sampler2D feed
|
|||||||
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
|
||||||
@@ -372,13 +368,13 @@ subroutine(fx_stage_sub) vec4 fx_12(vec2 vUV, sampler2D previous, sampler2D feed
|
|||||||
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(
|
||||||
@@ -387,33 +383,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;
|
||||||
@@ -460,7 +456,7 @@ subroutine(fx_stage_sub) vec4 fx_12(vec2 vUV, sampler2D previous, sampler2D feed
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FX 13 : Sobel
|
// FX 13 : Sobel
|
||||||
subroutine(fx_stage_sub) vec4 fx_13(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0)
|
vec4 fx_13(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0)
|
||||||
{
|
{
|
||||||
// start
|
// start
|
||||||
|
|
||||||
@@ -472,14 +468,14 @@ subroutine(fx_stage_sub) vec4 fx_13(vec2 vUV, sampler2D previous, sampler2D feed
|
|||||||
|
|
||||||
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;
|
||||||
|
|
||||||
@@ -489,7 +485,7 @@ subroutine(fx_stage_sub) vec4 fx_13(vec2 vUV, sampler2D previous, sampler2D feed
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FX 14 : Isometric
|
// FX 14 : Isometric
|
||||||
subroutine(fx_stage_sub) vec4 fx_14(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0)
|
vec4 fx_14(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0)
|
||||||
{
|
{
|
||||||
// start
|
// start
|
||||||
|
|
||||||
@@ -524,11 +520,10 @@ subroutine(fx_stage_sub) vec4 fx_14(vec2 vUV, sampler2D previous, sampler2D feed
|
|||||||
return fx_master(c0, c, seed, m0);
|
return fx_master(c0, c, seed, m0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// FX 15 : Random
|
vec4 fx_stage(int fx, 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)
|
if (fx >= 15) {
|
||||||
{
|
fx = int(randTime(seed + 100) * 14);
|
||||||
return texture(previous, vUV); // TODO disabled
|
}
|
||||||
int fx = int(randTime(seed + 100) * 14);
|
|
||||||
|
|
||||||
if (fx == 0) {
|
if (fx == 0) {
|
||||||
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);
|
||||||
|
|||||||
+14
-14
@@ -6,38 +6,38 @@
|
|||||||
vec2 magic_f(vec2 F, vec3 B, float i)
|
vec2 magic_f(vec2 F, vec3 B, float i)
|
||||||
{
|
{
|
||||||
return vec2(
|
return vec2(
|
||||||
mix(F.x, randTime(i + 1), min(1, B.z)),
|
mix(F.x, randTime(i + 1.), min(1., B.z)),
|
||||||
mix(F.y, randTime(i + 2), min(1, B.z))
|
mix(F.y, randTime(i + 2.), min(1., B.z))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
vec2 magic_f(float i)
|
vec2 magic_f(float i)
|
||||||
{
|
{
|
||||||
return magic_f(vec2(0), vec3(0, 0, 1), i);
|
return magic_f(vec2(0.), vec3(0., 0., 1.), i);
|
||||||
}
|
}
|
||||||
|
|
||||||
vec3 magic_b(vec3 B, float i)
|
vec3 magic_b(vec3 B, float i)
|
||||||
{
|
{
|
||||||
return vec3(
|
return vec3(
|
||||||
mix(B.x, step(0.2, randTime(i + 3)), min(1, B.z)),
|
mix(B.x, step(.2, randTime(i + 3.)), min(1., B.z)),
|
||||||
mix(B.y, step(0.5, randTime(i + 4)), min(1, B.z)),
|
mix(B.y, step(.5, randTime(i + 4.)), min(1., B.z)),
|
||||||
min(1, B.z)
|
min(1., B.z)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
vec3 magic_b(float i)
|
vec3 magic_b(float i)
|
||||||
{
|
{
|
||||||
return magic_b(vec3(0, 0, 1), i);
|
return magic_b(vec3(0., 0., 1.), i);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool magic_trigger(vec3 B, float i)
|
bool magic_trigger(vec3 B, float i)
|
||||||
{
|
{
|
||||||
return magic_b(B, i).x > 0;
|
return magic_b(B, i).x > 0.;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool magic_trigger(float i)
|
bool magic_trigger(float i)
|
||||||
{
|
{
|
||||||
return magic_b(i).x > 0;
|
return magic_b(i).x > 0.;
|
||||||
}
|
}
|
||||||
|
|
||||||
float magic(vec2 F, vec3 B, float i)
|
float magic(vec2 F, vec3 B, float i)
|
||||||
@@ -45,7 +45,7 @@ float magic(vec2 F, vec3 B, float i)
|
|||||||
vec2 f = magic_f(F, B, i);
|
vec2 f = magic_f(F, B, i);
|
||||||
vec3 b = magic_b(B, i);
|
vec3 b = magic_b(B, i);
|
||||||
|
|
||||||
return mix(0, f.x * mix(1 - modTime(f.y), cosTime(f.y) * 0.5 + 0.5, b.y), b.x);
|
return mix(0., f.x * mix(1. - modTime(f.y), cosTime(f.y) * .5 + .5, b.y), b.x);
|
||||||
}
|
}
|
||||||
|
|
||||||
float fmagic(vec2 F, vec3 B, float i)
|
float fmagic(vec2 F, vec3 B, float i)
|
||||||
@@ -53,12 +53,12 @@ float fmagic(vec2 F, vec3 B, float i)
|
|||||||
vec2 f = magic_f(F, B, i);
|
vec2 f = magic_f(F, B, i);
|
||||||
vec3 b = magic_b(B, i);
|
vec3 b = magic_b(B, i);
|
||||||
|
|
||||||
return f.x * mix(1 - modTime(f.y), cosTime(f.y) * 0.5 + 0.5, b.y);
|
return f.x * mix(1. - modTime(f.y), cosTime(f.y) * .5 + .5, b.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
float magic(float i)
|
float magic(float i)
|
||||||
{
|
{
|
||||||
return magic(vec2(0), vec3(0, 0, 1), i);
|
return magic(vec2(0.), vec3(0., 0., 1.), i);
|
||||||
}
|
}
|
||||||
|
|
||||||
float magic_reverse(vec2 F, vec3 B, float i)
|
float magic_reverse(vec2 F, vec3 B, float i)
|
||||||
@@ -66,12 +66,12 @@ float magic_reverse(vec2 F, vec3 B, float i)
|
|||||||
vec2 f = magic_f(F, B, i);
|
vec2 f = magic_f(F, B, i);
|
||||||
vec3 b = magic_b(B, i);
|
vec3 b = magic_b(B, i);
|
||||||
|
|
||||||
return mix(0, f.x * mix(1 - modTime(f.y), modTime(f.y), b.y), b.x);
|
return mix(0., f.x * mix(1. - modTime(f.y), modTime(f.y), b.y), b.x);
|
||||||
}
|
}
|
||||||
|
|
||||||
float magic_reverse(float i)
|
float magic_reverse(float i)
|
||||||
{
|
{
|
||||||
return magic_reverse(vec2(0), vec3(0, 0, 1), i);
|
return magic_reverse(vec2(0.), vec3(0., 0., 1.), i);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ float rand(float seed){
|
|||||||
}
|
}
|
||||||
|
|
||||||
float rand(vec2 n){
|
float rand(vec2 n){
|
||||||
return rand(n.x * 1234 + n.y * 9876);
|
return rand(n.x * 1234. + n.y * 9876.);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
+38
-21
@@ -2,28 +2,45 @@
|
|||||||
#define INC_SENTENCES
|
#define INC_SENTENCES
|
||||||
|
|
||||||
#define SENTENCE_COUNT 17
|
#define SENTENCE_COUNT 17
|
||||||
|
#define SENTENCE_MAX_LENGTH 20
|
||||||
|
|
||||||
const int sentences[SENTENCE_COUNT][20] = {
|
const int sentences[] = int[SENTENCE_COUNT * SENTENCE_MAX_LENGTH](
|
||||||
{0x66, 0x6F, 0x72, 0x67, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
|
0x66, 0x6F, 0x72, 0x67, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
{0x46, 0x4F, 0x52, 0x47, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
|
0x46, 0x4F, 0x52, 0x47, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
{0x46, 0x2E, 0x4F, 0x2E, 0x52, 0x2E, 0x47, 0x2E, 0x45, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
|
0x46, 0x2E, 0x4F, 0x2E, 0x52, 0x2E, 0x47, 0x2E, 0x45, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
{0x46, 0x75, 0x73, 0x69, 0x6F, 0x6E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
|
0x46, 0x75, 0x73, 0x69, 0x6F, 0x6E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
{0x4F, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
|
0x4F, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
{0x52, 0x65, 0x61, 0x6C, 0x2D, 0x74, 0x69, 0x6D, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
|
0x52, 0x65, 0x61, 0x6C, 0x2D, 0x74, 0x69, 0x6D, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
{0x47, 0x65, 0x6E, 0x65, 0x72, 0x61, 0x74, 0x69, 0x76, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
|
0x47, 0x65, 0x6E, 0x65, 0x72, 0x61, 0x74, 0x69, 0x76, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
{0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
|
0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
{0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6E, 0x67, 0x20, 0x79, 0x6F, 0x75, 0x20, 0x73, 0x65, 0x65, 0x00, 0x00},
|
0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6E, 0x67, 0x20, 0x79, 0x6F, 0x75, 0x20, 0x73, 0x65, 0x65, 0x00, 0x00,
|
||||||
{0x50, 0x69, 0x78, 0x65, 0x6C, 0x20, 0x62, 0x79, 0x20, 0x70, 0x69, 0x78, 0x65, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
|
0x50, 0x69, 0x78, 0x65, 0x6C, 0x20, 0x62, 0x79, 0x20, 0x70, 0x69, 0x78, 0x65, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
{0x4C, 0x69, 0x76, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
|
0x4C, 0x69, 0x76, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
{0x47, 0x65, 0x6E, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
|
0x47, 0x65, 0x6E, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
{0x43, 0x6F, 0x6E, 0x74, 0x72, 0x6F, 0x6C, 0x6C, 0x65, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
|
0x43, 0x6F, 0x6E, 0x74, 0x72, 0x6F, 0x6C, 0x6C, 0x65, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
{0xE3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
|
0xE3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
{0x4B, 0x6C, 0x65, 0xE3, 0x65, 0x6B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
|
0x4B, 0x6C, 0x65, 0xE3, 0x65, 0x6B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
{0x43, 0x6F, 0x64, 0x65, 0x20, 0x61, 0x73, 0x20, 0x61, 0x72, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
|
0x43, 0x6F, 0x64, 0x65, 0x20, 0x61, 0x73, 0x20, 0x61, 0x72, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
{0x41, 0x72, 0x74, 0x20, 0x61, 0x73, 0x20, 0x63, 0x6F, 0x64, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
|
0x41, 0x72, 0x74, 0x20, 0x61, 0x73, 0x20, 0x63, 0x6F, 0x64, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||||
};
|
);
|
||||||
|
|
||||||
const int lengths[SENTENCE_COUNT] = {
|
const int lengths[] = int[SENTENCE_COUNT](
|
||||||
5, 5, 10, 6, 2, 9, 10, 7, 18, 14, 4, 9, 10, 1, 6, 11, 11
|
5, 5, 10, 6, 2, 9, 10, 7, 18, 14, 4, 9, 10, 1, 6, 11, 11
|
||||||
};
|
);
|
||||||
|
|
||||||
|
float write_sentence(vec2 uv, vec2 pos, int n)
|
||||||
|
{
|
||||||
|
float d = 0;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < SENTENCE_MAX_LENGTH; i++) {
|
||||||
|
if (sentences[n * SENTENCE_MAX_LENGTH + i] == 0) {
|
||||||
|
return d;
|
||||||
|
}
|
||||||
|
|
||||||
|
d += char_at(uv, pos + vec2(i, 0), sentences[n * SENTENCE_MAX_LENGTH + i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return d;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
+71
-72
@@ -9,8 +9,6 @@ uniform int iDemo;
|
|||||||
|
|
||||||
uniform sampler2D iTex0;
|
uniform sampler2D iTex0;
|
||||||
|
|
||||||
subroutine vec4 src_stage_sub(vec2 vUV, 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)
|
vec4 src_thru(vec2 vUV, sampler2D tex, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)
|
||||||
{
|
{
|
||||||
// start
|
// start
|
||||||
@@ -30,7 +28,7 @@ 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.0, c - (1 - light) * 2.0, step(.5, light));
|
||||||
|
|
||||||
// output
|
// output
|
||||||
|
|
||||||
@@ -38,13 +36,13 @@ 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)
|
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)
|
vec4 src_2(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)
|
||||||
{
|
{
|
||||||
// start
|
// start
|
||||||
|
|
||||||
@@ -64,14 +62,14 @@ subroutine ( src_stage_sub ) vec4 src_2(vec2 vUV, int seed, vec3 b1, vec2 f1, ve
|
|||||||
uv2.y *= cos(uv2.x * 5 * distort);
|
uv2.y *= cos(uv2.x * 5 * distort);
|
||||||
uv2 *= rot(rotation + iBeats / 16);
|
uv2 *= rot(rotation + iBeats / 16);
|
||||||
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)
|
vec4 src_3(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)
|
||||||
{
|
{
|
||||||
// start
|
// start
|
||||||
|
|
||||||
@@ -92,7 +90,7 @@ subroutine ( src_stage_sub ) vec4 src_3(vec2 vUV, int seed, vec3 b1, vec2 f1, ve
|
|||||||
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 / 16);
|
||||||
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));
|
||||||
|
|
||||||
@@ -100,7 +98,7 @@ subroutine ( src_stage_sub ) vec4 src_3(vec2 vUV, int seed, vec3 b1, vec2 f1, ve
|
|||||||
}
|
}
|
||||||
|
|
||||||
// // SRC 4 : circuit
|
// // 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)
|
// vec4 src_4(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)
|
||||||
// {
|
// {
|
||||||
// // start
|
// // start
|
||||||
|
|
||||||
@@ -111,8 +109,8 @@ subroutine ( src_stage_sub ) vec4 src_3(vec2 vUV, int seed, vec3 b1, vec2 f1, ve
|
|||||||
// // controls
|
// // controls
|
||||||
|
|
||||||
// float z = 10 + magic(f1, b1, 123) * 20;
|
// float z = 10 + magic(f1, b1, 123) * 20;
|
||||||
// float h = magic(f2, b2, seed + 20) * 0.8 + 0.1;
|
// float h = magic(f2, b2, seed + 20) * .8 + .1;
|
||||||
// float v = magic_reverse(f3, b3, seed + 30) * 0.8 + 0.1;
|
// float v = magic_reverse(f3, b3, seed + 30) * .8 + .1;
|
||||||
|
|
||||||
// // logic
|
// // logic
|
||||||
|
|
||||||
@@ -130,30 +128,30 @@ subroutine ( src_stage_sub ) vec4 src_3(vec2 vUV, int seed, vec3 b1, vec2 f1, ve
|
|||||||
// bool up_down = up && down;
|
// bool up_down = up && down;
|
||||||
// bool left_right = left && right;
|
// bool left_right = left && right;
|
||||||
|
|
||||||
// uv1 = mod(uv1, 1.0) - 0.5;
|
// uv1 = mod(uv1, 1.0) - .5;
|
||||||
|
|
||||||
// const float t = 0.1;
|
// const float t = .1;
|
||||||
|
|
||||||
// float f = 0;
|
// float f = 0;
|
||||||
// int c = 0;
|
// int c = 0;
|
||||||
|
|
||||||
// if (up) {
|
// if (up) {
|
||||||
// f += stripe(uv1.x, -t * 0.5, t * 0.5) * step(-t * 0.5, uv1.y);
|
// f += stripe(uv1.x, -t * .5, t * .5) * step(-t * .5, uv1.y);
|
||||||
// c += 1;
|
// c += 1;
|
||||||
// }
|
// }
|
||||||
|
|
||||||
// if (down) {
|
// if (down) {
|
||||||
// f += stripe(uv1.x, -t * 0.5, t * 0.5) * istep(t * 0.5, uv1.y);
|
// f += stripe(uv1.x, -t * .5, t * .5) * istep(t * .5, uv1.y);
|
||||||
// c += 1;
|
// c += 1;
|
||||||
// }
|
// }
|
||||||
|
|
||||||
// if (left) {
|
// if (left) {
|
||||||
// f += stripe(uv1.y, -t * 0.5, t * 0.5) * istep(t * 0.5, uv1.x);
|
// f += stripe(uv1.y, -t * .5, t * .5) * istep(t * .5, uv1.x);
|
||||||
// c += 1;
|
// c += 1;
|
||||||
// }
|
// }
|
||||||
|
|
||||||
// if (right) {
|
// if (right) {
|
||||||
// f += stripe(uv1.y, -t * 0.5, t * 0.5) * step(-t * 0.5, uv1.x);
|
// f += stripe(uv1.y, -t * .5, t * .5) * step(-t * .5, uv1.x);
|
||||||
// c += 1;
|
// c += 1;
|
||||||
// }
|
// }
|
||||||
|
|
||||||
@@ -167,30 +165,30 @@ subroutine ( src_stage_sub ) vec4 src_3(vec2 vUV, int seed, vec3 b1, vec2 f1, ve
|
|||||||
// if (up_down) {
|
// if (up_down) {
|
||||||
// uv1.xy = uv1.yx;
|
// uv1.xy = uv1.yx;
|
||||||
// }
|
// }
|
||||||
// if (rand(s0 + 3) < 0.5) {
|
// if (rand(s0 + 3) < .5) {
|
||||||
// uv1.x = -uv1.x;
|
// uv1.x = -uv1.x;
|
||||||
// }
|
// }
|
||||||
// float k = rand(s0 + 4) * 60;
|
// float k = rand(s0 + 4) * 60;
|
||||||
// f -= rect(uv1, vec2(0), vec2(t * 3, t));
|
// f -= rect(uv1, vec2(0), vec2(t * 3, t));
|
||||||
// f = max(0, f);
|
// f = max(0, f);
|
||||||
// if (k < 10) { // resistor
|
// 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 * 3.25, -t * .5), vec2(-t * 2.5, t * 2), t * .75);
|
||||||
// f += line(uv1, vec2(-t * 2.5, t * 2), vec2(-t * 1.5, -t * 2), t * 0.75);
|
// f += line(uv1, vec2(-t * 2.5, t * 2), vec2(-t * 1.5, -t * 2), t * .75);
|
||||||
// f += line(uv1, vec2(-t * 1.5, -t * 2), vec2(-t * 0.5, t * 2), t * 0.75);
|
// f += line(uv1, vec2(-t * 1.5, -t * 2), vec2(-t * .5, t * 2), t * .75);
|
||||||
// f += line(uv1, vec2(-t * 0.5, t * 2), vec2(t * 0.5, -t * 2), t * 0.75);
|
// f += line(uv1, vec2(-t * .5, t * 2), vec2(t * .5, -t * 2), t * .75);
|
||||||
// f += line(uv1, vec2(t * 0.5, -t * 2), vec2(t * 1.5, t * 2), t * 0.75);
|
// f += line(uv1, vec2(t * .5, -t * 2), vec2(t * 1.5, t * 2), t * .75);
|
||||||
// f += line(uv1, vec2(t * 1.5, t * 2), vec2(t * 2.5, -t * 2), t * 0.75);
|
// f += line(uv1, vec2(t * 1.5, t * 2), vec2(t * 2.5, -t * 2), t * .75);
|
||||||
// f += line(uv1, vec2(t * 2.5, -t * 2), vec2(t * 3.25, t * 0.5), t * 0.75);
|
// f += line(uv1, vec2(t * 2.5, -t * 2), vec2(t * 3.25, t * .5), t * .75);
|
||||||
// } else if (k < 20) { // capacitor
|
// } 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 * .5));
|
||||||
// f += rect(uv1, vec2(t * 2, 0), vec2(t, t * 0.5));
|
// f += rect(uv1, vec2(t * 2, 0), vec2(t, t * .5));
|
||||||
// f += rect(uv1, vec2(t, 0), vec2(t * 0.5, t * 3.5));
|
// f += rect(uv1, vec2(t, 0), vec2(t * .5, t * 3.5));
|
||||||
// f += rect(uv1, vec2(-t, 0), vec2(t * 0.5, t * 3.5));
|
// f += rect(uv1, vec2(-t, 0), vec2(t * .5, t * 3.5));
|
||||||
// } else if (k < 30) { // diode
|
// } 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 += 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 * .5, t * 3));
|
||||||
// f += rect(uv1, vec2(-t * 2.5, 0), vec2(t * 0.5, t * 3));
|
// f += rect(uv1, vec2(-t * 2.5, 0), vec2(t * .5, t * 3));
|
||||||
// } else if (k < 40) { // lamp
|
// } else if (k < 40) { // lamp
|
||||||
// f += istep(t * 3.5, length(uv1));
|
// f += istep(t * 3.5, length(uv1));
|
||||||
// f -= istep(t * 2.5, length(uv1));
|
// f -= istep(t * 2.5, length(uv1));
|
||||||
@@ -203,7 +201,7 @@ subroutine ( src_stage_sub ) vec4 src_3(vec2 vUV, int seed, vec3 b1, vec2 f1, ve
|
|||||||
// f -= 2 * istep(t, 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(0, 0)));
|
||||||
// f -= 2 * istep(t, length(uv1 - vec2(-t * 2.5, 0)));
|
// f -= 2 * istep(t, length(uv1 - vec2(-t * 2.5, 0)));
|
||||||
// f *= step(-t * 0.5, uv1.y);
|
// f *= step(-t * .5, uv1.y);
|
||||||
// } else if (k < 60) { // switch
|
// } 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 += istep(t, length(uv1 + vec2(t * 2.5, 0)));
|
// f += istep(t, length(uv1 + vec2(t * 2.5, 0)));
|
||||||
@@ -222,9 +220,9 @@ subroutine ( src_stage_sub ) vec4 src_3(vec2 vUV, int seed, vec3 b1, vec2 f1, ve
|
|||||||
// if (k < 10) {
|
// if (k < 10) {
|
||||||
// f -= rect(uv1, vec2(0), vec2(t * 3));
|
// f -= rect(uv1, vec2(0), vec2(t * 3));
|
||||||
// f = max(0, f);
|
// f = max(0, f);
|
||||||
// f += rect(uv1, vec2(-t * 3, 0), vec2(t * 0.5, t * 3));
|
// f += rect(uv1, vec2(-t * 3, 0), vec2(t * .5, t * 3));
|
||||||
// f += line(uv1, vec2(t * 0.25, t * 3.25), vec2(-t * 3, t), t);
|
// f += line(uv1, vec2(t * .25, t * 3.25), vec2(-t * 3, t), t);
|
||||||
// f += line(uv1, vec2(t * 0.25, -t * 3.25), vec2(-t * 3, -t), t);
|
// f += line(uv1, vec2(t * .25, -t * 3.25), vec2(-t * 3, -t), t);
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
|
|
||||||
@@ -232,7 +230,7 @@ subroutine ( src_stage_sub ) vec4 src_3(vec2 vUV, int seed, vec3 b1, vec2 f1, ve
|
|||||||
// }
|
// }
|
||||||
|
|
||||||
// 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)
|
vec4 src_4(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)
|
||||||
{
|
{
|
||||||
// start
|
// start
|
||||||
|
|
||||||
@@ -250,7 +248,7 @@ subroutine ( src_stage_sub ) vec4 src_4(vec2 vUV, int seed, vec3 b1, vec2 f1, ve
|
|||||||
|
|
||||||
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);
|
||||||
|
|
||||||
@@ -260,7 +258,7 @@ subroutine ( src_stage_sub ) vec4 src_4(vec2 vUV, int seed, vec3 b1, vec2 f1, ve
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 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)
|
vec4 src_5(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)
|
||||||
{
|
{
|
||||||
// start
|
// start
|
||||||
|
|
||||||
@@ -282,15 +280,15 @@ subroutine ( src_stage_sub ) vec4 src_5(vec2 vUV, int seed, vec3 b1, vec2 f1, ve
|
|||||||
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)
|
vec4 src_6(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)
|
||||||
{
|
{
|
||||||
return src_1(vUV, seed, b1, f1, b2, f2, b3, f3);
|
return src_1(vUV, seed, b1, f1, b2, f2, b3, f3);
|
||||||
}
|
}
|
||||||
@@ -298,7 +296,7 @@ subroutine ( src_stage_sub ) vec4 src_6(vec2 vUV, int seed, vec3 b1, vec2 f1, ve
|
|||||||
#include inc_cp437.glsl
|
#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)
|
vec4 src_7(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)
|
||||||
{
|
{
|
||||||
// start
|
// start
|
||||||
|
|
||||||
@@ -321,7 +319,7 @@ subroutine ( src_stage_sub ) vec4 src_7(vec2 vUV, int seed, vec3 b1, vec2 f1, ve
|
|||||||
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);
|
||||||
@@ -334,7 +332,7 @@ subroutine ( src_stage_sub ) vec4 src_7(vec2 vUV, int seed, vec3 b1, vec2 f1, ve
|
|||||||
|
|
||||||
#include inc_sentences.glsl
|
#include inc_sentences.glsl
|
||||||
|
|
||||||
subroutine ( src_stage_sub ) vec4 src_8(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)
|
vec4 src_8(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)
|
||||||
{
|
{
|
||||||
// start
|
// start
|
||||||
|
|
||||||
@@ -353,17 +351,17 @@ subroutine ( src_stage_sub ) vec4 src_8(vec2 vUV, int seed, vec3 b1, vec2 f1, ve
|
|||||||
|
|
||||||
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_20(uv2, vec2(-float(lengths[s]) * 0.5, 0), sentences[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)
|
vec4 src_9(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)
|
||||||
{
|
{
|
||||||
// start
|
// start
|
||||||
|
|
||||||
@@ -383,22 +381,22 @@ subroutine ( src_stage_sub ) vec4 src_9(vec2 vUV, int seed, vec3 b1, vec2 f1, ve
|
|||||||
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_20(uv3, vec2(-slen * 0.5, 0), sentences[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)
|
vec4 src_10(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)
|
||||||
{
|
{
|
||||||
// start
|
// start
|
||||||
|
|
||||||
@@ -410,8 +408,8 @@ subroutine ( src_stage_sub ) vec4 src_10(vec2 vUV, int seed, vec3 b1, vec2 f1, v
|
|||||||
|
|
||||||
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
|
||||||
|
|
||||||
@@ -437,7 +435,7 @@ subroutine ( src_stage_sub ) vec4 src_10(vec2 vUV, int seed, vec3 b1, vec2 f1, v
|
|||||||
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.0) - .5;
|
||||||
|
|
||||||
float f = 0;
|
float f = 0;
|
||||||
|
|
||||||
@@ -450,13 +448,13 @@ subroutine ( src_stage_sub ) vec4 src_10(vec2 vUV, int seed, vec3 b1, vec2 f1, v
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 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)
|
vec4 src_11(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)
|
||||||
{
|
{
|
||||||
return src_1(vUV, seed, b1, f1, b2, f2, b3, f3);
|
return src_1(vUV, seed, b1, f1, b2, f2, b3, f3);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 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)
|
vec4 src_12(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)
|
||||||
{
|
{
|
||||||
// start
|
// start
|
||||||
|
|
||||||
@@ -490,7 +488,7 @@ subroutine ( src_stage_sub ) vec4 src_12(vec2 vUV, int seed, vec3 b1, vec2 f1, v
|
|||||||
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));
|
||||||
@@ -499,7 +497,7 @@ subroutine ( src_stage_sub ) vec4 src_12(vec2 vUV, int seed, vec3 b1, vec2 f1, v
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 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)
|
vec4 src_13(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)
|
||||||
{
|
{
|
||||||
// start
|
// start
|
||||||
|
|
||||||
@@ -510,7 +508,7 @@ subroutine ( src_stage_sub ) vec4 src_13(vec2 vUV, int seed, vec3 b1, vec2 f1, v
|
|||||||
// 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
|
||||||
@@ -525,13 +523,13 @@ subroutine ( src_stage_sub ) vec4 src_13(vec2 vUV, int seed, vec3 b1, vec2 f1, v
|
|||||||
|
|
||||||
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)
|
vec4 src_14(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)
|
||||||
{
|
{
|
||||||
// start
|
// start
|
||||||
|
|
||||||
@@ -541,10 +539,10 @@ subroutine ( src_stage_sub ) vec4 src_14(vec2 vUV, int seed, vec3 b1, vec2 f1, v
|
|||||||
|
|
||||||
// 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
|
||||||
@@ -567,19 +565,20 @@ subroutine ( src_stage_sub ) vec4 src_14(vec2 vUV, int seed, vec3 b1, vec2 f1, v
|
|||||||
|
|
||||||
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
|
vec4 src_stage(int src, 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);
|
if (src == 15) {
|
||||||
|
src = int(randTime(seed + 100) * 14);
|
||||||
|
}
|
||||||
|
|
||||||
if (src == 0) {
|
if (src == 0) {
|
||||||
return src_1(vUV, seed, b1, f1, b2, f2, b3, f3);
|
return src_1(vUV, seed, b1, f1, b2, f2, b3, f3);
|
||||||
|
|||||||
+11
-11
@@ -21,33 +21,33 @@ float randTime(float seed){
|
|||||||
|
|
||||||
float divider(float x)
|
float divider(float x)
|
||||||
{
|
{
|
||||||
if (x < 0.1) return 0;
|
if (x < .1) return 0.;
|
||||||
if (x < 0.2) return 0.125;
|
if (x < .2) return .125;
|
||||||
if (x < 0.3) return 0.25;
|
if (x < .3) return .25;
|
||||||
if (x < 0.4) return 0.5;
|
if (x < .4) return .5;
|
||||||
if (x < 0.6) return 1;
|
if (x < .6) return 1.;
|
||||||
if (x < 0.8) return 2;
|
if (x < .8) return 2.;
|
||||||
return 4;
|
return 4.;
|
||||||
}
|
}
|
||||||
|
|
||||||
float modTime(float k, float k2)
|
float modTime(float k, float k2)
|
||||||
{
|
{
|
||||||
return mod(divider(k) * iBeats * k2 / 4, 1);
|
return mod(divider(k) * iBeats * k2 / 4., 1.);
|
||||||
}
|
}
|
||||||
|
|
||||||
float modTime(float k)
|
float modTime(float k)
|
||||||
{
|
{
|
||||||
return modTime(k, 1.0);
|
return modTime(k, 1.);
|
||||||
}
|
}
|
||||||
|
|
||||||
float sinTime(float k)
|
float sinTime(float k)
|
||||||
{
|
{
|
||||||
return sin(modTime(k, 0.5) * 2 * PI);
|
return sin(modTime(k, .5) * 2. * PI);
|
||||||
}
|
}
|
||||||
|
|
||||||
float cosTime(float k)
|
float cosTime(float k)
|
||||||
{
|
{
|
||||||
return cos(modTime(k, 0.5) * 2 * PI);
|
return cos(modTime(k, .5) * 2. * PI);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user