Upload textures in BGRA format instead of RGB. Somewhat faster on nVidia, somewhat...
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Tue, 2 Oct 2012 09:56:19 +0000 (11:56 +0200)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Tue, 2 Oct 2012 09:56:19 +0000 (11:56 +0200)
effect_chain.cpp
effect_chain.h
main.cpp

index 0f2e69d..a90f5f3 100644 (file)
@@ -209,6 +209,10 @@ void EffectChain::render_to_screen(unsigned char *src)
                format = GL_RGB;
        } else if (input_format.pixel_format == FORMAT_RGBA) {
                format = GL_RGBA;
+       } else if (input_format.pixel_format == FORMAT_BGR) {
+               format = GL_BGR;
+       } else if (input_format.pixel_format == FORMAT_BGRA) {
+               format = GL_BGRA;
        } else {
                assert(false);
        }
index d97ef25..c480df1 100644 (file)
@@ -6,7 +6,7 @@
 #include "effect.h"
 #include "effect_id.h"
 
-enum PixelFormat { FORMAT_RGB, FORMAT_RGBA };
+enum PixelFormat { FORMAT_RGB, FORMAT_RGBA, FORMAT_BGR, FORMAT_BGRA };
 
 enum ColorSpace {
        COLORSPACE_sRGB = 0,
index 8389cad..5c01cdb 100644 (file)
--- a/main.cpp
+++ b/main.cpp
@@ -92,7 +92,7 @@ unsigned char *load_image(const char *filename, unsigned *w, unsigned *h)
        SDL_PixelFormat *fmt = img->format;
        SDL_LockSurface(img);
        unsigned char *src_pixels = (unsigned char *)img->pixels;
-       unsigned char *dst_pixels = (unsigned char *)malloc(img->w * img->h * 3);
+       unsigned char *dst_pixels = (unsigned char *)malloc(img->w * img->h * 4);
        for (int i = 0; i < img->w * img->h; ++i) {
                unsigned char r, g, b;
                unsigned int temp;
@@ -113,9 +113,10 @@ unsigned char *load_image(const char *filename, unsigned *w, unsigned *h)
                temp = temp << fmt->Bloss;
                b = temp;
 
-               dst_pixels[i * 3 + 0] = r;
-               dst_pixels[i * 3 + 1] = g;
-               dst_pixels[i * 3 + 2] = b;
+               dst_pixels[i * 4 + 0] = b;
+               dst_pixels[i * 4 + 1] = g;
+               dst_pixels[i * 4 + 2] = r;
+               dst_pixels[i * 4 + 3] = 255;
        }
        SDL_UnlockSurface(img);
 
@@ -168,7 +169,7 @@ int main(int argc, char **argv)
        EffectChain chain(WIDTH, HEIGHT);
 
        ImageFormat inout_format;
-       inout_format.pixel_format = FORMAT_RGB;
+       inout_format.pixel_format = FORMAT_BGRA;
        inout_format.color_space = COLORSPACE_sRGB;
        inout_format.gamma_curve = GAMMA_sRGB;