lazarus/platform/platform.go

79 lines
1.2 KiB
Go
Raw Normal View History

package platform
import (
2018-12-27 21:59:35 +00:00
"errors"
2018-12-27 22:35:06 +00:00
"runtime"
"time"
2018-12-27 21:59:35 +00:00
"github.com/FooSoft/imgui-go"
"github.com/go-gl/gl/v2.1/gl"
"github.com/veandco/go-sdl2/sdl"
)
2018-12-27 21:59:35 +00:00
var (
platformIsInit bool
platformImguiContext *imgui.Context
platformWindows []Window
)
func Init() error {
if platformIsInit {
return errors.New("platform is already initialized")
}
2018-12-27 22:35:06 +00:00
runtime.LockOSThread()
2018-12-27 21:59:35 +00:00
if err := sdl.Init(sdl.INIT_VIDEO); err != nil {
return err
}
2018-12-27 21:59:35 +00:00
if err := gl.Init(); err != nil {
return err
}
2018-12-27 21:59:35 +00:00
platformImguiContext = imgui.CreateContext(nil)
return nil
}
2018-12-27 22:35:06 +00:00
func ProcessEvents() error {
var terminate bool
for !terminate {
for event := sdl.PollEvent(); event != nil; event = sdl.PollEvent() {
switch event.(type) {
case *sdl.QuitEvent:
terminate = true
break
}
}
<-time.After(time.Millisecond * 25)
}
return nil
}
2018-12-27 21:59:35 +00:00
func Shutdown() error {
if !platformIsInit {
2018-12-27 22:35:06 +00:00
return errors.New("platform was not initialized")
2018-12-27 21:59:35 +00:00
}
2018-12-27 21:59:35 +00:00
for _, w := range platformWindows {
if err := w.Destroy(); err != nil {
return err
}
}
2018-12-27 21:59:35 +00:00
platformWindows = nil
return nil
}
2018-12-27 21:59:35 +00:00
func CreateWindow(title string, width, height int) (Window, error) {
window, err := newWindow(title, width, height)
if err != nil {
return nil, err
}
return window, err
}