golang-game-framework/sdl/texture2d.go

71 lines
1.4 KiB
Go

package sdl
import (
"log"
"github.com/manleydev/golang-game-framework/core"
"github.com/manleydev/golang-game-framework/rendering"
"github.com/veandco/go-sdl2/sdl"
)
type SdlTexture2D struct {
texture *sdl.Texture
}
func NewSdlTexture2D(renderer rendering.Renderer2D, bmpPath string) *SdlTexture2D {
sdlRenderer, ok := renderer.(*SdlRenderer2D)
if !ok {
log.Print("Renderer is not an SDL renderer")
return nil
}
tex := SdlTexture2D{}
surface, err := sdl.LoadBMP(bmpPath)
if err != nil {
log.Print("Failed to load bmp: ", err)
return nil
}
defer surface.Free()
tex.texture, err = sdlRenderer.renderer.CreateTextureFromSurface(surface)
if err != nil {
log.Print("Failed to create SDL texture: ", err)
return nil
}
return &tex
}
func (tex SdlTexture2D) GetCenter() core.Vector2 {
_, _, width, height, err := tex.texture.Query()
if err != nil {
log.Print("Could not get texture center: ", err)
return core.Vector2{}
}
return core.Vector2{
X: float64(width / 2),
Y: float64(height / 2),
}
}
func (tex SdlTexture2D) GetRect() core.Rect2D {
_, _, width, height, err := tex.texture.Query()
if err != nil {
log.Print("Could not get texture data: ", err)
return core.Rect2D{}
}
return core.Rect2D{
X: 0,
Y: 0,
W: float64(width),
H: float64(height),
}
}
func (tex SdlTexture2D) Destroy() {
if err := tex.texture.Destroy(); err != nil {
log.Print("Failed to destroy SDL texture: ", err)
}
}