# HG changeset patch # User John Tsiombikas # Date 1357937576 -7200 # Node ID 403ec1be3a1a32af5a4a79dee0df019eda9d8d5d # Parent c45c7a1f7d9daa41fe1014c404e315d771ece3b2 foo diff -r c45c7a1f7d9d -r 403ec1be3a1a data/foo.png Binary file data/foo.png has changed diff -r c45c7a1f7d9d -r 403ec1be3a1a data/hieroglyph.png Binary file data/hieroglyph.png has changed diff -r c45c7a1f7d9d -r 403ec1be3a1a data/hieroglyph2.png Binary file data/hieroglyph2.png has changed diff -r c45c7a1f7d9d -r 403ec1be3a1a sdr/dither.p.glsl --- a/sdr/dither.p.glsl Wed Jan 09 02:37:05 2013 +0200 +++ b/sdr/dither.p.glsl Fri Jan 11 22:52:56 2013 +0200 @@ -7,8 +7,6 @@ vec4 pixel = texture2D(framebuf, gl_TexCoord[0].xy); float lum = dot(pixel.xyz, vec3(0.2126, 0.7152, 0.0722)); - // gamma correct luminance? - //lum = pow(lum, 1.0 / 2.2); float coord_shift = floor(lum * levels) / levels; vec2 dsz2 = vec2(float(dither_size), float(dither_size)); diff -r c45c7a1f7d9d -r 403ec1be3a1a src/dither_matrix.h --- a/src/dither_matrix.h Wed Jan 09 02:37:05 2013 +0200 +++ b/src/dither_matrix.h Fri Jan 11 22:52:56 2013 +0200 @@ -23,4 +23,15 @@ {42, 26, 38, 22, 41, 25, 37, 21} }; +static const float halftone_matrix8[8][8] = { + {24, 10, 12, 26, 35, 47, 49, 37}, + {8, 0, 2, 14, 45, 59, 61, 51}, + {22, 6, 4, 16, 43, 57, 63, 53}, + {30, 20, 18, 28, 33, 41, 55, 39}, + {34, 46, 48, 36, 25, 11, 13, 27}, + {44, 58, 60, 50, 9, 1, 3, 15}, + {42, 56, 62, 52, 23, 7, 5, 17}, + {32, 40, 54, 38, 31, 21, 19, 29} +}; + #endif /* DITHER_MATRIX_H_ */ diff -r c45c7a1f7d9d -r 403ec1be3a1a src/opengl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/opengl.h Fri Jan 11 22:52:56 2013 +0200 @@ -0,0 +1,12 @@ +#ifndef OPENGL_H_ +#define OPENGL_H_ + +#include + +#ifndef __APPLE__ +#include +#else +#include +#endif + +#endif /* OPENGL_H_ */ diff -r c45c7a1f7d9d -r 403ec1be3a1a src/scroller.cc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/scroller.cc Fri Jan 11 22:52:56 2013 +0200 @@ -0,0 +1,62 @@ +#include +#include "opengl.h" +#include "texture.h" + +unsigned int hiero_tex; + +bool init_scroller() +{ + if(!(hiero_tex = load_texture("data/hieroglyph2.png"))) { + return false; + } + + glBindTexture(GL_TEXTURE_2D, hiero_tex); + /*glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);*/ + + return true; +} + +void destroy_scroller() +{ + free_texture(hiero_tex); + hiero_tex = 0; +} + +void draw_scroller(float sec) +{ + glPushAttrib(GL_ENABLE_BIT); + + glDisable(GL_DEPTH_TEST); + glDisable(GL_LIGHTING); + glEnable(GL_TEXTURE_2D); + glBindTexture(GL_TEXTURE_2D, hiero_tex); + + glMatrixMode(GL_MODELVIEW); + glPushMatrix(); + glLoadIdentity(); + glScalef(1.4, 0.4, 1.4); + glMatrixMode(GL_PROJECTION); + glPushMatrix(); + glLoadIdentity(); + glMatrixMode(GL_TEXTURE); + glPushMatrix(); + glLoadIdentity(); + + glTranslatef(sec * 0.25, 0, 0); + + glBegin(GL_QUADS); + glColor3f(1, 1, 1); + glTexCoord2f(0, 1); glVertex2f(-1, -1); + glTexCoord2f(1, 1); glVertex2f(1, -1); + glTexCoord2f(1, 0); glVertex2f(1, 1); + glTexCoord2f(0, 0); glVertex2f(-1, 1); + glEnd(); + + glPopMatrix(); + glMatrixMode(GL_PROJECTION); + glPopMatrix(); + glMatrixMode(GL_MODELVIEW); + glPopMatrix(); + glPopAttrib(); +} diff -r c45c7a1f7d9d -r 403ec1be3a1a src/scroller.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/scroller.h Fri Jan 11 22:52:56 2013 +0200 @@ -0,0 +1,9 @@ +#ifndef SCROLLER_H_ +#define SCROLLER_H_ + +bool init_scroller(); +void destroy_scroller(); + +void draw_scroller(float sec); + +#endif // SCROLLER_H_ diff -r c45c7a1f7d9d -r 403ec1be3a1a src/texture.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/texture.c Fri Jan 11 22:52:56 2013 +0200 @@ -0,0 +1,31 @@ +#include +#include "opengl.h" +#include +#include "texture.h" + +unsigned int load_texture(const char *fname) +{ + int xsz, ysz; + void *pixels; + unsigned int tex; + + if(!(pixels = img_load_pixels(fname, &xsz, &ysz, IMG_FMT_RGB24))) { + fprintf(stderr, "failed to load texture: %s\n", fname); + return 0; + } + + glGenTextures(1, &tex); + glBindTexture(GL_TEXTURE_2D, tex); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, xsz, ysz, 0, GL_RGB, GL_UNSIGNED_BYTE, pixels); + + img_free_pixels(pixels); + + return tex; +} + +void free_texture(unsigned int tex) +{ + glDeleteTextures(1, &tex); +} diff -r c45c7a1f7d9d -r 403ec1be3a1a src/texture.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/texture.h Fri Jan 11 22:52:56 2013 +0200 @@ -0,0 +1,15 @@ +#ifndef TEXTURE_H_ +#define TEXTURE_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +unsigned int load_texture(const char *fname); +void free_texture(unsigned int tex); + +#ifdef __cplusplus +} +#endif + +#endif /* TEXTURE_H_ */ diff -r c45c7a1f7d9d -r 403ec1be3a1a src/udg.cc --- a/src/udg.cc Wed Jan 09 02:37:05 2013 +0200 +++ b/src/udg.cc Fri Jan 11 22:52:56 2013 +0200 @@ -2,16 +2,10 @@ #include #include #include -#include - -#ifndef __APPLE__ -#include -#else -#include -#endif - +#include "opengl.h" #include "sdr.h" #include "dither_matrix.h" +#include "scroller.h" #define DITHER_SZ 8 #define DITHER_LEVELS 16 @@ -19,7 +13,7 @@ #if DITHER_SZ == 4 #define dither_matrix dither_matrix4 #elif DITHER_SZ == 8 -#define dither_matrix dither_matrix8 +#define dither_matrix halftone_matrix8 #else #error "invalid dither size" #endif @@ -98,6 +92,10 @@ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, DITHER_SZ, DITHER_SZ * DITHER_LEVELS, 0, GL_LUMINANCE, GL_FLOAT, img); + if(!init_scroller()) { + return false; + } + glEnable(GL_CULL_FACE); glEnable(GL_DEPTH_TEST); glEnable(GL_LIGHTING); @@ -108,6 +106,7 @@ void draw_backdrop() { + /* glPushAttrib(GL_ENABLE_BIT); glDisable(GL_DEPTH_TEST); glDisable(GL_LIGHTING); @@ -133,6 +132,8 @@ glPopMatrix(); glPopAttrib(); + */ + draw_scroller(glutGet(GLUT_ELAPSED_TIME) / 1000.0); } void disp() @@ -154,8 +155,6 @@ draw_backdrop(); - glEnable(GL_DEPTH_TEST); - glMatrixMode(GL_MODELVIEW); glLoadIdentity(); @@ -176,7 +175,6 @@ glFrontFace(GL_CCW); - glBindFramebufferEXT(GL_FRAMEBUFFER, 0); glViewport(0, 0, xsz, ysz); @@ -200,8 +198,10 @@ glActiveTextureARB(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, rtarg->color_tex); + glEnable(GL_TEXTURE_2D); glActiveTextureARB(GL_TEXTURE1); glBindTexture(GL_TEXTURE_2D, dither_tex); + glEnable(GL_TEXTURE_2D); glBegin(GL_QUADS); glColor3f(0, 1, 0);