mirror of
https://github.com/Facepunch/sbox-public.git
synced 2026-04-20 22:38:16 -04:00
New UI rendering that groups multiple panels to be grouped into a single draw call when possible. New custom rendering API for custom panels using `Panel.Draw.XX` to emit drawing commands.
40 lines
890 B
C#
40 lines
890 B
C#
using Sandbox.Rendering;
|
|
|
|
namespace Sandbox.UI;
|
|
|
|
/// <summary>
|
|
/// Thread-local buffer for collecting UI draw descriptors during panel.OnDraw().
|
|
/// Descriptors are routed directly to the active RenderLayer.
|
|
/// </summary>
|
|
internal class UIDrawBuffer
|
|
{
|
|
[ThreadStatic] static UIDrawBuffer _current;
|
|
|
|
internal static UIDrawBuffer Current => _current ??= new();
|
|
|
|
/// <summary>
|
|
/// The target layer for draw calls. Set by the renderer before OnDraw().
|
|
/// </summary>
|
|
public RenderLayer ActiveLayer;
|
|
|
|
public void AddBox( in BoxDrawDescriptor desc )
|
|
{
|
|
ActiveLayer.Boxes.Add( desc );
|
|
}
|
|
|
|
public void AddShadow( in ShadowDrawDescriptor desc )
|
|
{
|
|
ActiveLayer.AddShadow( desc );
|
|
}
|
|
|
|
public void AddOutline( in OutlineDrawDescriptor desc )
|
|
{
|
|
ActiveLayer.Outlines.Add( desc );
|
|
}
|
|
|
|
public void AddBackdrop( in BackdropDrawDescriptor desc )
|
|
{
|
|
ActiveLayer.Backdrops.Add( desc );
|
|
}
|
|
}
|