mirror of
https://github.com/libsdl-org/SDL.git
synced 2026-04-27 17:54:18 +00:00
Use floating point values for viewport, clip rectangle, and texture sizes
These are integer values internally, but the API has been changed to make it easier to mix other render code with querying those values. Fixes https://github.com/libsdl-org/SDL/issues/7519
This commit is contained in:
@@ -51,7 +51,7 @@ quit(int rc)
|
||||
static SDL_bool
|
||||
DrawComposite(DrawState *s)
|
||||
{
|
||||
SDL_Rect viewport;
|
||||
SDL_FRect viewport;
|
||||
SDL_FRect R;
|
||||
SDL_Texture *target;
|
||||
SDL_Surface *surface;
|
||||
@@ -91,7 +91,7 @@ DrawComposite(DrawState *s)
|
||||
|
||||
SDL_GetRenderViewport(s->renderer, &viewport);
|
||||
|
||||
target = SDL_CreateTexture(s->renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_TARGET, viewport.w, viewport.h);
|
||||
target = SDL_CreateTexture(s->renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_TARGET, (int)viewport.w, (int)viewport.h);
|
||||
SDL_SetTextureBlendMode(target, SDL_BLENDMODE_BLEND);
|
||||
SDL_SetRenderTarget(s->renderer, target);
|
||||
|
||||
@@ -113,8 +113,8 @@ DrawComposite(DrawState *s)
|
||||
s->scale_direction = 1;
|
||||
}
|
||||
}
|
||||
s->sprite_rect.x = (float)((viewport.w - s->sprite_rect.w) / 2);
|
||||
s->sprite_rect.y = (float)((viewport.h - s->sprite_rect.h) / 2);
|
||||
s->sprite_rect.x = ((viewport.w - s->sprite_rect.w) / 2);
|
||||
s->sprite_rect.y = ((viewport.h - s->sprite_rect.h) / 2);
|
||||
|
||||
SDL_RenderTexture(s->renderer, s->sprite, NULL, &s->sprite_rect);
|
||||
|
||||
@@ -141,12 +141,12 @@ DrawComposite(DrawState *s)
|
||||
static SDL_bool
|
||||
Draw(DrawState *s)
|
||||
{
|
||||
SDL_Rect viewport;
|
||||
SDL_FRect viewport;
|
||||
SDL_Texture *target;
|
||||
|
||||
SDL_GetRenderViewport(s->renderer, &viewport);
|
||||
|
||||
target = SDL_CreateTexture(s->renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_TARGET, viewport.w, viewport.h);
|
||||
target = SDL_CreateTexture(s->renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_TARGET, (int)viewport.w, (int)viewport.h);
|
||||
if (!target) {
|
||||
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create render target texture: %s\n", SDL_GetError());
|
||||
return SDL_FALSE;
|
||||
@@ -168,8 +168,8 @@ Draw(DrawState *s)
|
||||
s->scale_direction = 1;
|
||||
}
|
||||
}
|
||||
s->sprite_rect.x = (float)((viewport.w - s->sprite_rect.w) / 2);
|
||||
s->sprite_rect.y = (float)((viewport.h - s->sprite_rect.h) / 2);
|
||||
s->sprite_rect.x = ((viewport.w - s->sprite_rect.w) / 2);
|
||||
s->sprite_rect.y = ((viewport.h - s->sprite_rect.h) / 2);
|
||||
|
||||
SDL_RenderTexture(s->renderer, s->sprite, NULL, &s->sprite_rect);
|
||||
|
||||
@@ -251,7 +251,7 @@ int main(int argc, char *argv[])
|
||||
drawstates = SDL_stack_alloc(DrawState, state->num_windows);
|
||||
for (i = 0; i < state->num_windows; ++i) {
|
||||
DrawState *drawstate = &drawstates[i];
|
||||
int w, h;
|
||||
float w, h;
|
||||
|
||||
drawstate->window = state->windows[i];
|
||||
drawstate->renderer = state->renderers[i];
|
||||
@@ -264,9 +264,9 @@ int main(int argc, char *argv[])
|
||||
if (!drawstate->sprite || !drawstate->background) {
|
||||
quit(2);
|
||||
}
|
||||
SDL_QueryTexture(drawstate->sprite, NULL, NULL, &w, &h);
|
||||
drawstate->sprite_rect.w = (float)w;
|
||||
drawstate->sprite_rect.h = (float)h;
|
||||
SDL_GetTextureSize(drawstate->sprite, &w, &h);
|
||||
drawstate->sprite_rect.w = w;
|
||||
drawstate->sprite_rect.h = h;
|
||||
drawstate->scale_direction = 1;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user