diff options
Diffstat (limited to 'src/main/resources/assets/notenoughupdates/shaders/void.frag')
-rw-r--r-- | src/main/resources/assets/notenoughupdates/shaders/void.frag | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/main/resources/assets/notenoughupdates/shaders/void.frag b/src/main/resources/assets/notenoughupdates/shaders/void.frag new file mode 100644 index 00000000..3809c133 --- /dev/null +++ b/src/main/resources/assets/notenoughupdates/shaders/void.frag @@ -0,0 +1,41 @@ +#version 130 + +varying vec4 passColour; +varying vec3 passNormal; +uniform sampler2D textureIn; +varying vec4 passPosition; +uniform vec2 screensize; +uniform int millis; + +//Algorithm by hughsk +vec3 hsv2rgb(vec3 c) { + vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); +} + +void main() { + vec2 viewportCoord1 = (gl_FragCoord.xy+vec2(-millis/100.0f, 70)/5.0f)/screensize.yy; + vec4 texture1 = texture2D(textureIn, viewportCoord1); + + vec2 viewportCoord2 = (gl_FragCoord.xy/2.0f+vec2(50, millis/100.0f)/3.0f)/screensize.yy; + vec4 texture2 = texture2D(textureIn, viewportCoord2); + + vec2 viewportCoord3 = (gl_FragCoord.xy/3.0f+vec2(-millis/100.0f+30, millis/100.0f+90)/2.0f)/screensize.yy; + vec4 texture3 = texture2D(textureIn, viewportCoord3); + + vec2 viewportCoord4 = (gl_FragCoord.xy/3.0f+vec2(-millis/100.0f+50, -millis/100.0f+10)/2.0f)/screensize.yy; + vec4 texture4 = texture2D(textureIn, viewportCoord4); + + float r = texture1.r + texture2.r + texture3.r + texture4.r; + float g = texture1.g + texture2.g + texture3.g + texture4.g; + float b = texture1.b + texture2.b + texture3.b + texture4.b; + + if(r > 1) r = 1; + if(g > 1) g = 1; + if(b > 1) b = 1; + + vec4 colour = vec4(hsv2rgb(vec3(mod(millis/50000.0f+gl_FragCoord.x/screensize.x/3.0f, 1.0f), 0.35f, 1.0f)), 1.0f); + + gl_FragColor = vec4(r, g, b, 1) * passColour * colour; +}
\ No newline at end of file |