Feature: user can now decide if the mipmaps will be generated or not; by default 'mipmap' blender flag is used to decide if mips for specified textures shall be generated or not

git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@10201 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
3.0
Kae..pl 12 years ago
parent 519e968999
commit fea4c37e06
  1. 32
      engine/src/blender/com/jme3/asset/BlenderKey.java
  2. 23
      engine/src/blender/com/jme3/scene/plugins/blender/textures/TextureHelper.java

@ -104,6 +104,8 @@ public class BlenderKey extends ModelKey {
protected int maxTextureSize = -1;
/** Allows to toggle generated textures loading. Disabled by default because it very often takes too much memory and needs to be used wisely. */
protected boolean loadGeneratedTextures;
/** Tells if the mipmaps will be generated by jme or not. By default generation is dependant on the blender settings. */
protected MipmapGenerationMethod mipmapGenerationMethod = MipmapGenerationMethod.GENERATE_WHEN_NEEDED;
/**
* Constructor used by serialization mechanisms.
@ -334,6 +336,21 @@ public class BlenderKey extends ModelKey {
return generatedTexturePPU;
}
/**
* @return mipmaps generation method
*/
public MipmapGenerationMethod getMipmapGenerationMethod() {
return mipmapGenerationMethod;
}
/**
* @param mipmapGenerationMethod
* mipmaps generation method
*/
public void setMipmapGenerationMethod(MipmapGenerationMethod mipmapGenerationMethod) {
this.mipmapGenerationMethod = mipmapGenerationMethod;
}
/**
* This mehtod sets the name of the WORLD data block taht should be used during file loading. By default the name is
* not set. If no name is set or the given name does not occur in the file - the first WORLD data block will be used
@ -384,6 +401,7 @@ public class BlenderKey extends ModelKey {
oc.write(defaultMaterial, "default-material", null);
oc.write(faceCullMode, "face-cull-mode", FaceCullMode.Off);
oc.write(layersToLoad, "layers-to-load", -1);
oc.write(mipmapGenerationMethod , "mipmap-generation-method", MipmapGenerationMethod.GENERATE_WHEN_NEEDED);
}
@Override
@ -400,6 +418,7 @@ public class BlenderKey extends ModelKey {
defaultMaterial = (Material) ic.readSavable("default-material", null);
faceCullMode = ic.readEnum("face-cull-mode", FaceCullMode.class, FaceCullMode.Off);
layersToLoad = ic.readInt("layers-to=load", -1);
mipmapGenerationMethod = ic.readEnum("mipmap-generation-method", MipmapGenerationMethod.class, MipmapGenerationMethod.GENERATE_WHEN_NEEDED);
}
@Override
@ -476,7 +495,18 @@ public class BlenderKey extends ModelKey {
return true;
}
/**
* This enum tells the importer if the mipmaps for textures will be generated by jme.
* <li> NEVER_GENERATE and ALWAYS_GENERATE are quite understandable
* <li> GENERATE_WHEN_NEEDED is an option that checks if the texture had 'Generate mipmaps' option set
* in blender, mipmaps are generated only when the option is set
* @author Marcin Roguski (Kaelthas)
*/
public static enum MipmapGenerationMethod {
NEVER_GENERATE,
ALWAYS_GENERATE,
GENERATE_WHEN_NEEDED;
}
/**
* This interface describes the features of the scene that are to be loaded.

@ -162,11 +162,7 @@ public class TextureHelper extends AbstractBlenderHelper {
case TEX_NONE:// No texture, do nothing
break;
case TEX_POINTDENSITY:
LOGGER.warning("Point density texture loading currently not supported!");
break;
case TEX_VOXELDATA:
LOGGER.warning("Voxel data texture loading currently not supported!");
break;
case TEX_PLUGIN:
case TEX_ENVMAP:
LOGGER.log(Level.WARNING, "Unsupported texture type: {0} for texture: {1}", new Object[] { type, tex.getName() });
@ -177,8 +173,25 @@ public class TextureHelper extends AbstractBlenderHelper {
if (result != null) {
result.setName(tex.getName());
result.setWrap(WrapMode.Repeat);
// NOTE: Enable mipmaps FOR ALL TEXTURES EVER
//decide if the mipmaps will be generated
switch(blenderContext.getBlenderKey().getMipmapGenerationMethod()) {
case ALWAYS_GENERATE:
result.setMinFilter(MinFilter.Trilinear);
break;
case NEVER_GENERATE:
break;
case GENERATE_WHEN_NEEDED:
int imaflag = ((Number) tex.getFieldValue("imaflag")).intValue();
if((imaflag & 0x04) != 0) {
result.setMinFilter(MinFilter.Trilinear);
}
break;
default:
throw new IllegalStateException("Unknown mipmap generation method: " +
blenderContext.getBlenderKey().getMipmapGenerationMethod());
}
if (type != TEX_IMAGE) {// only generated textures should have this key
result.setKey(new GeneratedTextureKey(tex.getName()));
}

Loading…
Cancel
Save