From 8b3f752af50e6c700ac46db34adff36a66165223 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Branimir=20Karad=C5=BEi=C4=87?= Date: Wed, 11 Jan 2017 20:38:38 -0800 Subject: [PATCH] Skip rendering when scissor is zero area. --- src/renderer_d3d11.cpp | 5 +++++ src/renderer_d3d12.cpp | 5 +++++ src/renderer_d3d9.cpp | 5 +++++ src/renderer_gl.cpp | 5 +++++ src/renderer_mtl.mm | 13 ++++++++----- src/renderer_vk.cpp | 5 +++++ 6 files changed, 33 insertions(+), 5 deletions(-) diff --git a/src/renderer_d3d11.cpp b/src/renderer_d3d11.cpp index 984ec4b1c..41f841cfb 100644 --- a/src/renderer_d3d11.cpp +++ b/src/renderer_d3d11.cpp @@ -5744,6 +5744,11 @@ BX_PRAGMA_DIAGNOSTIC_POP(); { Rect scissorRect; scissorRect.intersect(viewScissorRect, _render->m_rectCache.m_cache[scissor]); + if (scissorRect.isZeroArea() ) + { + continue; + } + scissorEnabled = true; D3D11_RECT rc; rc.left = scissorRect.m_x; diff --git a/src/renderer_d3d12.cpp b/src/renderer_d3d12.cpp index e593d5ba0..401f6c59d 100644 --- a/src/renderer_d3d12.cpp +++ b/src/renderer_d3d12.cpp @@ -5371,6 +5371,11 @@ data.NumQualityLevels = 0; restoreScissor = true; Rect scissorRect; scissorRect.intersect(viewScissorRect,_render->m_rectCache.m_cache[scissor]); + if (scissorRect.isZeroArea() ) + { + continue; + } + D3D12_RECT rc; rc.left = scissorRect.m_x; rc.top = scissorRect.m_y; diff --git a/src/renderer_d3d9.cpp b/src/renderer_d3d9.cpp index 1f1adee0a..a582dba2e 100644 --- a/src/renderer_d3d9.cpp +++ b/src/renderer_d3d9.cpp @@ -3795,6 +3795,11 @@ namespace bgfx { namespace d3d9 { Rect scissorRect; scissorRect.intersect(viewScissorRect, _render->m_rectCache.m_cache[scissor]); + if (scissorRect.isZeroArea() ) + { + continue; + } + DX_CHECK(device->SetRenderState(D3DRS_SCISSORTESTENABLE, true) ); RECT rc; rc.left = scissorRect.m_x; diff --git a/src/renderer_gl.cpp b/src/renderer_gl.cpp index 38ca1b663..91e9ef6e7 100644 --- a/src/renderer_gl.cpp +++ b/src/renderer_gl.cpp @@ -6601,6 +6601,11 @@ namespace bgfx { namespace gl { Rect scissorRect; scissorRect.intersect(viewScissorRect, _render->m_rectCache.m_cache[scissor]); + if (scissorRect.isZeroArea() ) + { + continue; + } + GL_CHECK(glEnable(GL_SCISSOR_TEST) ); GL_CHECK(glScissor(scissorRect.m_x , resolutionHeight-scissorRect.m_height-scissorRect.m_y diff --git a/src/renderer_mtl.mm b/src/renderer_mtl.mm index 8a9958bbc..e5c13f66f 100644 --- a/src/renderer_mtl.mm +++ b/src/renderer_mtl.mm @@ -3406,14 +3406,17 @@ namespace bgfx { namespace mtl { Rect scissorRect; scissorRect.intersect(viewScissorRect, _render->m_rectCache.m_cache[scissor]); - rc.x = scissorRect.m_x; - rc.y = scissorRect.m_y; + if (scissorRect.isZeroArea() ) + { + continue; + } + + rc.x = scissorRect.m_x; + rc.y = scissorRect.m_y; rc.width = scissorRect.m_width; rc.height = scissorRect.m_height; - - if ( rc.width == 0 || rc.height == 0 ) - continue; } + rce.setScissorRect(rc); } diff --git a/src/renderer_vk.cpp b/src/renderer_vk.cpp index d03c9e565..7609b43d5 100644 --- a/src/renderer_vk.cpp +++ b/src/renderer_vk.cpp @@ -4262,6 +4262,11 @@ BX_UNUSED(currentSamplerStateIdx); restoreScissor = true; Rect scissorRect; scissorRect.intersect(viewScissorRect,_render->m_rectCache.m_cache[scissor]); + if (scissorRect.isZeroArea() ) + { + continue; + } + VkRect2D rc; rc.offset.x = scissorRect.m_x; rc.offset.x = scissorRect.m_y;