Milan Mimica
Member #3,877
September 2003
|
How do I display a texture with inverted colors with OpenGL? Here is the code I tried to use: | 1 | #include <allegro.h> | | 2 | #include <alleggl.h> | | 3 | | | 4 | int main() | | 5 | { | | 6 | allegro_init(); | | 7 | install_allegro_gl(); | | 8 | install_keyboard(); | | 9 | install_timer(); | | 10 | | | 11 | allegro_gl_set(AGL_COLOR_DEPTH, 16); | | 12 | allegro_gl_set(AGL_DOUBLEBUFFER, 1); | | 13 | allegro_gl_set(AGL_RENDERMETHOD, 1); | | 14 | allegro_gl_set(AGL_SUGGEST, AGL_COLOR_DEPTH | AGL_DOUBLEBUFFER | AGL_RENDERMETHOD); | | 15 | | | 16 | if (set_gfx_mode(GFX_OPENGL_WINDOWED, 640, 480, 0, 0)) | | 17 | return 1; | | 18 | allegro_gl_set_allegro_mode(); | | 19 | | | 20 | BITMAP *bmp = load_bitmap("mysha.pcx", NULL); | | 21 | | | 22 | GLint tex = allegro_gl_make_texture_ex(AGL_TEXTURE_RESCALE, bmp, GL_RGB8); | | 23 | glBindTexture(GL_TEXTURE_2D, tex); | | 24 | glBlendFunc(GL_ONE_MINUS_SRC_COLOR, GL_ZERO); | | 25 | glEnable(GL_BLEND); | | 26 | glBegin(GL_QUADS); | | 27 | glTexCoord2f(0, 0); | | 28 | glVertex2f(0, 0); | | 29 | glTexCoord2f(1, 0); | | 30 | glVertex2f(bmp->w, 0); | | 31 | glTexCoord2f(1, 1); | | 32 | glVertex2f(bmp->w, bmp->h); | | 33 | glTexCoord2f(0, 1); | | 34 | glVertex2f(0, bmp->h); | | 35 | glEnd(); | | 36 | glDisable(GL_BLEND); | | 37 | | | 38 | allegro_gl_flip(); | | 39 | readkey(); | | 40 | | | 41 | destroy_bitmap(bmp); | | 42 | | | 43 | return 0; | | 44 | } |
Attached is mysha.pcx - the example input file. As a result I get something similar to a inverted picture, but it's obviously different to what any image editor would give me. What I'm I doing wrong? EDIT: Fixed using: glEnable(GL_COLOR_LOGIC_OP); glLogicOp(GL_COPY_INVERTED); without blending.
|