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; } }