mirror of
https://github.com/ppy/osu.git
synced 2025-03-05 15:03:16 +08:00
Add support for DrawInfo alpha when drawing CursorTrail
This commit is contained in:
parent
53edfedfc8
commit
60f851df3e
@ -3,9 +3,9 @@
|
|||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
using osu.Framework.Graphics.Colour;
|
|
||||||
using osu.Framework.Graphics.OpenGL.Buffers;
|
using osu.Framework.Graphics.OpenGL.Buffers;
|
||||||
using osu.Framework.Graphics.OpenGL.Vertices;
|
using osu.Framework.Graphics.OpenGL.Vertices;
|
||||||
using osu.Framework.Graphics.Primitives;
|
using osu.Framework.Graphics.Primitives;
|
||||||
@ -14,6 +14,7 @@ using osu.Framework.Graphics.Textures;
|
|||||||
using osu.Framework.Input;
|
using osu.Framework.Input;
|
||||||
using osu.Framework.Timing;
|
using osu.Framework.Timing;
|
||||||
using OpenTK;
|
using OpenTK;
|
||||||
|
using OpenTK.Graphics;
|
||||||
using OpenTK.Graphics.ES30;
|
using OpenTK.Graphics.ES30;
|
||||||
|
|
||||||
namespace osu.Game.Rulesets.Osu.UI.Cursor
|
namespace osu.Game.Rulesets.Osu.UI.Cursor
|
||||||
@ -115,14 +116,16 @@ namespace osu.Game.Rulesets.Osu.UI.Cursor
|
|||||||
|
|
||||||
protected override bool OnMouseMove(InputState state)
|
protected override bool OnMouseMove(InputState state)
|
||||||
{
|
{
|
||||||
|
Vector2 pos = state.Mouse.NativeState.Position;
|
||||||
|
|
||||||
if (lastPosition == null)
|
if (lastPosition == null)
|
||||||
{
|
{
|
||||||
lastPosition = state.Mouse.NativeState.Position;
|
lastPosition = pos;
|
||||||
resampler.AddPosition(lastPosition.Value);
|
resampler.AddPosition(lastPosition.Value);
|
||||||
return base.OnMouseMove(state);
|
return base.OnMouseMove(state);
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (Vector2 pos2 in resampler.AddPosition(state.Mouse.NativeState.Position))
|
foreach (Vector2 pos2 in resampler.AddPosition(pos))
|
||||||
{
|
{
|
||||||
Trace.Assert(lastPosition.HasValue);
|
Trace.Assert(lastPosition.HasValue);
|
||||||
|
|
||||||
@ -162,7 +165,7 @@ namespace osu.Game.Rulesets.Osu.UI.Cursor
|
|||||||
|
|
||||||
private class TrailDrawNodeSharedData
|
private class TrailDrawNodeSharedData
|
||||||
{
|
{
|
||||||
public VertexBuffer<TexturedVertex2D> VertexBuffer;
|
public VertexBuffer<TexturedTrailVertex> VertexBuffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
private class TrailDrawNode : DrawNode
|
private class TrailDrawNode : DrawNode
|
||||||
@ -188,7 +191,7 @@ namespace osu.Game.Rulesets.Osu.UI.Cursor
|
|||||||
public override void Draw(Action<TexturedVertex2D> vertexAction)
|
public override void Draw(Action<TexturedVertex2D> vertexAction)
|
||||||
{
|
{
|
||||||
if (Shared.VertexBuffer == null)
|
if (Shared.VertexBuffer == null)
|
||||||
Shared.VertexBuffer = new QuadVertexBuffer<TexturedVertex2D>(max_sprites, BufferUsageHint.DynamicDraw);
|
Shared.VertexBuffer = new QuadVertexBuffer<TexturedTrailVertex>(max_sprites, BufferUsageHint.DynamicDraw);
|
||||||
|
|
||||||
Shader.GetUniform<float>("g_FadeClock").Value = Time;
|
Shader.GetUniform<float>("g_FadeClock").Value = Time;
|
||||||
|
|
||||||
@ -205,17 +208,19 @@ namespace osu.Game.Rulesets.Osu.UI.Cursor
|
|||||||
int end = start;
|
int end = start;
|
||||||
|
|
||||||
Vector2 pos = Parts[i].Position;
|
Vector2 pos = Parts[i].Position;
|
||||||
ColourInfo colour = DrawInfo.Colour;
|
float time = Parts[i].Time;
|
||||||
colour.TopLeft.Linear.A = Parts[i].Time + colour.TopLeft.Linear.A;
|
|
||||||
colour.TopRight.Linear.A = Parts[i].Time + colour.TopRight.Linear.A;
|
|
||||||
colour.BottomLeft.Linear.A = Parts[i].Time + colour.BottomLeft.Linear.A;
|
|
||||||
colour.BottomRight.Linear.A = Parts[i].Time + colour.BottomRight.Linear.A;
|
|
||||||
|
|
||||||
Texture.DrawQuad(
|
Texture.DrawQuad(
|
||||||
new Quad(pos.X - Size.X / 2, pos.Y - Size.Y / 2, Size.X, Size.Y),
|
new Quad(pos.X - Size.X / 2, pos.Y - Size.Y / 2, Size.X, Size.Y),
|
||||||
colour,
|
DrawInfo.Colour,
|
||||||
null,
|
null,
|
||||||
v => Shared.VertexBuffer.Vertices[end++] = v);
|
v => Shared.VertexBuffer.Vertices[end++] = new TexturedTrailVertex
|
||||||
|
{
|
||||||
|
Position = v.Position,
|
||||||
|
TexturePosition = v.TexturePosition,
|
||||||
|
Time = time + 1,
|
||||||
|
Colour = v.Colour,
|
||||||
|
});
|
||||||
|
|
||||||
Parts[i].WasUpdated = false;
|
Parts[i].WasUpdated = false;
|
||||||
}
|
}
|
||||||
@ -240,5 +245,26 @@ namespace osu.Game.Rulesets.Osu.UI.Cursor
|
|||||||
Shader.Unbind();
|
Shader.Unbind();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[StructLayout(LayoutKind.Sequential)]
|
||||||
|
public struct TexturedTrailVertex : IEquatable<TexturedTrailVertex>, IVertex
|
||||||
|
{
|
||||||
|
[VertexMember(2, VertexAttribPointerType.Float)]
|
||||||
|
public Vector2 Position;
|
||||||
|
[VertexMember(4, VertexAttribPointerType.Float)]
|
||||||
|
public Color4 Colour;
|
||||||
|
[VertexMember(2, VertexAttribPointerType.Float)]
|
||||||
|
public Vector2 TexturePosition;
|
||||||
|
[VertexMember(1, VertexAttribPointerType.Float)]
|
||||||
|
public float Time;
|
||||||
|
|
||||||
|
public bool Equals(TexturedTrailVertex other)
|
||||||
|
{
|
||||||
|
return Position.Equals(other.Position)
|
||||||
|
&& TexturePosition.Equals(other.TexturePosition)
|
||||||
|
&& Colour.Equals(other.Colour)
|
||||||
|
&& Time.Equals(other.Time);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user