This commit is contained in:
Cameron Cawley 2026-05-31 20:47:11 +02:00 committed by GitHub
commit 1b91888557
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 185 additions and 69 deletions

View file

@ -412,18 +412,46 @@ convert_format(GL_RenderData *renderdata, Uint32 pixel_format,
GLint *internalFormat, GLenum *format, GLenum *type)
{
switch (pixel_format) {
case SDL_PIXELFORMAT_RGBA32:
case SDL_PIXELFORMAT_RGBX32:
*internalFormat = GL_RGBA;
*format = GL_RGBA;
*type = GL_UNSIGNED_BYTE;
break;
case SDL_PIXELFORMAT_RGB24:
*internalFormat = GL_RGB;
*format = GL_RGB;
*type = GL_UNSIGNED_BYTE;
break;
case SDL_PIXELFORMAT_ARGB8888:
case SDL_PIXELFORMAT_RGB888:
case SDL_PIXELFORMAT_XRGB8888:
*internalFormat = GL_RGBA8;
*format = GL_BGRA;
*type = GL_UNSIGNED_INT_8_8_8_8_REV;
break;
#if SDL_BYTEORDER == SDL_BIG_ENDIAN
case SDL_PIXELFORMAT_ABGR8888:
case SDL_PIXELFORMAT_BGR888:
case SDL_PIXELFORMAT_XBGR8888:
*internalFormat = GL_RGBA8;
*format = GL_RGBA;
*type = GL_UNSIGNED_INT_8_8_8_8_REV;
break;
#endif
case SDL_PIXELFORMAT_RGB565:
*internalFormat = GL_RGB;
*format = GL_RGB;
*type = GL_UNSIGNED_SHORT_5_6_5;
break;
case SDL_PIXELFORMAT_RGBA5551:
*internalFormat = GL_RGBA;
*format = GL_RGBA;
*type = GL_UNSIGNED_SHORT_5_5_5_1;
break;
case SDL_PIXELFORMAT_RGBA4444:
*internalFormat = GL_RGBA;
*format = GL_RGBA;
*type = GL_UNSIGNED_SHORT_4_4_4_4;
break;
case SDL_PIXELFORMAT_YV12:
case SDL_PIXELFORMAT_IYUV:
case SDL_PIXELFORMAT_NV12:
@ -564,6 +592,7 @@ static int GL_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture)
renderdata->glTexParameteri(textype, GL_TEXTURE_STORAGE_HINT_APPLE,
GL_STORAGE_CACHED_APPLE);
}
/* TODO: Should this handle other 32-bit pixel formats? */
if (texture->access == SDL_TEXTUREACCESS_STREAMING && texture->format == SDL_PIXELFORMAT_ARGB8888 && (texture->w % 8) == 0) {
renderdata->glPixelStorei(GL_UNPACK_CLIENT_STORAGE_APPLE, GL_TRUE);
renderdata->glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
@ -635,10 +664,10 @@ static int GL_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture)
}
#endif
if (texture->format == SDL_PIXELFORMAT_ABGR8888 || texture->format == SDL_PIXELFORMAT_ARGB8888) {
data->shader = SHADER_RGBA;
} else {
if (texture->format == SDL_PIXELFORMAT_XBGR8888 || texture->format == SDL_PIXELFORMAT_XRGB8888 || texture->format == SDL_PIXELFORMAT_RGBX32) {
data->shader = SHADER_RGB;
} else {
data->shader = SHADER_RGBA;
}
#if SDL_HAVE_YUV
@ -1417,7 +1446,7 @@ static int GL_RenderReadPixels(SDL_Renderer *renderer, const SDL_Rect *rect,
Uint32 pixel_format, void *pixels, int pitch)
{
GL_RenderData *data = (GL_RenderData *)renderer->driverdata;
Uint32 temp_format = renderer->target ? renderer->target->format : SDL_PIXELFORMAT_ARGB8888;
Uint32 temp_format = renderer->target ? renderer->target->format : SDL_PIXELFORMAT_RGBA32;
void *temp_pixels;
int temp_pitch;
GLint internalFormat;
@ -1891,6 +1920,10 @@ static int GL_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, Uint32
#ifdef __MACOSX__
renderer->info.texture_formats[renderer->info.num_texture_formats++] = SDL_PIXELFORMAT_UYVY;
#endif
#if SDL_BYTEORDER == SDL_BIG_ENDIAN
renderer->info.texture_formats[renderer->info.num_texture_formats++] = SDL_PIXELFORMAT_ABGR8888,
renderer->info.texture_formats[renderer->info.num_texture_formats++] = SDL_PIXELFORMAT_XBGR8888,
#endif
renderer->rect_index_order[0] = 0;
renderer->rect_index_order[1] = 1;
@ -1949,11 +1982,15 @@ SDL_RenderDriver GL_RenderDriver = {
GL_CreateRenderer,
{ "opengl",
(SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC | SDL_RENDERER_TARGETTEXTURE),
4,
{ SDL_PIXELFORMAT_ARGB8888,
SDL_PIXELFORMAT_ABGR8888,
SDL_PIXELFORMAT_RGB888,
SDL_PIXELFORMAT_BGR888 },
8,
{ SDL_PIXELFORMAT_RGBA32,
SDL_PIXELFORMAT_RGBX32,
SDL_PIXELFORMAT_RGB24,
SDL_PIXELFORMAT_ARGB8888,
SDL_PIXELFORMAT_XRGB8888,
SDL_PIXELFORMAT_RGB565,
SDL_PIXELFORMAT_RGBA5551,
SDL_PIXELFORMAT_RGBA4444 },
0,
0 }
};

View file

@ -327,6 +327,26 @@ static int GLES_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture)
format = GL_RGBA;
type = GL_UNSIGNED_BYTE;
break;
case SDL_PIXELFORMAT_RGB24:
internalFormat = GL_RGB;
format = GL_RGB;
type = GL_UNSIGNED_BYTE;
break;
case SDL_PIXELFORMAT_RGB565:
internalFormat = GL_RGB;
format = GL_RGB;
type = GL_UNSIGNED_SHORT_5_6_5;
break;
case SDL_PIXELFORMAT_RGBA5551:
internalFormat = GL_RGBA;
format = GL_RGBA;
type = GL_UNSIGNED_SHORT_5_5_5_1;
break;
case SDL_PIXELFORMAT_RGBA4444:
internalFormat = GL_RGBA;
format = GL_RGBA;
type = GL_UNSIGNED_SHORT_4_4_4_4;
break;
default:
return SDL_SetError("Texture format not supported");
}
@ -900,7 +920,8 @@ static int GLES_RenderReadPixels(SDL_Renderer *renderer, const SDL_Rect *rect,
Uint32 pixel_format, void *pixels, int pitch)
{
GLES_RenderData *data = (GLES_RenderData *)renderer->driverdata;
Uint32 temp_format = renderer->target ? renderer->target->format : SDL_PIXELFORMAT_RGBA32;
/* GLES only supports RGBA32 or an implementation-defined format */
Uint32 temp_format = SDL_PIXELFORMAT_RGBA32;
void *temp_pixels;
int temp_pitch;
Uint8 *src, *dst, *tmp;
@ -1201,8 +1222,12 @@ SDL_RenderDriver GLES_RenderDriver = {
GLES_CreateRenderer,
{ "opengles",
(SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC),
1,
{ SDL_PIXELFORMAT_RGBA32 },
5,
{ SDL_PIXELFORMAT_RGBA32,
SDL_PIXELFORMAT_RGB24,
SDL_PIXELFORMAT_RGB565,
SDL_PIXELFORMAT_RGBA5551,
SDL_PIXELFORMAT_RGBA4444 },
0,
0 }
};

View file

@ -114,10 +114,10 @@ typedef enum
{
GLES2_IMAGESOURCE_INVALID,
GLES2_IMAGESOURCE_SOLID,
GLES2_IMAGESOURCE_TEXTURE_ABGR,
GLES2_IMAGESOURCE_TEXTURE_ARGB,
GLES2_IMAGESOURCE_TEXTURE_RGB,
GLES2_IMAGESOURCE_TEXTURE_BGR,
GLES2_IMAGESOURCE_TEXTURE,
GLES2_IMAGESOURCE_TEXTURE_SWAPRB,
GLES2_IMAGESOURCE_TEXTURE_SWAPRB_OPAQUE,
GLES2_IMAGESOURCE_TEXTURE_OPAQUE,
GLES2_IMAGESOURCE_TEXTURE_YUV,
GLES2_IMAGESOURCE_TEXTURE_NV12,
GLES2_IMAGESOURCE_TEXTURE_NV21,
@ -612,17 +612,17 @@ static int GLES2_SelectProgram(GLES2_RenderData *data, GLES2_ImageSource source,
case GLES2_IMAGESOURCE_SOLID:
ftype = GLES2_SHADER_FRAGMENT_SOLID;
break;
case GLES2_IMAGESOURCE_TEXTURE_ABGR:
ftype = GLES2_SHADER_FRAGMENT_TEXTURE_ABGR;
case GLES2_IMAGESOURCE_TEXTURE:
ftype = GLES2_SHADER_FRAGMENT_TEXTURE;
break;
case GLES2_IMAGESOURCE_TEXTURE_ARGB:
ftype = GLES2_SHADER_FRAGMENT_TEXTURE_ARGB;
case GLES2_IMAGESOURCE_TEXTURE_SWAPRB:
ftype = GLES2_SHADER_FRAGMENT_TEXTURE_SWAPRB;
break;
case GLES2_IMAGESOURCE_TEXTURE_RGB:
ftype = GLES2_SHADER_FRAGMENT_TEXTURE_RGB;
case GLES2_IMAGESOURCE_TEXTURE_SWAPRB_OPAQUE:
ftype = GLES2_SHADER_FRAGMENT_TEXTURE_SWAPRB_OPAQUE;
break;
case GLES2_IMAGESOURCE_TEXTURE_BGR:
ftype = GLES2_SHADER_FRAGMENT_TEXTURE_BGR;
case GLES2_IMAGESOURCE_TEXTURE_OPAQUE:
ftype = GLES2_SHADER_FRAGMENT_TEXTURE_OPAQUE;
break;
#if SDL_HAVE_YUV
case GLES2_IMAGESOURCE_TEXTURE_YUV:
@ -739,7 +739,7 @@ static int GLES2_QueueSetViewport(SDL_Renderer *renderer, SDL_RenderCommand *cmd
static int GLES2_QueueDrawPoints(SDL_Renderer *renderer, SDL_RenderCommand *cmd, const SDL_FPoint *points, int count)
{
const SDL_bool colorswap = (renderer->target && (renderer->target->format == SDL_PIXELFORMAT_BGRA32 || renderer->target->format == SDL_PIXELFORMAT_BGRX32));
const SDL_bool colorswap = (renderer->target && (renderer->target->format == SDL_PIXELFORMAT_BGRA32 || renderer->target->format == SDL_PIXELFORMAT_BGRX32 || renderer->target->format == SDL_PIXELFORMAT_BGR24));
SDL_VertexSolid *verts = (SDL_VertexSolid *)SDL_AllocateRenderVertices(renderer, count * sizeof(*verts), 0, &cmd->data.draw.first);
int i;
SDL_Color color;
@ -771,7 +771,7 @@ static int GLES2_QueueDrawPoints(SDL_Renderer *renderer, SDL_RenderCommand *cmd,
static int GLES2_QueueDrawLines(SDL_Renderer *renderer, SDL_RenderCommand *cmd, const SDL_FPoint *points, int count)
{
const SDL_bool colorswap = (renderer->target && (renderer->target->format == SDL_PIXELFORMAT_BGRA32 || renderer->target->format == SDL_PIXELFORMAT_BGRX32));
const SDL_bool colorswap = (renderer->target && (renderer->target->format == SDL_PIXELFORMAT_BGRA32 || renderer->target->format == SDL_PIXELFORMAT_BGRX32 || renderer->target->format == SDL_PIXELFORMAT_BGR24));
int i;
GLfloat prevx, prevy;
SDL_VertexSolid *verts = (SDL_VertexSolid *)SDL_AllocateRenderVertices(renderer, count * sizeof(*verts), 0, &cmd->data.draw.first);
@ -831,7 +831,7 @@ static int GLES2_QueueGeometry(SDL_Renderer *renderer, SDL_RenderCommand *cmd, S
float scale_x, float scale_y)
{
int i;
const SDL_bool colorswap = (renderer->target && (renderer->target->format == SDL_PIXELFORMAT_BGRA32 || renderer->target->format == SDL_PIXELFORMAT_BGRX32));
const SDL_bool colorswap = (renderer->target && (renderer->target->format == SDL_PIXELFORMAT_BGRA32 || renderer->target->format == SDL_PIXELFORMAT_BGRX32 || renderer->target->format == SDL_PIXELFORMAT_BGR24));
int count = indices ? num_indices : num_vertices;
cmd->data.draw.count = count;
@ -1020,7 +1020,7 @@ static int SetDrawState(GLES2_RenderData *data, const SDL_RenderCommand *cmd, co
static int SetCopyState(SDL_Renderer *renderer, const SDL_RenderCommand *cmd, void *vertices)
{
GLES2_RenderData *data = (GLES2_RenderData *)renderer->driverdata;
GLES2_ImageSource sourceType = GLES2_IMAGESOURCE_TEXTURE_ABGR;
GLES2_ImageSource sourceType = GLES2_IMAGESOURCE_TEXTURE;
SDL_Texture *texture = cmd->data.draw.texture;
int ret;
@ -1030,50 +1030,77 @@ static int SetCopyState(SDL_Renderer *renderer, const SDL_RenderCommand *cmd, vo
if (renderer->target->format != texture->format) {
switch (texture->format) {
case SDL_PIXELFORMAT_BGRA32:
case SDL_PIXELFORMAT_BGR24:
switch (renderer->target->format) {
case SDL_PIXELFORMAT_BGRA32:
case SDL_PIXELFORMAT_BGRX32:
case SDL_PIXELFORMAT_BGR24:
sourceType = GLES2_IMAGESOURCE_TEXTURE;
break;
case SDL_PIXELFORMAT_RGBA32:
case SDL_PIXELFORMAT_RGBX32:
sourceType = GLES2_IMAGESOURCE_TEXTURE_ARGB;
break;
case SDL_PIXELFORMAT_BGRX32:
sourceType = GLES2_IMAGESOURCE_TEXTURE_ABGR;
case SDL_PIXELFORMAT_RGB24:
case SDL_PIXELFORMAT_RGB565:
case SDL_PIXELFORMAT_RGBA5551:
case SDL_PIXELFORMAT_RGBA4444:
sourceType = GLES2_IMAGESOURCE_TEXTURE_SWAPRB;
break;
}
break;
case SDL_PIXELFORMAT_RGBA32:
case SDL_PIXELFORMAT_RGB24:
case SDL_PIXELFORMAT_RGB565:
case SDL_PIXELFORMAT_RGBA5551:
case SDL_PIXELFORMAT_RGBA4444:
switch (renderer->target->format) {
case SDL_PIXELFORMAT_BGRA32:
case SDL_PIXELFORMAT_BGRX32:
sourceType = GLES2_IMAGESOURCE_TEXTURE_ARGB;
case SDL_PIXELFORMAT_BGR24:
sourceType = GLES2_IMAGESOURCE_TEXTURE_SWAPRB;
break;
case SDL_PIXELFORMAT_RGBA32:
case SDL_PIXELFORMAT_RGBX32:
sourceType = GLES2_IMAGESOURCE_TEXTURE_ABGR;
case SDL_PIXELFORMAT_RGB24:
case SDL_PIXELFORMAT_RGB565:
case SDL_PIXELFORMAT_RGBA5551:
case SDL_PIXELFORMAT_RGBA4444:
sourceType = GLES2_IMAGESOURCE_TEXTURE;
break;
}
break;
case SDL_PIXELFORMAT_BGRX32:
switch (renderer->target->format) {
case SDL_PIXELFORMAT_RGBA32:
sourceType = GLES2_IMAGESOURCE_TEXTURE_ARGB;
case SDL_PIXELFORMAT_RGB24:
case SDL_PIXELFORMAT_RGB565:
case SDL_PIXELFORMAT_RGBA5551:
case SDL_PIXELFORMAT_RGBA4444:
sourceType = GLES2_IMAGESOURCE_TEXTURE_SWAPRB;
break;
case SDL_PIXELFORMAT_BGRA32:
sourceType = GLES2_IMAGESOURCE_TEXTURE_BGR;
case SDL_PIXELFORMAT_BGR24:
sourceType = GLES2_IMAGESOURCE_TEXTURE_OPAQUE;
break;
case SDL_PIXELFORMAT_RGBX32:
sourceType = GLES2_IMAGESOURCE_TEXTURE_ARGB;
sourceType = GLES2_IMAGESOURCE_TEXTURE_SWAPRB;
break;
}
break;
case SDL_PIXELFORMAT_RGBX32:
switch (renderer->target->format) {
case SDL_PIXELFORMAT_RGBA32:
sourceType = GLES2_IMAGESOURCE_TEXTURE_BGR;
case SDL_PIXELFORMAT_RGB24:
case SDL_PIXELFORMAT_RGB565:
case SDL_PIXELFORMAT_RGBA5551:
case SDL_PIXELFORMAT_RGBA4444:
sourceType = GLES2_IMAGESOURCE_TEXTURE_OPAQUE;
break;
case SDL_PIXELFORMAT_BGRA32:
sourceType = GLES2_IMAGESOURCE_TEXTURE_RGB;
case SDL_PIXELFORMAT_BGR24:
sourceType = GLES2_IMAGESOURCE_TEXTURE_SWAPRB_OPAQUE;
break;
case SDL_PIXELFORMAT_BGRX32:
sourceType = GLES2_IMAGESOURCE_TEXTURE_ARGB;
sourceType = GLES2_IMAGESOURCE_TEXTURE_SWAPRB;
break;
}
break;
@ -1096,21 +1123,25 @@ static int SetCopyState(SDL_Renderer *renderer, const SDL_RenderCommand *cmd, vo
return SDL_SetError("Unsupported texture format");
}
} else {
sourceType = GLES2_IMAGESOURCE_TEXTURE_ABGR; /* Texture formats match, use the non color mapping shader (even if the formats are not ABGR) */
sourceType = GLES2_IMAGESOURCE_TEXTURE; /* Texture formats match, use the non color mapping shader (even if the formats are not ABGR) */
}
} else {
switch (texture->format) {
case SDL_PIXELFORMAT_BGRA32:
sourceType = GLES2_IMAGESOURCE_TEXTURE_ARGB;
break;
case SDL_PIXELFORMAT_RGBA32:
sourceType = GLES2_IMAGESOURCE_TEXTURE_ABGR;
case SDL_PIXELFORMAT_RGB24:
case SDL_PIXELFORMAT_RGB565:
case SDL_PIXELFORMAT_RGBA5551:
case SDL_PIXELFORMAT_RGBA4444:
sourceType = GLES2_IMAGESOURCE_TEXTURE;
break;
case SDL_PIXELFORMAT_BGRA32:
sourceType = GLES2_IMAGESOURCE_TEXTURE_SWAPRB;
break;
case SDL_PIXELFORMAT_BGRX32:
sourceType = GLES2_IMAGESOURCE_TEXTURE_RGB;
sourceType = GLES2_IMAGESOURCE_TEXTURE_SWAPRB_OPAQUE;
break;
case SDL_PIXELFORMAT_RGBX32:
sourceType = GLES2_IMAGESOURCE_TEXTURE_BGR;
sourceType = GLES2_IMAGESOURCE_TEXTURE_OPAQUE;
break;
#if SDL_HAVE_YUV
case SDL_PIXELFORMAT_IYUV:
@ -1162,7 +1193,7 @@ static int SetCopyState(SDL_Renderer *renderer, const SDL_RenderCommand *cmd, vo
static int GLES2_RunCommandQueue(SDL_Renderer *renderer, SDL_RenderCommand *cmd, void *vertices, size_t vertsize)
{
GLES2_RenderData *data = (GLES2_RenderData *)renderer->driverdata;
const SDL_bool colorswap = (renderer->target && (renderer->target->format == SDL_PIXELFORMAT_BGRA32 || renderer->target->format == SDL_PIXELFORMAT_BGRX32));
const SDL_bool colorswap = (renderer->target && (renderer->target->format == SDL_PIXELFORMAT_BGRA32 || renderer->target->format == SDL_PIXELFORMAT_BGRX32 || renderer->target->format == SDL_PIXELFORMAT_BGR24));
#if USE_VERTEX_BUFFER_OBJECTS
const int vboidx = data->current_vertex_buffer;
@ -1430,6 +1461,23 @@ static int GLES2_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture)
format = GL_RGBA;
type = GL_UNSIGNED_BYTE;
break;
case SDL_PIXELFORMAT_RGB24:
case SDL_PIXELFORMAT_BGR24:
format = GL_RGB;
type = GL_UNSIGNED_BYTE;
break;
case SDL_PIXELFORMAT_RGB565:
format = GL_RGB;
type = GL_UNSIGNED_SHORT_5_6_5;
break;
case SDL_PIXELFORMAT_RGBA5551:
format = GL_RGBA;
type = GL_UNSIGNED_SHORT_5_5_5_1;
break;
case SDL_PIXELFORMAT_RGBA4444:
format = GL_RGBA;
type = GL_UNSIGNED_SHORT_4_4_4_4;
break;
#if SDL_HAVE_YUV
case SDL_PIXELFORMAT_IYUV:
case SDL_PIXELFORMAT_YV12:
@ -1894,7 +1942,8 @@ static int GLES2_RenderReadPixels(SDL_Renderer *renderer, const SDL_Rect *rect,
Uint32 pixel_format, void *pixels, int pitch)
{
GLES2_RenderData *data = (GLES2_RenderData *)renderer->driverdata;
Uint32 temp_format = renderer->target ? renderer->target->format : SDL_PIXELFORMAT_RGBA32;
/* GLES only supports RGBA32 or an implementation-defined format */
Uint32 temp_format = (renderer->target && SDL_PIXELLAYOUT(renderer->target->format) == SDL_PACKEDLAYOUT_8888) ? renderer->target->format : SDL_PIXELFORMAT_RGBA32;
size_t buflen;
void *temp_pixels;
int temp_pitch;
@ -2220,11 +2269,16 @@ SDL_RenderDriver GLES2_RenderDriver = {
GLES2_CreateRenderer,
{ "opengles2",
(SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC | SDL_RENDERER_TARGETTEXTURE),
4,
9,
{ SDL_PIXELFORMAT_RGBA32,
SDL_PIXELFORMAT_BGRA32,
SDL_PIXELFORMAT_BGRX32,
SDL_PIXELFORMAT_RGBX32 },
SDL_PIXELFORMAT_RGBX32,
SDL_PIXELFORMAT_RGB24,
SDL_PIXELFORMAT_BGR24,
SDL_PIXELFORMAT_RGB565,
SDL_PIXELFORMAT_RGBA5551,
SDL_PIXELFORMAT_RGBA4444 },
0,
0 }
};

View file

@ -91,7 +91,7 @@ static const char GLES2_Fragment_Solid[] = \
"}\n" \
;
static const char GLES2_Fragment_TextureABGR[] = \
static const char GLES2_Fragment_Texture[] = \
"uniform sampler2D u_texture;\n" \
"varying mediump vec4 v_color;\n" \
"varying SDL_TEXCOORD_PRECISION vec2 v_texCoord;\n" \
@ -104,7 +104,7 @@ static const char GLES2_Fragment_TextureABGR[] = \
;
/* ARGB to ABGR conversion */
static const char GLES2_Fragment_TextureARGB[] = \
static const char GLES2_Fragment_TextureSwapRB[] = \
"uniform sampler2D u_texture;\n" \
"varying mediump vec4 v_color;\n" \
"varying SDL_TEXCOORD_PRECISION vec2 v_texCoord;\n" \
@ -120,7 +120,7 @@ static const char GLES2_Fragment_TextureARGB[] = \
;
/* RGB to ABGR conversion */
static const char GLES2_Fragment_TextureRGB[] = \
static const char GLES2_Fragment_TextureSwapRBOpaque[] = \
"uniform sampler2D u_texture;\n" \
"varying mediump vec4 v_color;\n" \
"varying SDL_TEXCOORD_PRECISION vec2 v_texCoord;\n" \
@ -137,7 +137,7 @@ static const char GLES2_Fragment_TextureRGB[] = \
;
/* BGR to ABGR conversion */
static const char GLES2_Fragment_TextureBGR[] = \
static const char GLES2_Fragment_TextureOpaque[] = \
"uniform sampler2D u_texture;\n" \
"varying mediump vec4 v_color;\n" \
"varying SDL_TEXCOORD_PRECISION vec2 v_texCoord;\n" \
@ -405,14 +405,14 @@ const char *GLES2_GetShader(GLES2_ShaderType type)
return GLES2_Vertex_Default;
case GLES2_SHADER_FRAGMENT_SOLID:
return GLES2_Fragment_Solid;
case GLES2_SHADER_FRAGMENT_TEXTURE_ABGR:
return GLES2_Fragment_TextureABGR;
case GLES2_SHADER_FRAGMENT_TEXTURE_ARGB:
return GLES2_Fragment_TextureARGB;
case GLES2_SHADER_FRAGMENT_TEXTURE_RGB:
return GLES2_Fragment_TextureRGB;
case GLES2_SHADER_FRAGMENT_TEXTURE_BGR:
return GLES2_Fragment_TextureBGR;
case GLES2_SHADER_FRAGMENT_TEXTURE:
return GLES2_Fragment_Texture;
case GLES2_SHADER_FRAGMENT_TEXTURE_SWAPRB:
return GLES2_Fragment_TextureSwapRB;
case GLES2_SHADER_FRAGMENT_TEXTURE_SWAPRB_OPAQUE:
return GLES2_Fragment_TextureSwapRBOpaque;
case GLES2_SHADER_FRAGMENT_TEXTURE_OPAQUE:
return GLES2_Fragment_TextureOpaque;
#if SDL_HAVE_YUV
case GLES2_SHADER_FRAGMENT_TEXTURE_YUV_JPEG:
return GLES2_Fragment_TextureYUVJPEG;

View file

@ -39,10 +39,10 @@ typedef enum
{
GLES2_SHADER_VERTEX_DEFAULT = 0,
GLES2_SHADER_FRAGMENT_SOLID,
GLES2_SHADER_FRAGMENT_TEXTURE_ABGR,
GLES2_SHADER_FRAGMENT_TEXTURE_ARGB,
GLES2_SHADER_FRAGMENT_TEXTURE_BGR,
GLES2_SHADER_FRAGMENT_TEXTURE_RGB,
GLES2_SHADER_FRAGMENT_TEXTURE,
GLES2_SHADER_FRAGMENT_TEXTURE_SWAPRB,
GLES2_SHADER_FRAGMENT_TEXTURE_OPAQUE,
GLES2_SHADER_FRAGMENT_TEXTURE_SWAPRB_OPAQUE,
#if SDL_HAVE_YUV
GLES2_SHADER_FRAGMENT_TEXTURE_YUV_JPEG,
GLES2_SHADER_FRAGMENT_TEXTURE_YUV_BT601,