package main import ( "fmt" "github.com/veandco/go-sdl2/sdl" ) const winWith, winHight int = 800, 600 type color struct { r, g, b byte } func setPixel(x, y int, c color, pixels []byte) { index := (y*winWith + x) * 4 if index < len(pixels)-4 && index >= 0 { pixels[index] = c.r pixels[index+1] = c.g pixels[index+2] = c.b } } func main() { err := sdl.Init(sdl.INIT_EVERYTHING) if err != nil { fmt.Println(err) return } defer sdl.Quit() window, err := sdl.CreateWindow( "test", sdl.WINDOWPOS_UNDEFINED, sdl.WINDOWPOS_UNDEFINED, int32(winWith), int32(winHight), sdl.WINDOW_SHOWN) if err != nil { fmt.Println(err) return } defer window.Destroy() renderer, err := sdl.CreateRenderer(window, -1, sdl.RENDERER_ACCELERATED) if err != nil { fmt.Println(err) return } defer renderer.Destroy() texture, err := renderer.CreateTexture(sdl.PIXELFORMAT_ABGR8888, sdl.TEXTUREACCESS_STREAMING, int32(winWith), int32(winHight)) if err != nil { fmt.Println(err) return } defer texture.Destroy() pixels := make([]byte, winWith*winHight*4) for y := 0; y < winHight; y++ { for x := 0; x < winWith; x++ { setPixel(x, y, color{255, 0, 0}, pixels) } } texture.Update(nil, pixels, winWith*4) renderer.Copy(texture, nil, nil) renderer.Present() for { for event := sdl.PollEvent(); event != nil; event = sdl.PollEvent() { switch event.(type) { case *sdl.QuitEvent: return } } sdl.Delay(16) } }