X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=erebus2020;a=blobdiff_plain;f=xerebus%2Fsrc%2Fmain.c;h=7f288abdabf9074adc5334c4b0f2c128bcdace58;hp=e7c07283de6f98c08dff8fc53fdc7ac073079274;hb=29ae0aac16008cd44d73f2ac8320504b907be607;hpb=d4eaf9f47882dc99d6523b8464dcaa1cc2789f26 diff --git a/xerebus/src/main.c b/xerebus/src/main.c index e7c0728..7f288ab 100644 --- a/xerebus/src/main.c +++ b/xerebus/src/main.c @@ -1,6 +1,8 @@ #include +#include "opengl.h" #include "miniglut.h" #include "erebus.h" +#include "sdr.h" static void display(void); static void reshape(int x, int y); @@ -18,10 +20,34 @@ static int mouse_x, mouse_y; static int drag_x, drag_y; static int drag; +static float disp_gamma = 2.2f; + static unsigned int fbtex; +static unsigned int sdr; + +static const char *vs_src = + "void main()\n" + "{\n" + " gl_Position = ftransform();\n" + " gl_TexCoord[0] = gl_MultiTexCoord0;\n" + "}\n"; + +static const char *ps_src = + "uniform sampler2D tex;\n" + "uniform float inv_gamma;\n" + "\n" + "void main()\n" + "{\n" + " vec4 texel = texture2D(tex, gl_TexCoord[0].st);\n" + " gl_FragColor.rgb = pow(texel.xyz / texel.w, vec3(inv_gamma));\n" + " gl_FragColor.a = 1.0;\n" + "}\n"; + int main(int argc, char **argv) { + unsigned int vs, ps; + glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE); glutInitWindowSize(1280, 800); @@ -33,6 +59,17 @@ int main(int argc, char **argv) glutMouseFunc(mouse); glutMotionFunc(motion); + if(!(vs = create_vertex_shader(vs_src))) { + return 1; + } + if(!(ps = create_pixel_shader(ps_src))) { + return 1; + } + if(!(sdr = create_program_link(vs, ps, 0))) { + return 1; + } + set_uniform_float(sdr, "inv_gamma", 1.0f / disp_gamma); + if(!(erb = erb_create())) { return 1; } @@ -42,7 +79,6 @@ int main(int argc, char **argv) glBindTexture(GL_TEXTURE_2D, fbtex); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glEnable(GL_TEXTURE_2D); glutMainLoop(); erb_destroy(erb); @@ -68,6 +104,8 @@ static void display(void) glClear(GL_COLOR_BUFFER_BIT); + glUseProgram(sdr); + glBegin(GL_QUADS); glColor3f(1, 1, 1); glTexCoord2f(0, 0); @@ -81,8 +119,8 @@ static void display(void) glEnd(); if(drag) { - glPushAttrib(GL_ENABLE_BIT); - glDisable(GL_TEXTURE_2D); + glUseProgram(0); + glEnable(GL_LOGIC_OP); glLogicOp(GL_XOR); @@ -94,7 +132,7 @@ static void display(void) glVertex2f(drag_x, mouse_y); glEnd(); - glPopAttrib(); + glDisable(GL_LOGIC_OP); } glutSwapBuffers();