48 lines
1.0 KiB
Go
48 lines
1.0 KiB
Go
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 }
|