mirror of
https://github.com/love2d/megasource.git
synced 2026-08-19 20:20:11 +02:00
Added SDL 1c0f6952e65e.
This commit is contained in:
@@ -115,6 +115,12 @@ SDL_RendererEventWatch(void *userdata, SDL_Event *event)
|
||||
}
|
||||
|
||||
if (event->window.event == SDL_WINDOWEVENT_SIZE_CHANGED) {
|
||||
/* Make sure we're operating on the default render target */
|
||||
SDL_Texture *saved_target = SDL_GetRenderTarget(renderer);
|
||||
if (saved_target) {
|
||||
SDL_SetRenderTarget(renderer, NULL);
|
||||
}
|
||||
|
||||
if (renderer->logical_w) {
|
||||
UpdateLogicalSize(renderer);
|
||||
} else {
|
||||
@@ -140,6 +146,10 @@ SDL_RendererEventWatch(void *userdata, SDL_Event *event)
|
||||
renderer->UpdateViewport(renderer);
|
||||
}
|
||||
}
|
||||
|
||||
if (saved_target) {
|
||||
SDL_SetRenderTarget(renderer, saved_target);
|
||||
}
|
||||
} else if (event->window.event == SDL_WINDOWEVENT_HIDDEN) {
|
||||
renderer->hidden = SDL_TRUE;
|
||||
} else if (event->window.event == SDL_WINDOWEVENT_SHOWN) {
|
||||
@@ -350,7 +360,7 @@ SDL_GetRendererOutputSize(SDL_Renderer * renderer, int *w, int *h)
|
||||
SDL_GetWindowSize(renderer->window, w, h);
|
||||
return 0;
|
||||
} else {
|
||||
/* This should never happen */
|
||||
SDL_assert(0 && "This should never happen");
|
||||
return SDL_SetError("Renderer doesn't support querying output size");
|
||||
}
|
||||
}
|
||||
@@ -404,6 +414,10 @@ SDL_CreateTexture(SDL_Renderer * renderer, Uint32 format, int access, int w, int
|
||||
if (!format) {
|
||||
format = renderer->info.texture_formats[0];
|
||||
}
|
||||
if (SDL_BYTESPERPIXEL(format) == 0) {
|
||||
SDL_SetError("Invalid texture format");
|
||||
return NULL;
|
||||
}
|
||||
if (SDL_ISPIXELFORMAT_INDEXED(format)) {
|
||||
SDL_SetError("Palettized textures are not supported");
|
||||
return NULL;
|
||||
@@ -536,6 +550,10 @@ SDL_CreateTextureFromSurface(SDL_Renderer * renderer, SDL_Surface * surface)
|
||||
|
||||
/* Set up a destination surface for the texture update */
|
||||
dst_fmt = SDL_AllocFormat(format);
|
||||
if (!dst_fmt) {
|
||||
SDL_DestroyTexture(texture);
|
||||
return NULL;
|
||||
}
|
||||
temp = SDL_ConvertSurface(surface, dst_fmt, 0);
|
||||
SDL_FreeFormat(dst_fmt);
|
||||
if (temp) {
|
||||
@@ -908,12 +926,12 @@ int SDL_UpdateYUVTexture(SDL_Texture * texture, const SDL_Rect * rect,
|
||||
SDL_assert(!texture->native);
|
||||
renderer = texture->renderer;
|
||||
SDL_assert(renderer->UpdateTextureYUV);
|
||||
if (renderer->UpdateTextureYUV) {
|
||||
return renderer->UpdateTextureYUV(renderer, texture, rect, Yplane, Ypitch, Uplane, Upitch, Vplane, Vpitch);
|
||||
} else {
|
||||
return SDL_Unsupported();
|
||||
}
|
||||
}
|
||||
if (renderer->UpdateTextureYUV) {
|
||||
return renderer->UpdateTextureYUV(renderer, texture, rect, Yplane, Ypitch, Uplane, Upitch, Vplane, Vpitch);
|
||||
} else {
|
||||
return SDL_Unsupported();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
@@ -970,8 +988,8 @@ static void
|
||||
SDL_UnlockTextureYUV(SDL_Texture * texture)
|
||||
{
|
||||
SDL_Texture *native = texture->native;
|
||||
void *native_pixels;
|
||||
int native_pitch;
|
||||
void *native_pixels = NULL;
|
||||
int native_pitch = 0;
|
||||
SDL_Rect rect;
|
||||
|
||||
rect.x = 0;
|
||||
@@ -991,8 +1009,8 @@ static void
|
||||
SDL_UnlockTextureNative(SDL_Texture * texture)
|
||||
{
|
||||
SDL_Texture *native = texture->native;
|
||||
void *native_pixels;
|
||||
int native_pitch;
|
||||
void *native_pixels = NULL;
|
||||
int native_pitch = 0;
|
||||
const SDL_Rect *rect = &texture->locked_rect;
|
||||
const void* pixels = (void *) ((Uint8 *) texture->pixels +
|
||||
rect->y * texture->pitch +
|
||||
@@ -1067,6 +1085,7 @@ SDL_SetRenderTarget(SDL_Renderer *renderer, SDL_Texture *texture)
|
||||
/* Make a backup of the viewport */
|
||||
renderer->viewport_backup = renderer->viewport;
|
||||
renderer->clip_rect_backup = renderer->clip_rect;
|
||||
renderer->clipping_enabled_backup = renderer->clipping_enabled;
|
||||
renderer->scale_backup = renderer->scale;
|
||||
renderer->logical_w_backup = renderer->logical_w;
|
||||
renderer->logical_h_backup = renderer->logical_h;
|
||||
@@ -1089,6 +1108,7 @@ SDL_SetRenderTarget(SDL_Renderer *renderer, SDL_Texture *texture)
|
||||
} else {
|
||||
renderer->viewport = renderer->viewport_backup;
|
||||
renderer->clip_rect = renderer->clip_rect_backup;
|
||||
renderer->clipping_enabled = renderer->clipping_enabled_backup;
|
||||
renderer->scale = renderer->scale_backup;
|
||||
renderer->logical_w = renderer->logical_w_backup;
|
||||
renderer->logical_h = renderer->logical_h_backup;
|
||||
@@ -1113,7 +1133,7 @@ SDL_GetRenderTarget(SDL_Renderer *renderer)
|
||||
static int
|
||||
UpdateLogicalSize(SDL_Renderer *renderer)
|
||||
{
|
||||
int w, h;
|
||||
int w = 1, h = 1;
|
||||
float want_aspect;
|
||||
float real_aspect;
|
||||
float scale;
|
||||
@@ -1229,11 +1249,13 @@ SDL_RenderSetClipRect(SDL_Renderer * renderer, const SDL_Rect * rect)
|
||||
CHECK_RENDERER_MAGIC(renderer, -1)
|
||||
|
||||
if (rect) {
|
||||
renderer->clipping_enabled = SDL_TRUE;
|
||||
renderer->clip_rect.x = (int)SDL_floor(rect->x * renderer->scale.x);
|
||||
renderer->clip_rect.y = (int)SDL_floor(rect->y * renderer->scale.y);
|
||||
renderer->clip_rect.w = (int)SDL_ceil(rect->w * renderer->scale.x);
|
||||
renderer->clip_rect.h = (int)SDL_ceil(rect->h * renderer->scale.y);
|
||||
} else {
|
||||
renderer->clipping_enabled = SDL_FALSE;
|
||||
SDL_zero(renderer->clip_rect);
|
||||
}
|
||||
return renderer->UpdateClipRect(renderer);
|
||||
@@ -1252,6 +1274,13 @@ SDL_RenderGetClipRect(SDL_Renderer * renderer, SDL_Rect * rect)
|
||||
}
|
||||
}
|
||||
|
||||
SDL_bool
|
||||
SDL_RenderIsClipEnabled(SDL_Renderer * renderer)
|
||||
{
|
||||
CHECK_RENDERER_MAGIC(renderer, SDL_FALSE)
|
||||
return renderer->clipping_enabled;
|
||||
}
|
||||
|
||||
int
|
||||
SDL_RenderSetScale(SDL_Renderer * renderer, float scaleX, float scaleY)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user