// initGL initializes GLFW and OpenGL. func initGL() error { err := glfw.Init() if err != nil { return err } err = glfw.OpenWindow(640, 480, 8, 8, 8, 8, 0, 0, glfw.Windowed) if err != nil { glfw.Terminate() return err } glfw.SetWindowTitle("go-gl/gltext: Bitmap font example") glfw.SetSwapInterval(1) glfw.SetWindowSizeCallback(onResize) glfw.SetKeyCallback(onKey) errno := gl.Init() if errno != gl.NO_ERROR { str, err := glu.ErrorString(errno) if err != nil { return fmt.Errorf("Unknown openGL error: %d", errno) } return fmt.Errorf(str) } gl.Disable(gl.DEPTH_TEST) gl.Disable(gl.LIGHTING) gl.ClearColor(0.2, 0.2, 0.23, 0.0) return nil }
// initGL initializes GLFW and OpenGL. func initGL() error { err := glfw.Init() if err != nil { return err } err = glfw.OpenWindow(AtlasSize, AtlasSize, 8, 8, 8, 8, 0, 0, glfw.Windowed) if err != nil { glfw.Terminate() return err } glfw.SetWindowTitle("Texture atlas example") glfw.SetSwapInterval(1) glfw.SetWindowSizeCallback(onResize) glfw.SetKeyCallback(onKey) gl.Init() if err = glh.CheckGLError(); err != nil { return err } gl.Disable(gl.DEPTH_TEST) gl.Disable(gl.LIGHTING) gl.Enable(gl.TEXTURE_2D) gl.Enable(gl.BLEND) gl.BlendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA) gl.ClearColor(0.2, 0.2, 0.23, 1.0) return nil }
func make_window(w, h int, title string) func() { // Required to make sure that the OpenGL go-routine doesn't get switched // to another thread (=> kerblammo) runtime.LockOSThread() if err := glfw.Init(); err != nil { log.Panic("glfw Error:", err) } err := glfw.OpenWindow(w, h, 0, 0, 0, 0, 0, 0, glfw.Windowed) if err != nil { log.Panic("Error:", err) } if gl.Init() != 0 { log.Panic("gl error") } if *vsync { glfw.SetSwapInterval(1) } else { glfw.SetSwapInterval(0) } glfw.SetWindowTitle(title) glfw.SetWindowSizeCallback(Reshape) Init() return func() { glfw.Terminate() glfw.CloseWindow() log.Print("Cleanup") } }
func main() { var err error if err = glfw.Init(); err != nil { log.Fatalf("%v\n", err) return } defer glfw.Terminate() if err = glfw.OpenWindow(Width, Height, 8, 8, 8, 8, 0, 8, glfw.Windowed); err != nil { log.Fatalf("%v\n", err) return } defer glfw.CloseWindow() glfw.SetSwapInterval(1) glfw.SetWindowTitle(Title) glfw.SetWindowSizeCallback(onResize) glfw.SetKeyCallback(onKey) if err = initGL(); err != nil { log.Fatalf("%v\n", err) return } defer destroyGL() running = true for running && glfw.WindowParam(glfw.Opened) == 1 { drawScene() } }
// Signal that we are exiting and close glfw. func CloseWindow() { fmt.Printf("Exiting...\n") WindowOpened = false glfw.CloseWindow() glfw.Terminate() DestroyShaders() }
func main() { var err error if err = glfw.Init(); err != nil { ///初始化环境 log.Fatalf("%v\n", err) return } defer glfw.Terminate() /// 销毁环境 if err = glfw.OpenWindow(Width, Height, 8, 8, 8, 8, 0, 8, glfw.Windowed); err != nil { ///创建窗口 log.Fatalf("%v\n", err) return } defer glfw.CloseWindow() /// 销毁窗口 glfw.SetSwapInterval(1) glfw.SetWindowTitle(Title) ///设置标题 glfw.SetWindowSizeCallback(onResize) /// 回调窗口变化 glfw.SetKeyCallback(onKey) ///回调按键 initGL() running = true for running && glfw.WindowParam(glfw.Opened) == 1 { drawScene() } }
func (i *IO) Init(title string, screenSize int, onCloseHandler func()) error { var err error err = glfw.Init() if err != nil { return err } err = i.Display.init(title, screenSize) if err != nil { return err } i.KeyHandler.Init(DefaultControlScheme) //TODO: allow user to define controlscheme glfw.SetKeyCallback(func(key, state int) { if state == glfw.KeyPress { i.KeyHandler.KeyDown(key) } else { i.KeyHandler.KeyUp(key) } }) glfw.SetWindowCloseCallback(func() int { glfw.CloseWindow() glfw.Terminate() onCloseHandler() return 0 }) return nil }
func (i *IO) Init(title string, screenSize int, onCloseHandler func()) error { i.KeyHandler = new(KeyHandler) i.Display = new(Display) i.ScreenOutputChannel = make(chan *types.Screen) i.AudioOutputChannel = make(chan int) if err := glfw.Init(); err != nil { return err } else if err = i.Display.init(title, screenSize); err != nil { return err } i.KeyHandler.Init(DefaultControlScheme) //TODO: allow user to define controlscheme glfw.SetKeyCallback(func(key, state int) { if state == glfw.KeyPress { i.KeyHandler.KeyDown(key) } else { i.KeyHandler.KeyUp(key) } }) glfw.SetWindowCloseCallback(func() int { glfw.CloseWindow() glfw.Terminate() onCloseHandler() return 0 }) return nil }
// initGL initializes GLFW and OpenGL. func initGL() error { err := glfw.Init() if err != nil { return err } glfw.OpenWindowHint(glfw.FsaaSamples, 4) err = glfw.OpenWindow(512, 512, 8, 8, 8, 8, 0, 0, glfw.Windowed) if err != nil { glfw.Terminate() return err } glfw.SetWindowTitle("Meshbuffer 2D example") glfw.SetSwapInterval(1) glfw.SetWindowSizeCallback(onResize) glfw.SetKeyCallback(onKey) gl.Init() if err = glh.CheckGLError(); err != nil { return err } gl.Disable(gl.DEPTH_TEST) gl.Enable(gl.MULTISAMPLE) gl.Disable(gl.LIGHTING) gl.Enable(gl.COLOR_MATERIAL) gl.ClearColor(0.2, 0.2, 0.23, 1.0) return nil }
func main() { if err := glfw.Init(); err != nil { fmt.Fprintf(os.Stderr, "%s\n", err.Error()) return } defer glfw.Terminate() glfw.OpenWindowHint(glfw.FsaaSamples, 4) glfw.OpenWindowHint(glfw.OpenGLVersionMajor, 3) glfw.OpenWindowHint(glfw.OpenGLVersionMinor, 3) glfw.OpenWindowHint(glfw.OpenGLProfile, glfw.OpenGLCoreProfile) if err := glfw.OpenWindow(1024, 768, 0, 0, 0, 0, 32, 0, glfw.Windowed); err != nil { fmt.Fprintf(os.Stderr, "%s\n", err.Error()) return } gl.Init() gl.GetError() // Ignore error glfw.SetWindowTitle("Tutorial 01") glfw.Enable(glfw.StickyKeys) gl.ClearColor(0., 0., 0.4, 0.) // Equivalent to a do... while for ok := true; ok; ok = (glfw.Key(glfw.KeyEsc) != glfw.KeyPress && glfw.WindowParam(glfw.Opened) == gl.TRUE) { glfw.SwapBuffers() } }
// initGL initializes GLFW and OpenGL. func initGL(c *cpu.CPU, width, height int) error { err := glfw.Init() if err != nil { return err } glfw.OpenWindowHint(glfw.WindowNoResize, 1) err = glfw.OpenWindow(width, height, 8, 8, 8, 8, 8, 0, glfw.Windowed) if err != nil { glfw.Terminate() return err } glfw.SetWindowTitle("DCPU") glfw.SetSwapInterval(1) glfw.SetWindowSizeCallback(onResize) gl.Init() err = glh.CheckGLError() if err != nil { return err } gl.Disable(gl.LIGHTING) gl.Disable(gl.DEPTH_TEST) gl.Enable(gl.TEXTURE_2D) gl.Enable(gl.BLEND) gl.BlendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA) gl.ClearColor(0, 0, 0, 1) return err }
func RunGame(title string, width, height int, init, draw func()) { if err := glfw.Init(); err != nil { fmt.Fprintf(os.Stderr, "glfw: %s\n", err) return } defer glfw.Terminate() glfw.OpenWindowHint(glfw.WindowNoResize, 1) if err := glfw.OpenWindow(width, height, 0, 0, 0, 0, 16, 0, glfw.Windowed); err != nil { fmt.Fprintf(os.Stderr, "glfw: %s\n", err) return } defer glfw.CloseWindow() glfw.SetSwapInterval(1) glfw.SetWindowTitle(title) if err := gl.Init(); err != nil { fmt.Fprintf(os.Stderr, "gl: %s\n", err) } if err := initScene(width, height, init); err != nil { fmt.Fprintf(os.Stderr, "init: %s\n", err) return } // defer destroyScene() for glfw.WindowParam(glfw.Opened) == 1 { drawScene(draw) glfw.SwapBuffers() } }
func main() { if err := glfw.Init(); err != nil { fmt.Fprintf(os.Stderr, "[e] %v\n", err) return } defer glfw.Terminate() if err := glfw.OpenWindow(appWidth, appHeight, 8, 8, 8, 8, 24, 8, glfw.Windowed); err != nil { fmt.Fprintf(os.Stderr, "[e] %v\n", err) return } defer glfw.CloseWindow() if err := gl.Init(); err != 0 { fmt.Fprintf(os.Stderr, "[e] %v\n", err) return } glfw.SetWindowTitle(title) fps := fps.NewFPS(glfw.Time()) blocks.Init(appWidth, appHeight) for glfw.WindowParam(glfw.Opened) == 1 { blocks.Tick() fps.Tick(glfw.Time()) if glfw.WindowParam(glfw.Active) == 1 { glfw.Sleep(0.001) } else { glfw.Sleep(0.05) } } }
func main() { var err error if err = glfw.Init(); err != nil { log.Fatalf("%v\n", err) return } defer glfw.Terminate() if err = glfw.OpenWindow(640, 480, 8, 8, 8, 8, 0, 0, glfw.Windowed); err != nil { log.Fatalf("%v\n", err) return } defer glfw.CloseWindow() glfw.SetWindowTitle("Draw") glfw.SetSwapInterval(1) glfw.SetKeyCallback(onKey) glfw.SetMouseButtonCallback(onMouseBtn) glfw.SetWindowSizeCallback(onResize) running = true for running && glfw.WindowParam(glfw.Opened) == 1 { if mouse[0] != 0 { pen.lineTo(glfw.MousePos()) } else { pen.moveTo(glfw.MousePos()) } glfw.SwapBuffers() } }
func main() { if err := glfw.Init(); err != nil { fmt.Fprintf(os.Stderr, "%s\n", err.Error()) return } defer glfw.Terminate() glfw.OpenWindowHint(glfw.FsaaSamples, 4) glfw.OpenWindowHint(glfw.OpenGLVersionMajor, 3) glfw.OpenWindowHint(glfw.OpenGLVersionMinor, 3) glfw.OpenWindowHint(glfw.OpenGLProfile, glfw.OpenGLCoreProfile) if err := glfw.OpenWindow(1024, 768, 0, 0, 0, 0, 32, 0, glfw.Windowed); err != nil { fmt.Fprintf(os.Stderr, "%s\n", err.Error()) return } gl.Init() // Can't find gl.GLEW_OK or any variation, not sure how to check if this worked gl.GetError() // Ignore error glfw.SetWindowTitle("Tutorial 02") glfw.Enable(glfw.StickyKeys) gl.ClearColor(0., 0., 0.4, 0.) prog := helper.MakeProgram("SimpleVertexShader.vertexshader", "SimpleFragmentShader.fragmentshader") vBufferData := [...]float32{ -1., -1., 0., 1., -1., 0., 0., 1., 0.} vertexArray := gl.GenVertexArray() vertexArray.Bind() buffer := gl.GenBuffer() buffer.Bind(gl.ARRAY_BUFFER) gl.BufferData(gl.ARRAY_BUFFER, len(vBufferData)*4, &vBufferData, gl.STATIC_DRAW) // Equivalent to a do... while for ok := true; ok; ok = (glfw.Key(glfw.KeyEsc) != glfw.KeyPress && glfw.WindowParam(glfw.Opened) == gl.TRUE) { gl.Clear(gl.COLOR_BUFFER_BIT) prog.Use() attribLoc := gl.AttribLocation(0) attribLoc.EnableArray() buffer.Bind(gl.ARRAY_BUFFER) attribLoc.AttribPointer(3, gl.FLOAT, false, 0, nil) gl.DrawArrays(gl.TRIANGLES, 0, 3) attribLoc.DisableArray() glfw.SwapBuffers() } }
func (_ *NgUserIO) dispose() { if UserIO.Window.isCreated { UserIO.Window.isCreated = false glfw.CloseWindow() } if UserIO.isGlfwInit { UserIO.isGlfwInit = false glfw.Terminate() } }
func main() { var err error if err = glfw.Init(); err != nil { log.Fatalf("%v\n", err) return } defer glfw.Terminate() // Open window with FSAA samples (if possible). glfw.OpenWindowHint(glfw.FsaaSamples, 4) if err = glfw.OpenWindow(400, 400, 0, 0, 0, 0, 0, 0, glfw.Windowed); err != nil { log.Fatalf("%v\n", err) return } defer glfw.CloseWindow() glfw.SetWindowTitle("Aliasing Detector") glfw.SetSwapInterval(1) if samples := glfw.WindowParam(glfw.FsaaSamples); samples != 0 { fmt.Printf("Context reports FSAA is supported with %d samples\n", samples) } else { fmt.Printf("Context reports FSAA is unsupported\n") } gl.MatrixMode(gl.PROJECTION) glu.Perspective(0, 1, 0, 1) for glfw.WindowParam(glfw.Opened) == 1 { time := float32(glfw.Time()) gl.Clear(gl.COLOR_BUFFER_BIT) gl.LoadIdentity() gl.Translatef(0.5, 0, 0) gl.Rotatef(time, 0, 0, 1) gl.Enable(GL_MULTISAMPLE_ARB) gl.Color3f(1, 1, 1) gl.Rectf(-0.25, -0.25, 0.25, 0.25) gl.LoadIdentity() gl.Translatef(-0.5, 0, 0) gl.Rotatef(time, 0, 0, 1) gl.Disable(GL_MULTISAMPLE_ARB) gl.Color3f(1, 1, 1) gl.Rectf(-0.25, -0.25, 0.25, 0.25) glfw.SwapBuffers() } }
func main() { fmt.Print("GLFW Init Start.") glfw.Init() fmt.Println(" GLFW Init Done.") defer glfw.Terminate() defer fmt.Println("example Terminating.") fmt.Println("GLFW Set Hints.") glfw.OpenWindowHint(glfw.WindowNoResize, 1) fmt.Print("GLFW Open Window Start.") glfw.OpenWindow(640, 480, 8, 8, 8, 0, 0, 0, glfw.Windowed) glfw.SetWindowTitle("example") fmt.Println(" GLFW Open Window Done.") v1, v2, v3 := glfw.GLVersion() fmt.Printf("OpenGL version: %d.%d.%d\n", v1, v2, v3) fmt.Printf("GLFW version: %d.%d.%d\n", glfw.VersionMajor, glfw.VersionMinor, glfw.VersionRevision) glfw.SetSwapInterval(1) fps := time.Duration(30) fmt.Printf("Creating %d Hz Ticker.", fps) ticker := time.NewTicker(time.Second / fps) fmt.Printf(" %d Hz Ticker Created\n", fps) closedWindow := glfwHelper.WindowCloseChan() mouseButtons := glfwHelper.MouseButtonChan() mousePos := glfwHelper.MousePosChan() mouseWheel := glfwHelper.MouseWheelChan() keyButtons := glfwHelper.KeyChan() charButtons := glfwHelper.CharChan() for { select { case <-ticker.C: glfw.SwapBuffers() case <-closedWindow: return case input := <-mouseButtons: fmt.Println(input) case input := <-mousePos: fmt.Println(input) case input := <-mouseWheel: fmt.Println(input) case input := <-keyButtons: fmt.Println(input) case input := <-charButtons: fmt.Println(string(input)) } } }
func Test(t *testing.T) { err := glfw.Init() if err != nil { t.Fatal(err) } defer glfw.Terminate() err = glfw.OpenWindow(800, 600, 8, 8, 8, 0, 0, 0, glfw.Windowed) if err != nil { t.Fatal(err) } defer glfw.CloseWindow() kb := New() kb.Bind(func() { fmt.Println("pressed s") }, "s") kb.Bind(func() { fmt.Println("pressed ctrl+s or command+s") }, "ctrl+s", "command+s") kb.Bind(func() { fmt.Println("pressed 't e s t'") }, "t e s t") kb.Bind(func() { fmt.Println("pressed '3'") }, "3") kb.Bind(func() { fmt.Println("pressed '#'") }, "#") kb.Bind(func() { glfw.CloseWindow() }, "escape") // Print available keybindings. fmt.Printf("Known key bindings:\n") for _, b := range kb.Bindings() { fmt.Printf(" - %q\n", b) } // Go into GLFW's main event loop. for glfw.WindowParam(glfw.Opened) == 1 { glfw.SwapBuffers() } }
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 } }
// Release releases emulator resources. func (e *Emu) Release() { for _, dev := range e.cpu.Devices() { if dev, ok := dev.(Device); ok { dev.Release() } } if e.disp != nil { e.disp.Release() e.disp = nil } e.cpu = nil glfw.Terminate() }
func main() { // This file holds the actual glyph shapes. imgFile, err := gas.Abs("github.com/go-gl/examples/data/bitmap_font.png") if err != nil { log.Printf("Find font image file: %v", err) return } // This file is a JSON encoded dataset which describes the font // and contains the pixel offsets and sizes for each glyph in // bitmap_font.png. Both files are needed to load a bitmap font. configFile, err := gas.Abs("github.com/go-gl/examples/data/bitmap_font.js") if err != nil { log.Printf("Find font config file: %v", err) return } err = initGL() if err != nil { log.Printf("InitGL: %v", err) return } defer glfw.Terminate() // Load the same bitmap font at different scale factors. for i := range fonts { fonts[i], err = loadFont(imgFile, configFile, i+1) if err != nil { log.Printf("LoadFont: %v", err) return } defer fonts[i].Release() } for glfw.WindowParam(glfw.Opened) > 0 { gl.Clear(gl.COLOR_BUFFER_BIT) err = drawString(10, 10, "0 1 2 3 4 5 6 7 8 9 A B C D E F") if err != nil { log.Printf("Printf: %v", err) return } glfw.SwapBuffers() } }
func (v *Video) Loop() { go func(c chan *Frame) { for { frame := <-c v.frame = frame } }(v.Frames) for glfw.WindowParam(glfw.Opened) == gl.TRUE { if v.frame != nil { v.Render(v.frame.Data, v.frame.Width, v.frame.Height) } runtime.Gosched() } glfw.Terminate() }
func main() { err := initGL() if err != nil { log.Printf("InitGL: %v", err) return } defer glfw.Terminate() mb := createBuffer() defer mb.Release() // Perform the rendering. var angle float32 for glfw.WindowParam(glfw.Opened) > 0 { gl.Clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT) gl.LoadIdentity() gl.Translatef(0, 0, -6) gl.Rotatef(angle, 1, 1, 1) // Render a solid cube at half the scale. gl.Scalef(0.2, 0.2, 0.2) gl.Enable(gl.COLOR_MATERIAL) gl.Enable(gl.POLYGON_OFFSET_FILL) gl.PolygonMode(gl.FRONT_AND_BACK, gl.FILL) mb.Render(gl.QUADS) // Render wireframe cubes, with incremental size. gl.Disable(gl.COLOR_MATERIAL) gl.Disable(gl.POLYGON_OFFSET_FILL) gl.PolygonMode(gl.FRONT_AND_BACK, gl.LINE) for i := 0; i < 50; i++ { scale := 0.004*float32(i) + 1.0 gl.Scalef(scale, scale, scale) mb.Render(gl.QUADS) } angle += 0.5 glfw.SwapBuffers() } }
// initGL initializes GLFW and OpenGL. func initGL() error { err := glfw.Init() if err != nil { return err } glfw.OpenWindowHint(glfw.FsaaSamples, 4) glfw.OpenWindowHint(glfw.WindowNoResize, gl.TRUE) err = glfw.OpenWindow(512, 512, 8, 8, 8, 8, 32, 0, glfw.Windowed) if err != nil { glfw.Terminate() return err } glfw.SetWindowTitle("Meshbuffer 3D example") glfw.SetSwapInterval(1) glfw.SetWindowSizeCallback(onResize) glfw.SetKeyCallback(onKey) gl.Init() if err = glh.CheckGLError(); err != nil { return err } gl.Enable(gl.DEPTH_TEST) gl.Enable(gl.MULTISAMPLE) gl.Disable(gl.LIGHTING) //gl.ClearColor(0.2, 0.2, 0.23, 1.0) gl.ClearColor(0, 0, 0, 1.0) gl.ShadeModel(gl.SMOOTH) gl.LineWidth(2) gl.ClearDepth(1) gl.DepthFunc(gl.LEQUAL) gl.Hint(gl.PERSPECTIVE_CORRECTION_HINT, gl.NICEST) gl.ColorMaterial(gl.FRONT_AND_BACK, gl.AMBIENT_AND_DIFFUSE) return nil }
func main() { file, err := gas.Abs("code.google.com/p/freetype-go/luxi-fonts/luxisr.ttf") if err != nil { log.Printf("Find font file: %v", err) return } err = initGL() if err != nil { log.Printf("InitGL: %v", err) return } defer glfw.Terminate() // Load the same font at different scale factors and directions. for i := range fonts { fonts[i], err = loadFont(file, int32(12+i)) if err != nil { log.Printf("LoadFont: %v", err) return } defer fonts[i].Release() } for glfw.WindowParam(glfw.Opened) > 0 { gl.Clear(gl.COLOR_BUFFER_BIT) err = drawString(10, 10, SampleString) if err != nil { log.Printf("Printf: %v", err) return } glfw.SwapBuffers() } }
func main() { err := initGL() if err != nil { log.Printf("InitGL: %v", err) return } defer glfw.Terminate() // Create our texture atlas. atlas := glh.NewTextureAtlas(AtlasSize, AtlasSize, 4) defer atlas.Release() // Fill the altas with image data. fillAtlas(atlas) // Display the atlas texture on a quad, so we can see // what it looks like. for glfw.WindowParam(glfw.Opened) > 0 { gl.Clear(gl.COLOR_BUFFER_BIT) // Bind the atlas texture and render a quad with it. atlas.Bind(gl.TEXTURE_2D) gl.Begin(gl.QUADS) gl.TexCoord2f(0, 0) gl.Vertex2f(0, 0) gl.TexCoord2f(1, 0) gl.Vertex2f(AtlasSize, 0) gl.TexCoord2f(1, 1) gl.Vertex2f(AtlasSize, AtlasSize) gl.TexCoord2f(0, 1) gl.Vertex2f(0, AtlasSize) gl.End() atlas.Unbind(gl.TEXTURE_2D) glfw.SwapBuffers() } }
func main() { err := initGL() if err != nil { log.Printf("InitGL: %v", err) return } defer glfw.Terminate() mb := createBuffer() defer mb.Release() attr := mb.Colors() // Perform the rendering. for glfw.WindowParam(glfw.Opened) > 0 { gl.Clear(gl.COLOR_BUFFER_BIT) gl.LoadIdentity() // Center mesh on screen. wx, wy := glfw.WindowSize() px := (wx / 2) - ((Cols * CellWidth) / 2) py := (wy / 2) - ((Rows * CellHeight) / 2) gl.Translatef(float32(px), float32(py), 0) // Change the color of the quad under the mouse cursor. colorize(px, py, attr) // Render the mesh. mb.Render(gl.QUADS) glfw.SwapBuffers() } attr = nil }
func main() { err := initGL() if err != nil { log.Printf("InitGL: %v", err) return } defer glfw.Terminate() mb := createBuffer() defer mb.Release() gl.Enable(gl.BLEND) //gl.BlendFunc(gl.SRC_ALPHA, gl.ONE) gl.BlendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA) f, err := os.Create("test.mpeg") if err != nil { log.Panicf("Unable to open output file: %q", err) } im := image.NewRGBA(image.Rect(0, 0, 512, 512)) e, err := ffmpeg.NewEncoder(ffmpeg.CODEC_ID_H264, im, f) if err != nil { log.Panicf("Unable to start encoder: %q", err) } // Perform the rendering. var angle float64 for glfw.WindowParam(glfw.Opened) > 0 { gl.Clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT) gl.LoadIdentity() gl.Translatef(0, 0, -6) gl.Rotated(angle/10, 0, 1, 0) gl.Rotated(angle, 1, 1, 1) // Render a solid cube at half the scale. gl.Scalef(0.1, 0.1, 0.1) gl.Enable(gl.COLOR_MATERIAL) gl.Enable(gl.POLYGON_OFFSET_FILL) gl.PolygonMode(gl.FRONT_AND_BACK, gl.FILL) mb.Render(gl.QUADS) // Render wireframe cubes, with incremental size. gl.Disable(gl.COLOR_MATERIAL) gl.Disable(gl.POLYGON_OFFSET_FILL) gl.PolygonMode(gl.FRONT_AND_BACK, gl.FILL) for i := 0; i < 1000; i++ { ifl := float64(i) scale := 0.000005*ifl + 1.0 + 0.01*math.Sin(angle/10+ifl/10) gl.Scaled(scale, scale, scale) gl.Rotated((ifl+angle)/1000, 1, 1, 1) gl.Rotated((ifl+angle)/1100, -1, 1, 1) mb.Render(gl.QUADS) } glh.ClearAlpha(1) glh.CaptureRGBA(im) err := e.WriteFrame() if err != nil { panic(err) } angle += 0.5 //glh.CaptureToPng("test.png") glfw.SwapBuffers() } e.Close() }
func main() { var err error var looping = true defer fmt.Println("EXIT") if err = glfw.Init(); err != nil { panic(err) } defer glfw.Terminate() glfw.OpenWindowHint(glfw.FsaaSamples, 0) if useStrictCoreProfile { glfw.OpenWindowHint(glfw.OpenGLVersionMajor, 3) glfw.OpenWindowHint(glfw.OpenGLVersionMinor, 2) glfw.OpenWindowHint(glfw.OpenGLProfile, glfw.OpenGLCoreProfile) } if err = glfw.OpenWindow(1280, 720, 8, 8, 8, 0, 24, 8, glfw.Windowed); err != nil { panic(err) } defer glfw.CloseWindow() glfw.Enable(glfw.StickyKeys) if !gl.Util.Init() { panic("Failed to initialize at least OpenGL 3.2 or higher.") } defer logLastGlError("(post loop)") gl.ClearColor(0.3, 0.1, 0.0, 1.0) gl.Enable(gl.DEPTH_TEST) gl.FrontFace(gl.CCW) gl.CullFace(gl.BACK) gl.Disable(gl.CULL_FACE) if err = compileShaders(); err != nil { panic(err) } setupGeometry() defer deleteGeometry() logLastGlError("(pre loop)") for looping { gl.UseProgram(shaderProg) if isFirstLoop { logLastGlError("gl.UseProgram") } gl.Viewport(0, 0, 1280, 720) if isFirstLoop { logLastGlError("gl.ViewPort") } gl.Clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT) if isFirstLoop { logLastGlError("gl.Clear") } renderGeometry(faceTri) if isFirstLoop { logLastGlError("renderGeometry(faceTri)") } renderGeometry(faceQuad) if isFirstLoop { logLastGlError("renderGeometry(faceQuad)") } if (glfw.WindowParam(glfw.Opened) != 1) || (glfw.Key(glfw.KeyEsc) == glfw.KeyPress) { looping = false } else { glfw.SwapBuffers() } isFirstLoop = false } logLastGlError("post-loop") }