From: Steinar H. Gunderson Date: Tue, 2 Oct 2012 09:56:19 +0000 (+0200) Subject: Upload textures in BGRA format instead of RGB. Somewhat faster on nVidia, somewhat... X-Git-Tag: 1.0~434 X-Git-Url: https://git.sesse.net/?p=movit;a=commitdiff_plain;h=49941686f9e5c86f56b5f3aba7a628d72bc14533 Upload textures in BGRA format instead of RGB. Somewhat faster on nVidia, somewhat slower on Intel. --- diff --git a/effect_chain.cpp b/effect_chain.cpp index 0f2e69d..a90f5f3 100644 --- a/effect_chain.cpp +++ b/effect_chain.cpp @@ -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); } diff --git a/effect_chain.h b/effect_chain.h index d97ef25..c480df1 100644 --- a/effect_chain.h +++ b/effect_chain.h @@ -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, diff --git a/main.cpp b/main.cpp index 8389cad..5c01cdb 100644 --- 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;