namespace AcDream.App.UI;
/// Renders a 3-D mini-scene into an off-screen buffer and returns the GL color-texture
/// handle. Called by the per-frame pre-UI hook (GameWindow), NOT from UiViewport.OnDraw. Implemented
/// by PaperdollViewportRenderer in AcDream.App.Rendering. Intra-App decoupling so the UI widget
/// doesn't depend on WbDrawDispatcher/GameWindow.
public interface IUiViewportRenderer
{
/// Render at (width,height); return the color-texture GL handle, or 0 if nothing rendered.
uint Render(int width, int height);
///
/// Whether the produced texture's v=0 row is the BOTTOM of the rendered
/// image.
///
/// Campaign V slice V6l. This is a property of the backend that made
/// the texture, not of the widget that draws it. A GL framebuffer's origin is
/// bottom-left, so its colour texture samples bottom-up and
/// has always flipped V to compensate. A Vulkan
/// image's origin is top-left and the backend's negative viewport height
/// stores the rendered image that way round, so the same flip would draw the
/// doll on its head — which is exactly what the first Vulkan capture did, and
/// what the comment on that line had predicted since V4a.
///
bool TextureIsBottomUp { get; }
}