Skip rendering when scissor is zero area.

This commit is contained in:
Branimir Karadžić
2017-01-11 20:38:38 -08:00
parent afa4e7be94
commit 8b3f752af5
6 changed files with 33 additions and 5 deletions

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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

View File

@@ -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);
}

View File

@@ -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;