added an example for using GLFW
This commit is contained in:
parent
6b36b47b0c
commit
35f6c274a9
1 changed files with 74 additions and 0 deletions
74
examples/glfw/glfw.go
Normal file
74
examples/glfw/glfw.go
Normal file
|
@ -0,0 +1,74 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"log"
|
||||
"runtime"
|
||||
|
||||
"github.com/go-gl/gl/v3.2-core/gl"
|
||||
"github.com/go-gl/glfw/v3.2/glfw"
|
||||
"github.com/tfriedel6/canvas"
|
||||
"github.com/tfriedel6/canvas/goglimpl"
|
||||
)
|
||||
|
||||
func main() {
|
||||
runtime.LockOSThread()
|
||||
|
||||
// init SDL
|
||||
err := glfw.Init()
|
||||
if err != nil {
|
||||
log.Fatalf("Error initializing GLFW: %v", err)
|
||||
}
|
||||
defer glfw.Terminate()
|
||||
|
||||
// the stencil size setting is required for the canvas to work
|
||||
glfw.WindowHint(glfw.StencilBits, 8)
|
||||
glfw.WindowHint(glfw.DepthBits, 0)
|
||||
|
||||
// create window
|
||||
window, err := glfw.CreateWindow(1280, 720, "GLFW Test", nil, nil)
|
||||
if err != nil {
|
||||
log.Fatalf("Error creating window: %v", err)
|
||||
}
|
||||
window.MakeContextCurrent()
|
||||
|
||||
// init GL
|
||||
err = gl.Init()
|
||||
if err != nil {
|
||||
log.Fatalf("Error initializing GL: %v", err)
|
||||
}
|
||||
|
||||
// set vsync on, enable multisample (if available)
|
||||
glfw.SwapInterval(1)
|
||||
gl.Enable(gl.MULTISAMPLE)
|
||||
|
||||
// load canvas GL assets
|
||||
err = canvas.LoadGL(goglimpl.GLImpl{})
|
||||
if err != nil {
|
||||
log.Fatalf("Error loading canvas GL assets: %v", err)
|
||||
}
|
||||
|
||||
// initialize canvas with zero size, since size is set in main loop
|
||||
cv := canvas.New(0, 0, 0, 0)
|
||||
|
||||
for !window.ShouldClose() {
|
||||
window.MakeContextCurrent()
|
||||
glfw.PollEvents()
|
||||
|
||||
// set canvas size
|
||||
ww, wh := window.GetSize()
|
||||
cv.SetSize(ww, wh)
|
||||
|
||||
// call the run function to do all the drawing
|
||||
run(cv, float64(ww), float64(wh))
|
||||
|
||||
// swap back and front buffer
|
||||
window.SwapBuffers()
|
||||
}
|
||||
}
|
||||
|
||||
func run(cv *canvas.Canvas, w, h float64) {
|
||||
cv.SetFillStyle("#000")
|
||||
cv.FillRect(0, 0, w, h)
|
||||
cv.SetFillStyle("#00F")
|
||||
cv.FillRect(w*0.25, h*0.25, w*0.5, h*0.5)
|
||||
}
|
Loading…
Reference in a new issue