mirror of
https://github.com/bloeys/nmage.git
synced 2025-12-29 13:28:20 +00:00
69 lines
1.2 KiB
Go
Executable File
69 lines
1.2 KiB
Go
Executable File
package engine
|
|
|
|
import (
|
|
"github.com/bloeys/nmage/renderer"
|
|
"github.com/bloeys/nmage/timing"
|
|
nmageimgui "github.com/bloeys/nmage/ui/imgui"
|
|
"github.com/go-gl/gl/v4.1-core/gl"
|
|
)
|
|
|
|
var (
|
|
isRunning = false
|
|
)
|
|
|
|
type Game interface {
|
|
Init()
|
|
|
|
Update()
|
|
Render()
|
|
FrameEnd()
|
|
|
|
DeInit()
|
|
}
|
|
|
|
func Run(g Game, w *Window, rend renderer.Render, ui nmageimgui.ImguiInfo) {
|
|
|
|
isRunning = true
|
|
|
|
// Run init with an active Imgui frame to allow init full imgui access
|
|
timing.FrameStarted()
|
|
w.handleInputs()
|
|
|
|
width, height := w.SDLWin.GetSize()
|
|
ui.FrameStart(float32(width), float32(height))
|
|
|
|
g.Init()
|
|
|
|
fbWidth, fbHeight := w.SDLWin.GLGetDrawableSize()
|
|
ui.Render(float32(width), float32(height), fbWidth, fbHeight)
|
|
|
|
timing.FrameEnded()
|
|
|
|
for isRunning {
|
|
|
|
width, height = w.SDLWin.GetSize()
|
|
fbWidth, fbHeight = w.SDLWin.GLGetDrawableSize()
|
|
|
|
timing.FrameStarted()
|
|
w.handleInputs()
|
|
ui.FrameStart(float32(width), float32(height))
|
|
|
|
g.Update()
|
|
|
|
gl.Clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT)
|
|
g.Render()
|
|
ui.Render(float32(width), float32(height), fbWidth, fbHeight)
|
|
w.SDLWin.GLSwap()
|
|
|
|
g.FrameEnd()
|
|
rend.FrameEnd()
|
|
timing.FrameEnded()
|
|
}
|
|
|
|
g.DeInit()
|
|
}
|
|
|
|
func Quit() {
|
|
isRunning = false
|
|
}
|