aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/main/java/org/jogamp/java3d/BoundingBox.java40
-rw-r--r--src/main/java/org/jogamp/java3d/CompileState.java5
-rw-r--r--src/main/java/org/jogamp/java3d/GeometryArrayRetained.java6
-rw-r--r--src/main/java/org/jogamp/java3d/SceneGraphObjectRetained.java6
-rw-r--r--src/main/java/org/jogamp/java3d/TransformGroupRetained.java28
-rw-r--r--src/main/java/org/jogamp/java3d/WakeupCondition.java20
6 files changed, 74 insertions, 31 deletions
diff --git a/src/main/java/org/jogamp/java3d/BoundingBox.java b/src/main/java/org/jogamp/java3d/BoundingBox.java
index 02bcbbc..aa7e739 100644
--- a/src/main/java/org/jogamp/java3d/BoundingBox.java
+++ b/src/main/java/org/jogamp/java3d/BoundingBox.java
@@ -1754,22 +1754,30 @@ public void setUpper(Point3d p1) {
int i = 5;
while (i>=0){
Vector4d vc = frustum.clipPlanes[i--];
- if ((( upper.x*vc.x + upper.y*vc.y +
- upper.z*vc.z + vc.w ) < 0.0 ) &&
- (( upper.x*vc.x + lower.y*vc.y +
- upper.z*vc.z + vc.w ) < 0.0 ) &&
- (( upper.x*vc.x + lower.y*vc.y +
- lower.z*vc.z + vc.w ) < 0.0 ) &&
- (( upper.x*vc.x + upper.y*vc.y +
- lower.z*vc.z + vc.w ) < 0.0 ) &&
- (( lower.x*vc.x + upper.y*vc.y +
- upper.z*vc.z + vc.w ) < 0.0 ) &&
- (( lower.x*vc.x + lower.y*vc.y +
- upper.z*vc.z + vc.w ) < 0.0 ) &&
- (( lower.x*vc.x + lower.y*vc.y +
- lower.z*vc.z + vc.w ) < 0.0 ) &&
- (( lower.x*vc.x + upper.y*vc.y +
- lower.z*vc.z + vc.w ) < 0.0 )) {
+
+ double upxxvcx = upper.x*vc.x;
+ double loxxvcx = lower.x*vc.x;
+ double upyxvcy = upper.y*vc.y;
+ double loyxvcy = lower.y*vc.y;
+ double upzxvcz = upper.z*vc.z;
+ double lozxvcz = lower.z*vc.z;
+
+ if ((( upxxvcx + upyxvcy +
+ upzxvcz + vc.w ) < 0.0 ) &&
+ (( upxxvcx + loyxvcy +
+ upzxvcz + vc.w ) < 0.0 ) &&
+ (( upxxvcx + loyxvcy +
+ lozxvcz + vc.w ) < 0.0 ) &&
+ (( upxxvcx + upyxvcy +
+ lozxvcz + vc.w ) < 0.0 ) &&
+ (( loxxvcx + upyxvcy +
+ upzxvcz + vc.w ) < 0.0 ) &&
+ (( loxxvcx + loyxvcy +
+ upzxvcz + vc.w ) < 0.0 ) &&
+ (( loxxvcx + loyxvcy +
+ lozxvcz + vc.w ) < 0.0 ) &&
+ (( loxxvcx + upyxvcy +
+ lozxvcz + vc.w ) < 0.0 )) {
// all corners outside this frustum plane
// System.err.println("*** all corners outside this frustum plane");
return false;
diff --git a/src/main/java/org/jogamp/java3d/CompileState.java b/src/main/java/org/jogamp/java3d/CompileState.java
index 242fc94..8e1b2fe 100644
--- a/src/main/java/org/jogamp/java3d/CompileState.java
+++ b/src/main/java/org/jogamp/java3d/CompileState.java
@@ -185,6 +185,10 @@ AppearanceRetained getAppearance(AppearanceRetained app) {
Shape3DRetained[] shapes = new Shape3DRetained[numShapes];
curList.copyInto(shapes);
Shape3DRetained[] toBeMergedShapes = new Shape3DRetained[numShapes];
+//must be at least 2 to try a merge
+ if(numShapes>1)
+ {
+
for (int i = 0; i < numShapes; i++) {
if (shapes[i] == null) {
continue;
@@ -286,6 +290,7 @@ AppearanceRetained getAppearance(AppearanceRetained app) {
}
}
}
+ }
// Clear the shapelists for the next merge
shapeLists.clear();
diff --git a/src/main/java/org/jogamp/java3d/GeometryArrayRetained.java b/src/main/java/org/jogamp/java3d/GeometryArrayRetained.java
index 0aa3e2b..e6731c2 100644
--- a/src/main/java/org/jogamp/java3d/GeometryArrayRetained.java
+++ b/src/main/java/org/jogamp/java3d/GeometryArrayRetained.java
@@ -3463,9 +3463,9 @@ ArrayList<ArrayList<MorphRetained>> morphUserLists = null;
}
-
+ J3dMessage[] m;
void sendDataChangedMessage(boolean coordinatesChanged) {
- J3dMessage[] m;
+
int i, j, k, numShapeMessages, numMorphMessages;
synchronized(liveStateLock) {
@@ -3483,6 +3483,7 @@ ArrayList<ArrayList<MorphRetained>> morphUserLists = null;
synchronized (universeList) {
numShapeMessages = universeList.size();
+ if(m==null||m.length<numShapeMessages)
m = new J3dMessage[numShapeMessages];
k = 0;
@@ -3514,6 +3515,7 @@ ArrayList<ArrayList<MorphRetained>> morphUserLists = null;
gaList.add(Shape3DRetained.getGeomAtom(s));
}
+ if(m[k]==null)
m[k] = new J3dMessage();
m[k].type = J3dMessage.GEOMETRY_CHANGED;
diff --git a/src/main/java/org/jogamp/java3d/SceneGraphObjectRetained.java b/src/main/java/org/jogamp/java3d/SceneGraphObjectRetained.java
index b434b3e..f94b2a9 100644
--- a/src/main/java/org/jogamp/java3d/SceneGraphObjectRetained.java
+++ b/src/main/java/org/jogamp/java3d/SceneGraphObjectRetained.java
@@ -151,10 +151,12 @@ abstract class SceneGraphObjectRetained extends IndexedObject
void traverse(boolean sameLevel, int level) {
System.err.println();
- for (int i = 0; i < level; i++) {
+ for (int i = 0; i < level; i++)
+ {
System.err.print(".");
}
- System.err.print(this);
+ System.err.print(
+ this.source.getName() + " ret:" + this.getClass().getSimpleName() + " source:" + this.source.getClass().getSimpleName());
}
/**
diff --git a/src/main/java/org/jogamp/java3d/TransformGroupRetained.java b/src/main/java/org/jogamp/java3d/TransformGroupRetained.java
index cd6d634..426acea 100644
--- a/src/main/java/org/jogamp/java3d/TransformGroupRetained.java
+++ b/src/main/java/org/jogamp/java3d/TransformGroupRetained.java
@@ -122,22 +122,35 @@ ArrayList<NodeRetained> childTransformLinks = new ArrayList<NodeRetained>(1);
* the passed transform.
* @param t1 the transform to be copied
*/
+ // re-use previous to avoid object creation, if nothing is still using it
+ private J3dMessage prevMessage;
+ private Transform3D trans = new Transform3D();
void setTransform(Transform3D t1) {
+
+ //int i, j;
J3dMessage tchangeMessage = null;
- int i, j;
- Transform3D trans = null;
+ if (prevMessage != null && prevMessage.getRefcount() == 0)
+ {
+ tchangeMessage = prevMessage;
+ }
+ else
+ {
+ tchangeMessage = new J3dMessage();
+ // trans will still be in use as well in prev message re-create
+ trans = new Transform3D();
+ }
if (staticTransform != null) {
// this writeable transformGroup has a static transform
// merged into this node
- trans = new Transform3D(staticTransform.transform);
+ trans.set(staticTransform.transform);
trans.mul(t1);
transform.setWithLock(trans);
} else {
- trans = new Transform3D(t1);
+ trans.set(t1);
transform.setWithLock(t1);
}
@@ -151,7 +164,6 @@ ArrayList<NodeRetained> childTransformLinks = new ArrayList<NodeRetained>(1);
throw new BadTransformException(J3dI18N.getString("ViewPlatformRetained0"));
}
- tchangeMessage = new J3dMessage();
tchangeMessage.type = J3dMessage.TRANSFORM_CHANGED;
tchangeMessage.threads = targetThreads;
tchangeMessage.args[1] = this;
@@ -160,6 +172,7 @@ ArrayList<NodeRetained> childTransformLinks = new ArrayList<NodeRetained>(1);
tchangeMessage.universe = universe;
//System.err.println("TransformGroupRetained --- TRANSFORM_CHANGED " + this);
VirtualUniverse.mc.processMessage(tchangeMessage);
+ prevMessage = tchangeMessage;
}
dirtyBoundsCache();
}
@@ -415,12 +428,13 @@ ArrayList<NodeRetained> childTransformLinks = new ArrayList<NodeRetained>(1);
for (int i = 0; i < level; i++) {
System.err.print(".");
}
- System.err.print(this);
+ System.err.print(
+ this.source.getName() + " ret:" + this.getClass().getSimpleName() + " source:" + this.source.getClass().getSimpleName());
if (isStatic()) {
System.err.print(" (s)");
} else {
- System.err.print(" (w)");
+ System.err.print(" (non-s)");
}
System.err.println();
System.err.println(transform.toString());
diff --git a/src/main/java/org/jogamp/java3d/WakeupCondition.java b/src/main/java/org/jogamp/java3d/WakeupCondition.java
index 14b436b..52eaa63 100644
--- a/src/main/java/org/jogamp/java3d/WakeupCondition.java
+++ b/src/main/java/org/jogamp/java3d/WakeupCondition.java
@@ -109,11 +109,22 @@ public abstract class WakeupCondition extends Object {
/**
* this sets the conditionMet flag.
*/
- void setConditionMet(int id, Boolean checkSchedulingRegion) {
-
- if (!conditionMet) {
+ // re-use previous to avoid object creation, if nothing is stillusing it
+ private J3dMessage prevMessage;
+ void setConditionMet(int id, Boolean checkSchedulingRegion)
+ {
+ if (!conditionMet)
+ {
conditionMet = true;
- J3dMessage message = new J3dMessage();
+ J3dMessage message = null;
+ if (prevMessage != null && prevMessage.getRefcount() == 0)
+ {
+ message = prevMessage;
+ }
+ else
+ {
+ message = new J3dMessage();
+ }
message.type = J3dMessage.COND_MET;
message.threads = J3dThread.UPDATE_BEHAVIOR;
message.universe = behav.universe;
@@ -121,6 +132,7 @@ public abstract class WakeupCondition extends Object {
message.args[1] = checkSchedulingRegion;
message.args[2] = this;
VirtualUniverse.mc.processMessage(message);
+ prevMessage = message;
}
}