using System.Numerics; namespace AcDream.App.UI; /// Leaf widget for dat Type 0xD (UIElement_Viewport). Blits the texture produced by its /// IUiViewportRenderer (run in the pre-UI hook) as a single sprite at its own rect. The 3-D render /// does NOT happen here (OnDraw only has a 2-D context). public sealed class UiViewport : UiElement { public override bool ConsumesDatChildren => true; /// Renderer that produces the off-screen texture. Set by GameWindow wiring (later task). public IUiViewportRenderer? Renderer { get; set; } /// Last GL color-texture handle produced by the pre-UI hook. 0 = nothing to blit. public uint TextureHandle { get; set; } protected override void OnDraw(UiRenderContext ctx) { if (!Visible || TextureHandle == 0) return; // Local origin is already at this widget's Left/Top (PushTransform applied by DrawSelfAndChildren). // V is FLIPPED (v0=1, v1=0): TextureHandle is an off-screen FBO color texture, whose origin is // bottom-left (GL), while the UI sprite convention is top-left. Without the flip the doll renders // upside-down. (If the doll appears upside-down at the visual gate, this is the line to revisit.) ctx.DrawSprite(TextureHandle, 0f, 0f, Width, Height, 0f, 1f, 1f, 0f, Vector4.One); } }