mirror of
https://github.com/libsdl-org/SDL.git
synced 2025-09-04 02:18:12 +00:00
Compare commits
3 Commits
cc9937201e
...
b084999d40
Author | SHA1 | Date | |
---|---|---|---|
![]() |
b084999d40 | ||
![]() |
437d78499c | ||
![]() |
fbbc29159a |
@@ -2797,94 +2797,6 @@ bool SDL_GetRenderLogicalPresentationRect(SDL_Renderer *renderer, SDL_FRect *rec
|
||||
return true;
|
||||
}
|
||||
|
||||
static void SDL_RenderLogicalBorders(SDL_Renderer *renderer, const SDL_FRect *dst)
|
||||
{
|
||||
const SDL_RenderViewState *view = renderer->view;
|
||||
|
||||
if (dst->x > 0.0f || dst->y > 0.0f) {
|
||||
SDL_BlendMode saved_blend_mode = renderer->blendMode;
|
||||
SDL_FColor saved_color = renderer->color;
|
||||
|
||||
SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_NONE);
|
||||
SDL_SetRenderDrawColorFloat(renderer, 0.0f, 0.0f, 0.0f, 1.0f);
|
||||
|
||||
if (dst->x > 0.0f) {
|
||||
SDL_FRect rect;
|
||||
|
||||
rect.x = 0.0f;
|
||||
rect.y = 0.0f;
|
||||
rect.w = dst->x;
|
||||
rect.h = (float)view->pixel_h;
|
||||
SDL_RenderFillRect(renderer, &rect);
|
||||
|
||||
rect.x = dst->x + dst->w;
|
||||
rect.w = (float)view->pixel_w - rect.x;
|
||||
SDL_RenderFillRect(renderer, &rect);
|
||||
}
|
||||
|
||||
if (dst->y > 0.0f) {
|
||||
SDL_FRect rect;
|
||||
|
||||
rect.x = 0.0f;
|
||||
rect.y = 0.0f;
|
||||
rect.w = (float)view->pixel_w;
|
||||
rect.h = dst->y;
|
||||
SDL_RenderFillRect(renderer, &rect);
|
||||
|
||||
rect.y = dst->y + dst->h;
|
||||
rect.h = (float)view->pixel_h - rect.y;
|
||||
SDL_RenderFillRect(renderer, &rect);
|
||||
}
|
||||
|
||||
SDL_SetRenderDrawBlendMode(renderer, saved_blend_mode);
|
||||
SDL_SetRenderDrawColorFloat(renderer, saved_color.r, saved_color.g, saved_color.b, saved_color.a);
|
||||
}
|
||||
}
|
||||
|
||||
static void SDL_RenderLogicalPresentation(SDL_Renderer *renderer)
|
||||
{
|
||||
SDL_assert(renderer->view == &renderer->main_view);
|
||||
|
||||
SDL_RenderViewState *view = &renderer->main_view;
|
||||
const SDL_RendererLogicalPresentation mode = view->logical_presentation_mode;
|
||||
if (mode == SDL_LOGICAL_PRESENTATION_LETTERBOX) {
|
||||
// save off some state we're going to trample.
|
||||
const int logical_w = view->logical_w;
|
||||
const int logical_h = view->logical_h;
|
||||
const float scale_x = view->scale.x;
|
||||
const float scale_y = view->scale.y;
|
||||
const bool clipping_enabled = view->clipping_enabled;
|
||||
SDL_Rect orig_viewport, orig_cliprect;
|
||||
const SDL_FRect logical_dst_rect = view->logical_dst_rect;
|
||||
|
||||
SDL_copyp(&orig_viewport, &view->viewport);
|
||||
if (clipping_enabled) {
|
||||
SDL_copyp(&orig_cliprect, &view->clip_rect);
|
||||
}
|
||||
|
||||
// trample some state.
|
||||
SDL_SetRenderLogicalPresentation(renderer, logical_w, logical_h, SDL_LOGICAL_PRESENTATION_DISABLED);
|
||||
SDL_SetRenderViewport(renderer, NULL);
|
||||
if (clipping_enabled) {
|
||||
SDL_SetRenderClipRect(renderer, NULL);
|
||||
}
|
||||
SDL_SetRenderScale(renderer, 1.0f, 1.0f);
|
||||
|
||||
// draw the borders.
|
||||
SDL_RenderLogicalBorders(renderer, &logical_dst_rect);
|
||||
|
||||
// now set everything back.
|
||||
view->logical_presentation_mode = mode;
|
||||
SDL_SetRenderViewport(renderer, &orig_viewport);
|
||||
if (clipping_enabled) {
|
||||
SDL_SetRenderClipRect(renderer, &orig_cliprect);
|
||||
}
|
||||
SDL_SetRenderScale(renderer, scale_x, scale_y);
|
||||
|
||||
SDL_SetRenderLogicalPresentation(renderer, logical_w, logical_h, mode);
|
||||
}
|
||||
}
|
||||
|
||||
static bool SDL_RenderVectorFromWindow(SDL_Renderer *renderer, float window_dx, float window_dy, float *dx, float *dy)
|
||||
{
|
||||
// Convert from window coordinates to pixels within the window
|
||||
@@ -5401,8 +5313,6 @@ bool SDL_RenderPresent(SDL_Renderer *renderer)
|
||||
return SDL_SetError("You can't present on a render target");
|
||||
}
|
||||
|
||||
SDL_RenderLogicalPresentation(renderer);
|
||||
|
||||
if (renderer->transparent_window) {
|
||||
SDL_RenderApplyWindowShape(renderer);
|
||||
}
|
||||
|
@@ -1434,6 +1434,7 @@ bool SDL_RLESurface(SDL_Surface *surface)
|
||||
|
||||
// The surface is now accelerated
|
||||
surface->internal_flags |= SDL_INTERNAL_SURFACE_RLEACCEL;
|
||||
SDL_UpdateSurfaceLockFlag(surface);
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -1565,11 +1566,12 @@ void SDL_UnRLESurface(SDL_Surface *surface, bool recode)
|
||||
}
|
||||
}
|
||||
}
|
||||
surface->map.info.flags &=
|
||||
~(SDL_COPY_RLE_COLORKEY | SDL_COPY_RLE_ALPHAKEY);
|
||||
surface->map.info.flags &= ~(SDL_COPY_RLE_COLORKEY | SDL_COPY_RLE_ALPHAKEY);
|
||||
|
||||
SDL_free(surface->map.data);
|
||||
surface->map.data = NULL;
|
||||
|
||||
SDL_UpdateSurfaceLockFlag(surface);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -191,7 +191,7 @@ bool SDL_CalculateBlit(SDL_Surface *surface, SDL_Surface *dst)
|
||||
|
||||
#ifdef SDL_HAVE_RLE
|
||||
// Clean everything out to start
|
||||
if (surface->flags & SDL_INTERNAL_SURFACE_RLEACCEL) {
|
||||
if (surface->internal_flags & SDL_INTERNAL_SURFACE_RLEACCEL) {
|
||||
SDL_UnRLESurface(surface, true);
|
||||
}
|
||||
#endif
|
||||
|
@@ -49,7 +49,7 @@ bool SDL_SurfaceValid(SDL_Surface *surface)
|
||||
|
||||
void SDL_UpdateSurfaceLockFlag(SDL_Surface *surface)
|
||||
{
|
||||
if (SDL_SurfaceHasRLE(surface)) {
|
||||
if (surface->internal_flags & SDL_INTERNAL_SURFACE_RLEACCEL) {
|
||||
surface->flags |= SDL_SURFACE_LOCK_NEEDED;
|
||||
} else {
|
||||
surface->flags &= ~SDL_SURFACE_LOCK_NEEDED;
|
||||
@@ -611,7 +611,6 @@ bool SDL_SetSurfaceRLE(SDL_Surface *surface, bool enabled)
|
||||
if (surface->map.info.flags != flags) {
|
||||
SDL_InvalidateMap(&surface->map);
|
||||
}
|
||||
SDL_UpdateSurfaceLockFlag(surface);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1760,6 +1759,7 @@ bool SDL_LockSurface(SDL_Surface *surface)
|
||||
if (surface->internal_flags & SDL_INTERNAL_SURFACE_RLEACCEL) {
|
||||
SDL_UnRLESurface(surface, true);
|
||||
surface->internal_flags |= SDL_INTERNAL_SURFACE_RLEACCEL; // save accel'd state
|
||||
SDL_UpdateSurfaceLockFlag(surface);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@@ -230,6 +230,7 @@ static int SDLCALL IncrementCounterThread(void *userdata)
|
||||
SDL_Event event;
|
||||
|
||||
SDL_assert(!SDL_IsMainThread());
|
||||
SDL_zero(event);
|
||||
|
||||
if (data->delay > 0) {
|
||||
SDL_Delay(data->delay);
|
||||
|
Reference in New Issue
Block a user