X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=shaders%2Fblit.h;h=116007aa8194e58c09644ec8721ac4596ea61f52;hb=4b8fc63f926737ca0593a4e471550f9f4995c538;hp=f05194eb3b299fc9045eb7c59ca52a633d31ef0f;hpb=1f1d636056450dcd23cce55c0795ec6276272531;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/shaders/blit.h b/shaders/blit.h index f05194e..116007a 100644 --- a/shaders/blit.h +++ b/shaders/blit.h @@ -7,42 +7,81 @@ static struct vg_shader _shader_blit = { .link = shader_blit_link, .vs = { -.orig_file = "../shaders/blit.vs", +.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;\n" +" aUv = a_co * uInverseRatio;\n" "}\n" ""}, .fs = { -.orig_file = "../shaders/blit.fs", +.orig_file = "shaders/blit.fs", .static_src = "out vec4 FragColor;\n" "uniform sampler2D uTexMain;\n" "\n" "in vec2 aUv;\n" "\n" +"float kPi = 3.14159265358979;\n" +"\n" +"vec2 fisheye_distort(vec2 xy)\n" +"{\n" +" float aperture = 1350.0;\n" +" float apertureHalf = 0.5 * aperture * (kPi / 180.0);\n" +" float maxFactor = sin(apertureHalf);\n" +"\n" +" vec2 uv;\n" +" float d = length(xy);\n" +" if(d < (2.0-maxFactor))\n" +" {\n" +" d = length(xy * maxFactor);\n" +" float z = sqrt(1.0 - d * d);\n" +" float r = atan(d, z) / kPi;\n" +" float phi = atan(xy.y, xy.x);\n" +"\n" +" uv.x = r * cos(phi) + 0.5;\n" +" uv.y = r * sin(phi) + 0.5;\n" +" }\n" +" else\n" +" {\n" +" uv = 0.5*xy + 0.5;\n" +" }\n" +" \n" +" return uv;\n" +"}\n" +"\n" +"\n" "void main()\n" "{\n" +" vec2 vwarp = 2.0*aUv - 1.0;\n" +" vwarp = fisheye_distort( vwarp );\n" +"\n" " FragColor = texture( uTexMain, aUv );\n" "}\n" ""}, }; +static GLuint _uniform_blit_uInverseRatio; static GLuint _uniform_blit_uTexMain; +static void shader_blit_uInverseRatio(v2f v){ + glUniform2fv(_uniform_blit_uInverseRatio,1,v); +} static void shader_blit_uTexMain(int i){ - glUniform1i( _uniform_blit_uTexMain, i ); + glUniform1i(_uniform_blit_uTexMain,i); } static void shader_blit_register(void){ vg_shader_register( &_shader_blit ); } static void shader_blit_use(void){ glUseProgram(_shader_blit.id); } static void shader_blit_link(void){ + _uniform_blit_uInverseRatio = glGetUniformLocation( _shader_blit.id, "uInverseRatio" ); _uniform_blit_uTexMain = glGetUniformLocation( _shader_blit.id, "uTexMain" ); } #endif /* SHADER_blit_H */