Scissor test implementation. Partially stubbed until geometry shaders… (#556)
* Scissor test implementation. Partially stubbed until geometry shaders are fixed * Apply to all viewports when geometry shaders are disabled. * Also apply enable cap to all viewports when geometry shaders are disabled * Added fixme as per suggestion Co-Authored-By: BaronKiko <BaronKiko@users.noreply.github.com> * Apparently no alignment needed here. * Comment on new line * Correct height calculation
This commit is contained in:
parent
8406ec6272
commit
0cd5ba03fe
4 changed files with 103 additions and 0 deletions
|
@ -270,6 +270,57 @@ namespace Ryujinx.Graphics.Gal.OpenGL
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
// Scissor Test
|
||||
bool forceUpdate;
|
||||
|
||||
for (int Index = 0; Index < New.ScissorTestCount; Index++)
|
||||
{
|
||||
forceUpdate = false;
|
||||
|
||||
if (New.ScissorTestEnabled[Index] != Old.ScissorTestEnabled[Index])
|
||||
{
|
||||
if (New.ScissorTestEnabled[Index])
|
||||
{
|
||||
// If there is only 1 scissor test geometry shaders are disables so the scissor test applies to all viewports
|
||||
if (New.ScissorTestCount == 1)
|
||||
{
|
||||
GL.Enable(EnableCap.ScissorTest);
|
||||
}
|
||||
else
|
||||
{
|
||||
GL.Enable(IndexedEnableCap.ScissorTest, Index);
|
||||
}
|
||||
forceUpdate = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
GL.Disable(IndexedEnableCap.ScissorTest, Index);
|
||||
}
|
||||
}
|
||||
|
||||
if (New.ScissorTestEnabled[Index] &&
|
||||
(New.ScissorTestX[Index] != Old.ScissorTestX[Index] ||
|
||||
New.ScissorTestY[Index] != Old.ScissorTestY[Index] ||
|
||||
New.ScissorTestWidth[Index] != Old.ScissorTestWidth[Index] ||
|
||||
New.ScissorTestHeight[Index] != Old.ScissorTestHeight[Index] ||
|
||||
forceUpdate)) // Force update intentionally last to reduce if comparisons
|
||||
{
|
||||
// If there is only 1 scissor test geometry shaders are disables so the scissor test applies to all viewports
|
||||
if (New.ScissorTestCount == 1)
|
||||
{
|
||||
GL.Scissor(New.ScissorTestX[Index], New.ScissorTestY[Index],
|
||||
New.ScissorTestWidth[Index], New.ScissorTestHeight[Index]);
|
||||
}
|
||||
else
|
||||
{
|
||||
GL.ScissorIndexed(Index, New.ScissorTestX[Index], New.ScissorTestY[Index],
|
||||
New.ScissorTestWidth[Index], New.ScissorTestHeight[Index]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (New.BlendIndependent)
|
||||
{
|
||||
for (int Index = 0; Index < GalPipelineState.RenderTargetsCount; Index++)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue