forked from Mirror/Ryujinx
Add support for custom line widths (#2406)
This commit is contained in:
parent
493648df31
commit
fefd4619a5
4 changed files with 36 additions and 1 deletions
|
@ -52,6 +52,7 @@ namespace Ryujinx.Graphics.GAL
|
||||||
|
|
||||||
void SetLogicOpState(bool enable, LogicalOp op);
|
void SetLogicOpState(bool enable, LogicalOp op);
|
||||||
|
|
||||||
|
void SetLineParameters(float width, bool smooth);
|
||||||
void SetPointParameters(float size, bool isProgramPointSize, bool enablePointSprite, Origin origin);
|
void SetPointParameters(float size, bool isProgramPointSize, bool enablePointSprite, Origin origin);
|
||||||
|
|
||||||
void SetPrimitiveRestart(bool enable, int index);
|
void SetPrimitiveRestart(bool enable, int index);
|
||||||
|
|
|
@ -223,12 +223,17 @@ namespace Ryujinx.Graphics.Gpu.Engine
|
||||||
UpdateTexturePoolState(state);
|
UpdateTexturePoolState(state);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Input assembler state.
|
// Rasterizer state.
|
||||||
if (state.QueryModified(MethodOffset.VertexAttribState))
|
if (state.QueryModified(MethodOffset.VertexAttribState))
|
||||||
{
|
{
|
||||||
UpdateVertexAttribState(state);
|
UpdateVertexAttribState(state);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (state.QueryModified(MethodOffset.LineWidthSmooth, MethodOffset.LineSmoothEnable))
|
||||||
|
{
|
||||||
|
UpdateLineState(state);
|
||||||
|
}
|
||||||
|
|
||||||
if (state.QueryModified(MethodOffset.PointSize,
|
if (state.QueryModified(MethodOffset.PointSize,
|
||||||
MethodOffset.VertexProgramPointSize,
|
MethodOffset.VertexProgramPointSize,
|
||||||
MethodOffset.PointSpriteEnable,
|
MethodOffset.PointSpriteEnable,
|
||||||
|
@ -716,6 +721,18 @@ namespace Ryujinx.Graphics.Gpu.Engine
|
||||||
_context.Renderer.Pipeline.SetVertexAttribs(vertexAttribs);
|
_context.Renderer.Pipeline.SetVertexAttribs(vertexAttribs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Updates host line width based on guest GPU state.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="state">Current GPU state</param>
|
||||||
|
private void UpdateLineState(GpuState state)
|
||||||
|
{
|
||||||
|
float width = state.Get<float>(MethodOffset.LineWidthSmooth);
|
||||||
|
bool smooth = state.Get<Boolean32>(MethodOffset.LineSmoothEnable);
|
||||||
|
|
||||||
|
_context.Renderer.Pipeline.SetLineParameters(width, smooth);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Updates host point size based on guest GPU state.
|
/// Updates host point size based on guest GPU state.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -67,6 +67,8 @@ namespace Ryujinx.Graphics.Gpu.State
|
||||||
BlendEnable = 0x4d8,
|
BlendEnable = 0x4d8,
|
||||||
StencilTestState = 0x4e0,
|
StencilTestState = 0x4e0,
|
||||||
YControl = 0x4eb,
|
YControl = 0x4eb,
|
||||||
|
LineWidthSmooth = 0x4ec,
|
||||||
|
LineWidthAliased = 0x4ed,
|
||||||
FirstVertex = 0x50d,
|
FirstVertex = 0x50d,
|
||||||
FirstInstance = 0x50e,
|
FirstInstance = 0x50e,
|
||||||
ClipDistanceEnable = 0x544,
|
ClipDistanceEnable = 0x544,
|
||||||
|
@ -77,6 +79,7 @@ namespace Ryujinx.Graphics.Gpu.State
|
||||||
ConditionState = 0x554,
|
ConditionState = 0x554,
|
||||||
SamplerPoolState = 0x557,
|
SamplerPoolState = 0x557,
|
||||||
DepthBiasFactor = 0x55b,
|
DepthBiasFactor = 0x55b,
|
||||||
|
LineSmoothEnable = 0x55c,
|
||||||
TexturePoolState = 0x55d,
|
TexturePoolState = 0x55d,
|
||||||
StencilBackTestState = 0x565,
|
StencilBackTestState = 0x565,
|
||||||
DepthBiasUnits = 0x56f,
|
DepthBiasUnits = 0x56f,
|
||||||
|
|
|
@ -746,6 +746,20 @@ namespace Ryujinx.Graphics.OpenGL
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SetLineParameters(float width, bool smooth)
|
||||||
|
{
|
||||||
|
if (smooth)
|
||||||
|
{
|
||||||
|
GL.Enable(EnableCap.LineSmooth);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
GL.Disable(EnableCap.LineSmooth);
|
||||||
|
}
|
||||||
|
|
||||||
|
GL.LineWidth(width);
|
||||||
|
}
|
||||||
|
|
||||||
public void SetPointParameters(float size, bool isProgramPointSize, bool enablePointSprite, Origin origin)
|
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.
|
// GL_POINT_SPRITE was deprecated in core profile 3.2+ and causes GL_INVALID_ENUM when set.
|
||||||
|
|
Reference in a new issue