mirror of
https://github.com/hajimehoshi/ebiten.git
synced 2024-11-10 13:07:26 +01:00
graphicsutil: Better allocation of vertices
This commit is contained in:
parent
fde9fd2d0e
commit
7767bcfdd8
@ -27,18 +27,25 @@ type verticesBackend struct {
|
|||||||
head int
|
head int
|
||||||
}
|
}
|
||||||
|
|
||||||
func (v *verticesBackend) sliceForOneQuad() []float32 {
|
func (v *verticesBackend) slice(n int) []float32 {
|
||||||
const num = 256
|
const num = 256
|
||||||
size := 4 * graphicscommand.VertexFloatNum()
|
if n > num {
|
||||||
if v.backend == nil {
|
panic("not reached")
|
||||||
v.backend = make([]float32, size*num)
|
|
||||||
}
|
}
|
||||||
s := v.backend[v.head : v.head+size]
|
|
||||||
v.head += size
|
need := n * graphicscommand.VertexFloatNum()
|
||||||
if v.head+size > len(v.backend) {
|
if v.head+need > len(v.backend) {
|
||||||
v.backend = nil
|
v.backend = nil
|
||||||
v.head = 0
|
v.head = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if v.backend == nil {
|
||||||
|
size := 4 * graphicscommand.VertexFloatNum()
|
||||||
|
v.backend = make([]float32, size*num)
|
||||||
|
}
|
||||||
|
|
||||||
|
s := v.backend[v.head : v.head+need]
|
||||||
|
v.head += need
|
||||||
return s
|
return s
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -70,7 +77,7 @@ func QuadVertices(width, height int, sx0, sy0, sx1, sy1 int, a, b, c, d, tx, ty
|
|||||||
func quadVerticesImpl(x, y, u0, v0, u1, v1, a, b, c, d, tx, ty, cr, cg, cb, ca float32) []float32 {
|
func quadVerticesImpl(x, y, u0, v0, u1, v1, a, b, c, d, tx, ty, cr, cg, cb, ca float32) []float32 {
|
||||||
// Specifying a range explicitly here is redundant but this helps optimization
|
// Specifying a range explicitly here is redundant but this helps optimization
|
||||||
// to eliminate boundry checks.
|
// to eliminate boundry checks.
|
||||||
vs := theVerticesBackend.sliceForOneQuad()[0:40]
|
vs := theVerticesBackend.slice(4)[0:40]
|
||||||
|
|
||||||
ax, by, cx, dy := a*x, b*y, c*x, d*y
|
ax, by, cx, dy := a*x, b*y, c*x, d*y
|
||||||
|
|
||||||
@ -150,7 +157,7 @@ func Vertex(width, height int, dx, dy, sx, sy float32, cr, cg, cb, ca float32) [
|
|||||||
//
|
//
|
||||||
// NaN would make more sense to represent an invalid state, but vertices including NaN values doesn't work on
|
// NaN would make more sense to represent an invalid state, but vertices including NaN values doesn't work on
|
||||||
// some machines (#696). Let's use negative numbers to represent such state.
|
// some machines (#696). Let's use negative numbers to represent such state.
|
||||||
vs := theVerticesBackend.sliceForOneQuad()[0:10]
|
vs := theVerticesBackend.slice(1)[0:10]
|
||||||
vs[0] = dx
|
vs[0] = dx
|
||||||
vs[1] = dy
|
vs[1] = dy
|
||||||
vs[2] = sx / wf
|
vs[2] = sx / wf
|
||||||
|
Loading…
Reference in New Issue
Block a user