From 67142c3c8d846f5834a384bffa8fb90af8a1389d Mon Sep 17 00:00:00 2001 From: Thomas Friedel Date: Thu, 25 Jan 2018 15:07:22 +0100 Subject: [PATCH] added an fps counter function --- sdlcanvas/sdlcanvas.go | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/sdlcanvas/sdlcanvas.go b/sdlcanvas/sdlcanvas.go index 4534340..26b3408 100644 --- a/sdlcanvas/sdlcanvas.go +++ b/sdlcanvas/sdlcanvas.go @@ -19,6 +19,7 @@ import ( type Window struct { Window *sdl.Window GLContext sdl.GLContext + fps float32 } func CreateCanvasWindow(w, h int, title string) (*Window, *canvas.Canvas, error) { @@ -58,7 +59,7 @@ func CreateCanvasWindow(w, h int, title string) (*Window, *canvas.Canvas, error) return nil, nil, fmt.Errorf("Error initializing GL: %v", err) } - sdl.GL_SetSwapInterval(0) + sdl.GL_SetSwapInterval(1) gl.Enable(gl.MULTISAMPLE) err = canvas.LoadGL(goglimpl.GLImpl{}) @@ -80,7 +81,15 @@ func (wnd *Window) Destroy() { wnd.Window.Destroy() } +func (wnd *Window) FPS() float32 { + return wnd.fps +} + func (wnd *Window) MainLoop(drawFunc func()) { + var frameTimes [10]time.Time + frameIndex := 0 + frameCount := 0 + // main loop for running := true; running; { for { @@ -109,6 +118,17 @@ func (wnd *Window) MainLoop(drawFunc func()) { drawFunc() + now := time.Now() + frameTimes[frameIndex] = now + frameIndex++ + frameIndex %= len(frameTimes) + if frameCount < len(frameTimes) { + frameCount++ + } else { + diff := now.Sub(frameTimes[frameIndex]).Seconds() + wnd.fps = float32(frameCount-1) / float32(diff) + } + sdl.GL_SwapWindow(wnd.Window) } }