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
This commit is contained in:
parent
c99b2884e4
commit
97ca974213
9 changed files with 334 additions and 18 deletions
|
@ -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();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue