v0.4.3: significantly reduced number of calls to updatematrix

This commit is contained in:
Evan Debenham 2016-10-04 03:35:25 -04:00
parent 1009d109fd
commit 017ab991fa

View File

@ -52,6 +52,9 @@ public class Visual extends Gizmo {
public float angle; public float angle;
public float angularSpeed; public float angularSpeed;
private float lastX, lastY, lastW, lastH, lastA;
private PointF lastScale = new PointF(), lastOrigin = new PointF();
public Visual( float x, float y, float width, float height ) { public Visual( float x, float y, float width, float height ) {
this.x = x; this.x = x;
@ -76,12 +79,34 @@ public class Visual extends Gizmo {
} }
@Override @Override
//TODO caching the last value of all these variables does improve performance a bunch
// by letting us skip many calls to updateMatrix, but it is quite messy. It would be better to
// control their editing and have a single boolean to tell if the matrix needs updating.
public void draw() { public void draw() {
updateMatrix(); if (lastX != x ||
lastY != y ||
lastW != width ||
lastH != height ||
lastA != angle ||
lastScale.x != scale.x ||
lastScale.y != scale.y ||
lastOrigin.x != origin.x ||
lastOrigin.y != origin.y){
lastX = x;
lastY = y;
lastW = width;
lastH = height;
lastA = angle;
lastScale.x = scale.x;
lastScale.y = scale.y;
lastOrigin.x = origin.x;
lastOrigin.y = origin.y;
updateMatrix();
}
} }
//FIXME this is recomputing a lot of stuff every frame
// would be far better to redo this only when changes happen
protected void updateMatrix() { protected void updateMatrix() {
Matrix.setIdentity( matrix ); Matrix.setIdentity( matrix );
Matrix.translate( matrix, x, y ); Matrix.translate( matrix, x, y );