From 60e69c7049f8f481fc2c79149dc0916c41ca7fb1 Mon Sep 17 00:00:00 2001 From: Mike Gorchak Date: Wed, 3 Jun 2009 10:40:44 +0000 Subject: [PATCH] Support for BGR565 pixel format has been added, mainly for OpenGL ES renderer. OpenGL ES renderer now have new texture formats. --- include/SDL_pixels.h | 6 ++++++ src/video/SDL_pixels.c | 17 +++++++++++++++ src/video/SDL_renderer_gles.c | 40 +++++++++++++++++------------------ 3 files changed, 43 insertions(+), 20 deletions(-) diff --git a/include/SDL_pixels.h b/include/SDL_pixels.h index cc800a9fd..7b6e43781 100644 --- a/include/SDL_pixels.h +++ b/include/SDL_pixels.h @@ -158,6 +158,9 @@ enum SDL_PIXELFORMAT_ARGB4444 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ARGB, SDL_PACKEDLAYOUT_4444, 16, 2), + SDL_PIXELFORMAT_ABGR4444 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ABGR, + SDL_PACKEDLAYOUT_4444, 16, 2), SDL_PIXELFORMAT_ARGB1555 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ARGB, SDL_PACKEDLAYOUT_1555, 16, 2), @@ -167,6 +170,9 @@ enum SDL_PIXELFORMAT_RGB565 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XRGB, SDL_PACKEDLAYOUT_565, 16, 2), + SDL_PIXELFORMAT_BGR565 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XBGR, + SDL_PACKEDLAYOUT_565, 16, 2), SDL_PIXELFORMAT_RGB24 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYU8, SDL_ARRAYORDER_RGB, 0, 24, 3), diff --git a/src/video/SDL_pixels.c b/src/video/SDL_pixels.c index f6104d571..7b9ac86af 100644 --- a/src/video/SDL_pixels.c +++ b/src/video/SDL_pixels.c @@ -72,6 +72,12 @@ SDL_PixelFormatEnumToMasks(Uint32 format, int *bpp, Uint32 * Rmask, masks[2] = 0x000003E0; masks[3] = 0x0000001F; break; + case SDL_PACKEDLAYOUT_5551: + masks[0] = 0x0000F800; + masks[1] = 0x000007C0; + masks[2] = 0x0000003E; + masks[3] = 0x00000001; + break; case SDL_PACKEDLAYOUT_565: masks[0] = 0x00000000; masks[1] = 0x0000F800; @@ -90,6 +96,12 @@ SDL_PixelFormatEnumToMasks(Uint32 format, int *bpp, Uint32 * Rmask, masks[2] = 0x000FFC00; masks[3] = 0x000003FF; break; + case SDL_PACKEDLAYOUT_1010102: + masks[0] = 0xFFC00000; + masks[1] = 0x003FF000; + masks[2] = 0x00000FFC; + masks[3] = 0x00000003; + break; default: /* Unknown layout */ return SDL_FALSE; @@ -176,7 +188,12 @@ SDL_MasksToPixelFormatEnum(int bpp, Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, break; case 16: switch (Rmask) { + case 0x000F: + return SDL_PIXELFORMAT_ABGR4444; case 0x001F: + if (Gmask == 0x07E0) { + return SDL_PIXELFORMAT_BGR565; + } return SDL_PIXELFORMAT_ABGR1555; case 0x0F00: return SDL_PIXELFORMAT_ARGB4444; diff --git a/src/video/SDL_renderer_gles.c b/src/video/SDL_renderer_gles.c index 77ca3ff07..da04091b7 100644 --- a/src/video/SDL_renderer_gles.c +++ b/src/video/SDL_renderer_gles.c @@ -30,7 +30,7 @@ #include "SDL_rect_c.h" #include "SDL_yuv_sw_c.h" -#ifdef __QNXNTO__ +#if defined(SDL_VIDEO_DRIVER_QNXGF) || defined(SDL_VIDEO_DRIVER_PHOTON) /* Empty function stub to get OpenGL ES 1.0 support without */ /* OpenGL ES extension GL_OES_draw_texture_supported */ @@ -110,9 +110,12 @@ SDL_RenderDriver GL_ES_RenderDriver = { (SDL_BLENDMODE_NONE | SDL_BLENDMODE_MASK | SDL_BLENDMODE_BLEND | SDL_BLENDMODE_ADD | SDL_BLENDMODE_MOD), (SDL_TEXTURESCALEMODE_NONE | SDL_TEXTURESCALEMODE_FAST | - SDL_TEXTURESCALEMODE_SLOW), 2, + SDL_TEXTURESCALEMODE_SLOW), 5, { /* OpenGL ES 1.x supported formats list */ + SDL_PIXELFORMAT_ABGR4444, + SDL_PIXELFORMAT_ABGR1555, + SDL_PIXELFORMAT_BGR565, SDL_PIXELFORMAT_BGR24, SDL_PIXELFORMAT_ABGR8888}, 0, @@ -384,24 +387,21 @@ GLES_CreateTexture(SDL_Renderer * renderer, SDL_Texture * texture) format = GL_RGBA; type = GL_UNSIGNED_BYTE; break; - /* - These formats would be supported if SDL had the necessary pixel formats - case SDL_PIXELFORMAT_BGR565: - internalFormat = GL_RGB; - format = GL_RGB; - type = GL_UNSIGNED_SHORT_5_6_5; - break; - case SDL_PIXELFORMAT_ABGR5551: - internalFormat = GL_RGBA; - format = GL_RGBA; - type = GL_UNSIGNED_SHORT_5_5_5_1; - break; - case SDL_PIXELFORMAT_ABGR4444: - internalFormat = GL_RGBA; - format = GL_RGBA; - type = GL_UNSIGNED_SHORT_4_4_4_4; - break; - */ + case SDL_PIXELFORMAT_BGR565: + internalFormat = GL_RGB; + format = GL_RGB; + type = GL_UNSIGNED_SHORT_5_6_5; + break; + case SDL_PIXELFORMAT_ABGR1555: + internalFormat = GL_RGBA; + format = GL_RGBA; + type = GL_UNSIGNED_SHORT_5_5_5_1; + break; + case SDL_PIXELFORMAT_ABGR4444: + internalFormat = GL_RGBA; + format = GL_RGBA; + type = GL_UNSIGNED_SHORT_4_4_4_4; + break; default: SDL_SetError("Unsupported texture format"); return -1;