···153153 // We can do this by adding a translation component to our (orthogonal) projection matrix.
154154 GLWrapper.PushOrtho(ScreenSpaceDrawRectangle);
155155156156- GLWrapper.ClearColour(BackgroundColour);
156156+ GLWrapper.Clear(new ClearInfo(BackgroundColour));
157157 base.Draw(vertexAction);
158158159159 GLWrapper.PopOrtho();
+40
osu.Framework/Graphics/OpenGL/ClearInfo.cs
···11+// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
22+// See the LICENCE file in the repository root for full licence text.
33+44+using osuTK.Graphics;
55+66+namespace osu.Framework.Graphics.OpenGL
77+{
88+ /// <summary>
99+ /// Information for how the current frame buffer should be cleared.
1010+ /// </summary>
1111+ public readonly struct ClearInfo
1212+ {
1313+ /// <summary>
1414+ /// The default clear properties, as defined by OpenGL.
1515+ /// </summary>
1616+ public static ClearInfo Default => new ClearInfo(default);
1717+1818+ /// <summary>
1919+ /// The colour to write to the frame buffer.
2020+ /// </summary>
2121+ public readonly Color4 Colour;
2222+2323+ /// <summary>
2424+ /// The depth to write to the frame buffer.
2525+ /// </summary>
2626+ public readonly double Depth;
2727+2828+ /// <summary>
2929+ /// The stencil value to write to the frame buffer.
3030+ /// </summary>
3131+ public readonly int Stencil;
3232+3333+ public ClearInfo(Color4 colour = default, double depth = 1f, int stencil = 0)
3434+ {
3535+ Colour = colour;
3636+ Depth = depth;
3737+ Stencil = stencil;
3838+ }
3939+ }
4040+}
+15-6
osu.Framework/Graphics/OpenGL/GLWrapper.cs
···134134 BlendRange = 1,
135135 AlphaExponent = 1,
136136 }, true);
137137+138138+ Clear(ClearInfo.Default);
137139 }
138140139139- // We initialize to an invalid value such that we are not missing an initial GL.ClearColor call.
140140- private static Color4 clearColour = new Color4(-1, -1, -1, -1);
141141+ private static ClearInfo currentClearInfo;
141142142142- public static void ClearColour(Color4 c)
143143+ public static void Clear(ClearInfo clearInfo)
143144 {
144144- if (clearColour != c)
145145+ if (clearInfo.Colour != currentClearInfo.Colour)
146146+ GL.ClearColor(clearInfo.Colour);
147147+148148+ if (clearInfo.Depth != currentClearInfo.Depth)
145149 {
146146- clearColour = c;
147147- GL.ClearColor(clearColour);
150150+ // Todo: Wtf. osuTK's bindings are broken for glClearDepthf(). Using glClearDepth() for now
151151+ osuTK.Graphics.OpenGL.GL.ClearDepth(clearInfo.Depth);
148152 }
149153154154+ if (clearInfo.Stencil != currentClearInfo.Stencil)
155155+ GL.ClearStencil(clearInfo.Stencil);
156156+150157 GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit | ClearBufferMask.StencilBufferBit);
158158+159159+ currentClearInfo = clearInfo;
151160 }
152161153162 /// <summary>