Implement clear buffer (fast path) (#1902)
* Implement clear buffer (fast path) * Remove blank line
This commit is contained in:
@ -6,6 +6,27 @@ namespace Ryujinx.Graphics.OpenGL
|
||||
{
|
||||
static class Buffer
|
||||
{
|
||||
public static void Clear(BufferHandle destination, int offset, int size, uint value)
|
||||
{
|
||||
GL.BindBuffer(BufferTarget.CopyWriteBuffer, destination.ToInt32());
|
||||
|
||||
unsafe
|
||||
{
|
||||
uint* valueArr = stackalloc uint[1];
|
||||
|
||||
valueArr[0] = value;
|
||||
|
||||
GL.ClearBufferSubData(
|
||||
BufferTarget.CopyWriteBuffer,
|
||||
PixelInternalFormat.Rgba8ui,
|
||||
(IntPtr)offset,
|
||||
(IntPtr)size,
|
||||
PixelFormat.RgbaInteger,
|
||||
PixelType.UnsignedByte,
|
||||
(IntPtr)valueArr);
|
||||
}
|
||||
}
|
||||
|
||||
public static BufferHandle Create()
|
||||
{
|
||||
return Handle.FromInt32<BufferHandle>(GL.GenBuffer());
|
||||
|
@ -91,6 +91,11 @@ namespace Ryujinx.Graphics.OpenGL
|
||||
_tfEnabled = true;
|
||||
}
|
||||
|
||||
public void ClearBuffer(BufferHandle destination, int offset, int size, uint value)
|
||||
{
|
||||
Buffer.Clear(destination, offset, size, value);
|
||||
}
|
||||
|
||||
public void ClearRenderTargetColor(int index, uint componentMask, ColorF color)
|
||||
{
|
||||
GL.ColorMask(
|
||||
@ -102,7 +107,7 @@ namespace Ryujinx.Graphics.OpenGL
|
||||
|
||||
float[] colors = new float[] { color.Red, color.Green, color.Blue, color.Alpha };
|
||||
|
||||
GL.ClearBuffer(ClearBuffer.Color, index, colors);
|
||||
GL.ClearBuffer(OpenTK.Graphics.OpenGL.ClearBuffer.Color, index, colors);
|
||||
|
||||
RestoreComponentMask(index);
|
||||
|
||||
@ -133,11 +138,11 @@ namespace Ryujinx.Graphics.OpenGL
|
||||
}
|
||||
else if (depthMask)
|
||||
{
|
||||
GL.ClearBuffer(ClearBuffer.Depth, 0, ref depthValue);
|
||||
GL.ClearBuffer(OpenTK.Graphics.OpenGL.ClearBuffer.Depth, 0, ref depthValue);
|
||||
}
|
||||
else if (stencilMask != 0)
|
||||
{
|
||||
GL.ClearBuffer(ClearBuffer.Stencil, 0, ref stencilValue);
|
||||
GL.ClearBuffer(OpenTK.Graphics.OpenGL.ClearBuffer.Stencil, 0, ref stencilValue);
|
||||
}
|
||||
|
||||
if (stencilMaskChanged)
|
||||
|
Reference in New Issue
Block a user