package imgui import ( "time" cimgui "github.com/AllenDang/cimgui-go/imgui" ) // ImGui context & IO wrapper type Context struct { ctx *cimgui.Context io *cimgui.IO lastDrawData *cimgui.DrawData } func New() *Context { ctx := cimgui.CreateContext() cimgui.SetCurrentContext(ctx) io := cimgui.CurrentIO() return &Context{ctx: ctx, io: io} } func (c *Context) Destroy() { cimgui.DestroyContext() } // Starts new ImGui frame // dt - time since last frame func (c *Context) BeginFrame(dt time.Duration, winW, winH int32) { c.io.SetDeltaTime(float32(dt.Seconds())) c.io.SetDisplaySize(cimgui.Vec2{X: float32(winW), Y: float32(winH)}) cimgui.NewFrame() } // Ends the frame, renders // and returns data for Vulkan func (c *Context) EndFrame() *cimgui.DrawData { cimgui.EndFrame() cimgui.Render() c.lastDrawData = cimgui.CurrentDrawData() return cimgui.CurrentDrawData() } // expose io to input backend func (c *Context) IO() *cimgui.IO { return c.io } func (c *Context) LastDrawData() *cimgui.DrawData { return c.lastDrawData }