Render: Allow empty cliprect.
This fixes an issue where an empty cliprect is treated the same as a NULL cliprect, causing the render backends to disable clipping. Also adds a new API, SDL_RenderIsClipEnabled(render) that allows you to differentiate between: - SDL_RenderSetClipRect(render, NULL) - SDL_Rect r = {0,0,0,0}; SDL_RenderSetClipRect(render, &r); Fixes https://bugzilla.libsdl.org/show_bug.cgi?id=2504 --HG-- extra : amend_source : 9e5ac76e3f009d9ae49bc61c350df3ba891267b5 extra : histedit_source : b92b8be4d05b19a89fa0dee57f7ed6b1e924cb99%2Cce419f6ade87bafc78ff42702c1f263d2469e7e7
This commit is contained in:
parent
7dd1a22acc
commit
431aca234b
11 changed files with 43 additions and 18 deletions
|
@ -2232,13 +2232,12 @@ static int
|
|||
D3D11_UpdateClipRect(SDL_Renderer * renderer)
|
||||
{
|
||||
D3D11_RenderData *data = (D3D11_RenderData *) renderer->driverdata;
|
||||
const SDL_Rect *rect = &renderer->clip_rect;
|
||||
|
||||
if (SDL_RectEmpty(rect)) {
|
||||
if (!renderer->clipping_enabled) {
|
||||
ID3D11DeviceContext_RSSetScissorRects(data->d3dContext, 0, NULL);
|
||||
} else {
|
||||
D3D11_RECT scissorRect;
|
||||
if (D3D11_GetViewportAlignedD3DRect(renderer, rect, &scissorRect) != 0) {
|
||||
if (D3D11_GetViewportAlignedD3DRect(renderer, &renderer->clip_rect, &scissorRect) != 0) {
|
||||
/* D3D11_GetViewportAlignedD3DRect will have set the SDL error */
|
||||
return -1;
|
||||
}
|
||||
|
@ -2366,7 +2365,7 @@ D3D11_RenderStartDrawOp(SDL_Renderer * renderer)
|
|||
rendererData->currentRenderTargetView = renderTargetView;
|
||||
}
|
||||
|
||||
if (SDL_RectEmpty(&renderer->clip_rect)) {
|
||||
if (!renderer->clipping_enabled) {
|
||||
rasterizerState = rendererData->mainRasterizer;
|
||||
} else {
|
||||
rasterizerState = rendererData->clippedRasterizer;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue