aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.OpenGL
diff options
context:
space:
mode:
Diffstat (limited to 'Ryujinx.Graphics.OpenGL')
-rw-r--r--Ryujinx.Graphics.OpenGL/EnumConversion.cs17
-rw-r--r--Ryujinx.Graphics.OpenGL/Pipeline.cs28
2 files changed, 45 insertions, 0 deletions
diff --git a/Ryujinx.Graphics.OpenGL/EnumConversion.cs b/Ryujinx.Graphics.OpenGL/EnumConversion.cs
index cc3db003..ccdbcfec 100644
--- a/Ryujinx.Graphics.OpenGL/EnumConversion.cs
+++ b/Ryujinx.Graphics.OpenGL/EnumConversion.cs
@@ -290,6 +290,23 @@ namespace Ryujinx.Graphics.OpenGL
return TextureMinFilter.Nearest;
}
+ public static OpenTK.Graphics.OpenGL.PolygonMode Convert(this GAL.PolygonMode mode)
+ {
+ switch (mode)
+ {
+ case GAL.PolygonMode.Point:
+ return OpenTK.Graphics.OpenGL.PolygonMode.Point;
+ case GAL.PolygonMode.Line:
+ return OpenTK.Graphics.OpenGL.PolygonMode.Line;
+ case GAL.PolygonMode.Fill:
+ return OpenTK.Graphics.OpenGL.PolygonMode.Fill;
+ }
+
+ Logger.Debug?.Print(LogClass.Gpu, $"Invalid {nameof(GAL.PolygonMode)} enum value: {mode}.");
+
+ return OpenTK.Graphics.OpenGL.PolygonMode.Fill;
+ }
+
public static PrimitiveType Convert(this PrimitiveTopology topology)
{
switch (topology)
diff --git a/Ryujinx.Graphics.OpenGL/Pipeline.cs b/Ryujinx.Graphics.OpenGL/Pipeline.cs
index dd07afcf..d0a509b4 100644
--- a/Ryujinx.Graphics.OpenGL/Pipeline.cs
+++ b/Ryujinx.Graphics.OpenGL/Pipeline.cs
@@ -830,6 +830,21 @@ namespace Ryujinx.Graphics.OpenGL
GL.LineWidth(width);
}
+ public unsafe void SetPatchParameters(int vertices, ReadOnlySpan<float> defaultOuterLevel, ReadOnlySpan<float> defaultInnerLevel)
+ {
+ GL.PatchParameter(PatchParameterInt.PatchVertices, vertices);
+
+ fixed (float* pOuterLevel = defaultOuterLevel)
+ {
+ GL.PatchParameter(PatchParameterFloat.PatchDefaultOuterLevel, pOuterLevel);
+ }
+
+ fixed (float* pInnerLevel = defaultInnerLevel)
+ {
+ GL.PatchParameter(PatchParameterFloat.PatchDefaultInnerLevel, pInnerLevel);
+ }
+ }
+
public void SetPointParameters(float size, bool isProgramPointSize, bool enablePointSprite, Origin origin)
{
// GL_POINT_SPRITE was deprecated in core profile 3.2+ and causes GL_INVALID_ENUM when set.
@@ -861,6 +876,19 @@ namespace Ryujinx.Graphics.OpenGL
GL.PointSize(Math.Max(float.Epsilon, size));
}
+ public void SetPolygonMode(GAL.PolygonMode frontMode, GAL.PolygonMode backMode)
+ {
+ if (frontMode == backMode)
+ {
+ GL.PolygonMode(MaterialFace.FrontAndBack, frontMode.Convert());
+ }
+ else
+ {
+ GL.PolygonMode(MaterialFace.Front, frontMode.Convert());
+ GL.PolygonMode(MaterialFace.Back, backMode.Convert());
+ }
+ }
+
public void SetPrimitiveRestart(bool enable, int index)
{
if (!enable)