AssetManager: remove useless subclasses

* All platforms now use asset configuration files. Subclasses of DesktopAssetManager no longer required.
 * Added general asset config file which is included by all
 * JmeSystemDelegate now always returns DesktopAssetManager
 * JmeSystem is now responsible for providing the platform-specific asset config path
 * Deprecate JmeSystem.createImageRaster(), it is simpler to create a DefaultImageRaster
experimental
shadowislord 10 years ago
parent 47e1c336e6
commit 25b1780e09
  1. 111
      jme3-android/src/main/java/com/jme3/asset/AndroidAssetManager.java
  2. 49
      jme3-android/src/main/java/com/jme3/system/android/JmeAndroidSystem.java
  3. 8
      jme3-android/src/main/resources/com/jme3/asset/Android.cfg
  4. 137
      jme3-core/src/main/java/com/jme3/asset/AssetConfig.java
  5. 22
      jme3-core/src/main/java/com/jme3/asset/DesktopAssetManager.java
  6. 10
      jme3-core/src/main/java/com/jme3/system/JmeSystem.java
  7. 24
      jme3-core/src/main/java/com/jme3/system/JmeSystemDelegate.java
  8. 27
      jme3-core/src/main/resources/com/jme3/asset/Desktop.cfg
  9. 26
      jme3-core/src/main/resources/com/jme3/asset/General.cfg
  10. 17
      jme3-desktop/src/main/java/com/jme3/system/JmeDesktopSystem.java
  11. 4
      jme3-ios/src/main/java/com/jme3/asset/IOS.cfg
  12. 109
      jme3-ios/src/main/java/com/jme3/system/ios/IosAssetManager.java
  13. 24
      jme3-ios/src/main/java/com/jme3/system/ios/JmeIosSystem.java

@ -1,111 +0,0 @@
/*
* Copyright (c) 2009-2012 jMonkeyEngine
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* * Neither the name of 'jMonkeyEngine' nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package com.jme3.asset;
import com.jme3.asset.plugins.AndroidLocator;
import com.jme3.asset.plugins.ClasspathLocator;
import com.jme3.audio.plugins.AndroidAudioLoader;
import com.jme3.audio.plugins.NativeVorbisLoader;
import com.jme3.audio.plugins.WAVLoader;
import com.jme3.system.AppSettings;
import com.jme3.system.android.JmeAndroidSystem;
import com.jme3.texture.plugins.AndroidBufferImageLoader;
import com.jme3.texture.plugins.AndroidNativeImageLoader;
import java.net.URL;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* <code>AndroidAssetManager</code> is an implementation of DesktopAssetManager for Android
*
* @author larynx
*/
public class AndroidAssetManager extends DesktopAssetManager {
private static final Logger logger = Logger.getLogger(AndroidAssetManager.class.getName());
private void registerLoaderSafe(String loaderClass, String ... extensions) {
try {
Class<? extends AssetLoader> loader = (Class<? extends AssetLoader>) Class.forName(loaderClass);
registerLoader(loader, extensions);
} catch (Exception e){
logger.log(Level.WARNING, "Failed to load AssetLoader", e);
}
}
/**
* AndroidAssetManager constructor
* If URL == null then a default list of locators and loaders for android is set
* @param configFile
*/
public AndroidAssetManager(URL configFile) {
System.setProperty("org.xml.sax.driver", "org.xmlpull.v1.sax2.Driver");
// Set Default Android config
registerLocator("", AndroidLocator.class);
registerLocator("", ClasspathLocator.class);
registerLoader(AndroidNativeImageLoader.class, "jpg", "jpeg", "bmp", "gif", "png");
if (JmeAndroidSystem.getAudioRendererType().equals(AppSettings.ANDROID_MEDIAPLAYER)) {
registerLoader(AndroidAudioLoader.class, "ogg", "mp3", "wav");
} else if (JmeAndroidSystem.getAudioRendererType().equals(AppSettings.ANDROID_OPENAL_SOFT)) {
registerLoader(WAVLoader.class, "wav");
registerLoader(NativeVorbisLoader.class, "ogg");
} else {
throw new IllegalStateException("No Audio Renderer Type defined!");
}
registerLoader(com.jme3.material.plugins.J3MLoader.class, "j3m");
registerLoader(com.jme3.material.plugins.J3MLoader.class, "j3md");
registerLoader(com.jme3.material.plugins.ShaderNodeDefinitionLoader.class, "j3sn");
registerLoader(com.jme3.shader.plugins.GLSLLoader.class, "vert", "frag", "glsl", "glsllib");
registerLoader(com.jme3.export.binary.BinaryImporter.class, "j3o");
registerLoader(com.jme3.font.plugins.BitmapFontLoader.class, "fnt");
// Less common loaders (especially on Android)
registerLoaderSafe("com.jme3.texture.plugins.DDSLoader", "dds");
registerLoaderSafe("com.jme3.texture.plugins.PFMLoader", "pfm");
registerLoaderSafe("com.jme3.texture.plugins.HDRLoader", "hdr");
registerLoaderSafe("com.jme3.texture.plugins.TGALoader", "tga");
registerLoaderSafe("com.jme3.scene.plugins.OBJLoader", "obj");
registerLoaderSafe("com.jme3.scene.plugins.MTLLoader", "mtl");
registerLoaderSafe("com.jme3.scene.plugins.ogre.MeshLoader", "mesh.xml");
registerLoaderSafe("com.jme3.scene.plugins.ogre.SkeletonLoader", "skeleton.xml");
registerLoaderSafe("com.jme3.scene.plugins.ogre.MaterialLoader", "material");
registerLoaderSafe("com.jme3.scene.plugins.ogre.SceneLoader", "scene");
logger.fine("AndroidAssetManager created.");
}
}

@ -6,9 +6,6 @@ import android.graphics.Bitmap;
import android.os.Environment; import android.os.Environment;
import android.view.View; import android.view.View;
import android.view.inputmethod.InputMethodManager; import android.view.inputmethod.InputMethodManager;
import com.jme3.asset.AndroidAssetManager;
import com.jme3.asset.AndroidImageInfo;
import com.jme3.asset.AssetManager;
import com.jme3.audio.AudioRenderer; import com.jme3.audio.AudioRenderer;
import com.jme3.audio.android.AndroidAL; import com.jme3.audio.android.AndroidAL;
import com.jme3.audio.android.AndroidALC; import com.jme3.audio.android.AndroidALC;
@ -19,14 +16,10 @@ import com.jme3.audio.openal.ALC;
import com.jme3.audio.openal.EFX; import com.jme3.audio.openal.EFX;
import com.jme3.system.*; import com.jme3.system.*;
import com.jme3.system.JmeContext.Type; import com.jme3.system.JmeContext.Type;
import com.jme3.texture.Image;
import com.jme3.texture.image.DefaultImageRaster;
import com.jme3.texture.image.ImageRaster;
import com.jme3.util.AndroidScreenshots; import com.jme3.util.AndroidScreenshots;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.io.OutputStream; import java.io.OutputStream;
import java.net.URL;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import java.util.logging.Level; import java.util.logging.Level;
@ -41,6 +34,11 @@ public class JmeAndroidSystem extends JmeSystemDelegate {
} catch (UnsatisfiedLinkError e) { } catch (UnsatisfiedLinkError e) {
} }
} }
@Override
public String getPlatformAssetConfigPath() {
return "com/jme3/asset/Android.cfg";
}
@Override @Override
public void writeImageFile(OutputStream outStream, String format, ByteBuffer imageData, int width, int height) throws IOException { public void writeImageFile(OutputStream outStream, String format, ByteBuffer imageData, int width, int height) throws IOException {
@ -58,27 +56,6 @@ public class JmeAndroidSystem extends JmeSystemDelegate {
bitmapImage.recycle(); bitmapImage.recycle();
} }
@Override
public ImageRaster createImageRaster(Image image, int slice) {
if (image.getEfficentData() != null) {
return (AndroidImageInfo) image.getEfficentData();
} else {
return new DefaultImageRaster(image, slice);
}
}
@Override
public AssetManager newAssetManager(URL configFile) {
logger.log(Level.FINE, "Creating asset manager with config {0}", configFile);
return new AndroidAssetManager(configFile);
}
@Override
public AssetManager newAssetManager() {
logger.log(Level.FINE, "Creating asset manager with default config");
return new AndroidAssetManager(null);
}
@Override @Override
public void showErrorDialog(String message) { public void showErrorDialog(String message) {
final String finalMsg = message; final String finalMsg = message;
@ -122,21 +99,6 @@ public class JmeAndroidSystem extends JmeSystemDelegate {
AL al = new AndroidAL(); AL al = new AndroidAL();
EFX efx = new AndroidEFX(); EFX efx = new AndroidEFX();
return new ALAudioRenderer(al, alc, efx); return new ALAudioRenderer(al, alc, efx);
/*
if (settings.getAudioRenderer().equals(AppSettings.ANDROID_MEDIAPLAYER)) {
logger.log(Level.INFO, "newAudioRenderer settings set to Android MediaPlayer / SoundPool");
audioRendererType = AppSettings.ANDROID_MEDIAPLAYER;
return new AndroidMediaPlayerAudioRenderer(activity);
} else if (settings.getAudioRenderer().equals(AppSettings.ANDROID_OPENAL_SOFT)) {
logger.log(Level.INFO, "newAudioRenderer settings set to Android OpenAL Soft");
audioRendererType = AppSettings.ANDROID_OPENAL_SOFT;
return new AndroidMediaPlayerAudioRenderer(activity);
} else {
logger.log(Level.INFO, "AudioRenderer not set. Defaulting to Android MediaPlayer / SoundPool");
audioRendererType = AppSettings.ANDROID_MEDIAPLAYER;
return new AndroidMediaPlayerAudioRenderer(activity);
}
*/
} }
@Override @Override
@ -145,6 +107,7 @@ public class JmeAndroidSystem extends JmeSystemDelegate {
return; return;
} }
initialized = true; initialized = true;
System.setProperty("org.xml.sax.driver", "org.xmlpull.v1.sax2.Driver");
logger.log(Level.INFO, getBuildInfo()); logger.log(Level.INFO, getBuildInfo());
} }

@ -0,0 +1,8 @@
INCLUDE com/jme3/asset/General.cfg
# Android specific locators
LOCATOR / com.jme3.asset.plugins.AndroidLocator
# Android specific loaders
LOADER com.jme3.texture.plugins.AndroidNativeImageLoader : jpg, bmp, gif, png, jpeg
LOADER com.jme3.audio.plugins.NativeVorbisLoader : ogg

@ -33,6 +33,9 @@ package com.jme3.asset;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.Locale;
import java.util.Scanner; import java.util.Scanner;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
@ -42,97 +45,77 @@ import java.util.logging.Logger;
* <br/><br/> * <br/><br/>
* The config file is specified with the following format: * The config file is specified with the following format:
* <code> * <code>
* "INCLUDE" <path>
* "LOADER" <class> : (<extension> ",")* <extension> * "LOADER" <class> : (<extension> ",")* <extension>
* "LOCATOR" <path> <class> : (<extension> ",")* <extension> * "LOCATOR" <path> <class>
* </code> * </code>
* *
* @author Kirill Vainer * @author Kirill Vainer
*/ */
public class AssetConfig { public final class AssetConfig {
private AssetManager manager; private static final Logger logger = Logger.getLogger(AssetConfig.class.getName());
public AssetConfig(AssetManager manager){
this.manager = manager;
}
public void loadText(InputStream in) throws IOException{
Scanner scan = new Scanner(in);
while (scan.hasNext()){
String cmd = scan.next();
if (cmd.equals("LOADER")){
String loaderClass = scan.next();
String colon = scan.next();
if (!colon.equals(":")){
throw new IOException("Expected ':', got '"+colon+"'");
}
String extensionsList = scan.nextLine();
String[] extensions = extensionsList.split(",");
for (int i = 0; i < extensions.length; i++){
extensions[i] = extensions[i].trim();
}
Class clazz = acquireClass(loaderClass);
if (clazz != null) {
manager.registerLoader(clazz, extensions);
} else {
Logger.getLogger(this.getClass().getName()).log(Level.WARNING, "Cannot find loader {0}", loaderClass);
}
} else if (cmd.equals("LOCATOR")) {
String rootPath = scan.next();
String locatorClass = scan.nextLine().trim();
Class clazz = acquireClass(locatorClass);
if (clazz != null) {
manager.registerLocator(rootPath, clazz);
} else {
Logger.getLogger(this.getClass().getName()).log(Level.WARNING, "Cannot find locator {0}", locatorClass);
}
} else {
throw new IOException("Expected command, got '" + cmd + "'");
}
}
}
private Class acquireClass(String name) { private AssetConfig() { }
private static Class acquireClass(String name) {
try { try {
Class clazz = Class.forName(name); return Class.forName(name);
return clazz;
} catch (ClassNotFoundException ex) { } catch (ClassNotFoundException ex) {
return null; return null;
} }
} }
/* public static void loadText(AssetManager assetManager, URL configUrl) throws IOException{
private static String readString(DataInput dataIn) throws IOException{ InputStream in = configUrl.openStream();
int length = dataIn.readUnsignedShort(); try {
char[] chrs = new char[length]; Scanner scan = new Scanner(in);
for (int i = 0; i < length; i++){ scan.useLocale(Locale.US); // Fix commas / periods ??
chrs[i] = (char) dataIn.readUnsignedByte(); while (scan.hasNext()){
} String cmd = scan.next();
return String.valueOf(chrs); if (cmd.equals("LOADER")){
} String loaderClass = scan.next();
String colon = scan.next();
public void loadBinary(DataInput dataIn) throws IOException{ if (!colon.equals(":")){
// read signature and version throw new IOException("Expected ':', got '"+colon+"'");
}
// how many locator entries? String extensionsList = scan.nextLine();
int locatorEntries = dataIn.readUnsignedShort(); String[] extensions = extensionsList.split(",");
for (int i = 0; i < locatorEntries; i++){ for (int i = 0; i < extensions.length; i++){
String locatorClazz = readString(dataIn); extensions[i] = extensions[i].trim();
String rootPath = readString(dataIn); }
manager.registerLocator(rootPath, locatorClazz); Class clazz = acquireClass(loaderClass);
} if (clazz != null) {
assetManager.registerLoader(clazz, extensions);
int loaderEntries = dataIn.readUnsignedShort(); } else {
for (int i = 0; i < loaderEntries; i++){ logger.log(Level.WARNING, "Cannot find loader {0}", loaderClass);
String loaderClazz = readString(dataIn); }
int numExtensions = dataIn.readUnsignedByte(); } else if (cmd.equals("LOCATOR")) {
String[] extensions = new String[numExtensions]; String rootPath = scan.next();
for (int j = 0; j < numExtensions; j++){ String locatorClass = scan.nextLine().trim();
extensions[j] = readString(dataIn); Class clazz = acquireClass(locatorClass);
if (clazz != null) {
assetManager.registerLocator(rootPath, clazz);
} else {
logger.log(Level.WARNING, "Cannot find locator {0}", locatorClass);
}
} else if (cmd.equals("INCLUDE")) {
String includedCfg = scan.nextLine().trim();
URL includedCfgUrl = Thread.currentThread().getContextClassLoader().getResource(includedCfg);
if (includedCfgUrl != null) {
loadText(assetManager, includedCfgUrl);
} else {
logger.log(Level.WARNING, "Cannot find config include {0}", includedCfg);
}
} else if (cmd.trim().startsWith("#")) {
scan.nextLine();
continue;
} else {
throw new IOException("Expected command, got '" + cmd + "'");
}
} }
} finally {
manager.registerLoader(loaderClazz, extensions); if (in != null) in.close();
} }
} }
*/
} }

@ -81,11 +81,6 @@ public class DesktopAssetManager implements AssetManager {
this(null); this(null);
} }
@Deprecated
public DesktopAssetManager(boolean loadDefaults){
this(Thread.currentThread().getContextClassLoader().getResource("com/jme3/asset/Desktop.cfg"));
}
public DesktopAssetManager(URL configFile){ public DesktopAssetManager(URL configFile){
if (configFile != null){ if (configFile != null){
loadConfigFile(configFile); loadConfigFile(configFile);
@ -93,20 +88,11 @@ public class DesktopAssetManager implements AssetManager {
logger.fine("DesktopAssetManager created."); logger.fine("DesktopAssetManager created.");
} }
private void loadConfigFile(URL configFile){ private void loadConfigFile(URL configFile) {
InputStream stream = null; try {
try{ AssetConfig.loadText(this, configFile);
AssetConfig cfg = new AssetConfig(this); } catch (IOException ex) {
stream = configFile.openStream();
cfg.loadText(stream);
}catch (IOException ex){
logger.log(Level.SEVERE, "Failed to load asset config", ex); logger.log(Level.SEVERE, "Failed to load asset config", ex);
}finally{
if (stream != null)
try{
stream.close();
}catch (IOException ex){
}
} }
} }

@ -35,6 +35,7 @@ import com.jme3.asset.AssetManager;
import com.jme3.audio.AudioRenderer; import com.jme3.audio.AudioRenderer;
import com.jme3.input.SoftTextDialogInput; import com.jme3.input.SoftTextDialogInput;
import com.jme3.texture.Image; import com.jme3.texture.Image;
import com.jme3.texture.image.DefaultImageRaster;
import com.jme3.texture.image.ImageRaster; import com.jme3.texture.image.ImageRaster;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
@ -166,6 +167,15 @@ public class JmeSystem {
return systemDelegate.newAudioRenderer(settings); return systemDelegate.newAudioRenderer(settings);
} }
public static String getPlatformAssetConfigPath() {
checkDelegate();
return systemDelegate.getPlatformAssetConfigPath();
}
/**
* @deprecated Directly create an image raster via {@link DefaultImageRaster}.
*/
@Deprecated
public static ImageRaster createImageRaster(Image image, int slice) { public static ImageRaster createImageRaster(Image image, int slice) {
checkDelegate(); checkDelegate();
return systemDelegate.createImageRaster(image, slice); return systemDelegate.createImageRaster(image, slice);

@ -32,9 +32,11 @@
package com.jme3.system; package com.jme3.system;
import com.jme3.asset.AssetManager; import com.jme3.asset.AssetManager;
import com.jme3.asset.DesktopAssetManager;
import com.jme3.audio.AudioRenderer; import com.jme3.audio.AudioRenderer;
import com.jme3.input.SoftTextDialogInput; import com.jme3.input.SoftTextDialogInput;
import com.jme3.texture.Image; import com.jme3.texture.Image;
import com.jme3.texture.image.DefaultImageRaster;
import com.jme3.texture.image.ImageRaster; import com.jme3.texture.image.ImageRaster;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
@ -117,15 +119,25 @@ public abstract class JmeSystemDelegate {
public void setSoftTextDialogInput(SoftTextDialogInput input) { public void setSoftTextDialogInput(SoftTextDialogInput input) {
softTextDialogInput = input; softTextDialogInput = input;
} }
public SoftTextDialogInput getSoftTextDialogInput() { public SoftTextDialogInput getSoftTextDialogInput() {
return softTextDialogInput; return softTextDialogInput;
} }
public abstract void writeImageFile(OutputStream outStream, String format, ByteBuffer imageData, int width, int height) throws IOException; public final AssetManager newAssetManager(URL configFile) {
return new DesktopAssetManager(configFile);
public abstract AssetManager newAssetManager(URL configFile); }
public abstract AssetManager newAssetManager(); public final AssetManager newAssetManager() {
return new DesktopAssetManager(null);
}
@Deprecated
public final ImageRaster createImageRaster(Image image, int slice) {
return new DefaultImageRaster(image, slice);
}
public abstract void writeImageFile(OutputStream outStream, String format, ByteBuffer imageData, int width, int height) throws IOException;
public abstract void showErrorDialog(String message); public abstract void showErrorDialog(String message);
@ -181,13 +193,13 @@ public abstract class JmeSystemDelegate {
return sb.toString(); return sb.toString();
} }
public abstract String getPlatformAssetConfigPath();
public abstract JmeContext newContext(AppSettings settings, JmeContext.Type contextType); public abstract JmeContext newContext(AppSettings settings, JmeContext.Type contextType);
public abstract AudioRenderer newAudioRenderer(AppSettings settings); public abstract AudioRenderer newAudioRenderer(AppSettings settings);
public abstract void initialize(AppSettings settings); public abstract void initialize(AppSettings settings);
public abstract ImageRaster createImageRaster(Image image, int slice);
public abstract void showSoftKeyboard(boolean show); public abstract void showSoftKeyboard(boolean show);
} }

@ -1,26 +1,5 @@
LOCATOR / com.jme3.asset.plugins.ClasspathLocator INCLUDE com/jme3/asset/General.cfg
# Desktop-specific loaders
LOADER com.jme3.texture.plugins.AWTLoader : jpg, bmp, gif, png, jpeg LOADER com.jme3.texture.plugins.AWTLoader : jpg, bmp, gif, png, jpeg
LOADER com.jme3.audio.plugins.WAVLoader : wav LOADER com.jme3.audio.plugins.OGGLoader : ogg
LOADER com.jme3.audio.plugins.OGGLoader : ogg
LOADER com.jme3.cursors.plugins.CursorLoader : ani, cur, ico
LOADER com.jme3.material.plugins.J3MLoader : j3m
LOADER com.jme3.material.plugins.J3MLoader : j3md
LOADER com.jme3.material.plugins.ShaderNodeDefinitionLoader : j3sn
LOADER com.jme3.font.plugins.BitmapFontLoader : fnt
LOADER com.jme3.texture.plugins.DDSLoader : dds
LOADER com.jme3.texture.plugins.PFMLoader : pfm
LOADER com.jme3.texture.plugins.HDRLoader : hdr
LOADER com.jme3.texture.plugins.TGALoader : tga
LOADER com.jme3.export.binary.BinaryImporter : j3o
LOADER com.jme3.export.binary.BinaryImporter : j3f
LOADER com.jme3.scene.plugins.OBJLoader : obj
LOADER com.jme3.scene.plugins.MTLLoader : mtl
LOADER com.jme3.scene.plugins.ogre.MeshLoader : meshxml, mesh.xml
LOADER com.jme3.scene.plugins.ogre.SkeletonLoader : skeletonxml, skeleton.xml
LOADER com.jme3.scene.plugins.ogre.MaterialLoader : material
LOADER com.jme3.scene.plugins.ogre.SceneLoader : scene
LOADER com.jme3.scene.plugins.blender.BlenderModelLoader : blend
LOADER com.jme3.shader.plugins.GLSLLoader : vert, frag, glsl, glsllib
LOADER com.jme3.scene.plugins.fbx.SceneLoader : fbx
LOADER com.jme3.scene.plugins.fbx.SceneWithAnimationLoader : fba

@ -0,0 +1,26 @@
# Generic locators that should be supported on all platforms.
LOCATOR / com.jme3.asset.plugins.ClasspathLocator
# Generic loaders that should be supported on all platforms.
LOADER com.jme3.audio.plugins.WAVLoader : wav
LOADER com.jme3.cursors.plugins.CursorLoader : ani, cur, ico
LOADER com.jme3.material.plugins.J3MLoader : j3m
LOADER com.jme3.material.plugins.J3MLoader : j3md
LOADER com.jme3.material.plugins.ShaderNodeDefinitionLoader : j3sn
LOADER com.jme3.font.plugins.BitmapFontLoader : fnt
LOADER com.jme3.texture.plugins.DDSLoader : dds
LOADER com.jme3.texture.plugins.PFMLoader : pfm
LOADER com.jme3.texture.plugins.HDRLoader : hdr
LOADER com.jme3.texture.plugins.TGALoader : tga
LOADER com.jme3.export.binary.BinaryImporter : j3o
LOADER com.jme3.export.binary.BinaryImporter : j3f
LOADER com.jme3.scene.plugins.OBJLoader : obj
LOADER com.jme3.scene.plugins.MTLLoader : mtl
LOADER com.jme3.scene.plugins.ogre.MeshLoader : meshxml, mesh.xml
LOADER com.jme3.scene.plugins.ogre.SkeletonLoader : skeletonxml, skeleton.xml
LOADER com.jme3.scene.plugins.ogre.MaterialLoader : material
LOADER com.jme3.scene.plugins.ogre.SceneLoader : scene
LOADER com.jme3.scene.plugins.blender.BlenderModelLoader : blend
LOADER com.jme3.shader.plugins.GLSLLoader : vert, frag, glsl, glsllib
LOADER com.jme3.scene.plugins.fbx.SceneLoader : fbx
LOADER com.jme3.scene.plugins.fbx.SceneWithAnimationLoader : fba

@ -75,10 +75,10 @@ import javax.swing.SwingUtilities;
public class JmeDesktopSystem extends JmeSystemDelegate { public class JmeDesktopSystem extends JmeSystemDelegate {
@Override @Override
public AssetManager newAssetManager(URL configFile) { public String getPlatformAssetConfigPath() {
return new DesktopAssetManager(configFile); return "com/jme3/asset/Desktop.cfg";
} }
private static BufferedImage verticalFlip(BufferedImage original) { private static BufferedImage verticalFlip(BufferedImage original) {
AffineTransform tx = AffineTransform.getScaleInstance(1, -1); AffineTransform tx = AffineTransform.getScaleInstance(1, -1);
tx.translate(0, -original.getHeight()); tx.translate(0, -original.getHeight());
@ -119,17 +119,6 @@ public class JmeDesktopSystem extends JmeSystemDelegate {
} }
} }
@Override
public ImageRaster createImageRaster(Image image, int slice) {
assert image.getEfficentData() == null;
return new DefaultImageRaster(image, slice);
}
@Override
public AssetManager newAssetManager() {
return new DesktopAssetManager(null);
}
@Override @Override
public void showErrorDialog(String message) { public void showErrorDialog(String message) {
final String msg = message; final String msg = message;

@ -0,0 +1,4 @@
INCLUDE com/jme3/asset/General.cfg
# IOS specific loaders
LOADER com.jme3.system.ios.IosImageLoader : jpg, bmp, gif, png, jpeg

@ -1,109 +0,0 @@
/*
* Copyright (c) 2009-2012 jMonkeyEngine
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* * Neither the name of 'jMonkeyEngine' nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package com.jme3.system.ios;
import com.jme3.asset.AssetLoader;
import com.jme3.asset.DesktopAssetManager;
import com.jme3.asset.TextureKey;
import com.jme3.asset.plugins.ClasspathLocator;
import com.jme3.audio.plugins.WAVLoader;
import com.jme3.texture.Texture;
import java.io.InputStream;
import java.net.URL;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author normenhansen
*/
public class IosAssetManager extends DesktopAssetManager {
private static final Logger logger = Logger.getLogger(IosAssetManager.class.getName());
public IosAssetManager() {
this(null);
}
@Deprecated
public IosAssetManager(boolean loadDefaults) {
//this(Thread.currentThread().getContextClassLoader().getResource("com/jme3/asset/Android.cfg"));
this(null);
}
private void registerLoaderSafe(String loaderClass, String ... extensions) {
try {
Class<? extends AssetLoader> loader = (Class<? extends AssetLoader>) Class.forName(loaderClass);
registerLoader(loader, extensions);
} catch (Exception e){
logger.log(Level.WARNING, "Failed to load AssetLoader", e);
}
}
/**
* AndroidAssetManager constructor
* If URL == null then a default list of locators and loaders for android is set
* @param configFile
*/
public IosAssetManager(URL configFile) {
System.setProperty("org.xml.sax.driver", "org.xmlpull.v1.sax2.Driver");
// Set Default iOS config
registerLocator("", ClasspathLocator.class);
registerLoader(IosImageLoader.class, "jpg", "bmp", "gif", "png", "jpeg");
//registerLoader(AndroidImageLoader.class, "jpg", "bmp", "gif", "png", "jpeg");
//registerLoader(AndroidAudioLoader.class, "ogg", "mp3", "wav");
registerLoader(com.jme3.material.plugins.J3MLoader.class, "j3m");
registerLoader(com.jme3.material.plugins.J3MLoader.class, "j3md");
registerLoader(com.jme3.shader.plugins.GLSLLoader.class, "vert", "frag", "glsl", "glsllib");
registerLoader(com.jme3.export.binary.BinaryImporter.class, "j3o");
registerLoader(com.jme3.font.plugins.BitmapFontLoader.class, "fnt");
registerLoader(WAVLoader.class, "wav");
// Less common loaders (especially on iOS)
registerLoaderSafe("com.jme3.audio.plugins.OGGLoader", "ogg");
registerLoaderSafe("com.jme3.texture.plugins.DDSLoader", "dds");
registerLoaderSafe("com.jme3.texture.plugins.PFMLoader", "pfm");
registerLoaderSafe("com.jme3.texture.plugins.HDRLoader", "hdr");
registerLoaderSafe("com.jme3.texture.plugins.TGALoader", "tga");
registerLoaderSafe("com.jme3.scene.plugins.OBJLoader", "obj");
registerLoaderSafe("com.jme3.scene.plugins.MTLLoader", "mtl");
registerLoaderSafe("com.jme3.scene.plugins.ogre.MeshLoader", "mesh.xml");
registerLoaderSafe("com.jme3.scene.plugins.ogre.SkeletonLoader", "skeleton.xml");
registerLoaderSafe("com.jme3.scene.plugins.ogre.MaterialLoader", "material");
registerLoaderSafe("com.jme3.scene.plugins.ogre.SceneLoader", "scene");
logger.fine("IosAssetManager created.");
}
}

@ -31,17 +31,13 @@
*/ */
package com.jme3.system.ios; package com.jme3.system.ios;
import com.jme3.asset.AssetManager;
import com.jme3.audio.AudioRenderer; import com.jme3.audio.AudioRenderer;
import com.jme3.system.AppSettings; import com.jme3.system.AppSettings;
import com.jme3.system.JmeContext; import com.jme3.system.JmeContext;
import com.jme3.system.JmeSystemDelegate; import com.jme3.system.JmeSystemDelegate;
import com.jme3.system.NullContext; import com.jme3.system.NullContext;
import com.jme3.texture.Image;
import com.jme3.texture.image.ImageRaster;
import java.io.IOException; import java.io.IOException;
import java.io.OutputStream; import java.io.OutputStream;
import java.net.URL;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import java.util.logging.Logger; import java.util.logging.Logger;
@ -52,18 +48,13 @@ import java.util.logging.Logger;
public class JmeIosSystem extends JmeSystemDelegate { public class JmeIosSystem extends JmeSystemDelegate {
@Override @Override
public void writeImageFile(OutputStream outStream, String format, ByteBuffer imageData, int width, int height) throws IOException { public String getPlatformAssetConfigPath() {
throw new UnsupportedOperationException("Not supported yet."); return "com/jme3/asset/IOS.cfg";
}
@Override
public AssetManager newAssetManager(URL configFile) {
return new IosAssetManager(configFile);
} }
@Override @Override
public AssetManager newAssetManager() { public void writeImageFile(OutputStream outStream, String format, ByteBuffer imageData, int width, int height) throws IOException {
return new IosAssetManager(); throw new UnsupportedOperationException("Not supported yet.");
} }
@Override @Override
@ -106,11 +97,6 @@ public class JmeIosSystem extends JmeSystemDelegate {
// throw new UnsupportedOperationException("Not supported yet."); // throw new UnsupportedOperationException("Not supported yet.");
} }
@Override
public ImageRaster createImageRaster(Image image, int slice) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override @Override
public void showSoftKeyboard(boolean show) { public void showSoftKeyboard(boolean show) {
throw new UnsupportedOperationException("Not supported yet."); throw new UnsupportedOperationException("Not supported yet.");

Loading…
Cancel
Save