Fixed bug 1622 - SDL_RenderSetViewport with empty SDL_Rect raises wrong error for OpenGL rendering backend
It's now legal to set an empty viewport rect - it will prevent any rendering. Also added an API to query the output size: SDL_GetRendererOutputSize()
This commit is contained in:
parent
b337b40e33
commit
c55f53aa40
8 changed files with 103 additions and 64 deletions
|
@ -337,6 +337,25 @@ SDL_GetRendererInfo(SDL_Renderer * renderer, SDL_RendererInfo * info)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
SDL_GetRendererOutputSize(SDL_Renderer * renderer, int *w, int *h)
|
||||
{
|
||||
CHECK_RENDERER_MAGIC(renderer, -1);
|
||||
|
||||
if (renderer->target) {
|
||||
return SDL_QueryTexture(renderer->target, NULL, NULL, w, h);
|
||||
} else if (renderer->window) {
|
||||
SDL_GetWindowSize(renderer->window, w, h);
|
||||
return 0;
|
||||
} else if (renderer->GetOutputSize) {
|
||||
return renderer->GetOutputSize(renderer, w, h);
|
||||
} else {
|
||||
/* This should never happen */
|
||||
SDL_SetError("Renderer doesn't support querying output size");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
static SDL_bool
|
||||
IsSupportedFormat(SDL_Renderer * renderer, Uint32 format)
|
||||
{
|
||||
|
@ -985,13 +1004,8 @@ UpdateLogicalSize(SDL_Renderer *renderer)
|
|||
float scale;
|
||||
SDL_Rect viewport;
|
||||
|
||||
if (renderer->target) {
|
||||
SDL_QueryTexture(renderer->target, NULL, NULL, &w, &h);
|
||||
} else if (renderer->window) {
|
||||
SDL_GetWindowSize(renderer->window, &w, &h);
|
||||
} else {
|
||||
/* FIXME */
|
||||
return SDL_SetError("Internal error: No way to get output resolution");
|
||||
if (SDL_GetRendererOutputSize(renderer, &w, &h) < 0) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
want_aspect = (float)renderer->logical_w / renderer->logical_h;
|
||||
|
@ -1074,16 +1088,8 @@ SDL_RenderSetViewport(SDL_Renderer * renderer, const SDL_Rect * rect)
|
|||
} else {
|
||||
renderer->viewport.x = 0;
|
||||
renderer->viewport.y = 0;
|
||||
if (renderer->target) {
|
||||
SDL_QueryTexture(renderer->target, NULL, NULL,
|
||||
&renderer->viewport.w, &renderer->viewport.h);
|
||||
} else if (renderer->window) {
|
||||
SDL_GetWindowSize(renderer->window,
|
||||
&renderer->viewport.w, &renderer->viewport.h);
|
||||
} else {
|
||||
/* This will be filled in by UpdateViewport() */
|
||||
renderer->viewport.w = 0;
|
||||
renderer->viewport.h = 0;
|
||||
if (SDL_GetRendererOutputSize(renderer, &renderer->viewport.w, &renderer->viewport.h) < 0) {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
return renderer->UpdateViewport(renderer);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue