func main() { flag.Parse() var done bool var keys []uint8 sdl.Init(sdl.INIT_VIDEO) var screen = sdl.SetVideoMode(640, 480, 16, sdl.OPENGL|sdl.RESIZABLE) if screen == nil { sdl.Quit() panic("Couldn't set 300x300 GL video mode: " + sdl.GetError() + "\n") } sdl.WM_SetCaption("Gears", "gears") init_() reshape(int(screen.W), int(screen.H)) done = false for !done { var event sdl.Event idle() for event.Poll() { switch event.Type { case sdl.VIDEORESIZE: screen = sdl.SetVideoMode(int(event.Resize().W), int(event.Resize().H), 16, sdl.OPENGL|sdl.RESIZABLE) if screen != nil { reshape(int(screen.W), int(screen.H)) } else { panic("we couldn't set the new video mode??") } break case sdl.QUIT: done = true break } } keys = sdl.GetKeyState() handleKeyPress(keys) if keys[sdl.K_ESCAPE] != 0 { done = true } draw() } sdl.Quit() return }
// release/destroy our resources and restoring the old desktop func Quit(status int) { // clean up the window sdl.Quit() // and exit appropriately os.Exit(status) }
func initdec() { initnum-- if initnum == 0 { sdl.Quit() } }
func main() { sdl.Init(sdl.INIT_VIDEO) var screen = sdl.SetVideoMode(640, 480, 32, sdl.OPENGL) if screen == nil { panic("sdl error") } if gl.Init() != 0 { panic("glew error") } pen := Pen{} gl.MatrixMode(gl.PROJECTION) gl.Viewport(0, 0, gl.GLsizei(screen.W), gl.GLsizei(screen.H)) gl.LoadIdentity() gl.Ortho(0, gl.GLdouble(screen.W), gl.GLdouble(screen.H), 0, -1.0, 1.0) gl.ClearColor(1, 1, 1, 0) gl.Clear(gl.COLOR_BUFFER_BIT) var running = true for running { e := &sdl.Event{} for e.Poll() { switch e.Type { case sdl.QUIT: running = false break case sdl.KEYDOWN: running = false break case sdl.MOUSEMOTION: me := e.MouseMotion() if me.State != 0 { pen.lineTo(Point{int(me.X), int(me.Y)}) } else { pen.moveTo(Point{int(me.X), int(me.Y)}) } break } } sdl.GL_SwapBuffers() sdl.Delay(25) } sdl.Quit() }
func main() { initialWidth, initialHeight := 1280, 720 runtime.LockOSThread() if sdlInit := sdl.Init(sdl.INIT_VIDEO); sdlInit != 0 { panic("SDL init error") } reinitScreen(initialWidth, initialHeight) defer cleanExit(true, false) if err := gl.Init(); err != nil { panic(err) } gl.Enable(gl.BLEND) gl.BlendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA) gl.Enable(gl.DEPTH) defer cleanExit(false, true) glSetupShaderProg(&shaderTextureCreator, false) glSetupShaderProg(&shaderTextureDisplay, true) glFillBuffer(rttVerts, &rttVertBuf) glFillBuffer(dispVerts, &dispVertBuf) gl.GenTextures(1, &rttFrameTex) gl.BindTexture(gl.TEXTURE_2D, rttFrameTex) gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST) gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST) gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT) gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT) if doRtt { gl.TexImage2D(gl.TEXTURE_2D, 0, gl.RGBA, texSize, texSize, 0, gl.RGBA, gl.UNSIGNED_BYTE, nil) gl.GenFramebuffers(1, &rttFrameBuf) gl.BindFramebuffer(gl.FRAMEBUFFER, rttFrameBuf) gl.FramebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, rttFrameTex, 0) gl.BindFramebuffer(gl.FRAMEBUFFER, 0) } else { glFillTextureFromImageFile("texture.jpg") } gl.BindTexture(gl.TEXTURE_2D, 0) gl.ClearColor(0.3, 0.6, 0.9, 1) gl.Clear(gl.COLOR_BUFFER_BIT) gl.ActiveTexture(gl.TEXTURE0) for { if evt := sdl.PollEvent(); evt != nil { switch event := evt.(type) { case *sdl.ResizeEvent: reinitScreen(int(event.W), int(event.H)) case *sdl.QuitEvent: return } } else { if doRtt { renderToTexture() } renderToScreen() sdl.GL_SwapBuffers() } } sdl.Quit() }
func main() { sdl.Init(sdl.INIT_VIDEO) var screen = sdl.SetVideoMode(640, 480, 32, sdl.OPENGL) if screen == nil { panic("sdl error") } if gl.Init() != 0 { panic("gl error") } pen := Pen{} gl.MatrixMode(gl.PROJECTION) gl.Viewport(0, 0, int(screen.W), int(screen.H)) gl.LoadIdentity() gl.Ortho(0, float64(screen.W), float64(screen.H), 0, -1.0, 1.0) gl.ClearColor(1, 1, 1, 0) gl.Clear(gl.COLOR_BUFFER_BIT) var running = true for running { for e := sdl.PollEvent(); e != nil; e = sdl.PollEvent() { switch ev := e.(type) { case *sdl.QuitEvent: running = false case *sdl.KeyboardEvent: if ev.Keysym.Sym == sdl.K_ESCAPE { running = false } case *sdl.MouseMotionEvent: if ev.State != 0 { pen.lineTo(Point{int(ev.X), int(ev.Y)}) } else { pen.moveTo(Point{int(ev.X), int(ev.Y)}) } } } sdl.GL_SwapBuffers() sdl.Delay(25) } sdl.Quit() }
func (engine *SDLEngine) Init(settings *GraphicsSettings) os.Error { runtime.LockOSThread() if sdl.Init(sdl.INIT_VIDEO) != 0 { return os.NewError("unable to initialize sdl.") } if sdl.GL_SetAttribute(sdl.GL_DOUBLEBUFFER, 1) != 0 { sdl.Quit() return os.NewError("double buffering not available.") } engine.screen = sdl.SetVideoMode(settings.Width, settings.Height, 16, sdl.OPENGL|sdl.RESIZABLE) if engine.screen == nil { sdl.Quit() return os.NewError("unable to set video mode.") } sdl.WM_SetCaption(settings.Caption, settings.Caption) engine.gdevice = NewOpenGLGraphicsDevice() return nil }
func main() { if sdl.Init(sdl.INIT_VIDEO) != 0 { fmt.Println(sdl.GetError()) return } defer sdl.Quit() if sdl.SetVideoMode(200, 200, 32, 0) == nil { fmt.Println(sdl.GetError()) return } for e := new(sdl.Event); e.Wait() && e.Type != sdl.QUIT; { } }
//Release all resources func (game *Game) Exit() { freeResources() //Destroy the renderer game.renderer.Release() //Destroy the window sdl.DestroyWindow(game.window) //Quit SDL_ttf sdl.QuitTTF() //Quit SDL sdl.Quit() }
func main() { if sdl.Init(sdl.INIT_EVERYTHING) != 0 { panic(sdl.GetError()) } var screen = sdl.SetVideoMode(640, 480, 32, 0) if screen == nil { panic(sdl.GetError()) } sdl.WM_SetCaption("Template", "") running := true for running { e := &sdl.Event{} for e.Poll() { switch e.Type { case sdl.QUIT: running = false break default: } } screen.FillRect(nil, 0x000000) //screen.Blit(&sdl.Rect{x,y, 0, 0}, image, nil) screen.Flip() sdl.Delay(25) } sdl.Quit() }
func main() { fmt.Println("loaded", len(blokus.Tiles), "shapes") blokus.Board[2][4] = blokus.Red if sdl.Init(sdl.INIT_EVERYTHING) != 0 { panic(sdl.GetError()) } resize(640, 480) sdl.WM_SetCaption("Blokus", "") for running { e := &sdl.Event{} for e.Poll() { switch e.Type { case sdl.QUIT: running = false case sdl.KEYDOWN: keyDown(e.Keyboard()) case sdl.KEYUP: keyUp(e.Keyboard()) case sdl.MOUSEBUTTONDOWN: mouseDown(e.MouseButton()) case sdl.VIDEORESIZE: r := e.Resize() resize(int(r.W), int(r.H)) default: } if !running { break } } draw() sdl.Delay(25) } sdl.Quit() }
func main() { if sdl.Init(sdl.INIT_EVERYTHING) != 0 { panic(sdl.GetError()) } if ttf.Init() != 0 { panic(sdl.GetError()) } if mixer.OpenAudio(mixer.DEFAULT_FREQUENCY, mixer.DEFAULT_FORMAT, mixer.DEFAULT_CHANNELS, 4096) != 0 { panic(sdl.GetError()) } var screen = sdl.SetVideoMode(640, 480, 32, sdl.RESIZABLE) if screen == nil { panic(sdl.GetError()) } var video_info = sdl.GetVideoInfo() println("HW_available = ", video_info.HW_available) println("WM_available = ", video_info.WM_available) println("Video_mem = ", video_info.Video_mem, "kb") sdl.EnableUNICODE(1) sdl.WM_SetCaption("Go-SDL SDL Test", "") image := sdl.Load("test.png") if image == nil { panic(sdl.GetError()) } sdl.WM_SetIcon(image, nil) running := true font := ttf.OpenFont("Fontin Sans.otf", 72) if font == nil { panic(sdl.GetError()) } font.SetStyle(ttf.STYLE_UNDERLINE) white := sdl.Color{255, 255, 255, 0} text := ttf.RenderText_Blended(font, "Test (with music)", white) music := mixer.LoadMUS("test.ogg") sound := mixer.LoadWAV("sound.ogg") if music == nil || sound == nil { panic(sdl.GetError()) } music.PlayMusic(-1) if sdl.GetKeyName(270) != "[+]" { panic("GetKeyName broken") } worm_in := make(chan Point) draw := make(chan Point, 64) var out chan Point var in chan Point out = worm_in in = out out = make(chan Point) go worm(in, out, draw) for running { for ev := sdl.PollEvent(); ev != nil; ev = sdl.PollEvent() { switch e := ev.(type) { case *sdl.QuitEvent: running = false break case *sdl.KeyboardEvent: println("") println(e.Keysym.Sym, ": ", sdl.GetKeyName(sdl.Key(e.Keysym.Sym))) if e.Keysym.Sym == 27 { running = false } fmt.Printf("%04x ", e.Type) for i := 0; i < len(e.Pad0); i++ { fmt.Printf("%02x ", e.Pad0[i]) } println() fmt.Printf("Type: %02x Which: %02x State: %02x Pad: %02x\n", e.Type, e.Which, e.State, e.Pad0[0]) fmt.Printf("Scancode: %02x Sym: %08x Mod: %04x Unicode: %04x\n", e.Keysym.Scancode, e.Keysym.Sym, e.Keysym.Mod, e.Keysym.Unicode) case *sdl.MouseButtonEvent: if e.Type == sdl.MOUSEBUTTONDOWN { println("Click:", e.X, e.Y) in = out out = make(chan Point) go worm(in, out, draw) sound.PlayChannel(-1, 0) } case *sdl.ResizeEvent: println("resize screen ", e.W, e.H) screen = sdl.SetVideoMode(int(e.W), int(e.H), 32, sdl.RESIZABLE) if screen == nil { panic(sdl.GetError()) } } } screen.FillRect(nil, 0x302019) screen.Blit(&sdl.Rect{0, 0, 0, 0}, text, nil) loop := true for loop { select { case p := <-draw: screen.Blit(&sdl.Rect{int16(p.x), int16(p.y), 0, 0}, image, nil) case <-out: default: loop = false } } var p Point sdl.GetMouseState(&p.x, &p.y) worm_in <- p screen.Flip() sdl.Delay(25) } image.Free() music.Free() font.Close() ttf.Quit() sdl.Quit() }
//================================= //Praktiske Funktioner //================================= func ExitProgram() { sdl.Quit() os.Exit(0) fmt.Println("kage") }
func main() { sch = sched.NewScheduler(0) flag.Parse() cmd := selectCommand(CmdNum) SetupVideo() // Let the selected command initialize cmd.OnSetup() // Extract sleep time between frames for this command sleeptime := cmd.SleepTime() var frames uint32 = 0 // var t0 uint32 = sdl.GetTicks() // gt := sdl.GetTicks if ShowFPS { sch.AddInterval(1.0, 2, func(tc sched.TaskChan, sc *sched.Scheduler) { val := <-tc if val != sched.RUNNING { sc.C <- sched.TaskResult{val, tc} return } sc.C <- sched.TaskResult{sched.COMPLETED, tc} // seconds := (t - t0) / 1000.0 // fps := float(frames) / float(1.0) // os.Stdout.WriteString("Fdafsda") //sch.LOG <- "FPS" // fmt.Println("FPS") return // t0 = t frames = 0 }) } var running = true for running { e := &sdl.Event{} for e.Poll() { switch e.Type { case sdl.QUIT: running = false break case sdl.KEYDOWN: kb := e.Keyboard() KeySym = kb.Keysym.Sym if KeySym == sdl.K_ESCAPE { running = false } break case sdl.MOUSEBUTTONUP, sdl.MOUSEBUTTONDOWN: me := e.MouseButton() MouseState = me.State break case sdl.MOUSEMOTION: me := e.MouseMotion() MouseX = int(me.X) MouseY = int(me.Y) MouseState = me.State break case sdl.VIDEORESIZE: me := (*sdl.ResizeEvent)(cast(e)) sdl.SetVideoMode(int(me.W), int(me.H), 32, SDL_FLAGS) ResizeWindow(me.W, me.H) } } // sch.Update() cmd.OnUpdate() gl.Clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT) cmd.OnDraw() sdl.GL_SwapBuffers() if sleeptime != 0 { sdl.Delay(uint32(sleeptime)) } frames++ } sdl.Quit() }
func main() { flag.Parse() var done bool var keys []uint8 sdl.Init(sdl.INIT_VIDEO) var screen = sdl.SetVideoMode(300, 300, 16, sdl.OPENGL|sdl.RESIZABLE) if screen == nil { sdl.Quit() panic("Couldn't set 300x300 GL video mode: " + sdl.GetError() + "\n") } sdl.WM_SetCaption("Gears", "gears") init_() reshape(int(screen.W), int(screen.H)) done = false for !done { var event sdl.Event idle() for event.Poll() { switch event.Type { case sdl.VIDEORESIZE: screen = sdl.SetVideoMode(int(event.Resize().W), int(event.Resize().H), 16, sdl.OPENGL|sdl.RESIZABLE) if screen != nil { reshape(int(screen.W), int(screen.H)) } else { panic("we couldn't set the new video mode??") } break case sdl.QUIT: done = true break } } keys = sdl.GetKeyState() if keys[sdl.K_ESCAPE] != 0 { done = true } if keys[sdl.K_UP] != 0 { view_rotx += 5.0 } if keys[sdl.K_DOWN] != 0 { view_rotx -= 5.0 } if keys[sdl.K_LEFT] != 0 { view_roty += 5.0 } if keys[sdl.K_RIGHT] != 0 { view_roty -= 5.0 } if keys[sdl.K_z] != 0 { if (sdl.GetModState() & sdl.KMOD_RSHIFT) != 0 { view_rotz -= 5.0 } else { view_rotz += 5.0 } } draw() } sdl.Quit() return }
func main() { //Make sure that resources get released defer g_engine.Exit() //Permission to run on 2 CPU cores runtime.GOMAXPROCS(2) //Initialize SDL err := sdl.Init() if err != "" { fmt.Printf("Error in Init: %v", err) return } //Initialize the engine g_engine.Init() //Load data g_game.LoadFonts() Draw() //Draw the "please wait" text after loading the fonts g_game.LoadGuiImages() g_game.LoadTileImages() g_game.LoadCreatureImages() g_game.SetState(GAMESTATE_LOGIN) g_loginControls.Show() lastTime := sdl.GetTicks() frameTime := sdl.GetTicks() frameCount := 0 //Handle events for g_running { for { event, present := sdl.PollEvent() if present { EventHandler(event) } else { break } } //Render everything on screen Draw() //Give the CPU some time to do other stuff sdl.Delay(1) //Handle a network message g_conn.HandleMessage() //Handle a battle event if g_game.state == GAMESTATE_BATTLE { g_game.battle.ProcessEvents() } //Update frame time g_frameTime = sdl.GetTicks() - lastTime lastTime = sdl.GetTicks() //Update FPS frameCount++ if sdl.GetTicks()-frameTime >= 1000 { g_FPS = frameCount frameCount = 0 frameTime = sdl.GetTicks() } } sdl.Quit() }
func (engine *SDLEngine) Shutdown() { sdl.Quit() runtime.UnlockOSThread() }
func main() { filename = flag.String("file", "testbed/data/dude.dat", "enter filename path") cx = flag.Int("cx", 300, "enter x-coordinate center") cy = flag.Int("cy", 500, "enter y-coordinate center") zoom = flag.Float64("zoom", 2, "enter zoom") flag.Parse() fmt.Println("opening...", *filename) f, err := os.Open(*filename) if f == nil { fmt.Fprintf(os.Stderr, "cat: can't open %s: error %s\n", *filename, err) os.Exit(1) } d, _ := ioutil.ReadAll(f) line := strings.SplitAfter(string(d), "\n") j := 0 for i := 0; i < len(line); i++ { if len(line[i]) <= 2 { break } j++ } var polyline = make(p2t.PointArray, j) for i := 0; i < j; i++ { line[i] = strings.TrimRight(line[i], "\r\n") num := strings.Split(line[i], " ") n1, err1 := strconv.Atof64(num[0]) n2, err2 := strconv.Atof64(num[1]) if err1 != nil || err2 != nil { fmt.Fprintf(os.Stderr, "cat: can't open %s: error %s\n", *filename, err) os.Exit(1) } polyline[i] = &p2t.Point{X: n1, Y: n2} } f.Close() left = -Width / float64(*zoom) right = Width / float64(*zoom) bottom = -Height / float64(*zoom) top = Height / float64(*zoom) last_time := time.Nanoseconds() p2t.Init(polyline) var triangles p2t.TriArray = p2t.Triangulate() dt := time.Nanoseconds() - last_time fmt.Printf("Elapsed time : %f ms\n", float64(dt)*1e-6) //var mesh p2t.TriArray = p2t.Mesh() sdl.Init(sdl.INIT_VIDEO) var screen = sdl.SetVideoMode(Width, Height, 16, sdl.OPENGL|sdl.RESIZABLE) if screen == nil { sdl.Quit() panic("Couldn't set GL video mode: " + sdl.GetError() + "\n") } sdl.WM_SetCaption("Pol2tri - testbed", "poly2tri") if gl.Init() != 0 { panic("gl error") } initGL() done := false for !done { for e := sdl.PollEvent(); e != nil; e = sdl.PollEvent() { switch e.(type) { case *sdl.ResizeEvent: re := e.(*sdl.ResizeEvent) screen = sdl.SetVideoMode(int(re.W), int(re.H), 16, sdl.OPENGL|sdl.RESIZABLE) if screen != nil { reshape(int(screen.W), int(screen.H)) } else { panic("we couldn't set the new video mode??") } break case *sdl.QuitEvent: done = true break } } keys := sdl.GetKeyState() if keys[sdl.K_ESCAPE] != 0 { done = true } resetZoom() draw(triangles) } sdl.Quit() return }
func main() { sdl.Init(sdl.INIT_VIDEO) screen := sdl.SetVideoMode(640, 480, 32, 0) image := sdl.Load("../icon.bmp") image.SetColorKey(sdl.RLEACCEL|sdl.SRCCOLORKEY, image.MapRGB(255, 255, 255)) x := make([]int16, NUM_SPRITES) y := make([]int16, NUM_SPRITES) vx := make([]int16, NUM_SPRITES) vy := make([]int16, NUM_SPRITES) rg := rand.New(rand.NewSource(0)) for i := 0; i < NUM_SPRITES; i++ { //x[i] = rg.Intn(screen.w - image.w); //y[i] = rg.Intn(screen.h - image.h); x[i] = int16(rg.Intn(W)) y[i] = int16(rg.Intn(H)) vx[i] = 0 vy[i] = 0 for vx[i] == 0 && vy[i] == 0 { vx[i] = int16(rg.Intn(3) - 1) vy[i] = int16(rg.Intn(3) - 1) } } t := 0 running := true start := sdl.GetTicks() //rect := sdl.Rect{ 0, 0, 0, 0 }; //rectp := ▭ for running { t++ e := &sdl.Event{} for e.Poll() { switch e.Type { case sdl.QUIT: running = false case sdl.KEYDOWN: if e.Keyboard().Keysym.Sym == sdl.K_ESCAPE { running = false } } } screen.FillRect(nil, 0) for i := 0; i < NUM_SPRITES; i++ { x[i] += vx[i] y[i] += vy[i] if x[i] < 0 || x[i] >= W { vx[i] = -vx[i] x[i] += vx[i] } if y[i] < 0 || y[i] >= H { vy[i] = -vy[i] y[i] += vy[i] } //rect.X = x[i]; //rect.Y = y[i]; //screen.Blit(rectp, image, nil); screen.Blit(&sdl.Rect{x[i], y[i], 0, 0}, image, nil) } screen.Flip() } elapsed := sdl.GetTicks() - start fmt.Printf("%f\n", float(t)/float(elapsed)*1000.0) image.Free() screen.Free() sdl.Quit() }
func main() { runtime.LockOSThread() flag.Parse() buildPalette() sdl.Init(sdl.INIT_VIDEO) defer sdl.Quit() sdl.GL_SetAttribute(sdl.GL_SWAP_CONTROL, 1) if sdl.SetVideoMode(512, 512, 32, sdl.OPENGL) == nil { panic("sdl error") } if gl.Init() != 0 { panic("gl error") } sdl.WM_SetCaption("Gomandel", "Gomandel") gl.Enable(gl.TEXTURE_2D) gl.Viewport(0, 0, 512, 512) gl.MatrixMode(gl.PROJECTION) gl.LoadIdentity() gl.Ortho(0, 512, 512, 0, -1, 1) gl.ClearColor(0, 0, 0, 0) //----------------------------------------------------------------------------- var dndDragging bool = false var dndStart Point var dndEnd Point var tex gl.Texture var tc TexCoords var lastProgress int initialRect := Rect{-1.5, -1.5, 3, 3} rect := initialRect rc := new(MandelbrotRequest) rc.MakeRequest(512, 512, rect) rc.WaitFor(Small, &tex, &tc) running := true e := new(sdl.Event) for running { for e.Poll() { switch e.Type { case sdl.QUIT: running = false case sdl.MOUSEBUTTONDOWN: dndDragging = true sdl.GetMouseState(&dndStart.X, &dndStart.Y) dndEnd = dndStart case sdl.MOUSEBUTTONUP: dndDragging = false sdl.GetMouseState(&dndEnd.X, &dndEnd.Y) if e.MouseButton().Button == 3 { rect = initialRect } else { rect = rectFromSelection(dndStart, dndEnd, 512, 512, rect) tc = texCoordsFromSelection(dndStart, dndEnd, 512, 512, tc) } // make request rc.MakeRequest(512, 512, rect) case sdl.MOUSEMOTION: if dndDragging { sdl.GetMouseState(&dndEnd.X, &dndEnd.Y) } } } // if we're waiting for a result, check if it's ready p := rc.Update(&tex, &tc) if p != -1 { lastProgress = p } gl.Clear(gl.COLOR_BUFFER_BIT) tex.Bind(gl.TEXTURE_2D) drawQuad(0, 0, 512, 512, tc.TX, tc.TY, tc.TX2, tc.TY2) gl.BindTexture(gl.TEXTURE_2D, 0) if dndDragging { drawSelection(dndStart, dndEnd) } drawProgress(512, 512, lastProgress, rc.Pending) sdl.GL_SwapBuffers() } }
func main() { runtime.LockOSThread() flag.Parse() sdl.Init(sdl.INIT_VIDEO) defer sdl.Quit() sdl.GL_SetAttribute(sdl.GL_SWAP_CONTROL, 1) if sdl.SetVideoMode(640, 480, 32, sdl.OPENGL) == nil { panic("sdl error") } sdl.WM_SetCaption("Gotris", "Gotris") sdl.EnableKeyRepeat(250, 45) gl.Enable(gl.TEXTURE_2D) gl.Enable(gl.BLEND) gl.BlendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA) gl.Viewport(0, 0, 640, 480) gl.MatrixMode(gl.PROJECTION) gl.LoadIdentity() gl.Ortho(0, 640, 480, 0, -1, 1) gl.ClearColor(0, 0, 0, 0) //----------------------------------------------------------------------------- font, err := LoadFontFromFile("dejavu.font") if err != nil { panic(err) } rand.Seed(int64(sdl.GetTicks())) gs := NewGameSession(*initLevel, font) lastTime := sdl.GetTicks() running := true for running { for ev := sdl.PollEvent(); ev != nil; ev = sdl.PollEvent() { switch e := ev.(type) { case *sdl.QuitEvent: running = false case *sdl.KeyboardEvent: if e.Type == sdl.KEYDOWN { running = gs.HandleKey(e.Keysym.Sym) } } } now := sdl.GetTicks() delta := now - lastTime lastTime = now gs.Update(delta) gl.Clear(gl.COLOR_BUFFER_BIT) font.Draw(5, 5, fmt.Sprintf("Level: %d | Score: %d", gs.Level, gs.Score)) gs.Draw() gl.Color3ub(255, 255, 255) sdl.GL_SwapBuffers() } }