func loadImage(filename string) *sdl.Surface { // search res directory in following order // - ./res/ // - $(GOPATH)/src/github.com/suapapa/whac-a-gopher/res/ // - $(GOROOT)/src/pkg/github.com/suapapa/whac-a-gopher/res/ var imagePath string for _, d := range resCandidates { tryPath := filepath.Join(d, filename) if _, err := os.Stat(tryPath); err == nil { imagePath = tryPath break } } if imagePath == "" { log.Fatalf("failed to find image, %s\n", imagePath) } if s := sdl.Load(imagePath); s != nil { log.Println(imagePath, "loaded") return s } log.Fatalf("failed to load image, %s\n", imagePath) return nil }
// Initializes a new board of the given size using the given ko rule. func NewBoard(size BoardSize, ko KoType) (*Board, error) { b := new(Board) b.size = int(size) b.pieces = make([]*Piece, b.size*b.size) b.tmp = make([]*Piece, b.size*b.size) switch ko { case SimpleKo: b.ko = (*Board).simpleKo case SuperKo: b.ko = (*Board).superKo default: return nil, fmt.Errorf("Unknown ko type: %v", ko) } b.bg = sdl.Load(path.Join(BoardPath, fmt.Sprintf("%v.png", b.size))) if b.bg == nil { return nil, errors.New(sdl.GetError()) } //b.img = sdl.CreateRGBSurface(sdl.HWSURFACE, // int(b.bg.W), // int(b.bg.H), // int(b.bg.Format.BitsPerPixel), // b.bg.Format.Rmask, // b.bg.Format.Gmask, // b.bg.Format.Bmask, // b.bg.Format.Amask, //) //if b.img == nil { // return nil, os.NewError(sdl.GetError()) //} b.img = sdl.Load(path.Join(BoardPath, fmt.Sprintf("%v.png", b.size))) if b.img == nil { return nil, errors.New(sdl.GetError()) } runtime.SetFinalizer(b, (*Board).free) return b, nil }
func loadImage(name string) *sdl.Surface { image := sdl.Load(name) if image == nil { panic(sdl.GetError()) } return image }
// Load bitmap from path as GL texture func LoadGLTexture(path string) { image := sdl.Load(path) if image == nil { panic(sdl.GetError()) } // Check that the image's width is a power of 2 if image.W&(image.W-1) != 0 { fmt.Println("warning:", path, "has a width that is not a power of 2") } // Also check if the height is a power of 2 if image.H&(image.H-1) != 0 { fmt.Println("warning:", path, "has an height that is not a power of 2") } // get the number of channels in the SDL surface nOfColors := image.Format.BytesPerPixel var textureFormat gl.GLenum if nOfColors == 4 { // contains alpha channel if image.Format.Rmask == 0x000000ff { textureFormat = gl.RGBA } else { textureFormat = gl.BGRA } } else if nOfColors == 3 { // no alpha channel if image.Format.Rmask == 0x000000ff { textureFormat = gl.RGB } else { textureFormat = gl.BGR } } else { fmt.Println("warning:", path, "is not truecolor, this will probably break") } texture = gl.GenTexture() // Typical texture generation using data from the bitmap gl.BindTexture(gl.TEXTURE_2D, uint(texture)) // Generate the texture gl.TexImage2D(gl.TEXTURE_2D, 0, int(image.Format.BytesPerPixel), int(image.W), int(image.H), 0, textureFormat, gl.UNSIGNED_BYTE, image.Pixels, ) // linear filtering gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR) gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR) // free up memory we have used. image.Free() }
// Initializes a new piece. func NewPiece(t string) (*Piece, error) { p := new(Piece) p.img = sdl.Load(path.Join(PiecePath, t+".png")) if p.img == nil { return nil, errors.New(sdl.GetError()) } runtime.SetFinalizer(p, (*Piece).free) return p, nil }
func CreateImage(path string) *Surface { gopaths := strings.Split(os.Getenv("GOPATH"), ":") var img *sdl.Surface for _, gopath := range gopaths { img = sdl.Load(gopath + "/src/github.com/manveru/raptgo/" + path) if img != nil { return &Surface{img} } } panic(sdl.GetError()) }
func LoadImage(path string) (image *sdl.Surface, format gl.GLenum) { image = sdl.Load(path) if image == nil { panic(sdl.GetError()) } // Check that the image's width is a power of 2 if image.W&(image.W-1) != 0 { fmt.Println("warning:", path, "has a width that is not a power of 2") } // Also check if the height is a power of 2 if image.H&(image.H-1) != 0 { fmt.Println("warning:", path, "has an height that is not a power of 2") } // get the number of channels in the SDL surface nOfColors := image.Format.BytesPerPixel if nOfColors == 4 { // contains alpha channel if image.Format.Rmask == 0x000000ff { format = gl.RGBA } else { format = gl.BGRA } } else if nOfColors == 3 { // no alpha channel if image.Format.Rmask == 0x000000ff { format = gl.RGB } else { format = gl.BGR } } else { fmt.Println("warning:", path, "is not truecolor, this will probably break") } return image, format }
// load in bitmap as a GL texture func LoadGLTextures(path string) { image := sdl.Load(path) if image == nil { panic(sdl.GetError()) } // Check that the image's width is a power of 2 if image.W&(image.W-1) != 0 { fmt.Println("warning:", path, "has a width that is not a power of 2") } // Also check if the height is a power of 2 if image.H&(image.H-1) != 0 { fmt.Println("warning:", path, "has an height that is not a power of 2") } // get the number of channels in the SDL surface nOfColors := image.Format.BytesPerPixel var textureFormat gl.GLenum if nOfColors == 4 { // contains alpha channel if image.Format.Rmask == 0x000000ff { textureFormat = gl.RGBA } else { textureFormat = gl.BGRA } } else if nOfColors == 3 { // no alpha channel if image.Format.Rmask == 0x000000ff { textureFormat = gl.RGB } else { textureFormat = gl.BGR } } else { fmt.Println("warning:", path, "is not truecolor, this will probably break") } // Create the textures gl.GenTextures(textures[:]) // First texture gl.BindTexture(gl.TEXTURE_2D, uint(textures[0])) gl.TexImage2D( gl.TEXTURE_2D, 0, 3, int(image.W), int(image.H), 0, textureFormat, gl.UNSIGNED_BYTE, image.Pixels, ) // linear filtering gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST) gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST) // Second texture gl.BindTexture(gl.TEXTURE_2D, uint(textures[1])) gl.TexImage2D(gl.TEXTURE_2D, 0, 3, int(image.W), int(image.H), 0, textureFormat, gl.UNSIGNED_BYTE, image.Pixels, ) // Mipmapped filtering gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR) gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR) // Third texture gl.BindTexture(gl.TEXTURE_2D, uint(textures[2])) gl.TexImage2D(gl.TEXTURE_2D, 0, 3, int(image.W), int(image.H), 0, textureFormat, gl.UNSIGNED_BYTE, image.Pixels, ) // Mipmapped filtering gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_NEAREST) gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR) glu.Build2DMipmaps( gl.TEXTURE_2D, 3, int(image.W), int(image.H), textureFormat, image.Pixels, ) }
func loadTextures() { floorTexture = sdl.Load("floor.png") playerTexture = sdl.Load("a.gif") }
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() }
func main() { if sdl.Init(sdl.INIT_EVERYTHING) != 0 { panic(sdl.GetError()) } defer sdl.Quit() image0 := sdl.Load(*file) if image0 == nil { panic(sdl.GetError()) } factorx := float32(1) factory := float32(1) dstW := uint32(float32(image0.W) * factorx) dstH := uint32(float32(image0.H) * factory) screen := sdl.SetVideoMode(int(dstW), int(dstH), 32, sdl.DOUBLEBUF) if screen == nil { panic(sdl.GetError()) } image := sdl.DisplayFormat(image0) format := image.Format err := initAndPrepCL() check(err) order := cl.RGBA elemSize := 4 src, err := c.NewImage2D(cl.MEM_READ_ONLY|cl.MEM_USE_HOST_PTR, order, cl.UNSIGNED_INT8, uint32(image.W), uint32(image.H), uint32(image.Pitch), image.Pixels) check(err) dst, err := c.NewImage2D(cl.MEM_WRITE_ONLY, order, cl.UNSIGNED_INT8, dstW, dstH, 0, nil) check(err) angle := float32(0) for running := true; running; angle += 0.001 { for e := sdl.PollEvent(); e != nil; e = sdl.PollEvent() { switch ev := e.(type) { case *sdl.QuitEvent: running = false break case *sdl.KeyboardEvent: if ev.Keysym.Sym == sdl.K_ESCAPE { running = false break } } } //pixels, err := imageCall(dstW, dstH, "image_recscale", src, dst, 1/factorx, 1/factory) //pixels, err := imageCall(dstW, dstH, "image_rotate", src, dst, angle) m := mul(S(1.2, 1.2), R(angle)) off := []float32{float32(dstW / 2), float32(dstH / 2)} pixels, err := imageCall(dstW, dstH, "image_affine2", src, dst, []float32(m[0:2]), []float32(m[2:4]), off, off) check(err) news := sdl.CreateRGBSurfaceFrom(pixels, int(dstW), int(dstH), int(elemSize*8), int(elemSize)*int(dstW), format.Rmask, format.Gmask, format.Bmask, format.Amask, ) if news == nil { log.Fatal(sdl.GetError()) } screen.FillRect(nil, 0) screen.Blit(&sdl.Rect{0, 0, 0, 0}, news, nil) screen.Flip() sdl.Delay(25) } }