aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics/Gal/OpenGL/OGLRasterizer.cs
diff options
context:
space:
mode:
authorReinUsesLisp <reinuseslisp@airmail.cc>2018-07-05 15:47:29 -0300
committergdkchan <gab.dark.100@gmail.com>2018-07-05 15:47:29 -0300
commit97ca974213ec9564ed4a9c57e998ca726dbbb64f (patch)
tree5daf598d267d3ce05f3ef342621e7f93536fa554 /Ryujinx.Graphics/Gal/OpenGL/OGLRasterizer.cs
parentc99b2884e4eb9adfb5b893ee84d7678262d19b06 (diff)
Implement some GPU features (#209)
* Implement stencil testing * Implement depth testing * Implement face culling * Implement front face * Comparison functions now take OGL enums too * Fix front facing when flipping was used * Add depth and stencil clear values
Diffstat (limited to 'Ryujinx.Graphics/Gal/OpenGL/OGLRasterizer.cs')
-rw-r--r--Ryujinx.Graphics/Gal/OpenGL/OGLRasterizer.cs53
1 files changed, 53 insertions, 0 deletions
diff --git a/Ryujinx.Graphics/Gal/OpenGL/OGLRasterizer.cs b/Ryujinx.Graphics/Gal/OpenGL/OGLRasterizer.cs
index 8bff6bb3..b9885711 100644
--- a/Ryujinx.Graphics/Gal/OpenGL/OGLRasterizer.cs
+++ b/Ryujinx.Graphics/Gal/OpenGL/OGLRasterizer.cs
@@ -106,6 +106,11 @@ namespace Ryujinx.Graphics.Gal.OpenGL
return IboCache.TryGetSize(Key, out long Size) && Size == DataSize;
}
+ public void SetFrontFace(GalFrontFace FrontFace)
+ {
+ GL.FrontFace(OGLEnumConverter.GetFrontFace(FrontFace));
+ }
+
public void EnableCullFace()
{
GL.Enable(EnableCap.CullFace);
@@ -116,6 +121,11 @@ namespace Ryujinx.Graphics.Gal.OpenGL
GL.Disable(EnableCap.CullFace);
}
+ public void SetCullFace(GalCullFace CullFace)
+ {
+ GL.CullFace(OGLEnumConverter.GetCullFace(CullFace));
+ }
+
public void EnableDepthTest()
{
GL.Enable(EnableCap.DepthTest);
@@ -131,6 +141,49 @@ namespace Ryujinx.Graphics.Gal.OpenGL
GL.DepthFunc(OGLEnumConverter.GetDepthFunc(Func));
}
+ public void SetClearDepth(float Depth)
+ {
+ GL.ClearDepth(Depth);
+ }
+
+ public void EnableStencilTest()
+ {
+ GL.Enable(EnableCap.StencilTest);
+ }
+
+ public void DisableStencilTest()
+ {
+ GL.Disable(EnableCap.StencilTest);
+ }
+
+ public void SetStencilFunction(bool IsFrontFace, GalComparisonOp Func, int Ref, int Mask)
+ {
+ GL.StencilFuncSeparate(
+ IsFrontFace ? StencilFace.Front : StencilFace.Back,
+ OGLEnumConverter.GetStencilFunc(Func),
+ Ref,
+ Mask);
+ }
+
+ public void SetStencilOp(bool IsFrontFace, GalStencilOp Fail, GalStencilOp ZFail, GalStencilOp ZPass)
+ {
+ GL.StencilOpSeparate(
+ IsFrontFace ? StencilFace.Front : StencilFace.Back,
+ OGLEnumConverter.GetStencilOp(Fail),
+ OGLEnumConverter.GetStencilOp(ZFail),
+ OGLEnumConverter.GetStencilOp(ZPass));
+ }
+
+ public void SetStencilMask(bool IsFrontFace, int Mask)
+ {
+ GL.StencilMaskSeparate(IsFrontFace ? StencilFace.Front : StencilFace.Back, Mask);
+ }
+
+ public void SetClearStencil(int Stencil)
+ {
+ GL.ClearStencil(Stencil);
+ }
+
public void CreateVbo(long Key, byte[] Buffer)
{
int Handle = GL.GenBuffer();