diff --git a/sources/engine/Stride.UI/Engine/UIComponent.cs b/sources/engine/Stride.UI/Engine/UIComponent.cs index 0f98dd36a6..62ba81630c 100644 --- a/sources/engine/Stride.UI/Engine/UIComponent.cs +++ b/sources/engine/Stride.UI/Engine/UIComponent.cs @@ -129,6 +129,15 @@ public UIPage Page [DefaultValue(RenderGroup.Group0)] public RenderGroup RenderGroup { get; set; } + /// + /// Gets or sets the render order of this UI component. Components with a lower value + /// are rendered first (behind), higher values are rendered on top. + /// + [DataMember(90)] + [Display("Render Order")] + [DefaultValue(0)] + public int RenderOrder { get; set; } + /// /// A fixed size UI component with height of 1 will be this much of the vertical resolution on screen /// diff --git a/sources/engine/Stride.UI/Rendering/UI/RenderUIElement.cs b/sources/engine/Stride.UI/Rendering/UI/RenderUIElement.cs index 982b07aef7..5373536e67 100644 --- a/sources/engine/Stride.UI/Rendering/UI/RenderUIElement.cs +++ b/sources/engine/Stride.UI/Rendering/UI/RenderUIElement.cs @@ -37,6 +37,7 @@ public RenderUIElement() public bool IsBillboard; public bool SnapText; public bool IsFixedSize; + public int RenderOrder; /// /// Last registered position of teh mouse diff --git a/sources/engine/Stride.UI/Rendering/UI/UIRenderFeature.cs b/sources/engine/Stride.UI/Rendering/UI/UIRenderFeature.cs index ca8d00a35e..dbbab047f9 100644 --- a/sources/engine/Stride.UI/Rendering/UI/UIRenderFeature.cs +++ b/sources/engine/Stride.UI/Rendering/UI/UIRenderFeature.cs @@ -100,6 +100,9 @@ private void DrawInternal(RenderDrawContext context, RenderView renderView, Rend uiElementStates.Add(new UIElementState(renderElement)); } + // sort by RenderOrder so components with lower value are drawn first (behind) + uiElementStates.Sort(static (a, b) => a.RenderObject.RenderOrder.CompareTo(b.RenderObject.RenderOrder)); + // evaluate the current draw time (game instance is null for thumbnails) var drawTime = game != null ? game.DrawTime : new GameTime(); diff --git a/sources/engine/Stride.UI/Rendering/UI/UIRenderProcessor.cs b/sources/engine/Stride.UI/Rendering/UI/UIRenderProcessor.cs index c97ac26cf5..35327a71b8 100644 --- a/sources/engine/Stride.UI/Rendering/UI/UIRenderProcessor.cs +++ b/sources/engine/Stride.UI/Rendering/UI/UIRenderProcessor.cs @@ -52,6 +52,7 @@ public override void Draw(RenderContext gameTime) renderUIElement.IsBillboard = uiComponent.IsBillboard; renderUIElement.SnapText = uiComponent.SnapText; renderUIElement.IsFixedSize = uiComponent.IsFixedSize; + renderUIElement.RenderOrder = uiComponent.RenderOrder; if (renderUIElement.RenderGroup != uiComponent.RenderGroup) {