Skip to content

Commit

Permalink
Update shaders and DrawNodes
Browse files Browse the repository at this point in the history
  • Loading branch information
LumpBloom7 committed Mar 26, 2023
1 parent d86cdae commit 1bd5e31
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 9 deletions.
2 changes: 1 addition & 1 deletion Directory.Build.props
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<Project>
<PropertyGroup Label="C#">
<LangVersion>9.0</LangVersion>
<LangVersion>10.0</LangVersion>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
<EnableNETAnalyzers>true</EnableNETAnalyzers>
Expand Down
25 changes: 22 additions & 3 deletions osu.Game.Rulesets.Sentakki/Mods/SentakkiModHidden.cs
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
using System;
using System.Runtime.InteropServices;
using osu.Framework.Allocation;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Primitives;
using osu.Framework.Graphics.Rendering;
using osu.Framework.Graphics.Rendering.Vertices;
using osu.Framework.Graphics.Shaders;
using osu.Framework.Graphics.Shaders.Types;
using osu.Framework.Localisation;
using osu.Game.Graphics.OpenGL.Vertices;
using osu.Game.Rulesets.Mods;
Expand Down Expand Up @@ -192,6 +194,8 @@ private class PlayfieldMaskDrawNode : DrawNode
private IShader shader = null!;
private Quad screenSpaceDrawQuad;

private IUniformBuffer<MaskParameters>? maskParameters;

private Vector2 maskPosition;
private Vector2 maskRadius;

Expand Down Expand Up @@ -222,6 +226,14 @@ public override void Draw(IRenderer renderer)
{
base.Draw(renderer);

maskParameters = renderer.CreateUniformBuffer<MaskParameters>();

maskParameters.Data = maskParameters.Data with
{
MaskPosition = maskPosition,
MaskRadius = maskRadius
};

if (quadBatch == null)
{
quadBatch = renderer.CreateQuadBatch<PositionAndColourVertex>(1, 1);
Expand All @@ -233,9 +245,7 @@ public override void Draw(IRenderer renderer)
}

shader.Bind();

shader.GetUniform<Vector2>("maskPosition").UpdateValue(ref maskPosition);
shader.GetUniform<Vector2>("maskRadius").UpdateValue(ref maskRadius);
shader.BindUniformBlock("m_maskParameters", maskParameters);

renderer.DrawQuad(renderer.WhitePixel, screenSpaceDrawQuad, DrawColourInfo.Colour, vertexAction: addAction);

Expand All @@ -245,8 +255,17 @@ public override void Draw(IRenderer renderer)
protected override void Dispose(bool isDisposing)
{
base.Dispose(isDisposing);
maskParameters?.Dispose();
quadBatch?.Dispose();
}


[StructLayout(LayoutKind.Sequential, Pack = 1)]
private record struct MaskParameters
{
public UniformVector2 MaskPosition;
public UniformVector2 MaskRadius;
}
}
}
}
Expand Down
15 changes: 10 additions & 5 deletions osu.Game.Rulesets.Sentakki/Resources/Shaders/sh_PlayfieldMask.fs
Original file line number Diff line number Diff line change
@@ -1,11 +1,16 @@
varying highp vec2 v_Position;
varying lowp vec4 v_Colour;
layout(location = 0) in highp vec2 v_Position;
layout(location = 1) in lowp vec4 v_Colour;

uniform highp vec2 maskPosition;
uniform highp vec2 maskRadius;
layout(std140, set = 0, binding = 0) uniform m_maskParameters
{
highp vec2 maskPosition;
highp vec2 maskRadius;
};

const mediump float smoothness = 2.0;

layout(location = 0) out vec4 o_Colour;

// highp precision is necessary for vertex positions to prevent catastrophic failure on GL_ES platforms
lowp vec4 getColourAt(highp vec2 diff, highp vec2 size, lowp vec4 originalColour)
{
Expand All @@ -17,5 +22,5 @@ lowp vec4 getColourAt(highp vec2 diff, highp vec2 size, lowp vec4 originalColour

void main(void)
{
gl_FragColor = mix(getColourAt(maskPosition - v_Position, maskRadius, v_Colour), vec4(0.0, 0.0, 0.0, 1.0), 0.0);
o_Colour = mix(getColourAt(maskPosition - v_Position, maskRadius, v_Colour), vec4(0.0, 0.0, 0.0, 1.0), 0.0);
}

0 comments on commit 1bd5e31

Please sign in to comment.