* Small javadoc additions in Application

* Fix animation not working for Blender 2.5+ Ogre3D models 

git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@8538 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
3.0
sha..rd 13 years ago
parent 3c69e937c4
commit c590b8d054
  1. 23
      engine/src/core/com/jme3/animation/SkeletonControl.java
  2. 19
      engine/src/core/com/jme3/app/Application.java

@ -99,10 +99,8 @@ public class SkeletonControl extends AbstractControl implements Cloneable {
Mesh childSharedMesh = geom.getUserData(UserData.JME_SHAREDMESH); Mesh childSharedMesh = geom.getUserData(UserData.JME_SHAREDMESH);
if (childSharedMesh != null){ if (childSharedMesh != null){
// Don't bother with non-animated shared meshes // Don't bother with non-animated shared meshes
if (isMeshAnimated(childSharedMesh)){ if (isMeshAnimated(childSharedMesh)){
// child is using shared mesh, // child is using shared mesh,
// so animate the shared mesh but ignore child // so animate the shared mesh but ignore child
if (sharedMesh == null){ if (sharedMesh == null){
@ -147,10 +145,12 @@ public class SkeletonControl extends AbstractControl implements Cloneable {
// if hardware skinning is supported, the matrices and weight buffer // if hardware skinning is supported, the matrices and weight buffer
// will be sent by the SkinningShaderLogic object assigned to the shader // will be sent by the SkinningShaderLogic object assigned to the shader
for (int i = 0; i < targets.length; i++) { for (int i = 0; i < targets.length; i++) {
// only update targets with bone-vertex assignments // NOTE: This assumes that code higher up
if (targets[i].getBuffer(Type.BoneIndex) != null) { // Already ensured those targets are animated
// otherwise a crash will happen in skin update
//if (isMeshAnimated(targets[i])) {
softwareSkinUpdate(targets[i], offsetMatrices); softwareSkinUpdate(targets[i], offsetMatrices);
} //}
} }
wasMeshUpdated = true; wasMeshUpdated = true;
@ -195,11 +195,11 @@ public class SkeletonControl extends AbstractControl implements Cloneable {
clone.setSpatial(clonedNode); clone.setSpatial(clonedNode);
clone.skeleton = ctrl.getSkeleton(); clone.skeleton = ctrl.getSkeleton();
Mesh[] meshes = new Mesh[targets.length]; // Fix animated targets for the cloned node
for (int i = 0; i < meshes.length; i++) { clone.targets = findTargets(clonedNode);
meshes[i] = ((Geometry) clonedNode.getChild(i)).getMesh();
} // Fix attachments for the cloned node
for (int i = meshes.length; i < clonedNode.getQuantity(); i++) { for (int i = 0; i < clonedNode.getQuantity(); i++) {
// go through attachment nodes, apply them to correct bone // go through attachment nodes, apply them to correct bone
Spatial child = clonedNode.getChild(i); Spatial child = clonedNode.getChild(i);
if (child instanceof Node) { if (child instanceof Node) {
@ -214,7 +214,7 @@ public class SkeletonControl extends AbstractControl implements Cloneable {
} }
} }
} }
clone.targets = meshes;
return clone; return clone;
} }
@ -348,7 +348,6 @@ public class SkeletonControl extends AbstractControl implements Cloneable {
posBuf[idxPositions++] = rz; posBuf[idxPositions++] = rz;
} }
fvb.position(fvb.position() - bufLength); fvb.position(fvb.position() - bufLength);
fvb.put(posBuf, 0, bufLength); fvb.put(posBuf, 0, bufLength);
fnb.position(fnb.position() - bufLength); fnb.position(fnb.position() - bufLength);

@ -175,9 +175,12 @@ public class Application implements SystemListener {
} }
/** /**
* Set the display settings to define the display created. Examples of * Set the display settings to define the display created.
* display parameters include display pixel width and height, * <p>
* Examples of display parameters include display pixel width and height,
* color bit depth, z-buffer bits, anti-aliasing samples, and update frequency. * color bit depth, z-buffer bits, anti-aliasing samples, and update frequency.
* If this method is called while the application is already running, then
* {@link #restart() } must be called to apply the settings to the display.
* *
* @param settings The settings to set. * @param settings The settings to set.
*/ */
@ -460,7 +463,6 @@ public class Application implements SystemListener {
} }
/** /**
*
* Requests the context to close, shutting down the main loop * Requests the context to close, shutting down the main loop
* and making necessary cleanup operations. * and making necessary cleanup operations.
* *
@ -529,10 +531,11 @@ public class Application implements SystemListener {
if (pauseOnFocus) { if (pauseOnFocus) {
paused = false; paused = false;
context.setAutoFlushFrames(true); context.setAutoFlushFrames(true);
if (inputManager != null) if (inputManager != null) {
inputManager.reset(); inputManager.reset();
} }
} }
}
/** /**
* Internal use only. * Internal use only.
@ -554,6 +557,10 @@ public class Application implements SystemListener {
/** /**
* Enqueues a task/callable object to execute in the jME3 * Enqueues a task/callable object to execute in the jME3
* rendering thread. * rendering thread.
* <p>
* Callables are executed right at the beginning of the main loop.
* They are executed even if the application is currently paused
* or out of focus.
*/ */
public <V> Future<V> enqueue(Callable<V> callable) { public <V> Future<V> enqueue(Callable<V> callable) {
AppTask<V> task = new AppTask<V>(callable); AppTask<V> task = new AppTask<V>(callable);
@ -625,6 +632,10 @@ public class Application implements SystemListener {
timer.reset(); timer.reset();
} }
/**
* @return The GUI viewport. Which is used for the on screen
* statistics and FPS.
*/
public ViewPort getGuiViewPort() { public ViewPort getGuiViewPort() {
return guiViewPort; return guiViewPort;
} }

Loading…
Cancel
Save