summaryrefslogtreecommitdiffstats
path: root/src/jogl/classes/com/jogamp
diff options
context:
space:
mode:
Diffstat (limited to 'src/jogl/classes/com/jogamp')
-rw-r--r--[-rwxr-xr-x]src/jogl/classes/com/jogamp/gluegen/opengl/GLConfiguration.java0
-rw-r--r--[-rwxr-xr-x]src/jogl/classes/com/jogamp/gluegen/opengl/GLJavaMethodBindingEmitter.java0
-rw-r--r--[-rwxr-xr-x]src/jogl/classes/com/jogamp/gluegen/opengl/nativesig/NativeSignatureEmitter.java0
-rw-r--r--[-rwxr-xr-x]src/jogl/classes/com/jogamp/gluegen/opengl/nativesig/NativeSignatureJavaMethodBindingEmitter.java0
-rw-r--r--[-rwxr-xr-x]src/jogl/classes/com/jogamp/graph/curve/OutlineShape.java0
-rw-r--r--[-rwxr-xr-x]src/jogl/classes/com/jogamp/graph/curve/opengl/GLRegion.java0
-rw-r--r--[-rwxr-xr-x]src/jogl/classes/com/jogamp/opengl/math/Quaternion.java69
-rw-r--r--[-rwxr-xr-x]src/jogl/classes/com/jogamp/opengl/math/VectorUtil.java0
-rw-r--r--src/jogl/classes/com/jogamp/opengl/util/Animator.java4
-rw-r--r--src/jogl/classes/com/jogamp/opengl/util/AnimatorBase.java12
-rw-r--r--src/jogl/classes/com/jogamp/opengl/util/FPSAnimator.java2
-rw-r--r--src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderUtil.java10
12 files changed, 57 insertions, 40 deletions
diff --git a/src/jogl/classes/com/jogamp/gluegen/opengl/GLConfiguration.java b/src/jogl/classes/com/jogamp/gluegen/opengl/GLConfiguration.java
index ba025e18c..ba025e18c 100755..100644
--- a/src/jogl/classes/com/jogamp/gluegen/opengl/GLConfiguration.java
+++ b/src/jogl/classes/com/jogamp/gluegen/opengl/GLConfiguration.java
diff --git a/src/jogl/classes/com/jogamp/gluegen/opengl/GLJavaMethodBindingEmitter.java b/src/jogl/classes/com/jogamp/gluegen/opengl/GLJavaMethodBindingEmitter.java
index 016674338..016674338 100755..100644
--- a/src/jogl/classes/com/jogamp/gluegen/opengl/GLJavaMethodBindingEmitter.java
+++ b/src/jogl/classes/com/jogamp/gluegen/opengl/GLJavaMethodBindingEmitter.java
diff --git a/src/jogl/classes/com/jogamp/gluegen/opengl/nativesig/NativeSignatureEmitter.java b/src/jogl/classes/com/jogamp/gluegen/opengl/nativesig/NativeSignatureEmitter.java
index adb1c2ae0..adb1c2ae0 100755..100644
--- a/src/jogl/classes/com/jogamp/gluegen/opengl/nativesig/NativeSignatureEmitter.java
+++ b/src/jogl/classes/com/jogamp/gluegen/opengl/nativesig/NativeSignatureEmitter.java
diff --git a/src/jogl/classes/com/jogamp/gluegen/opengl/nativesig/NativeSignatureJavaMethodBindingEmitter.java b/src/jogl/classes/com/jogamp/gluegen/opengl/nativesig/NativeSignatureJavaMethodBindingEmitter.java
index e98478b6e..e98478b6e 100755..100644
--- a/src/jogl/classes/com/jogamp/gluegen/opengl/nativesig/NativeSignatureJavaMethodBindingEmitter.java
+++ b/src/jogl/classes/com/jogamp/gluegen/opengl/nativesig/NativeSignatureJavaMethodBindingEmitter.java
diff --git a/src/jogl/classes/com/jogamp/graph/curve/OutlineShape.java b/src/jogl/classes/com/jogamp/graph/curve/OutlineShape.java
index a3749788b..a3749788b 100755..100644
--- a/src/jogl/classes/com/jogamp/graph/curve/OutlineShape.java
+++ b/src/jogl/classes/com/jogamp/graph/curve/OutlineShape.java
diff --git a/src/jogl/classes/com/jogamp/graph/curve/opengl/GLRegion.java b/src/jogl/classes/com/jogamp/graph/curve/opengl/GLRegion.java
index 63713887b..63713887b 100755..100644
--- a/src/jogl/classes/com/jogamp/graph/curve/opengl/GLRegion.java
+++ b/src/jogl/classes/com/jogamp/graph/curve/opengl/GLRegion.java
diff --git a/src/jogl/classes/com/jogamp/opengl/math/Quaternion.java b/src/jogl/classes/com/jogamp/opengl/math/Quaternion.java
index e9e29fe2f..0cc5f5ae7 100755..100644
--- a/src/jogl/classes/com/jogamp/opengl/math/Quaternion.java
+++ b/src/jogl/classes/com/jogamp/opengl/math/Quaternion.java
@@ -265,42 +265,51 @@ public class Quaternion {
}
/** Set this quaternion from a Sphereical interpolation
- * of two param quaternion, used mostly for rotational animation
+ * of two param quaternion, used mostly for rotational animation.
+ * <p>
+ * Note: Method does not normalize this quaternion!
+ * </p>
+ * <p>
+ * See http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/slerp/
+ * </p>
* @param a initial quaternion
* @param b target quaternion
* @param t float between 0 and 1 representing interp.
*/
- public void slerp(Quaternion a,Quaternion b, float t)
- {
- float omega, cosom, sinom, sclp, sclq;
- cosom = a.x*b.x + a.y*b.y + a.z*b.z + a.w*b.w;
- if ((1.0f+cosom) > FloatUtil.E) {
- if ((1.0f-cosom) > FloatUtil.E) {
- omega = (float)FloatUtil.acos(cosom);
- sinom = (float)FloatUtil.sin(omega);
- sclp = (float)FloatUtil.sin((1.0f-t)*omega) / sinom;
- sclq = (float)FloatUtil.sin(t*omega) / sinom;
- }
- else {
- sclp = 1.0f - t;
- sclq = t;
- }
- x = sclp*a.x + sclq*b.x;
- y = sclp*a.y + sclq*b.y;
- z = sclp*a.z + sclq*b.z;
- w = sclp*a.w + sclq*b.w;
+ public void slerp(Quaternion a, Quaternion b, float t) {
+ final float cosom = a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w;
+ final float t1 = 1.0f - t;
+
+ // if the two quaternions are close, just use linear interpolation
+ if (cosom >= 0.95f) {
+ x = a.x * t1 + b.x * t;
+ y = a.y * t1 + b.y * t;
+ z = a.z * t1 + b.z * t;
+ w = a.w * t1 + b.w * t;
+ return;
}
- else {
- x =-a.y;
- y = a.x;
- z =-a.w;
- w = a.z;
- sclp = FloatUtil.sin((1.0f-t) * FloatUtil.PI * 0.5f);
- sclq = FloatUtil.sin(t * FloatUtil.PI * 0.5f);
- x = sclp*a.x + sclq*b.x;
- y = sclp*a.y + sclq*b.y;
- z = sclp*a.z + sclq*b.z;
+
+ // the quaternions are nearly opposite, we can pick any axis normal to a,b
+ // to do the rotation
+ if (cosom <= -0.99f) {
+ x = 0.5f * (a.x + b.x);
+ y = 0.5f * (a.y + b.y);
+ z = 0.5f * (a.z + b.z);
+ w = 0.5f * (a.w + b.w);
+ return;
}
+
+ // cosom is now withion range of acos, do a SLERP
+ final float sinom = FloatUtil.sqrt(1.0f - cosom * cosom);
+ final float omega = FloatUtil.acos(cosom);
+
+ final float scla = FloatUtil.sin(t1 * omega) / sinom;
+ final float sclb = FloatUtil.sin( t * omega) / sinom;
+
+ x = a.x * scla + b.x * sclb;
+ y = a.y * scla + b.y * sclb;
+ z = a.z * scla + b.z * sclb;
+ w = a.w * scla + b.w * sclb;
}
/** Check if this quaternion is empty, ie (0,0,0,1)
diff --git a/src/jogl/classes/com/jogamp/opengl/math/VectorUtil.java b/src/jogl/classes/com/jogamp/opengl/math/VectorUtil.java
index 5a75d016a..5a75d016a 100755..100644
--- a/src/jogl/classes/com/jogamp/opengl/math/VectorUtil.java
+++ b/src/jogl/classes/com/jogamp/opengl/math/VectorUtil.java
diff --git a/src/jogl/classes/com/jogamp/opengl/util/Animator.java b/src/jogl/classes/com/jogamp/opengl/util/Animator.java
index c5b3b3f44..ac2b24117 100644
--- a/src/jogl/classes/com/jogamp/opengl/util/Animator.java
+++ b/src/jogl/classes/com/jogamp/opengl/util/Animator.java
@@ -145,7 +145,7 @@ public class Animator extends AnimatorBase {
public void run() {
try {
if(DEBUG) {
- System.err.println("Animator start on " + Thread.currentThread().getName() + ": " + toString());
+ System.err.println("Animator start on " + getThreadName() + ": " + toString());
}
fpsCounter.resetFPSCounter();
animThread = Thread.currentThread();
@@ -265,7 +265,7 @@ public class Animator extends AnimatorBase {
runnable = new MainLoop();
}
fpsCounter.resetFPSCounter();
- String threadName = Thread.currentThread().getName()+"-"+baseName;
+ String threadName = getThreadName()+"-"+baseName;
Thread thread;
if(null==threadGroup) {
thread = new Thread(runnable, threadName);
diff --git a/src/jogl/classes/com/jogamp/opengl/util/AnimatorBase.java b/src/jogl/classes/com/jogamp/opengl/util/AnimatorBase.java
index aa0e70132..837fc84bd 100644
--- a/src/jogl/classes/com/jogamp/opengl/util/AnimatorBase.java
+++ b/src/jogl/classes/com/jogamp/opengl/util/AnimatorBase.java
@@ -138,7 +138,7 @@ public abstract class AnimatorBase implements GLAnimatorControl {
baseName = getBaseName("");
}
if(DEBUG) {
- System.err.println("Animator.initImpl: baseName "+baseName+", implClazz "+impl.getClass().getName()+" - "+toString()+" - "+Thread.currentThread().getName());
+ System.err.println("Animator.initImpl: baseName "+baseName+", implClazz "+impl.getClass().getName()+" - "+toString()+" - "+getThreadName());
}
}
}
@@ -173,7 +173,7 @@ public abstract class AnimatorBase implements GLAnimatorControl {
@Override
public synchronized void add(final GLAutoDrawable drawable) {
if(DEBUG) {
- System.err.println("Animator add: 0x"+Integer.toHexString(drawable.hashCode())+" - "+toString()+" - "+Thread.currentThread().getName());
+ System.err.println("Animator add: 0x"+Integer.toHexString(drawable.hashCode())+" - "+toString()+" - "+getThreadName());
}
if( drawables.contains(drawable) ) {
throw new IllegalArgumentException("Drawable already added to animator: "+this+", "+drawable);
@@ -204,7 +204,7 @@ public abstract class AnimatorBase implements GLAnimatorControl {
@Override
public synchronized void remove(final GLAutoDrawable drawable) {
if(DEBUG) {
- System.err.println("Animator remove: 0x"+Integer.toHexString(drawable.hashCode())+" - "+toString()+" - "+Thread.currentThread().getName());
+ System.err.println("Animator remove: 0x"+Integer.toHexString(drawable.hashCode())+" - "+toString()+" - "+getThreadName());
}
if( !drawables.contains(drawable) ) {
throw new IllegalArgumentException("Drawable not added to animator: "+this+", "+drawable);
@@ -539,14 +539,14 @@ public abstract class AnimatorBase implements GLAnimatorControl {
}
if(DEBUG || blocking && nok) { // Info only if DEBUG or ( blocking && not-ok ) ; !blocking possible if AWT
if( remaining<=0 && nok ) {
- System.err.println("finishLifecycleAction(" + waitCondition.getClass().getName() + "): ++++++ timeout reached ++++++ " + Thread.currentThread().getName());
+ System.err.println("finishLifecycleAction(" + waitCondition.getClass().getName() + "): ++++++ timeout reached ++++++ " + getThreadName());
}
stateSync.lock(); // avoid too many lock/unlock ops
try {
System.err.println("finishLifecycleAction(" + waitCondition.getClass().getName() + "): OK "+(!nok)+
"- pollPeriod "+pollPeriod+", blocking "+blocking+
", waited " + (blocking ? ( TO_WAIT_FOR_FINISH_LIFECYCLE_ACTION - remaining ) : 0 ) + "/" + TO_WAIT_FOR_FINISH_LIFECYCLE_ACTION +
- " - " + Thread.currentThread().getName());
+ " - " + getThreadName());
System.err.println(" - "+toString());
} finally {
stateSync.unlock();
@@ -571,6 +571,8 @@ public abstract class AnimatorBase implements GLAnimatorControl {
}
}
+ protected static String getThreadName() { return Thread.currentThread().getName(); }
+
public String toString() {
return getClass().getName()+"[started "+isStarted()+", animating "+isAnimating()+", paused "+isPaused()+", drawable "+drawables.size()+
", totals[dt "+getTotalFPSDuration()+", frames "+getTotalFPSFrames()+", fps "+getTotalFPS()+
diff --git a/src/jogl/classes/com/jogamp/opengl/util/FPSAnimator.java b/src/jogl/classes/com/jogamp/opengl/util/FPSAnimator.java
index bfcab23fd..7613efec6 100644
--- a/src/jogl/classes/com/jogamp/opengl/util/FPSAnimator.java
+++ b/src/jogl/classes/com/jogamp/opengl/util/FPSAnimator.java
@@ -235,7 +235,7 @@ public class FPSAnimator extends AnimatorBase {
if ( null != timer || null != task || isStartedImpl() ) {
return false;
}
- timer = new Timer( Thread.currentThread().getName()+"-"+baseName+"-Timer"+(timerNo++) );
+ timer = new Timer( getThreadName()+"-"+baseName+"-Timer"+(timerNo++) );
task = new MainTask();
if(DEBUG) {
System.err.println("FPSAnimator.start() START: "+task+", "+ Thread.currentThread() + ": " + toString());
diff --git a/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderUtil.java b/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderUtil.java
index eceeea6db..7d110659a 100644
--- a/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderUtil.java
+++ b/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderUtil.java
@@ -172,7 +172,10 @@ public class ShaderUtil {
info.shaderBinaryFormats.add(new Integer(formats[i]));
}
}
- } catch (GLException gle) { System.err.println("Catched Exception: "+gle.getMessage()); gle.printStackTrace(); }
+ } catch (GLException gle) {
+ System.err.println("Catched Exception on thread "+Thread.currentThread().getName());
+ gle.printStackTrace();
+ }
}
}
return info.shaderBinaryFormats;
@@ -199,7 +202,10 @@ public class ShaderUtil {
}
info.shaderCompilerAvailable = new Boolean(v);
queryOK = true;
- } catch (GLException gle) { System.err.println("Catched Exception: "+gle.getMessage()); gle.printStackTrace(); }
+ } catch (GLException gle) {
+ System.err.println("Catched Exception on thread "+Thread.currentThread().getName());
+ gle.printStackTrace();
+ }
if(!queryOK) {
info.shaderCompilerAvailable = new Boolean(true);
}