1#version 120 2// Compatibility #ifdefs needed for parameters 3#ifdef GL_ES 4#define COMPAT_PRECISION mediump 5#else 6#define COMPAT_PRECISION 7#endif 8 9// Parameter lines go here: 10#pragma parameter RETRO_PIXEL_SIZE "Retro Pixel Size" 0.84 0.0 1.0 0.01 11#ifdef PARAMETER_UNIFORM 12// All parameter floats need to have COMPAT_PRECISION in front of them 13uniform COMPAT_PRECISION float RETRO_PIXEL_SIZE; 14#else 15#define RETRO_PIXEL_SIZE 0.84 16#endif 17 18#if defined(VERTEX) 19 20#if __VERSION__ >= 130 21#define COMPAT_VARYING out 22#define COMPAT_ATTRIBUTE in 23#define COMPAT_TEXTURE texture 24#else 25#define COMPAT_VARYING varying 26#define COMPAT_ATTRIBUTE attribute 27#define COMPAT_TEXTURE texture2D 28#endif 29 30#ifdef GL_ES 31#define COMPAT_PRECISION mediump 32#else 33#define COMPAT_PRECISION 34#endif 35 36COMPAT_ATTRIBUTE vec4 VertexCoord; 37COMPAT_ATTRIBUTE vec4 COLOR; 38COMPAT_ATTRIBUTE vec4 TexCoord; 39COMPAT_VARYING vec4 COL0; 40COMPAT_VARYING vec4 TEX0; 41// out variables go here as COMPAT_VARYING whatever 42 43vec4 _oPosition1; 44uniform mat4 MVPMatrix; 45uniform COMPAT_PRECISION int FrameDirection; 46uniform COMPAT_PRECISION int FrameCount; 47uniform COMPAT_PRECISION vec2 OutputSize; 48uniform COMPAT_PRECISION vec2 TextureSize; 49uniform COMPAT_PRECISION vec2 InputSize; 50 51// compatibility #defines 52#define vTexCoord TEX0.xy 53#define SourceSize vec4(TextureSize, 1.0 / TextureSize) //either TextureSize or InputSize 54#define OutSize vec4(OutputSize, 1.0 / OutputSize) 55 56void main() 57{ 58 gl_Position = MVPMatrix * VertexCoord; 59 TEX0.xy = VertexCoord.xy; 60// Paste vertex contents here: 61} 62 63#elif defined(FRAGMENT) 64 65#if __VERSION__ >= 130 66#define COMPAT_VARYING in 67#define COMPAT_TEXTURE texture 68out vec4 FragColor; 69#else 70#define COMPAT_VARYING varying 71#define FragColor gl_FragColor 72#define COMPAT_TEXTURE texture2D 73#endif 74 75#ifdef GL_ES 76#ifdef GL_FRAGMENT_PRECISION_HIGH 77precision highp float; 78#else 79precision mediump float; 80#endif 81#define COMPAT_PRECISION mediump 82#else 83#define COMPAT_PRECISION 84#endif 85 86uniform COMPAT_PRECISION int FrameDirection; 87uniform COMPAT_PRECISION int FrameCount; 88uniform COMPAT_PRECISION vec2 OutputSize; 89uniform COMPAT_PRECISION vec2 TextureSize; 90uniform COMPAT_PRECISION vec2 InputSize; 91uniform sampler2D Texture; 92COMPAT_VARYING vec4 TEX0; 93// in variables go here as COMPAT_VARYING whatever 94 95// compatibility #defines 96#define Source Texture 97#define vTexCoord TEX0.xy 98 99#define SourceSize vec4(TextureSize, 1.0 / TextureSize) //either TextureSize or InputSize 100#define OutSize vec4(OutputSize, 1.0 / OutputSize) 101 102// delete all 'params.' or 'registers.' or whatever in the fragment 103float iGlobalTime = float(FrameCount)*0.025; 104vec2 iResolution = OutputSize.xy; 105 106//#define SHOW_DISTANCE 107 108#define BACK_COL_TOP vec3(1,0,1) 109#define BACK_COL_BOTTOM vec3(0,0,1) 110 111#define TEXT_COL1_TOP vec3(0.05, 0.05, 0.40) 112#define TEXT_COL1_BOTTOM vec3(0.60, 0.90, 1.00) 113#define TEXT_COL2_TOP vec3(0.10, 0.10, 0.00) 114#define TEXT_COL2_BOTTOM vec3(1.90, 1.30, 1.00) 115 116//--- Primiives --- 117float dfSemiArc(float rma, float rmi, vec2 uv) 118{ 119 return max(abs(length(uv) - rma) - rmi, uv.x-0.0); 120} 121 122//p0 = bottom left, clockwise winding 123float dfQuad(vec2 p0, vec2 p1, vec2 p2, vec2 p3, vec2 uv) 124{ 125 vec2 s0n = normalize((p1 - p0).yx * vec2(-1,1)); 126 vec2 s1n = normalize((p2 - p1).yx * vec2(-1,1)); 127 vec2 s2n = normalize((p3 - p2).yx * vec2(-1,1)); 128 vec2 s3n = normalize((p0 - p3).yx * vec2(-1,1)); 129 130 return max(max(dot(uv-p0,s0n),dot(uv-p1,s1n)), max(dot(uv-p2,s2n),dot(uv-p3,s3n))); 131} 132 133float dfRect(vec2 size, vec2 uv) 134{ 135 return max(max(-uv.x,uv.x - size.x),max(-uv.y,uv.y - size.y)); 136} 137//----------------- 138 139//--- Letters --- 140void S(inout float df, vec2 uv) 141{ 142 df = min(df, dfSemiArc(0.25, 0.125, uv - vec2(-0.250,0.250))); 143 df = min(df, dfSemiArc(0.25, 0.125, (uv - vec2(-0.125,-0.25)) * vec2(-1))); 144 df = min(df, dfRect(vec2(0.125, 0.250), uv - vec2(-0.250,-0.125))); 145 df = min(df, dfQuad(vec2(-0.625,-0.625), vec2(-0.500,-0.375), vec2(-0.125,-0.375), vec2(-0.125,-0.625), uv)); 146 df = min(df, dfQuad(vec2(-0.250,0.375), vec2(-0.250,0.625), vec2(0.250,0.625), vec2(0.125,0.375), uv)); 147} 148 149void N(inout float df, vec2 uv) 150{ 151 df = min(df, dfRect(vec2(0.250, 1.250), uv - vec2(-0.625,-0.625))); 152 df = min(df, dfRect(vec2(0.250, 1.250), uv - vec2(-0.000,-0.625))); 153 df = min(df, dfQuad(vec2(-0.375,-0.125), vec2(-0.375,0.125), vec2(0.000, 0.125), vec2(-0.125,-0.125), uv)); 154} 155 156void A(inout float df, vec2 uv) 157{ 158 df = min(df, dfRect(vec2(0.250, 0.825), uv - vec2(-0.625,-0.625))); 159 df = min(df, dfRect(vec2(0.250, 0.825), uv - vec2(-0.000,-0.625))); 160 df = min(df, dfQuad(vec2(-0.375,-0.125), vec2(-0.375,0.125), vec2(0.000, 0.125), vec2(-0.125,-0.125), uv)); 161 df = min(df, dfSemiArc(0.3125, 0.125, (uv.yx - vec2(0.1875,-0.1875)) * -1.0)); 162} 163 164void D(inout float df, vec2 uv) 165{ 166 df = min(df, dfRect(vec2(0.250, 1.25), uv - vec2(-0.625,-0.625))); 167 df = min(df, dfSemiArc(0.5, 0.125, (uv.xy * vec2(-1,1) - vec2(0.375,-0.00)))); 168} 169 170void E(inout float df, vec2 uv) 171{ 172 df = min(df, dfRect(vec2(0.250, 1.250), uv - vec2(-0.625,-0.625))); 173 df = min(df, dfQuad(vec2(-0.375,-0.625), vec2(-0.375,-0.375), vec2(0.250, -0.375), vec2( 0.125,-0.625), uv)); 174 df = min(df, dfQuad(vec2(-0.375,0.375), vec2(-0.375,0.625), vec2(0.250, 0.625), vec2(0.125, 0.375), uv)); 175 df = min(df, dfQuad(vec2(-0.375,-0.125), vec2(-0.375,0.125), vec2(0.000, 0.125), vec2(-0.125,-0.125), uv)); 176} 177 178void R(inout float df, vec2 uv) 179{ 180 df = min(df, dfRect(vec2(0.250, 1.250), uv - vec2(-0.625,-0.625))); 181 df = min(df, dfSemiArc(0.25, 0.125, (uv.xy * vec2(-1,1) - vec2(0.125,0.25)))); 182 df = min(df, dfRect(vec2(0.25, 0.250), uv - vec2(-0.375,0.375))); 183 df = min(df, dfQuad(vec2(-0.375,-0.125), vec2(-0.250,0.125), vec2(0.000, 0.125), vec2(-0.125,-0.125), uv)); 184 df = min(df, dfQuad(vec2(-0.375,-0.125), vec2(-0.1,-0.125), vec2(0.250,-0.625), vec2(-0.025,-0.625), uv)); 185 186} 187 188void T(inout float df, vec2 uv) 189{ 190 df = min(df, dfRect(vec2(0.250, 1.0), uv - vec2(-0.3125,-0.625))); 191 df = min(df, dfQuad(vec2(-0.625, 0.375), vec2(-0.625,0.625), vec2(0.250, 0.625), vec2(0.125, 0.375), uv)); 192} 193 194void O(inout float df, vec2 uv) 195{ 196 df = min(df, dfRect(vec2(0.25, 0.375), uv - vec2( 0.000,-0.1875))); 197 df = min(df, dfRect(vec2(0.25, 0.375), uv - vec2(-0.625,-0.1875))); 198 df = min(df, dfSemiArc(0.3125, 0.125, (uv.yx - vec2(0.1875,-0.1875)) * -1.0)); 199 df = min(df, dfSemiArc(0.3125, 0.125, (uv.yx - vec2(-0.1875,-0.1875)) )); 200} 201 202void Y(inout float df, vec2 uv) 203{ 204 df = min(df, dfRect(vec2(0.25, 0.25), uv - vec2( 0.000,0.375))); 205 df = min(df, dfRect(vec2(0.25, 0.25), uv - vec2(-0.625,0.375))); 206 df = min(df, dfSemiArc(0.3125, 0.125, (uv.yx - vec2(0.375,-0.1875)) )); 207 df = min(df, dfRect(vec2(0.250, 0.75), uv - vec2(-0.3125,-0.625))); 208} 209 210void X(inout float df, vec2 uv) 211{ 212 df = min(df, dfRect(vec2(0.25, 0.25), uv - vec2( 0.000,0.375))); 213 df = min(df, dfRect(vec2(0.25, 0.25), uv - vec2(-0.625,0.375))); 214 df = min(df, dfSemiArc(0.3125, 0.125, (uv.yx - vec2(0.375,-0.1875)) )); 215 df = min(df, dfSemiArc(0.3125, 0.125, (-uv.yx + vec2(-0.375,-0.1855)) )); 216 //df = min(df, dfRect(vec2(0.250, 0.75), uv - vec2(-0.3125,-0.625))); 217 218 df = min(df, dfRect(vec2(0.25, 0.25), uv - vec2( 0.000,-0.575))); 219 df = min(df, dfRect(vec2(0.25, 0.25), uv - vec2(-0.625,-0.575))); 220} 221 222//--------------- 223 224//--- Gradient Stuff --- 225//returns 0-1 when xn is between x0-x1 226float linstep(float x0, float x1, float xn) 227{ 228 return (xn - x0) / (x1 - x0); 229} 230 231vec3 retrograd(float x0, float x1, float m, vec2 uv) 232{ 233 float mid = x0+(x1 - x0) * m; 234 235 vec3 grad1 = mix(TEXT_COL1_BOTTOM, TEXT_COL1_TOP, linstep(mid, x1, uv.y)); 236 vec3 grad2 = mix(TEXT_COL2_BOTTOM, TEXT_COL2_TOP, linstep(x0, mid, uv.y)); 237 238 return mix(grad2, grad1, smoothstep(mid, mid + 0.04, uv.y)); 239} 240//---------------------- 241 242void mainImage( out vec4 fragColor, in vec2 fragCoord ) 243{ 244 vec2 aspect = iResolution.xy/iResolution.y; 245 vec2 uv = ( fragCoord.xy / iResolution.y ); 246 247 uv = (uv - aspect/2.0)*8.0; 248 249 //Text distance field 250 float dist = 1e6; 251 252 vec2 chSpace = vec2(1.125,1.500); 253 254 vec2 chuv = uv; 255 chuv.x += (chSpace.x * 7.0) / 2.0 - 0.75; 256 257 Y(dist, chuv); chuv.x -= chSpace.x; 258 A(dist, chuv); chuv.x -= chSpace.x; 259 N(dist, chuv); chuv.x -= chSpace.x; 260 D(dist, chuv); chuv.x -= chSpace.x; 261 E(dist, chuv); chuv.x -= chSpace.x; 262 X(dist, chuv); chuv.x -= chSpace.x; 263 264 dist /= 2.0; 265 266 //Colors and mixing mask 267 float mask = smoothstep(4.0 / iResolution.y, 0.00, dist); 268 269 vec3 textcol = retrograd(-0.75, 0.50, 0.40 + pow(abs(dist), 0.25) * 0.08, uv); 270 271 vec3 backcol = mix(BACK_COL_BOTTOM, BACK_COL_TOP, (uv.y/4.0)+0.5) * smoothstep(0.02, 0.025, dist); 272 273 //Grid Stuff 274 vec2 gdef = vec2(uv.x / abs(uv.y), 1.0 / (uv.y)); 275 gdef.y = clamp(gdef.y,-1e2, 1e2); 276 277 vec2 gpos = vec2(0.0,-iGlobalTime); 278 279 gdef += gpos; 280 281 vec2 grep = mod(gdef*vec2(1.0,2.0), vec2(1.0)); 282 283 float grid = max(abs(grep.x - 0.5),abs(grep.y - 0.5)); 284 285 float gs = length(gdef-gpos)*0.01; 286 287 backcol *= mix(smoothstep(0.46-gs,0.48+gs,grid), 1.0, step(0.0,uv.y))*0.75+0.25; 288 289 //Mixing text with background 290 vec3 color = mix(backcol,textcol,mask); 291 292 #ifdef SHOW_DISTANCE 293 color = vec3(sin(dist*48.0)); 294 #endif 295 296 fragColor = vec4( vec3( color ), 1.0 ); 297} 298 299 void main(void) 300{ 301 //just some shit to wrap shadertoy's stuff 302 vec2 FragCoord = vTexCoord.xy*OutputSize.xy; 303 mainImage(FragColor,FragCoord); 304} 305#endif 306