ebiten/opengl/internal/shader/texturequad.go

57 lines
1.3 KiB
Go
Raw Normal View History

2014-12-07 11:25:49 +01:00
package shader
import (
2014-12-09 14:09:22 +01:00
"github.com/hajimehoshi/ebiten"
)
2014-12-07 20:22:50 +01:00
type textureQuad struct {
VertexX1 float32
VertexX2 float32
VertexY1 float32
VertexY2 float32
TextureCoordU1 float32
TextureCoordU2 float32
TextureCoordV1 float32
TextureCoordV2 float32
}
func NextPowerOf2(x uint64) uint64 {
x -= 1
x |= (x >> 1)
x |= (x >> 2)
x |= (x >> 4)
x |= (x >> 8)
x |= (x >> 16)
x |= (x >> 32)
return x + 1
}
func AdjustSizeForTexture(size int) int {
return int(NextPowerOf2(uint64(size)))
}
2014-01-08 06:37:07 +01:00
func u(x int, width int) float32 {
return float32(x) / float32(AdjustSizeForTexture(width))
}
func v(y int, height int) float32 {
return float32(y) / float32(AdjustSizeForTexture(height))
}
2014-12-09 14:09:22 +01:00
func textureQuads(parts []ebiten.TexturePart, width, height int) []textureQuad {
2014-12-07 20:22:50 +01:00
quads := []textureQuad{}
2014-01-08 06:37:07 +01:00
for _, part := range parts {
x1 := float32(part.LocationX)
x2 := float32(part.LocationX + part.Source.Width)
y1 := float32(part.LocationY)
y2 := float32(part.LocationY + part.Source.Height)
u1 := u(part.Source.X, width)
u2 := u(part.Source.X+part.Source.Width, width)
2014-01-08 06:37:07 +01:00
v1 := v(part.Source.Y, height)
v2 := v(part.Source.Y+part.Source.Height, height)
2014-12-07 20:22:50 +01:00
quad := textureQuad{x1, x2, y1, y2, u1, u2, v1, v2}
2014-01-08 06:37:07 +01:00
quads = append(quads, quad)
}
return quads
}