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
This commit is contained in:
parent
47e1c336e6
commit
25b1780e09
@ -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;
|
||||||
|
|
||||||
@ -42,6 +35,11 @@ public class JmeAndroidSystem extends JmeSystemDelegate {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@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 {
|
||||||
Bitmap bitmapImage = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
|
Bitmap bitmapImage = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
|
||||||
@ -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,22 +45,32 @@ 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){
|
private AssetConfig() { }
|
||||||
this.manager = manager;
|
|
||||||
|
private static Class acquireClass(String name) {
|
||||||
|
try {
|
||||||
|
return Class.forName(name);
|
||||||
|
} catch (ClassNotFoundException ex) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void loadText(InputStream in) throws IOException{
|
public static void loadText(AssetManager assetManager, URL configUrl) throws IOException{
|
||||||
|
InputStream in = configUrl.openStream();
|
||||||
|
try {
|
||||||
Scanner scan = new Scanner(in);
|
Scanner scan = new Scanner(in);
|
||||||
|
scan.useLocale(Locale.US); // Fix commas / periods ??
|
||||||
while (scan.hasNext()){
|
while (scan.hasNext()){
|
||||||
String cmd = scan.next();
|
String cmd = scan.next();
|
||||||
if (cmd.equals("LOADER")){
|
if (cmd.equals("LOADER")){
|
||||||
@ -73,66 +86,36 @@ public class AssetConfig {
|
|||||||
}
|
}
|
||||||
Class clazz = acquireClass(loaderClass);
|
Class clazz = acquireClass(loaderClass);
|
||||||
if (clazz != null) {
|
if (clazz != null) {
|
||||||
manager.registerLoader(clazz, extensions);
|
assetManager.registerLoader(clazz, extensions);
|
||||||
} else {
|
} else {
|
||||||
Logger.getLogger(this.getClass().getName()).log(Level.WARNING, "Cannot find loader {0}", loaderClass);
|
logger.log(Level.WARNING, "Cannot find loader {0}", loaderClass);
|
||||||
}
|
}
|
||||||
} else if (cmd.equals("LOCATOR")) {
|
} else if (cmd.equals("LOCATOR")) {
|
||||||
String rootPath = scan.next();
|
String rootPath = scan.next();
|
||||||
String locatorClass = scan.nextLine().trim();
|
String locatorClass = scan.nextLine().trim();
|
||||||
Class clazz = acquireClass(locatorClass);
|
Class clazz = acquireClass(locatorClass);
|
||||||
if (clazz != null) {
|
if (clazz != null) {
|
||||||
manager.registerLocator(rootPath, clazz);
|
assetManager.registerLocator(rootPath, clazz);
|
||||||
} else {
|
} else {
|
||||||
Logger.getLogger(this.getClass().getName()).log(Level.WARNING, "Cannot find locator {0}", locatorClass);
|
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 {
|
} else {
|
||||||
throw new IOException("Expected command, got '" + cmd + "'");
|
throw new IOException("Expected command, got '" + cmd + "'");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
} finally {
|
||||||
|
if (in != null) in.close();
|
||||||
private Class acquireClass(String name) {
|
|
||||||
try {
|
|
||||||
Class clazz = Class.forName(name);
|
|
||||||
return clazz;
|
|
||||||
} catch (ClassNotFoundException ex) {
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
private static String readString(DataInput dataIn) throws IOException{
|
|
||||||
int length = dataIn.readUnsignedShort();
|
|
||||||
char[] chrs = new char[length];
|
|
||||||
for (int i = 0; i < length; i++){
|
|
||||||
chrs[i] = (char) dataIn.readUnsignedByte();
|
|
||||||
}
|
|
||||||
return String.valueOf(chrs);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void loadBinary(DataInput dataIn) throws IOException{
|
|
||||||
// read signature and version
|
|
||||||
|
|
||||||
// how many locator entries?
|
|
||||||
int locatorEntries = dataIn.readUnsignedShort();
|
|
||||||
for (int i = 0; i < locatorEntries; i++){
|
|
||||||
String locatorClazz = readString(dataIn);
|
|
||||||
String rootPath = readString(dataIn);
|
|
||||||
manager.registerLocator(rootPath, locatorClazz);
|
|
||||||
}
|
|
||||||
|
|
||||||
int loaderEntries = dataIn.readUnsignedShort();
|
|
||||||
for (int i = 0; i < loaderEntries; i++){
|
|
||||||
String loaderClazz = readString(dataIn);
|
|
||||||
int numExtensions = dataIn.readUnsignedByte();
|
|
||||||
String[] extensions = new String[numExtensions];
|
|
||||||
for (int j = 0; j < numExtensions; j++){
|
|
||||||
extensions[j] = readString(dataIn);
|
|
||||||
}
|
|
||||||
|
|
||||||
manager.registerLoader(loaderClazz, extensions);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
@ -94,19 +89,10 @@ public class DesktopAssetManager implements AssetManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void loadConfigFile(URL configFile) {
|
private void loadConfigFile(URL configFile) {
|
||||||
InputStream stream = null;
|
|
||||||
try {
|
try {
|
||||||
AssetConfig cfg = new AssetConfig(this);
|
AssetConfig.loadText(this, configFile);
|
||||||
stream = configFile.openStream();
|
|
||||||
cfg.loadText(stream);
|
|
||||||
} catch (IOException ex) {
|
} 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,16 +119,26 @@ 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 final AssetManager newAssetManager(URL configFile) {
|
||||||
|
return new DesktopAssetManager(configFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
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 writeImageFile(OutputStream outStream, String format, ByteBuffer imageData, int width, int height) throws IOException;
|
||||||
|
|
||||||
public abstract AssetManager newAssetManager(URL configFile);
|
|
||||||
|
|
||||||
public abstract AssetManager newAssetManager();
|
|
||||||
|
|
||||||
public abstract void showErrorDialog(String message);
|
public abstract void showErrorDialog(String message);
|
||||||
|
|
||||||
public abstract boolean showSettingsDialog(AppSettings sourceSettings, boolean loadFromRegistry);
|
public abstract boolean showSettingsDialog(AppSettings sourceSettings, boolean loadFromRegistry);
|
||||||
@ -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
|
|
||||||
|
26
jme3-core/src/main/resources/com/jme3/asset/General.cfg
Normal file
26
jme3-core/src/main/resources/com/jme3/asset/General.cfg
Normal file
@ -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,8 +75,8 @@ 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) {
|
||||||
@ -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;
|
||||||
|
4
jme3-ios/src/main/java/com/jme3/asset/IOS.cfg
Normal file
4
jme3-ios/src/main/java/com/jme3/asset/IOS.cfg
Normal file
@ -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;
|
||||||
|
|
||||||
@ -51,21 +47,16 @@ import java.util.logging.Logger;
|
|||||||
*/
|
*/
|
||||||
public class JmeIosSystem extends JmeSystemDelegate {
|
public class JmeIosSystem extends JmeSystemDelegate {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getPlatformAssetConfigPath() {
|
||||||
|
return "com/jme3/asset/IOS.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 {
|
||||||
throw new UnsupportedOperationException("Not supported yet.");
|
throw new UnsupportedOperationException("Not supported yet.");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public AssetManager newAssetManager(URL configFile) {
|
|
||||||
return new IosAssetManager(configFile);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public AssetManager newAssetManager() {
|
|
||||||
return new IosAssetManager();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void showErrorDialog(String message) {
|
public void showErrorDialog(String message) {
|
||||||
showDialog(message);
|
showDialog(message);
|
||||||
@ -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…
x
Reference in New Issue
Block a user