forked from Mirror/Ryujinx
Support instanced draw of quads" (#881)
This commit is contained in:
parent
2bb39ff03e
commit
8b90924c1e
1 changed files with 88 additions and 35 deletions
|
@ -170,9 +170,17 @@ namespace Ryujinx.Graphics.OpenGL
|
|||
int firstVertex,
|
||||
int firstInstance)
|
||||
{
|
||||
// TODO: Instanced rendering.
|
||||
int quadsCount = (vertexCount - 2) / 2;
|
||||
|
||||
if (firstInstance != 0 || instanceCount != 1)
|
||||
{
|
||||
for (int quadIndex = 0; quadIndex < quadsCount; quadIndex++)
|
||||
{
|
||||
GL.DrawArraysInstancedBaseInstance(PrimitiveType.TriangleFan, firstVertex + quadIndex * 2, 4, instanceCount, firstInstance);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
int[] firsts = new int[quadsCount];
|
||||
int[] counts = new int[quadsCount];
|
||||
|
||||
|
@ -191,6 +199,7 @@ namespace Ryujinx.Graphics.OpenGL
|
|||
counts,
|
||||
quadsCount);
|
||||
}
|
||||
}
|
||||
|
||||
private void DrawImpl(
|
||||
int vertexCount,
|
||||
|
@ -282,9 +291,52 @@ namespace Ryujinx.Graphics.OpenGL
|
|||
int firstVertex,
|
||||
int firstInstance)
|
||||
{
|
||||
// TODO: Instanced rendering.
|
||||
int quadsCount = indexCount / 4;
|
||||
|
||||
if (firstInstance != 0 || instanceCount != 1)
|
||||
{
|
||||
if (firstVertex != 0 && firstInstance != 0)
|
||||
{
|
||||
for (int quadIndex = 0; quadIndex < quadsCount; quadIndex++)
|
||||
{
|
||||
GL.DrawElementsInstancedBaseVertexBaseInstance(
|
||||
PrimitiveType.TriangleFan,
|
||||
4,
|
||||
_elementsType,
|
||||
indexBaseOffset + quadIndex * 4 * indexElemSize,
|
||||
instanceCount,
|
||||
firstVertex,
|
||||
firstInstance);
|
||||
}
|
||||
}
|
||||
else if (firstInstance != 0)
|
||||
{
|
||||
for (int quadIndex = 0; quadIndex < quadsCount; quadIndex++)
|
||||
{
|
||||
GL.DrawElementsInstancedBaseInstance(
|
||||
PrimitiveType.TriangleFan,
|
||||
4,
|
||||
_elementsType,
|
||||
indexBaseOffset + quadIndex * 4 * indexElemSize,
|
||||
instanceCount,
|
||||
firstInstance);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int quadIndex = 0; quadIndex < quadsCount; quadIndex++)
|
||||
{
|
||||
GL.DrawElementsInstanced(
|
||||
PrimitiveType.TriangleFan,
|
||||
4,
|
||||
_elementsType,
|
||||
indexBaseOffset + quadIndex * 4 * indexElemSize,
|
||||
instanceCount);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
IntPtr[] indices = new IntPtr[quadsCount];
|
||||
|
||||
int[] counts = new int[quadsCount];
|
||||
|
@ -308,6 +360,7 @@ namespace Ryujinx.Graphics.OpenGL
|
|||
quadsCount,
|
||||
baseVertices);
|
||||
}
|
||||
}
|
||||
|
||||
private void DrawQuadStripIndexedImpl(
|
||||
int indexCount,
|
||||
|
|
Loading…
Reference in a new issue