- Sign In
- Sign Up
10 PRINT CHR$(205.5+RND(1))
This piece was written exclusively so I can test the uniforms I'm implementing on XYZ Shader Editor.
Created by marcogomez on Fri, 22 Oct 2021 11:34:30 GMT.
#version 300 es // ╔═════════════╦════════════════╗ // ║ Marco Gomez ║ https://mgz.me ║ // ╚═════════════╩════════════════╝ precision highp float; uniform sampler2D prgm3Texture; uniform vec2 resolution; out vec4 fragColor; void main(void) { vec2 uv = gl_FragCoord.xy / resolution.xy; vec4 tex = texture(prgm3Texture, uv); fragColor = tex; }
#version 300 es // ╔═════════════╦════════════════╗ // ║ Marco Gomez ║ https://mgz.me ║ // ╚═════════════╩════════════════╝ precision highp float; uniform sampler2D textTexture; uniform vec4 date; uniform vec2 resolution; uniform float framerate; uniform int frame; uniform float time; uniform float deltatime; uniform vec2 mouselerp; uniform vec2 mouse; uniform float fft; // The average of all 512 values /* uniform float fftLow; // The average of the first (lower) third of the fft values Array uniform float fftMid; // The average of the second (mid) third of the fft values Array uniform float fftHigh; // The average of the third (high) third of the fft values Array uniform float fftLowerHalf; // The average of the lower half of the fft values Array uniform float fftUpperHalf; // The average of the upper half of the fft values Array */ uniform float fftNormalized; /* uniform float fftLowNormalized; uniform float fftMidNormalized; uniform float fftHighNormalized; uniform float fftLowerHalfNormalized; uniform float fftUpperHalfNormalized; */ out vec4 fragColor; const float PI = acos(-1.0); const int _ = 32; /* const int _EQ = 61, _GT = 62, _QUEST = 63, _AT = 64; const int _EXCL = 33, _QUOTE = 34, _SHARP = 35, _DOLLAR = 36, _PERCENT = 37, _AMPER = 38; */ const int _SQUOTE = 39, _LPAR = 40, _RPAR = 41, _ASTERISK = 42, _PLUS = 43, _COMMA = 44; const int _MINUS = 45, _DOT = 46, _SLASH = 47, _COLON = 58, _SEMICOLON = 59, _LT = 60; const int _0 = 48, _1 = 49, _2 = 50, _3 = 51, _4 = 52, _5 = 53, _6 = 54, _7 = 55, _8 = 56, _9 = 57; const int _A = 65, _B = 66, _C = 67, _D = 68, _E = 69, _F = 70, _G = 71, _H = 72, _I = 73; const int _J = 74, _K = 75, _L = 76, _M = 77, _N = 78, _O = 79, _P = 80, _Q = 81, _R = 82; const int _S = 83, _T = 84, _U = 85, _V = 86, _W = 87, _X = 88, _Y = 89, _Z = 90; const int _a = 97, _b = 98, _c = 99, _d = 100, _e = 101, _f = 102, _g = 103, _h = 104, _i = 105; const int _j = 106, _k = 107, _l = 108, _m = 109, _n = 110, _o = 111, _p = 112, _q = 113, _r = 114; const int _s = 115, _t = 116, _u = 117, _v = 118, _w = 119, _x = 120, _y = 121, _z = 122; /* const int _alpha = 128, _beta = 129, _gamma = 130, _delta = 131, _epsilon = 132, _theta = 133; const int _lambda = 134, _mu = 135, _xi = 136, _pi = 137, _rho = 138, _sigma = 139; const int _tau = 140, _phi = 141, _psi = 142, _omega = 143; const int _GAMMA = 144, _DELTA = 145, _THETA = 146, _LAMBDA = 147, _PI = 148, _SIGMA = 149; const int _PHI = 150, _PSI = 151, _OMEGA = 152; */ const int[] wX = int[](_x); const int[] wXSpace = int[](_,_x,_); const int[] wSlash = int[](_SLASH); const int[] wColon = int[](_COLON); const int[] wFPS = int[](_,_f,_p,_s); const int[] wSysTime = int[](_,_,_,_s,_y,_s,_t,_e,_m,_,_t,_i,_m,_e,_COLON,_); const int[] wDate = int[](_,_,_,_,_,_,_,_,_,_,_d,_a,_t,_e,_COLON,_); const int[] wResolution = int[](_,_,_,_,_r,_e,_s,_o,_l,_u,_t,_i,_o,_n,_COLON,_); const int[] wFrameRate = int[](_,_,_,_,_,_f,_r,_a,_m,_e,_r,_a,_t,_e,_COLON,_); const int[] wFrame = int[](_,_,_,_,_,_,_,_,_,_f,_r,_a,_m,_e,_COLON,_); const int[] wTime = int[](_,_,_,_,_,_,_,_,_,_,_t,_i,_m,_e,_COLON,_); const int[] wDeltaTime = int[](_,_,_,_,_,_d,_e,_l,_t,_a,_t,_i,_m,_e,_COLON,_); const int[] wMouseLerp = int[](_,_,_,_,_,_m,_o,_u,_s,_e,_l,_e,_r,_p,_COLON,_); const int[] wMouse = int[](_,_,_,_,_,_,_,_,_,_m,_o,_u,_s,_e,_COLON,_); const int[] wFFT = int[](_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_f,_f,_t,_COLON,_); const int[] wFFTNormalized = int[](_,_,_,_,_,_,_,_,_,_,_,_f,_f,_t,_N,_o,_r,_m,_a,_l,_i,_z,_e,_d,_COLON,_); #define R resolution uint hash(uint x) { x += (x << 10u); x ^= (x >> 6u); x += (x << 3u); x ^= (x >> 11u); x += (x << 15u); return x; } uint hash(uvec2 v) { return hash(v.x ^ hash(v.y) ); } uint hash(uvec3 v) { return hash(v.x ^ hash(v.y) ^ hash(v.z) ); } uint hash(uvec4 v) { return hash(v.x ^ hash(v.y) ^ hash(v.z) ^ hash(v.w)); } float floatConstruct(uint m) { const uint ieeeMantissa = 0x007FFFFFu; // binary32 mantissa bitmask const uint ieeeOne = 0x3F800000u; // 1.0 in IEEE binary32 m &= ieeeMantissa; // Keep only mantissa bits (fractional part) m |= ieeeOne; // Add fractional part to 1.0 float f = uintBitsToFloat(m); // Range [1:2] return f - 1.0; // Range [0:1] } float random(float x) { return floatConstruct(hash(floatBitsToUint(x))); } float random(vec2 v) { return floatConstruct(hash(floatBitsToUint(v))); } float random(vec3 v) { return floatConstruct(hash(floatBitsToUint(v))); } float random(vec4 v) { return floatConstruct(hash(floatBitsToUint(v))); } int powInt(int a, int b) { int r = 1; for (int i = 0; i++ < b; r *= a); return r; } int intLog(int x, int base) { if (x < 1) { return 0; } int res = 0; for(;x >= base; res++) { x /= base; } return res; } float periodicDirac(float x, float period, float s) { return pow(abs(cos(x * (PI / period))), s); } struct PrintPosition { vec2 uv, pos, resolution; float scale; }; struct PrintStyle{ vec3 charColor, outlineColor; float outlineSize; }; PrintStyle NewPrintStyle(vec3 col1, vec3 col2, float w) { return PrintStyle(col1, col2, w); } PrintStyle NewPrintStyle(vec3 col1, vec3 col2) { return PrintStyle(col1, col2, 0.05); } PrintStyle NewPrintStyle(vec3 col) { return PrintStyle(col, col, 0.0); } #define nextLine(p) p.pos.y -= scale * 1.5, p = PrintPosition((gl_FragCoord.xy - p.pos * resolution.xy) / (p.scale * resolution.x), p.pos, resolution.xy, p.scale); void writeChar(int char, PrintStyle style, float w, float xOffset, inout PrintPosition p, inout vec3 color) { vec2 uv = p.uv; uv.x += xOffset; float outlineSize = style.outlineSize; if (uv.x > 0.0 && uv.x < w && uv.y > 0.0 && uv.y < 1.0) { vec4 t = texture(textTexture, (uv + vec2(char % 16, 15 - char / 16)) / 16.0); color = mix(color, style.outlineColor, smoothstep(0.0, -1.0 / p.resolution.y, t.a - outlineSize - 0.5)); color = mix(color, style.charColor, t.r); } uv.x -= w; p.uv = uv; } float defaultChW = 0.8, defaultChOff = 0.3; void writeStandardChar(int char, PrintStyle style, inout PrintPosition p, inout vec3 color) { writeChar(char, style, defaultChW, defaultChOff, p, color); } #define writeText(text, style, p, color) {\ int chars_per_line = int((1.0 - p.pos.x) / (p.scale * (defaultChW - defaultChOff)));\ for (int i = 0; i < text.length(); i++) {\ writeStandardChar(text[i], style, p, color);\ if ((i + 1) % chars_per_line == 0) { nextLine(p); }\ }\ } #define writeWord(word, style, p, color)\ for (int i = 0; i < word.length(); i++)\ writeStandardChar(word[i], style, p, color); void writeNumber(float number, int minIntDigits, int decDigits, PrintStyle style, inout PrintPosition p, inout vec3 color) { if (isnan(number)) { PrintStyle NaN_style = PrintStyle(vec3(0.0), vec3(1.0, 0.0, 0.0), 0.05); writeWord(int[](_N,_a,_N), NaN_style, p, color); } else if (isinf(number)) { PrintStyle Inf_style = PrintStyle(vec3(0.0), vec3(0.0, 0.5, 1.0), 0.05); writeWord(int[](_I,_n,_f), Inf_style, p, color); } else { if (number < -0.001 && number != 0.0) { writeStandardChar(_MINUS, style, p, color); } float decimal_digits_factor = float(powInt(10, decDigits)); int rounded_number = int(round(abs(number) * decimal_digits_factor)); int int_part = rounded_number / int(decimal_digits_factor); int int_digits = 1 + intLog(int_part, 10); for (int i = 0; i++ < minIntDigits - int_digits;) { writeStandardChar(_0, style, p, color); } int digits = int_digits + decDigits; for (int x = powInt(10, digits); digits > 0; digits--) { if (digits == decDigits) { writeChar(_DOT, style, 0.65, 0.45, p, color); } writeStandardChar(_0 + rounded_number / (x /= 10), style, p, color); rounded_number %= x; } } } void writeNumber(int number, int minIntDigits, PrintStyle style, inout PrintPosition p, inout vec3 color) { writeNumber(float(number), minIntDigits, 0, style, p, color); } #define WriteChar(char, style) writeStandardChar(char, style, p, color) #define WriteText(text, style) writeText(text, style, p, color) #define WW(word, style) writeWord(word, style, p, color) #define WN(number, minIntDigits, decDigits, style) writeNumber(number, minIntDigits, decDigits, style, p, color) float truchet(vec2 uv) { uv *= vec2(5.0 / 3.0, 1.0); uv *= 24.0; uv.y -= floor(time * 1.755); vec2 gv = fract(uv) - 0.5; vec2 id = floor(uv); float width = 0.15; float r = random(id); if (r < 0.5) { gv.x *= -1.0; } float mask = smoothstep(0.01, -0.01, abs(gv.x + gv.y) - width); return mask; } float sdBox(vec2 p, vec2 b) { vec2 d = abs(p) - b; return min(max(d.x, d.y), 0.0) + length(max(d, 0.0)); } void main(void) { float t = time * 1e3; vec2 uv = gl_FragCoord.xy / resolution.xy; float px = 1.0 / resolution.x; const vec4 rates = vec4(240.0, 144.0, 120.0, 60.0); vec4 d = abs(rates - framerate); float refresh = ( (d.x < d.y && d.x < d.z && d.x < d.w) ? rates.x : (d.y < d.z && d.y < d.w) ? rates.y : (d.z < d.w) ? rates.z : rates.w ); float trp = truchet(uv) * 0.6; vec3 rp = vec3(gl_FragCoord.xy, t); float rnd = random(rp); vec3 color = vec3(0.0); if (uv.x < 0.5) { color = clamp((vec3(rnd * uv.x) * 0.4) + mix(trp, trp * rnd, 0.1), 0.0, 1.0) * 0.9; } else if (uv.x > 0.499 && uv.x < 0.501) { color = vec3(0.5); } else if (uv.x > 0.501 && uv.y < 10.0 / resolution.y) { color = vec3(0.1) * rnd; color += ( 1.0 - smoothstep( px, 0.0, sdBox( uv - vec2(0.0, 0.01), vec2(refresh * (deltatime / 2000.0) + 0.25, 0.01) ) ) ); } PrintPosition p; vec2 pos = vec2(320.0, 335.0) / vec2(640.0, 360.0); float scale = 1.0 / 35.0; p = PrintPosition((gl_FragCoord.xy - pos * resolution.xy) / (scale * resolution.x), pos, resolution.xy, scale); PrintStyle wt = NewPrintStyle(vec3(1.0), vec3(0.0)); float h = floor(date.w / 3600.0); float m = mod(floor(date.w / 60.0), 60.0); float s = mod(date.w, 60.0); WW(wSysTime, wt); WN(h, 2, 0, wt); WW(wColon, wt); WN(m, 2, 0, wt); WW(wColon, wt); WN(s, 2, 2, wt); nextLine(p); nextLine(p); WW(wDate, wt); WN(date.x, 4, 0, wt); WW(wSlash, wt); WN(date.y, 2, 0, wt); WW(wSlash, wt); WN(date.z, 2, 0, wt); WW(wColon, wt); WN(date.w, 5, 2, wt); nextLine(p); WW(wResolution, wt); WN(resolution.x, 2, 0, wt); WW(wX, wt); WN(resolution.y, 2, 0, wt); nextLine(p); WW(wFrameRate, wt); WN(framerate, 3, 2, wt); nextLine(p); WW(wFrame, wt); WN(float(frame), 1, 0, wt); nextLine(p); WW(wTime, wt); WN(time, 1, 2, wt); nextLine(p); WW(wDeltaTime, wt); WN(deltatime, 1, 2, wt); nextLine(p); nextLine(p); WW(wMouseLerp, wt); WN(mouselerp.x, 1, 2, wt); WW(wXSpace, wt); WN(mouselerp.y, 1, 2, wt); nextLine(p); WW(wMouse, wt); WN(mouse.x, 1, 2, wt); WW(wXSpace, wt); WN(mouse.y, 1, 2, wt); nextLine(p); nextLine(p); WW(wFFT, wt); WN(fft, 1, 2, wt); nextLine(p); WW(wFFTNormalized, wt); WN(fftNormalized, 1, 2, wt); nextLine(p); pos = vec2(477.0, 10.0) / vec2(640.0, 360.0); p = PrintPosition((gl_FragCoord.xy - pos * resolution.xy) / (scale * resolution.x), pos, resolution.xy, scale); WW(int[](19,_), wt); WN(refresh, 3, 0, wt); WW(wFPS, wt); fragColor = vec4(vec3(0.0, color.x, 0.0), 1.0); }
#version 300 es // ╔═════════════╦════════════════╗ // ║ Marco Gomez ║ https://mgz.me ║ // ╚═════════════╩════════════════╝ precision highp float; uniform sampler2D prgm1Texture; uniform vec2 resolution; uniform vec2 mouselerp; uniform float time; out vec4 fragColor; #define textureInput prgm1Texture #define ss smoothstep const float PI = acos(-1.0); const float TAU = PI * 2.0; const vec2 hashv2 = vec2(12.9898, 78.233); const float hashS = 43758.5453123; const int blurIter = 8; const float blurSize = 0.07; const float width = 0.49; const float height = 0.3; float gaussian(float z, float u, float o) { return ( (1.0 / (o * sqrt(TAU))) * (exp(-(((z - u) * (z - u)) / (2.0 * (o * o))))) ); } vec3 gaussgrain(float t) { vec2 ps = vec2(1.0) / resolution.xy; vec2 uv = gl_FragCoord.xy * ps; float seed = dot(uv, hashv2); float noise = fract(sin(seed) * hashS + t); noise = gaussian(noise, 0.0, 0.5); return vec3(noise); } float rand(vec2 co) { return fract(sin(dot(co.xy, hashv2)) * hashS); } vec2 CurvedSurface(vec2 uv, float r) { return r * uv / sqrt(r * r - dot(uv, uv)); } vec2 crtCurve(vec2 uv, float r, bool content) { uv = CurvedSurface(uv, 1.5); if (content) { uv *= 0.5 / vec2(width, height); } uv.x -= mouselerp.x * 0.125; return uv; } float roundSquare(vec2 p, vec2 b, float r) { return length(max(abs(p) - b, 0.0)) - r; } float rs(vec2 uv, float r) { return roundSquare(uv, vec2(width, height) + r, 0.05); } vec2 borderReflect(vec2 p, float r) { float eps = 0.0001; vec2 epsx = vec2(eps, 0.0); vec2 epsy = vec2(0.0, eps); vec2 b = (1.0 + vec2(r, r)) * 0.5; r /= 3.0; p -= 0.5; vec2 normal = vec2( roundSquare(p - epsx, b, r) - roundSquare(p + epsx, b, r), roundSquare(p - epsy, b, r) - roundSquare(p + epsy, b, r) ) / eps; float d = roundSquare(p, b, r); p += 0.5; return p + d * normal; } vec2 normalizeAndFix() { vec2 uv = (gl_FragCoord.xy / resolution.xy) * 2.0 - 1.0; float targetAR = 16.0 / 9.0; float ar = resolution.x / resolution.y; uv.x *= ar; uv *= ( ar < targetAR && resolution.x < 800.0 && resolution.x < resolution.y ) ? 1.1 : 0.55; return uv; } void main(void) { float s = 0.0021; vec4 color = vec4(0.02, 0.02, 0.03, 0.0); const vec4 multColor = vec4(0.21); const float ambient = 0.12; vec4 bezel = vec4(0.5); vec2 uv = normalizeAndFix(); vec2 suv = gl_FragCoord.xy / resolution.xy; float gs = 1.0; float grid = ( (mod(floor((suv.x) * resolution.x / gs), 2.0) == 0.0 ? 1.0 : 0.0) * (mod(floor((suv.y) * resolution.y / gs), 2.0) == 0.0 ? 1.0 : 0.0) ); vec2 uvC = crtCurve(uv, 1., true) + 0.5; vec2 uvS = crtCurve(uv, 1., false); vec2 uvE = crtCurve(uv, 1.25, false); color += (max(0.0, ambient - 0.25 * distance(uvS, vec2(0.0))) * ss(s, -s, rs(uvS, 0.0))); color += (bezel * ambient * 0.7 * ss(-s, s, rs(uvS, 0.0)) * ss(s, -s, rs(uvE, 0.05))); color -= (bezel * ss(-s * 2.0, s * 10.0, rs(uvE, 0.05)) * ss(s * 2.0, -s * 2.0, rs(uvE, 0.05))); color += (bezel * ambient * ss(-s, s, rs(uvE, 0.05)) * ss(s, -s, rs(uvE, 0.15))); for (int i = 0; i < blurIter; i++) { vec2 uvR = borderReflect(uvC + (vec2(rand(uvC + float(i)), rand(uvC + float(i) + 0.1)) - 0.5) * blurSize, 0.05); color += ( (multColor - bezel * ambient) * texture(textureInput, uvR) / float(blurIter) * ss(-s, s, rs(uvS, 0.0)) * ss(s, -s, rs(uvE, 0.05)) ); } vec4 prgmMipMaps = texture(textureInput, uvC, 3.0) + texture(textureInput, uvC, 4.0) + texture(textureInput, uvC, 5.0); color += (prgmMipMaps * ss(0.0, -s * 20.0, rs(uvS, -0.05)) * 0.5); color += ( max(0.0, (1.0 - 2.0 * gl_FragCoord.y / resolution.y)) * vec4(0.1, 0.1, 0.1, 0.0) * ss(-0.3, 0.3, roundSquare(uvC - vec2(0.5, 0.0), vec2(width + 0.2, height), 0.1)) * ss(-s * 2.0, s * 2.0, roundSquare(uvE, vec2(width, height) + 0.15, 0.05)) ) * 1.5; if ( uvC.x > 0.0 && uvC.x < 1.0 && uvC.y > 0.0 && uvC.y < 1.0 ) { color += texture(textureInput, uvC); color = mix(color, color * grid, 0.25); } vec3 g = gaussgrain(time) * 0.015; color.xyz += g; fragColor = color; fragColor.a = 1.0; }
#version 300 es // ╔═════════════╦════════════════╗ // ║ Marco Gomez ║ https://mgz.me ║ // ╚═════════════╩════════════════╝ precision highp float; uniform sampler2D prgm2Texture; uniform vec2 resolution; uniform float time; uniform float fft; out vec4 fragColor; #define textureInput prgm2Texture const float reinhardAmount = 0.7; const float contrast = 1.0; const float brightness = 2.5; const float amount = 1.0; const float saturation = 0.8; const vec2 vignetteSize = vec2(0.25, 0.25); const float vignetteRoundness = 0.12; const float vignetteMix = 0.4; const float vignetteSmoothness = 0.42; const float W = 1.2; const float T = 7.5; float filmicReinhardCurve(float x) { float q = (T * T + 1.0) * x * x; return q / (q + x + T * T); } vec3 filmicReinhard(vec3 c) { float w = filmicReinhardCurve(W); return vec3( filmicReinhardCurve(c.r), filmicReinhardCurve(c.g), filmicReinhardCurve(c.b) ) / w; } vec3 contrastSaturationBrightness(vec3 color, float brt, float sat, float con) { const float AvgLumR = 0.5; const float AvgLumG = 0.5; const float AvgLumB = 0.5; const vec3 LumCoeff = vec3(0.2125, 0.7154, 0.0721); vec3 AvgLumin = vec3(AvgLumR, AvgLumG, AvgLumB); vec3 brtColor = color * brt; vec3 intensity = vec3(dot(brtColor, LumCoeff)); vec3 satColor = mix(intensity, brtColor, sat); vec3 conColor = mix(AvgLumin, satColor, con); return conColor; } float sdSquare(vec2 point, float width) { vec2 d = abs(point) - width; return min(max(d.x, d.y), 0.0) + length(max(d, 0.0)); } float vignette(vec2 uv, vec2 size, float roundness, float smoothness) { uv -= 0.5; float minWidth = min(size.x, size.y); uv.x = sign(uv.x) * clamp(abs(uv.x) - abs(minWidth - size.x), 0.0, 1.0); uv.y = sign(uv.y) * clamp(abs(uv.y) - abs(minWidth - size.y), 0.0, 1.0); float boxSize = minWidth * (1.0 - roundness); float dist = sdSquare(uv, boxSize) - (minWidth * roundness); return 1.0 - smoothstep(0.0, smoothness, dist); } void main(void) { vec2 uv = gl_FragCoord.xy / resolution.xy; vec4 tex = texture(textureInput, uv); vec3 reinhard = filmicReinhard(tex.rgb); vec3 color = tex.rgb; color = mix(tex.rgb, reinhard, reinhardAmount); color = contrastSaturationBrightness(color, brightness, saturation, contrast); float v = vignette(uv, vignetteSize, vignetteRoundness, vignetteSmoothness); vec3 vig = color * v; color = mix(color, vig, vignetteMix); color = mix(tex.xyz, color, amount); color = clamp(color, 0.0, 1.0); fragColor = vec4(color, 1.0); }
xxxxxxxxxx
// ╔═════════════╦════════════════╗
// ║ Marco Gomez ║ https://mgz.me ║
// ╚═════════════╩════════════════╝
precision highp float;
uniform sampler2D prgm3Texture;
uniform vec2 resolution;
out vec4 fragColor;
void main(void) {
vec2 uv = gl_FragCoord.xy / resolution.xy;
vec4 tex = texture(prgm3Texture, uv);
fragColor = tex;
}
105 fps 16ms
00:00:00.31
0.00