diff --git a/demo/sprite/assets/gopher.png b/demo/sprite/assets/gopher.png new file mode 100644 index 0000000..cb5e2e1 Binary files /dev/null and b/demo/sprite/assets/gopher.png differ diff --git a/demo/sprite/sprite.go b/demo/sprite/sprite.go new file mode 100644 index 0000000..ef13484 --- /dev/null +++ b/demo/sprite/sprite.go @@ -0,0 +1,41 @@ +package main + +import ( + "github.com/DeKugelschieber/go-game" +) + +const ( + gopher_path = "src/github.com/DeKugelschieber/go-game/demo/sprite/assets/gopher.png" +) + +type Game struct{} + +func (g *Game) Setup() { + res, err := goga.LoadRes(gopher_path) + + if err != nil { + panic(err) + } + + tex, ok := res.(*goga.Tex) + + if !ok { + panic("Resource is not a texture") + } + + sprite := goga.NewSprite(tex) + renderer := goga.GetSystemByName("spriteRenderer") + renderer.Add(sprite) +} + +func (g *Game) Update(delta float64) { +} + +func main() { + game := Game{} + options := goga.RunOptions{ClearColor: goga.Vec4{1, 1, 1, 0}, + Resizable: true, + SetViewportOnResize: true, + ExitOnClose: true} + goga.Run(&game, &options) +} diff --git a/sprite.go b/sprite.go index c8dda50..e237cda 100644 --- a/sprite.go +++ b/sprite.go @@ -149,6 +149,7 @@ func (s *SpriteRenderer) Update(delta float64) { s.Shader.SendMat3(Default_shader_2D_ortho, *MultMat3(s.Camera.CalcOrtho(), s.CalcModel())) s.Shader.SendUniform1i(Default_shader_2D_tex, 0) s.vao.Bind() + var tid uint32 for i := range s.sprites { if !s.sprites[i].Visible { @@ -156,7 +157,11 @@ func (s *SpriteRenderer) Update(delta float64) { } s.Shader.SendMat3(Default_shader_2D_model, *s.sprites[i].CalcModel()) - s.sprites[i].Tex.Bind() + + if tid != s.sprites[i].Tex.GetId() { + tid = s.sprites[i].Tex.GetId() + s.sprites[i].Tex.Bind() + } gl.DrawElements(gl.TRIANGLES, 6, gl.UNSIGNED_INT, nil) }