- fix blender loader losing texture origin, which caused storing of all images in the j3o instead of referencing them via the assetManager

git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@10230 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
3.0
nor..67 12 years ago
parent 2bbf679c17
commit 2da59144c0
  1. 18
      engine/src/blender/com/jme3/scene/plugins/blender/textures/TextureHelper.java

@ -141,9 +141,9 @@ public class TextureHelper extends AbstractBlenderHelper {
Pointer pImage = (Pointer) tex.getFieldValue("ima"); Pointer pImage = (Pointer) tex.getFieldValue("ima");
if (pImage.isNotNull()) { if (pImage.isNotNull()) {
Structure image = pImage.fetchData(blenderContext.getInputStream()).get(0); Structure image = pImage.fetchData(blenderContext.getInputStream()).get(0);
Image loadedImage = this.loadImage(image, blenderContext); Texture loadedTexture = this.loadImage(image, blenderContext);
if(loadedImage != null) { if(loadedTexture != null) {
result = new Texture2D(loadedImage); result = loadedTexture;
this.applyColorbandAndColorFactors(tex, result.getImage(), blenderContext); this.applyColorbandAndColorFactors(tex, result.getImage(), blenderContext);
} }
} }
@ -490,9 +490,9 @@ public class TextureHelper extends AbstractBlenderHelper {
* this exception is thrown when the blend file structure is * this exception is thrown when the blend file structure is
* somehow invalid or corrupted * somehow invalid or corrupted
*/ */
protected Image loadImage(Structure image, BlenderContext blenderContext) throws BlenderFileException { protected Texture loadImage(Structure image, BlenderContext blenderContext) throws BlenderFileException {
LOGGER.log(Level.FINE, "Fetching texture with OMA = {0}", image.getOldMemoryAddress()); LOGGER.log(Level.FINE, "Fetching texture with OMA = {0}", image.getOldMemoryAddress());
Image result = (Image) blenderContext.getLoadedFeature(image.getOldMemoryAddress(), LoadedFeatureDataType.LOADED_FEATURE); Texture result = new Texture2D((Image) blenderContext.getLoadedFeature(image.getOldMemoryAddress(), LoadedFeatureDataType.LOADED_FEATURE));
if (result == null) { if (result == null) {
String texturePath = image.getFieldValue("name").toString(); String texturePath = image.getFieldValue("name").toString();
Pointer pPackedFile = (Pointer) image.getFieldValue("packedfile"); Pointer pPackedFile = (Pointer) image.getFieldValue("packedfile");
@ -508,7 +508,7 @@ public class TextureHelper extends AbstractBlenderHelper {
ImageLoader imageLoader = new ImageLoader(); ImageLoader imageLoader = new ImageLoader();
// Should the texture be flipped? It works for sinbad .. // Should the texture be flipped? It works for sinbad ..
result = imageLoader.loadImage(blenderContext.getInputStream(), dataFileBlock.getBlockPosition(), true); result = new Texture2D(imageLoader.loadImage(blenderContext.getInputStream(), dataFileBlock.getBlockPosition(), true));
} }
if (result != null) { if (result != null) {
if (LOGGER.isLoggable(Level.FINE)) { if (LOGGER.isLoggable(Level.FINE)) {
@ -691,14 +691,14 @@ public class TextureHelper extends AbstractBlenderHelper {
* the blender context * the blender context
* @return the loaded image or null if the image cannot be found * @return the loaded image or null if the image cannot be found
*/ */
protected Image loadImageFromFile(String name, BlenderContext blenderContext) { protected Texture loadImageFromFile(String name, BlenderContext blenderContext) {
if (!name.contains(".")) { if (!name.contains(".")) {
return null; // no extension means not a valid image return null; // no extension means not a valid image
} }
AssetManager assetManager = blenderContext.getAssetManager(); AssetManager assetManager = blenderContext.getAssetManager();
name = name.replaceAll("\\\\", "\\/"); name = name.replaceAll("\\\\", "\\/");
Image result = null; Texture result = null;
List<String> assetNames = new ArrayList<String>(); List<String> assetNames = new ArrayList<String>();
if (name.startsWith("//")) { if (name.startsWith("//")) {
@ -730,7 +730,7 @@ public class TextureHelper extends AbstractBlenderHelper {
AssetInfo info = assetManager.locateAsset(key); AssetInfo info = assetManager.locateAsset(key);
if(info != null){ if(info != null){
Texture texture = assetManager.loadTexture(key); Texture texture = assetManager.loadTexture(key);
result = texture.getImage();//get only the image result = texture;//get only the image
break;// if no exception is thrown then accept the located asset break;// if no exception is thrown then accept the located asset
// and break the loop // and break the loop
} }

Loading…
Cancel
Save