X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=shaders%2Fblitblur.h;h=8a75c38d69aa48b311e83667c3eaaef216ba68f8;hb=5f6a4f9df6c8accc89f1920bfe9ace3cbac4c4b6;hp=ac8f3cc20cf3e3bcfd58deca8a63a32de1a58b4c;hpb=a109f126d8adab622e38fbcc2d4281e75255246a;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/shaders/blitblur.h b/shaders/blitblur.h index ac8f3cc..8a75c38 100644 --- a/shaders/blitblur.h +++ b/shaders/blitblur.h @@ -1,122 +1,48 @@ -#ifndef SHADER_blitblur_H -#define SHADER_blitblur_H -static void shader_blitblur_link(void); -static void shader_blitblur_register(void); -static struct vg_shader _shader_blitblur = { - .name = "blitblur", - .link = shader_blitblur_link, - .vs = +#pragma once +#include "vg/vg_engine.h" +extern struct vg_shader _shader_blitblur; +extern GLuint _uniform_blitblur_uInverseRatio; +extern GLuint _uniform_blitblur_uTexMain; +extern GLuint _uniform_blitblur_uTexMotion; +extern GLuint _uniform_blitblur_uBlurStrength; +extern GLuint _uniform_blitblur_uOverrideDir; +extern GLuint _uniform_blitblur_uTime; +extern GLuint _uniform_blitblur_uGlitchStrength; +extern GLuint _uniform_blitblur_uClampUv; +static inline void shader_blitblur_uInverseRatio(v2f v) { -.orig_file = "shaders/blit.vs", -.static_src = -"layout (location=0) in vec2 a_co;\n" -"out vec2 aUv;\n" -"\n" -"uniform vec2 uInverseRatio;\n" -"\n" -"void main()\n" -"{\n" -" gl_Position = vec4(a_co*2.0-1.0,0.0,1.0);\n" -" aUv = a_co * uInverseRatio;\n" -"}\n" -""}, - .fs = -{ -.orig_file = "shaders/blitblur.fs", -.static_src = -"out vec4 FragColor;\n" -"uniform sampler2D uTexMain;\n" -"uniform sampler2D uTexMotion;\n" -"uniform float uBlurStrength;\n" -"uniform vec2 uOverrideDir;\n" -"uniform float uTime;\n" -"uniform float uGlitchStrength;\n" -"uniform vec2 uClampUv;\n" -"\n" -"in vec2 aUv;\n" -"\n" -"vec2 rand_hash22( vec2 p ){\n" -" vec3 p3 = fract(vec3(p.xyx) * 213.8976123);\n" -" p3 += dot(p3, p3.yzx+19.19);\n" -" return fract(vec2((p3.x + p3.y)*p3.z, (p3.x+p3.z)*p3.y));\n" -"}\n" -"\n" -"const int NOISE_LOOP = 3;\n" -"vec3 digital_noise( uvec3 iuv ){\n" -" iuv *=uvec3(8,2524,7552);\n" -" for( int i=0; i 0.0 ){\n" -" // uvec3 p = uvec3( gl_FragCoord.xy, uint(uTime*30.0) );\n" -" // vec2 g = digital_noise(p).xy;\n" -" // vuv = aUv + g.xy*uGlitchStrength - uGlitchStrength*0.5;\n" -" //}\n" -"\n" -" vec2 vrand = rand_hash22( vuv ) * 2.0 - vec2(1.0);\n" -" vec2 vrand1 = rand_hash22( vrand ) * 2.0 - vec2(1.0);\n" -" \n" -" vec2 vdir = texture( uTexMotion, vuv ).xy * uBlurStrength + uOverrideDir;\n" -"\n" -" vec4 vcolour0 = texture( uTexMain, min(vuv + vdir*vrand.x,uClampUv) );\n" -" vec4 vcolour1 = texture( uTexMain, min(vuv + vdir*vrand.y,uClampUv) );\n" -" vec4 vcolour2 = texture( uTexMain, min(vuv + vdir*vrand1.x,uClampUv) );\n" -" vec4 vcolour3 = texture( uTexMain, min(vuv + vdir*vrand1.y,uClampUv) );\n" -"\n" -" FragColor = ( vcolour0 + vcolour1 + vcolour2 + vcolour3 ) * 0.25;\n" -"}\n" -""}, -}; - -static GLuint _uniform_blitblur_uInverseRatio; -static GLuint _uniform_blitblur_uTexMain; -static GLuint _uniform_blitblur_uTexMotion; -static GLuint _uniform_blitblur_uBlurStrength; -static GLuint _uniform_blitblur_uOverrideDir; -static GLuint _uniform_blitblur_uTime; -static GLuint _uniform_blitblur_uGlitchStrength; -static GLuint _uniform_blitblur_uClampUv; -static void shader_blitblur_uInverseRatio(v2f v){ glUniform2fv(_uniform_blitblur_uInverseRatio,1,v); } -static void shader_blitblur_uTexMain(int i){ +static inline void shader_blitblur_uTexMain(int i) +{ glUniform1i(_uniform_blitblur_uTexMain,i); } -static void shader_blitblur_uTexMotion(int i){ +static inline void shader_blitblur_uTexMotion(int i) +{ glUniform1i(_uniform_blitblur_uTexMotion,i); } -static void shader_blitblur_uBlurStrength(float f){ +static inline void shader_blitblur_uBlurStrength(f32 f) +{ glUniform1f(_uniform_blitblur_uBlurStrength,f); } -static void shader_blitblur_uOverrideDir(v2f v){ +static inline void shader_blitblur_uOverrideDir(v2f v) +{ glUniform2fv(_uniform_blitblur_uOverrideDir,1,v); } -static void shader_blitblur_uTime(float f){ +static inline void shader_blitblur_uTime(f32 f) +{ glUniform1f(_uniform_blitblur_uTime,f); } -static void shader_blitblur_uGlitchStrength(float f){ +static inline void shader_blitblur_uGlitchStrength(f32 f) +{ glUniform1f(_uniform_blitblur_uGlitchStrength,f); } -static void shader_blitblur_uClampUv(v2f v){ +static inline void shader_blitblur_uClampUv(v2f v) +{ glUniform2fv(_uniform_blitblur_uClampUv,1,v); } -static void shader_blitblur_register(void){ - vg_shader_register( &_shader_blitblur ); -} -static void shader_blitblur_use(void){ glUseProgram(_shader_blitblur.id); } -static void shader_blitblur_link(void){ - _uniform_blitblur_uInverseRatio = glGetUniformLocation( _shader_blitblur.id, "uInverseRatio" ); - _uniform_blitblur_uTexMain = glGetUniformLocation( _shader_blitblur.id, "uTexMain" ); - _uniform_blitblur_uTexMotion = glGetUniformLocation( _shader_blitblur.id, "uTexMotion" ); - _uniform_blitblur_uBlurStrength = glGetUniformLocation( _shader_blitblur.id, "uBlurStrength" ); - _uniform_blitblur_uOverrideDir = glGetUniformLocation( _shader_blitblur.id, "uOverrideDir" ); - _uniform_blitblur_uTime = glGetUniformLocation( _shader_blitblur.id, "uTime" ); - _uniform_blitblur_uGlitchStrength = glGetUniformLocation( _shader_blitblur.id, "uGlitchStrength" ); - _uniform_blitblur_uClampUv = glGetUniformLocation( _shader_blitblur.id, "uClampUv" ); +static inline void shader_blitblur_use(void); +static inline void shader_blitblur_use(void) +{ + glUseProgram(_shader_blitblur.id); } -#endif /* SHADER_blitblur_H */