From 0523e417327de58d8ded131f844d7ccc2995e945 Mon Sep 17 00:00:00 2001 From: Alex Yatskov Date: Mon, 31 Dec 2018 17:30:59 -0800 Subject: [PATCH] wrap imgui --- graphics/types.go | 3 +++ platform/imgui/context.go | 2 +- platform/imgui/imgui.go | 34 ++++++++++++++++++++++++++++++++++ platform/imgui/impl.go | 2 +- platform/platform.go | 2 -- platform/texture.go | 5 +++-- platform/window.go | 10 ++++++++-- tools/viewer/main.go | 19 +++++++++---------- 8 files changed, 59 insertions(+), 18 deletions(-) create mode 100644 graphics/types.go create mode 100644 platform/imgui/imgui.go diff --git a/graphics/types.go b/graphics/types.go new file mode 100644 index 0000000..697a927 --- /dev/null +++ b/graphics/types.go @@ -0,0 +1,3 @@ +package graphics + +type Handle uintptr diff --git a/platform/imgui/context.go b/platform/imgui/context.go index 2cef7b0..f3afa43 100644 --- a/platform/imgui/context.go +++ b/platform/imgui/context.go @@ -1,4 +1,4 @@ -package imgui_backend +package imgui import ( "log" diff --git a/platform/imgui/imgui.go b/platform/imgui/imgui.go new file mode 100644 index 0000000..4faedc7 --- /dev/null +++ b/platform/imgui/imgui.go @@ -0,0 +1,34 @@ +package imgui + +import ( + imgui "github.com/FooSoft/imgui-go" + "github.com/FooSoft/lazarus/graphics" + "github.com/FooSoft/lazarus/math" +) + +func (*Context) DialogBegin(label string) bool { + return imgui.Begin(label) +} + +func (*Context) DialogEnd() { + imgui.End() +} + +func (*Context) Button(label string) bool { + return imgui.Button(label) +} + +func (*Context) Image(texture graphics.Handle, size math.Vec2i) { + imgui.Image(imgui.TextureID(texture), imgui.Vec2{X: float32(size.X), Y: float32(size.Y)}) +} + +func (*Context) SliderInt(label string, value *int, min, max int) bool { + temp := int32(*value) + result := imgui.SliderInt(label, &temp, int32(min), int32(max)) + *value = int(temp) + return result +} + +func (*Context) Text(label string) { + imgui.Text(label) +} diff --git a/platform/imgui/impl.go b/platform/imgui/impl.go index 2d6e44e..9b8dd25 100644 --- a/platform/imgui/impl.go +++ b/platform/imgui/impl.go @@ -1,4 +1,4 @@ -package imgui_backend +package imgui import ( "unsafe" diff --git a/platform/platform.go b/platform/platform.go index 05728cd..b1555b5 100644 --- a/platform/platform.go +++ b/platform/platform.go @@ -14,8 +14,6 @@ var singleton struct { windows []*Window } -type Handle uintptr - func Advance() (bool, error) { if err := advanceWindows(); err != nil { return false, err diff --git a/platform/texture.go b/platform/texture.go index 85fa62a..fbf68cb 100644 --- a/platform/texture.go +++ b/platform/texture.go @@ -3,6 +3,7 @@ package platform import ( "unsafe" + "github.com/FooSoft/lazarus/graphics" "github.com/FooSoft/lazarus/math" "github.com/go-gl/gl/v2.1/gl" ) @@ -45,8 +46,8 @@ func newTextureFromRgb(colors []math.Color3b, size math.Vec2i) (*Texture, error) return &Texture{size, glTexture}, nil } -func (t *Texture) Handle() Handle { - return Handle(t.glTexture) +func (t *Texture) Handle() graphics.Handle { + return graphics.Handle(t.glTexture) } func (t *Texture) Size() math.Vec2i { diff --git a/platform/window.go b/platform/window.go index 5aaf41f..aa7431f 100644 --- a/platform/window.go +++ b/platform/window.go @@ -12,7 +12,7 @@ import ( type Window struct { sdlWindow *sdl.Window sdlGlContext sdl.GLContext - imguiContext *imgui_backend.Context + imguiContext *imgui.Context scene Scene } @@ -43,7 +43,7 @@ func newWindow(title string, size math.Vec2i, scene Scene) (*Window, error) { w.makeCurrent() - w.imguiContext, err = imgui_backend.New(w.DisplaySize(), w.BufferSize()) + w.imguiContext, err = imgui.New(w.DisplaySize(), w.BufferSize()) if err != nil { w.Destroy() return nil, err @@ -114,10 +114,12 @@ func (w *Window) Destroy() error { } func (w *Window) CreateTextureRgba(colors []math.Color4b, size math.Vec2i) (*Texture, error) { + w.makeCurrent() return newTextureFromRgba(colors, size) } func (w *Window) CreateTextureRgb(colors []math.Color3b, size math.Vec2i) (*Texture, error) { + w.makeCurrent() return newTextureFromRgb(colors, size) } @@ -149,6 +151,10 @@ func (w *Window) BufferSize() math.Vec2i { return math.Vec2i{X: int(width), Y: int(height)} } +func (w *Window) Imgui() *imgui.Context { + return w.imguiContext +} + func (w *Window) advance() (bool, error) { w.makeCurrent() diff --git a/tools/viewer/main.go b/tools/viewer/main.go index dab5e16..52d3bcc 100644 --- a/tools/viewer/main.go +++ b/tools/viewer/main.go @@ -7,7 +7,6 @@ import ( "path/filepath" "time" - imgui "github.com/FooSoft/imgui-go" "github.com/FooSoft/lazarus/formats/dat" "github.com/FooSoft/lazarus/formats/dc6" "github.com/FooSoft/lazarus/math" @@ -37,8 +36,8 @@ type scene struct { palette *dat.Palette texture *platform.Texture - directionIndex int32 - frameIndex int32 + directionIndex int + frameIndex int } func (s *scene) Name() string { @@ -61,21 +60,22 @@ func (s *scene) Advance(window *platform.Window) error { } } - imgui.Begin("DC6 Viewer") - size := s.texture.Size() - imgui.Image(imgui.TextureID(s.texture.Handle()), imgui.Vec2{X: float32(size.X), Y: float32(size.Y)}) + imgui := window.Imgui() + + imgui.DialogBegin("DC6 Viewer") + imgui.Image(s.texture.Handle(), s.texture.Size()) direction := s.sprite.Directions[directionIndex] - if imgui.SliderInt("Direction", &directionIndex, 0, int32(len(s.sprite.Directions))-1) { + if imgui.SliderInt("Direction", &directionIndex, 0, len(s.sprite.Directions)-1) { frameIndex = 0 } frame := direction.Frames[frameIndex] - imgui.SliderInt("Frame", &frameIndex, 0, int32(len(direction.Frames))-1) + imgui.SliderInt("Frame", &frameIndex, 0, len(direction.Frames)-1) imgui.Text(fmt.Sprintf("Size: %+v", frame.Size)) imgui.Text(fmt.Sprintf("Offset: %+v", frame.Offset)) - if imgui.Button("Exit") { window.SetScene(nil) } + imgui.DialogEnd() if directionIndex != s.directionIndex || frameIndex != s.frameIndex { s.directionIndex = directionIndex @@ -83,7 +83,6 @@ func (s *scene) Advance(window *platform.Window) error { s.updateTexture(window) } - imgui.End() return nil }