|
@@ -148,17 +148,17 @@ public class MeshLoader extends DefaultHandler implements AssetLoader {
|
|
|
public void endDocument() {
|
|
|
}
|
|
|
|
|
|
- private void pushIndex(int index){
|
|
|
- if (ib != null){
|
|
|
+ private void pushIndex(int index) {
|
|
|
+ if (ib != null) {
|
|
|
ib.put(index);
|
|
|
- }else{
|
|
|
- sb.put((short)index);
|
|
|
+ } else {
|
|
|
+ sb.put((short) index);
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
private void pushFace(String v1, String v2, String v3) throws SAXException {
|
|
|
// TODO: fan/strip support
|
|
|
- switch (mesh.getMode()){
|
|
|
+ switch (mesh.getMode()) {
|
|
|
case Triangles:
|
|
|
pushIndex(parseInt(v1));
|
|
|
pushIndex(parseInt(v2));
|
|
@@ -175,15 +175,14 @@ public class MeshLoader extends DefaultHandler implements AssetLoader {
|
|
|
}
|
|
|
|
|
|
// private boolean isUsingSharedVerts(Geometry geom) {
|
|
|
- // Old code for buffer sharer
|
|
|
- //return geom.getUserData(UserData.JME_SHAREDMESH) != null;
|
|
|
+ // Old code for buffer sharer
|
|
|
+ //return geom.getUserData(UserData.JME_SHAREDMESH) != null;
|
|
|
// }
|
|
|
-
|
|
|
private void startFaces(String count) throws SAXException {
|
|
|
int numFaces = parseInt(count);
|
|
|
int indicesPerFace = 0;
|
|
|
|
|
|
- switch (mesh.getMode()){
|
|
|
+ switch (mesh.getMode()) {
|
|
|
case Triangles:
|
|
|
indicesPerFace = 3;
|
|
|
break;
|
|
@@ -198,7 +197,7 @@ public class MeshLoader extends DefaultHandler implements AssetLoader {
|
|
|
}
|
|
|
|
|
|
int numIndices = indicesPerFace * numFaces;
|
|
|
-
|
|
|
+
|
|
|
vb = new VertexBuffer(VertexBuffer.Type.Index);
|
|
|
if (!usesBigIndices) {
|
|
|
sb = BufferUtils.createShortBuffer(numIndices);
|
|
@@ -218,9 +217,9 @@ public class MeshLoader extends DefaultHandler implements AssetLoader {
|
|
|
// load as native jme3 material instance
|
|
|
try {
|
|
|
mat = assetManager.loadMaterial(matName);
|
|
|
- } catch (AssetNotFoundException ex){
|
|
|
+ } catch (AssetNotFoundException ex) {
|
|
|
// Warning will be raised (see below)
|
|
|
- if (!ex.getMessage().equals(matName)){
|
|
|
+ if (!ex.getMessage().equals(matName)) {
|
|
|
throw ex;
|
|
|
}
|
|
|
}
|
|
@@ -229,10 +228,10 @@ public class MeshLoader extends DefaultHandler implements AssetLoader {
|
|
|
mat = materialList.get(matName);
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
if (mat == null) {
|
|
|
logger.log(Level.WARNING, "Cannot locate {0} for model {1}", new Object[]{matName, key});
|
|
|
- mat = PlaceholderAssets.getPlaceholderMaterial(assetManager);
|
|
|
+ mat = PlaceholderAssets.getPlaceholderMaterial(assetManager);
|
|
|
//mat.setKey(new MaterialKey(matName));
|
|
|
}
|
|
|
|
|
@@ -247,10 +246,10 @@ public class MeshLoader extends DefaultHandler implements AssetLoader {
|
|
|
mesh = new Mesh();
|
|
|
if (opType == null || opType.equals("triangle_list")) {
|
|
|
mesh.setMode(Mesh.Mode.Triangles);
|
|
|
- //} else if (opType.equals("triangle_strip")) {
|
|
|
- // mesh.setMode(Mesh.Mode.TriangleStrip);
|
|
|
- //} else if (opType.equals("triangle_fan")) {
|
|
|
- // mesh.setMode(Mesh.Mode.TriangleFan);
|
|
|
+ //} else if (opType.equals("triangle_strip")) {
|
|
|
+ // mesh.setMode(Mesh.Mode.TriangleStrip);
|
|
|
+ //} else if (opType.equals("triangle_fan")) {
|
|
|
+ // mesh.setMode(Mesh.Mode.TriangleFan);
|
|
|
} else if (opType.equals("line_list")) {
|
|
|
mesh.setMode(Mesh.Mode.Lines);
|
|
|
} else {
|
|
@@ -261,14 +260,14 @@ public class MeshLoader extends DefaultHandler implements AssetLoader {
|
|
|
usesSharedVerts = parseBool(usesharedvertices, false);
|
|
|
if (usesSharedVerts) {
|
|
|
usesSharedMesh.add(true);
|
|
|
-
|
|
|
+
|
|
|
// Old code for buffer sharer
|
|
|
// import vertexbuffers from shared geom
|
|
|
// IntMap<VertexBuffer> sharedBufs = sharedMesh.getBuffers();
|
|
|
// for (Entry<VertexBuffer> entry : sharedBufs) {
|
|
|
// mesh.setBuffer(entry.getValue());
|
|
|
// }
|
|
|
- }else{
|
|
|
+ } else {
|
|
|
usesSharedMesh.add(false);
|
|
|
}
|
|
|
|
|
@@ -302,26 +301,26 @@ public class MeshLoader extends DefaultHandler implements AssetLoader {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * Normalizes weights if needed and finds largest amount of weights used
|
|
|
- * for all vertices in the buffer.
|
|
|
+ * Normalizes weights if needed and finds largest amount of weights used for
|
|
|
+ * all vertices in the buffer.
|
|
|
*/
|
|
|
private void endBoneAssigns() {
|
|
|
// if (mesh != sharedMesh && isUsingSharedVerts(geom)) {
|
|
|
// return;
|
|
|
// }
|
|
|
|
|
|
- if (!actuallyHasWeights){
|
|
|
+ if (!actuallyHasWeights) {
|
|
|
// No weights were actually written (the tag didn't have any entries)
|
|
|
// remove those buffers
|
|
|
mesh.clearBuffer(Type.BoneIndex);
|
|
|
mesh.clearBuffer(Type.BoneWeight);
|
|
|
-
|
|
|
+
|
|
|
weightsFloatData = null;
|
|
|
indicesData = null;
|
|
|
-
|
|
|
+
|
|
|
return;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
//int vertCount = mesh.getVertexCount();
|
|
|
int maxWeightsPerVert = 0;
|
|
|
weightsFloatData.rewind();
|
|
@@ -518,15 +517,15 @@ public class MeshLoader extends DefaultHandler implements AssetLoader {
|
|
|
int index = Integer.parseInt(submeshindex);
|
|
|
mesh = geoms.get(index).getMesh();
|
|
|
int faceCount = Integer.parseInt(numfaces);
|
|
|
-
|
|
|
+
|
|
|
VertexBuffer originalIndexBuffer = mesh.getBuffer(Type.Index);
|
|
|
vb = new VertexBuffer(VertexBuffer.Type.Index);
|
|
|
- if (originalIndexBuffer.getFormat() == Format.UnsignedInt){
|
|
|
+ if (originalIndexBuffer.getFormat() == Format.UnsignedInt) {
|
|
|
// LOD buffer should also be integer
|
|
|
ib = BufferUtils.createIntBuffer(faceCount * 3);
|
|
|
sb = null;
|
|
|
vb.setupData(Usage.Static, 3, Format.UnsignedInt, ib);
|
|
|
- }else{
|
|
|
+ } else {
|
|
|
sb = BufferUtils.createShortBuffer(faceCount * 3);
|
|
|
ib = null;
|
|
|
vb.setupData(Usage.Static, 3, Format.UnsignedShort, sb);
|
|
@@ -536,7 +535,7 @@ public class MeshLoader extends DefaultHandler implements AssetLoader {
|
|
|
if (levels == null) {
|
|
|
// Create the LOD levels list
|
|
|
levels = new ArrayList<VertexBuffer>();
|
|
|
-
|
|
|
+
|
|
|
// Add the first LOD level (always the original index buffer)
|
|
|
levels.add(originalIndexBuffer);
|
|
|
lodLevels.put(index, levels);
|
|
@@ -593,7 +592,7 @@ public class MeshLoader extends DefaultHandler implements AssetLoader {
|
|
|
AssetKey assetKey = new AssetKey(folderName + name + ".xml");
|
|
|
try {
|
|
|
animData = (AnimData) assetManager.loadAsset(assetKey);
|
|
|
- } catch (AssetNotFoundException ex){
|
|
|
+ } catch (AssetNotFoundException ex) {
|
|
|
logger.log(Level.WARNING, "Cannot locate {0} for model {1}", new Object[]{assetKey, key});
|
|
|
animData = null;
|
|
|
}
|
|
@@ -698,7 +697,7 @@ public class MeshLoader extends DefaultHandler implements AssetLoader {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
+
|
|
|
// If submesh hack is enabled, ignore any submesh/submeshes
|
|
|
// end tags.
|
|
|
if (qName.equals("submesh") && !submeshNamesHack) {
|
|
@@ -763,12 +762,12 @@ public class MeshLoader extends DefaultHandler implements AssetLoader {
|
|
|
for (int i = 0; i < geoms.size(); i++) {
|
|
|
Geometry g = geoms.get(i);
|
|
|
Mesh m = g.getMesh();
|
|
|
-
|
|
|
+
|
|
|
// New code for buffer extract
|
|
|
if (sharedMesh != null && usesSharedMesh.get(i)) {
|
|
|
m.extractVertexData(sharedMesh);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
// Old code for buffer sharer
|
|
|
//if (sharedMesh != null && isUsingSharedVerts(g)) {
|
|
|
// m.setBound(sharedMesh.getBound().clone());
|
|
@@ -792,14 +791,14 @@ public class MeshLoader extends DefaultHandler implements AssetLoader {
|
|
|
for (int i = 0; i < geoms.size(); i++) {
|
|
|
Geometry g = geoms.get(i);
|
|
|
Mesh m = geoms.get(i).getMesh();
|
|
|
-
|
|
|
+
|
|
|
m.generateBindPose(!HARDWARE_SKINNING);
|
|
|
-
|
|
|
+
|
|
|
// Old code for buffer sharer
|
|
|
//boolean useShared = isUsingSharedVerts(g);
|
|
|
//if (!useShared) {
|
|
|
- // create bind pose
|
|
|
- //m.generateBindPose(!HARDWARE_SKINNING);
|
|
|
+ // create bind pose
|
|
|
+ //m.generateBindPose(!HARDWARE_SKINNING);
|
|
|
//}
|
|
|
}
|
|
|
|
|
@@ -843,7 +842,7 @@ public class MeshLoader extends DefaultHandler implements AssetLoader {
|
|
|
OgreMeshKey meshKey = (OgreMeshKey) key;
|
|
|
materialList = meshKey.getMaterialList();
|
|
|
String materialName = meshKey.getMaterialName();
|
|
|
-
|
|
|
+
|
|
|
// Material list not set but material name is available
|
|
|
if (materialList == null && materialName != null) {
|
|
|
OgreMaterialKey materialKey = new OgreMaterialKey(folderName + materialName + ".material");
|
|
@@ -853,7 +852,7 @@ public class MeshLoader extends DefaultHandler implements AssetLoader {
|
|
|
logger.log(Level.WARNING, "Cannot locate {0} for model {1}", new Object[]{materialKey, key});
|
|
|
}
|
|
|
}
|
|
|
- }else{
|
|
|
+ } else {
|
|
|
// Make sure to reset it to null so that previous state
|
|
|
// doesn't leak onto this one
|
|
|
materialList = null;
|
|
@@ -862,15 +861,15 @@ public class MeshLoader extends DefaultHandler implements AssetLoader {
|
|
|
// If for some reason material list could not be found through
|
|
|
// OgreMeshKey, or if regular ModelKey specified, load using
|
|
|
// default method.
|
|
|
- if (materialList == null){
|
|
|
+ if (materialList == null) {
|
|
|
OgreMaterialKey materialKey = new OgreMaterialKey(folderName + meshName + ".material");
|
|
|
try {
|
|
|
materialList = (MaterialList) assetManager.loadAsset(materialKey);
|
|
|
} catch (AssetNotFoundException e) {
|
|
|
- logger.log(Level.WARNING, "Cannot locate {0} for model {1}", new Object[]{ materialKey, key });
|
|
|
+ logger.log(Level.WARNING, "Cannot locate {0} for model {1}", new Object[]{materialKey, key});
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
// Added by larynx 25.06.2011
|
|
|
// Android needs the namespace aware flag set to true
|
|
|
// Kirill 30.06.2011
|
|
@@ -878,21 +877,21 @@ public class MeshLoader extends DefaultHandler implements AssetLoader {
|
|
|
// checking with JmeSystem.
|
|
|
SAXParserFactory factory = SAXParserFactory.newInstance();
|
|
|
factory.setNamespaceAware(true);
|
|
|
-
|
|
|
+
|
|
|
XMLReader xr = factory.newSAXParser().getXMLReader();
|
|
|
xr.setContentHandler(this);
|
|
|
xr.setErrorHandler(this);
|
|
|
-
|
|
|
+
|
|
|
InputStreamReader r = null;
|
|
|
try {
|
|
|
r = new InputStreamReader(info.openStream());
|
|
|
xr.parse(new InputSource(r));
|
|
|
} finally {
|
|
|
- if (r != null){
|
|
|
+ if (r != null) {
|
|
|
r.close();
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
return compileModel();
|
|
|
} catch (SAXException ex) {
|
|
|
IOException ioEx = new IOException("Error while parsing Ogre3D mesh.xml");
|