Browse Source

Skip rendering when scissor is zero area.

Branimir Karadžić 9 years ago
parent
commit
8b3f752af5
6 changed files with 33 additions and 5 deletions
  1. 5 0
      src/renderer_d3d11.cpp
  2. 5 0
      src/renderer_d3d12.cpp
  3. 5 0
      src/renderer_d3d9.cpp
  4. 5 0
      src/renderer_gl.cpp
  5. 8 5
      src/renderer_mtl.mm
  6. 5 0
      src/renderer_vk.cpp

+ 5 - 0
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;

+ 5 - 0
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;

+ 5 - 0
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;

+ 5 - 0
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

+ 8 - 5
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);
 				}
 

+ 5 - 0
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;