Skip to content

Commit e7f7580

Browse files
authored
fix: Non-default RenderGroup and changing RenderGroup at runtime for UI (#2697)
1 parent d5ce24d commit e7f7580

File tree

1 file changed

+32
-19
lines changed

1 file changed

+32
-19
lines changed

sources/engine/Stride.UI/Rendering/UI/UIRenderProcessor.cs

Lines changed: 32 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -34,28 +34,35 @@ public override void Draw(RenderContext gameTime)
3434
var renderUIElement = spriteStateKeyPair.Value;
3535
renderUIElement.Enabled = uiComponent.Enabled;
3636

37-
if (renderUIElement.Enabled)
38-
{
39-
// TODO GRAPHICS REFACTOR: Proper bounding box.
40-
//renderSprite.BoundingBox = new BoundingBoxExt(new Vector3(float.NegativeInfinity), new Vector3(float.PositiveInfinity));
37+
if (!renderUIElement.Enabled)
38+
continue;
4139

42-
// Copy values from ECS to render object
43-
renderUIElement.WorldMatrix = uiComponent.Entity.Transform.WorldMatrix;
40+
// TODO GRAPHICS REFACTOR: Proper bounding box.
41+
//renderSprite.BoundingBox = new BoundingBoxExt(new Vector3(float.NegativeInfinity), new Vector3(float.PositiveInfinity));
4442

45-
renderUIElement.RenderGroup = uiComponent.RenderGroup;
43+
// Copy values from ECS to render object
44+
renderUIElement.WorldMatrix = uiComponent.Entity.Transform.WorldMatrix;
45+
46+
renderUIElement.Page = uiComponent.Page;
47+
renderUIElement.Sampler = uiComponent.Sampler;
48+
renderUIElement.IsFullScreen = uiComponent.IsFullScreen;
49+
renderUIElement.Resolution = uiComponent.Resolution;
50+
renderUIElement.Size = uiComponent.Size;
51+
renderUIElement.ResolutionStretch = uiComponent.ResolutionStretch;
52+
renderUIElement.IsBillboard = uiComponent.IsBillboard;
53+
renderUIElement.SnapText = uiComponent.SnapText;
54+
renderUIElement.IsFixedSize = uiComponent.IsFixedSize;
4655

47-
renderUIElement.Page = uiComponent.Page;
48-
renderUIElement.Sampler = uiComponent.Sampler;
49-
renderUIElement.IsFullScreen = uiComponent.IsFullScreen;
50-
renderUIElement.Resolution = uiComponent.Resolution;
51-
renderUIElement.Size = uiComponent.Size;
52-
renderUIElement.ResolutionStretch = uiComponent.ResolutionStretch;
53-
renderUIElement.IsBillboard = uiComponent.IsBillboard;
54-
renderUIElement.SnapText = uiComponent.SnapText;
55-
renderUIElement.IsFixedSize = uiComponent.IsFixedSize;
56+
if (renderUIElement.RenderGroup != uiComponent.RenderGroup)
57+
{
58+
renderUIElement.RenderGroup = uiComponent.RenderGroup;
5659

57-
UIRoots.Add(renderUIElement);
60+
// Forces VisibilityGroup.ReevaluateActiveRenderStages for this render object since RenderGroup is used for render stage selection
61+
VisibilityGroup.RenderObjects.Remove(renderUIElement);
62+
VisibilityGroup.RenderObjects.Add(renderUIElement);
5863
}
64+
65+
UIRoots.Add(renderUIElement);
5966
}
6067
}
6168

@@ -71,12 +78,18 @@ protected override void OnEntityComponentRemoved(Entity entity, UIComponent uiCo
7178

7279
protected override RenderUIElement GenerateComponentData(Entity entity, UIComponent component)
7380
{
74-
return new RenderUIElement { Source = component };
81+
return new RenderUIElement
82+
{
83+
Source = component,
84+
// RenderGroup must be up to date from the start as VisibilityGroup.ReevaluateActiveRenderStages
85+
// reads from it for this objects' initial render stage
86+
RenderGroup = component.RenderGroup
87+
};
7588
}
7689

7790
protected override bool IsAssociatedDataValid(Entity entity, UIComponent component, RenderUIElement associatedData)
7891
{
79-
return associatedData.Source == component;
92+
return associatedData.Source == component && component.RenderGroup == associatedData.RenderGroup;
8093
}
8194
}
8295
}

0 commit comments

Comments
 (0)