namespace AcDream.UI.Abstractions;
///
/// Owns the set of live s and drives per-frame draw
/// dispatch. The backend (Hexa.NET.ImGui in D.2a, custom in D.2b) implements
/// this; GameWindow creates one at startup and registers panels.
///
///
/// Does not call ImGui.NewFrame / ImGui.Render — those
/// belong to the caller so GL-state ownership is unambiguous. Caller pattern:
///
///
///
/// // per frame, render thread
/// inputBridge.BeginFrame(size, dt);
/// ImGui.NewFrame();
/// panelHost.RenderAll(ctx);
/// ImGui.Render();
/// ImGuiImplOpenGL3.RenderDrawData(ImGui.GetDrawData());
///
///
public interface IPanelHost
{
/// Register a panel for per-frame rendering. Idempotent by .
void Register(IPanel panel);
/// Remove the panel with the matching id. No-op if not present.
void Unregister(string panelId);
///
/// Iterate every visible panel and call . Call
/// order within a frame is the registration order; panels with
/// set to false are skipped entirely.
///
void RenderAll(PanelContext ctx);
}