func (v *Video) Init(t <-chan []uint32, d <-chan []uint32, n string) { v.tick = t v.debug = d if err := glfw.Init(); err != nil { fmt.Fprintf(os.Stderr, "[e] %v\n", err) return } if err := glfw.OpenWindow(512, 480, 0, 0, 0, 0, 0, 0, glfw.Windowed); err != nil { fmt.Fprintf(os.Stderr, "[e] %v\n", err) return } if gl.Init() != 0 { panic("gl error") } gl.Enable(gl.TEXTURE_2D) glfw.SetWindowTitle(fmt.Sprintf("Fergulator - %s", n)) glfw.SetWindowSizeCallback(reshape) glfw.SetWindowCloseCallback(quit_event) glfw.SetKeyCallback(KeyListener) reshape(512, 480) v.tex = gl.GenTexture() v.fpsmanager = gfx.NewFramerate() v.fpsmanager.SetFramerate(70) }
func Open(w, h int, sWin string, fullscreen bool) *Window { if GWindow != nil { panic("only one Window is allowed") } listener.GListener = listener.New() win := &Window{width: w, height: h, title: sWin, inputListener: listener.GListener} GWindow = win var err error if err = glfw.Init(); err != nil { panic(fmt.Sprintf("[e] %v\n", err)) } mode := glfw.Windowed if fullscreen { mode = glfw.Fullscreen } if err = glfw.OpenWindow(win.width, win.height, 8, 8, 8, 0, 16, 0, mode); err != nil { panic(fmt.Sprintf("[e] %v\n", err)) } gl.Init() //WHY?? (shader creation fails when not) glfw.SetSwapInterval(1) // Enable vertical sync on cards that support it. glfw.SetWindowTitle(win.title) // Set window title //CALLBACKS glfw.SetWindowSizeCallback(func(w, h int) { GWindow.reshape(w, h) }) glfw.SetWindowCloseCallback(listener.OnClose) glfw.SetMouseButtonCallback(listener.OnMouseButton) glfw.SetMouseWheelCallback(listener.OnMouseWheel) glfw.SetKeyCallback(listener.OnKey) glfw.SetCharCallback(listener.OnChar) win.initGL() return win }
func (w *window) SetCloseCallback(f func() bool) { glfw.SetWindowCloseCallback(func() int { closeWindow := f() if closeWindow { return 1 } return 0 }) }
func main() { var err error if err = glfw.Init(); err != nil { fmt.Fprintf(os.Stderr, "[e] %v\n", err) return } // Ensure glfw is cleanly terminated on exit. defer glfw.Terminate() if err = glfw.OpenWindow(256, 256, 8, 8, 8, 0, 0, 0, glfw.Windowed); err != nil { fmt.Fprintf(os.Stderr, "[e] %v\n", err) return } // Ensure window is cleanly closed on exit. defer glfw.CloseWindow() // Enable vertical sync on cards that support it. glfw.SetSwapInterval(1) // Set window title glfw.SetWindowTitle("Simple GLFW window") // Hook some events to demonstrate use of callbacks. // These are not necessary if you don't need them. glfw.SetWindowSizeCallback(onResize) glfw.SetWindowCloseCallback(onClose) glfw.SetMouseButtonCallback(onMouseBtn) glfw.SetMouseWheelCallback(onMouseWheel) glfw.SetKeyCallback(onKey) glfw.SetCharCallback(onChar) // Start loop running := true for running { // OpenGL rendering goes here. // Swap front and back rendering buffers. This also implicitly calls // glfw.PollEvents(), so we have valid key/mouse/joystick states after // this. This behavior can be disabled by calling glfw.Disable with the // argument glfw.AutoPollEvents. You must be sure to manually call // PollEvents() or WaitEvents() in this case. glfw.SwapBuffers() // Break out of loop when Escape key is pressed, or window is closed. running = glfw.Key(glfw.KeyEsc) == 0 && glfw.WindowParam(glfw.Opened) == 1 } }
func setupWindow(width int, height int, fullscreen bool) bool { // Create OpenGL window var windowType int if fullScreen { windowType = glfw.Fullscreen } else { windowType = glfw.Windowed } if err := glfw.OpenWindow(width, height, 8, 8, 8, 8, 24, 8, windowType); err != nil { glfw.Terminate() return false } // Disable vertical synchronization glfw.SetSwapInterval(0) // Set listeners glfw.SetWindowCloseCallback(windowCloseListener) glfw.SetKeyCallback(keyPressListener) glfw.SetMousePosCallback(mouseMoveListener) return true }
func setCallbacks() { glfw.SetWindowSizeCallback(handleResize) glfw.SetWindowCloseCallback(Cleanup) }