don't call Len() when it can't change
updateData()'s loops checking gt.Len() turns out to have been costing significant computation, not least because each call then in turn called gt.vs.Stride().
This commit is contained in:
parent
31fc049ab7
commit
9a6e6066bd
|
@ -101,16 +101,17 @@ func (gt *GLTriangles) updateData(t pixel.Triangles) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// TrianglesData short path
|
// TrianglesData short path
|
||||||
|
stride := gt.vs.Stride()
|
||||||
|
length := gt.Len()
|
||||||
if t, ok := t.(*pixel.TrianglesData); ok {
|
if t, ok := t.(*pixel.TrianglesData); ok {
|
||||||
for i := 0; i < gt.Len(); i++ {
|
for i := 0; i < length; i++ {
|
||||||
var (
|
var (
|
||||||
px, py = (*t)[i].Position.XY()
|
px, py = (*t)[i].Position.XY()
|
||||||
col = (*t)[i].Color
|
col = (*t)[i].Color
|
||||||
tx, ty = (*t)[i].Picture.XY()
|
tx, ty = (*t)[i].Picture.XY()
|
||||||
in = (*t)[i].Intensity
|
in = (*t)[i].Intensity
|
||||||
)
|
)
|
||||||
s := gt.vs.Stride()
|
d := gt.data[i*stride : i*stride+9]
|
||||||
d := gt.data[i*s : i*s+9]
|
|
||||||
d[0] = float32(px)
|
d[0] = float32(px)
|
||||||
d[1] = float32(py)
|
d[1] = float32(py)
|
||||||
d[2] = float32(col.R)
|
d[2] = float32(col.R)
|
||||||
|
@ -125,27 +126,27 @@ func (gt *GLTriangles) updateData(t pixel.Triangles) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if t, ok := t.(pixel.TrianglesPosition); ok {
|
if t, ok := t.(pixel.TrianglesPosition); ok {
|
||||||
for i := 0; i < gt.Len(); i++ {
|
for i := 0; i < length; i++ {
|
||||||
px, py := t.Position(i).XY()
|
px, py := t.Position(i).XY()
|
||||||
gt.data[i*gt.vs.Stride()+0] = float32(px)
|
gt.data[i*stride+0] = float32(px)
|
||||||
gt.data[i*gt.vs.Stride()+1] = float32(py)
|
gt.data[i*stride+1] = float32(py)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if t, ok := t.(pixel.TrianglesColor); ok {
|
if t, ok := t.(pixel.TrianglesColor); ok {
|
||||||
for i := 0; i < gt.Len(); i++ {
|
for i := 0; i < length; i++ {
|
||||||
col := t.Color(i)
|
col := t.Color(i)
|
||||||
gt.data[i*gt.vs.Stride()+2] = float32(col.R)
|
gt.data[i*stride+2] = float32(col.R)
|
||||||
gt.data[i*gt.vs.Stride()+3] = float32(col.G)
|
gt.data[i*stride+3] = float32(col.G)
|
||||||
gt.data[i*gt.vs.Stride()+4] = float32(col.B)
|
gt.data[i*stride+4] = float32(col.B)
|
||||||
gt.data[i*gt.vs.Stride()+5] = float32(col.A)
|
gt.data[i*stride+5] = float32(col.A)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if t, ok := t.(pixel.TrianglesPicture); ok {
|
if t, ok := t.(pixel.TrianglesPicture); ok {
|
||||||
for i := 0; i < gt.Len(); i++ {
|
for i := 0; i < length; i++ {
|
||||||
pic, intensity := t.Picture(i)
|
pic, intensity := t.Picture(i)
|
||||||
gt.data[i*gt.vs.Stride()+6] = float32(pic.X)
|
gt.data[i*stride+6] = float32(pic.X)
|
||||||
gt.data[i*gt.vs.Stride()+7] = float32(pic.Y)
|
gt.data[i*stride+7] = float32(pic.Y)
|
||||||
gt.data[i*gt.vs.Stride()+8] = float32(intensity)
|
gt.data[i*stride+8] = float32(intensity)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue