mirror of
https://github.com/libsdl-org/SDL.git
synced 2026-06-05 22:30:29 +00:00
Merge 40f31e5980 into 5f25ce9282
This commit is contained in:
commit
1b91888557
5 changed files with 185 additions and 69 deletions
|
|
@ -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 }
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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 }
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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 }
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue