aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics/Gal/OpenGL/OGLRasterizer.cs
diff options
context:
space:
mode:
authorgdkchan <gab.dark.100@gmail.com>2018-10-12 22:37:01 -0300
committerAc_K <Acoustik666@gmail.com>2018-10-13 01:37:01 +0000
commitaa1cd849cfe254dc7c8c9a0783a546a4b9b3c0ab (patch)
treee7d0f9d7399a835818068d7ca034b179cd95b91e /Ryujinx.Graphics/Gal/OpenGL/OGLRasterizer.cs
parentdd3cb33c9f43412617e2b2b76d9e2a4dec9a2a23 (diff)
Quads, QuadStrip, const attributes and half-float attributes support (#447)
* Quads, QuadStrip and const attributes support * Add support for half float attributes and fix texture pitch alignment * Throw when an unsupported float type is used as const attribute aswell
Diffstat (limited to 'Ryujinx.Graphics/Gal/OpenGL/OGLRasterizer.cs')
-rw-r--r--Ryujinx.Graphics/Gal/OpenGL/OGLRasterizer.cs33
1 files changed, 32 insertions, 1 deletions
diff --git a/Ryujinx.Graphics/Gal/OpenGL/OGLRasterizer.cs b/Ryujinx.Graphics/Gal/OpenGL/OGLRasterizer.cs
index a74aee07..7b435c45 100644
--- a/Ryujinx.Graphics/Gal/OpenGL/OGLRasterizer.cs
+++ b/Ryujinx.Graphics/Gal/OpenGL/OGLRasterizer.cs
@@ -119,6 +119,18 @@ namespace Ryujinx.Graphics.Gal.OpenGL
GL.BufferData(BufferTarget.ElementArrayBuffer, Length, HostAddress, BufferUsageHint.StreamDraw);
}
+ public void CreateIbo(long Key, int DataSize, byte[] Buffer)
+ {
+ int Handle = GL.GenBuffer();
+
+ IboCache.AddOrUpdate(Key, Handle, (uint)DataSize);
+
+ IntPtr Length = new IntPtr(Buffer.Length);
+
+ GL.BindBuffer(BufferTarget.ElementArrayBuffer, Handle);
+ GL.BufferData(BufferTarget.ElementArrayBuffer, Length, Buffer, BufferUsageHint.StreamDraw);
+ }
+
public void SetIndexArray(int Size, GalIndexFormat Format)
{
IndexBuffer.Type = OGLEnumConverter.GetDrawElementsType(Format);
@@ -135,7 +147,26 @@ namespace Ryujinx.Graphics.Gal.OpenGL
return;
}
- GL.DrawArrays(OGLEnumConverter.GetPrimitiveType(PrimType), First, Count);
+ if (PrimType == GalPrimitiveType.Quads)
+ {
+ for (int Offset = 0; Offset < Count; Offset += 4)
+ {
+ GL.DrawArrays(PrimitiveType.TriangleFan, First + Offset, 4);
+ }
+ }
+ else if (PrimType == GalPrimitiveType.QuadStrip)
+ {
+ GL.DrawArrays(PrimitiveType.TriangleFan, First, 4);
+
+ for (int Offset = 2; Offset < Count; Offset += 2)
+ {
+ GL.DrawArrays(PrimitiveType.TriangleFan, First + Offset, 4);
+ }
+ }
+ else
+ {
+ GL.DrawArrays(OGLEnumConverter.GetPrimitiveType(PrimType), First, Count);
+ }
}
public void DrawElements(long IboKey, int First, int VertexBase, GalPrimitiveType PrimType)