diff --git a/jme3-android/src/main/java/com/jme3/asset/AndroidImageInfo.java b/jme3-android/src/main/java/com/jme3/asset/AndroidImageInfo.java
deleted file mode 100644
index 8d064f5fe..000000000
--- a/jme3-android/src/main/java/com/jme3/asset/AndroidImageInfo.java
+++ /dev/null
@@ -1,136 +0,0 @@
-package com.jme3.asset;
-
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.graphics.Matrix;
-import com.jme3.math.ColorRGBA;
-import com.jme3.texture.Image;
-import com.jme3.texture.Image.Format;
-import com.jme3.texture.image.ImageRaster;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * AndroidImageInfo
is set in a jME3 image via the {@link Image#setEfficentData(java.lang.Object) }
- * method to retrieve a {@link Bitmap} when it is needed by the renderer.
- * User code may extend AndroidImageInfo
and provide their own implementation of the
- * {@link AndroidImageInfo#loadBitmap()} method to acquire a bitmap by their own means.
- *
- * @author Kirill Vainer
- */
-@Deprecated
-public class AndroidImageInfo extends ImageRaster {
-
- private static final Logger logger = Logger.getLogger(AndroidImageInfo.class.getName());
-
- protected AssetInfo assetInfo;
- protected Bitmap bitmap;
- protected Format format;
-
- public AndroidImageInfo(AssetInfo assetInfo) {
- this.assetInfo = assetInfo;
- }
-
- public Bitmap getBitmap(){
- if (bitmap == null || bitmap.isRecycled()){
- try {
- loadBitmap();
- } catch (IOException ex) {
- // If called first inside AssetManager, the error will propagate
- // correctly. Assuming that if the first calls succeeds
- // then subsequent calls will as well.
- throw new AssetLoadException("Failed to load image " + assetInfo.getKey(), ex);
- }
- }
- return bitmap;
- }
-
- public void notifyBitmapUploaded() {
- // Default function is to recycle the bitmap.
- if (bitmap != null && !bitmap.isRecycled()) {
- bitmap.recycle();
- bitmap = null;
- logger.log(Level.FINE, "Bitmap was deleted. ");
- }
- }
-
- public Format getFormat(){
- return format;
- }
-
- @Override
- public int getWidth() {
- return getBitmap().getWidth();
- }
-
- @Override
- public int getHeight() {
- return getBitmap().getHeight();
- }
-
- @Override
- public void setPixel(int x, int y, ColorRGBA color) {
- getBitmap().setPixel(x, y, color.asIntARGB());
- }
-
- @Override
- public ColorRGBA getPixel(int x, int y, ColorRGBA store) {
- if (store == null) {
- store = new ColorRGBA();
- }
- store.fromIntARGB(getBitmap().getPixel(x, y));
- return store;
- }
-
- /**
- * Loads the bitmap directly from the asset info, possibly updating
- * or creating the image object.
- */
- protected void loadBitmap() throws IOException{
- InputStream in = null;
- try {
- in = assetInfo.openStream();
- bitmap = BitmapFactory.decodeStream(in);
- if (bitmap == null) {
- throw new IOException("Failed to load image: " + assetInfo.getKey().getName());
- }
- } finally {
- if (in != null) {
- in.close();
- }
- }
-
- switch (bitmap.getConfig()) {
- case ALPHA_8:
- format = Image.Format.Alpha8;
- break;
- case ARGB_8888:
- format = Image.Format.RGBA8;
- break;
- case RGB_565:
- format = Image.Format.RGB565;
- break;
- default:
- // This should still work as long
- // as renderer doesn't check format
- // but just loads bitmap directly.
- format = null;
- }
-
- TextureKey texKey = (TextureKey) assetInfo.getKey();
- if (texKey.isFlipY()) {
- // Flip the image, then delete the old one.
- Matrix flipMat = new Matrix();
- flipMat.preScale(1.0f, -1.0f);
- Bitmap newBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), flipMat, false);
- bitmap.recycle();
- bitmap = newBitmap;
-
- if (bitmap == null) {
- throw new IOException("Failed to flip image: " + texKey);
- }
- }
- }
-}
diff --git a/jme3-android/src/main/java/com/jme3/audio/android/AndroidMediaPlayerAudioRenderer.java b/jme3-android/src/main/java/com/jme3/audio/android/AndroidMediaPlayerAudioRenderer.java
deleted file mode 100644
index 394cc257b..000000000
--- a/jme3-android/src/main/java/com/jme3/audio/android/AndroidMediaPlayerAudioRenderer.java
+++ /dev/null
@@ -1,533 +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.audio.android;
-
-import android.app.Activity;
-import android.content.Context;
-import android.content.res.AssetFileDescriptor;
-import android.content.res.AssetManager;
-import android.media.AudioManager;
-import android.media.MediaPlayer;
-import android.media.SoundPool;
-import com.jme3.asset.AssetKey;
-import com.jme3.audio.*;
-import com.jme3.audio.AudioSource.Status;
-import com.jme3.audio.openal.ALAudioRenderer;
-import com.jme3.math.FastMath;
-import com.jme3.math.Vector3f;
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * This class is the android implementation for {@link AudioRenderer}
- *
- * @author larynx
- * @author plan_rich
- *
- * @deprecated No longer supported due to too many limitations.
- * Please use the generic {@link ALAudioRenderer} instead.
- */
-@Deprecated
-public class AndroidMediaPlayerAudioRenderer implements AudioRenderer,
- SoundPool.OnLoadCompleteListener, MediaPlayer.OnCompletionListener {
-
- private static final Logger logger = Logger.getLogger(AndroidMediaPlayerAudioRenderer.class.getName());
- private final static int MAX_NUM_CHANNELS = 16;
- private final HashMap musicPlaying = new HashMap();
- private SoundPool soundPool = null;
- private final Vector3f listenerPosition = new Vector3f();
- // For temp use
- private final Vector3f distanceVector = new Vector3f();
- private final AssetManager assetManager;
- private HashMap soundpoolStillLoading = new HashMap();
- private Listener listener;
- private boolean audioDisabled = false;
- private final AudioManager manager;
-
- public AndroidMediaPlayerAudioRenderer(Activity context) {
- manager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
- context.setVolumeControlStream(AudioManager.STREAM_MUSIC);
- assetManager = context.getAssets();
- }
-
- @Override
- public void initialize() {
- soundPool = new SoundPool(MAX_NUM_CHANNELS, AudioManager.STREAM_MUSIC,
- 0);
- soundPool.setOnLoadCompleteListener(this);
- }
-
- @Override
- public void updateSourceParam(AudioSource src, AudioParam param) {
- if (audioDisabled) {
- return;
- }
-
- if (src.getChannel() < 0) {
- return;
- }
-
- switch (param) {
- case Position:
- if (!src.isPositional()) {
- return;
- }
-
- Vector3f pos = src.getPosition();
- break;
- case Velocity:
- if (!src.isPositional()) {
- return;
- }
-
- Vector3f vel = src.getVelocity();
- break;
- case MaxDistance:
- if (!src.isPositional()) {
- return;
- }
- break;
- case RefDistance:
- if (!src.isPositional()) {
- return;
- }
- break;
- case ReverbFilter:
- if (!src.isPositional() || !src.isReverbEnabled()) {
- return;
- }
- break;
- case ReverbEnabled:
- if (!src.isPositional()) {
- return;
- }
-
- if (src.isReverbEnabled()) {
- updateSourceParam(src, AudioParam.ReverbFilter);
- }
- break;
- case IsPositional:
- break;
- case Direction:
- if (!src.isDirectional()) {
- return;
- }
-
- Vector3f dir = src.getDirection();
- break;
- case InnerAngle:
- if (!src.isDirectional()) {
- return;
- }
- break;
- case OuterAngle:
- if (!src.isDirectional()) {
- return;
- }
- break;
- case IsDirectional:
- if (src.isDirectional()) {
- updateSourceParam(src, AudioParam.Direction);
- updateSourceParam(src, AudioParam.InnerAngle);
- updateSourceParam(src, AudioParam.OuterAngle);
- } else {
- }
- break;
- case DryFilter:
- if (src.getDryFilter() != null) {
- Filter f = src.getDryFilter();
- if (f.isUpdateNeeded()) {
- // updateFilter(f);
- }
- }
- break;
- case Looping:
- if (src.isLooping()) {
- }
- break;
- case Volume:
- MediaPlayer mp = musicPlaying.get(src);
- if (mp != null) {
- mp.setVolume(src.getVolume(), src.getVolume());
- } else {
- soundPool.setVolume(src.getChannel(), src.getVolume(),
- src.getVolume());
- }
-
- break;
- case Pitch:
-
- break;
- }
-
- }
-
- @Override
- public void updateListenerParam(Listener listener, ListenerParam param) {
- if (audioDisabled) {
- return;
- }
-
- switch (param) {
- case Position:
- listenerPosition.set(listener.getLocation());
- break;
- case Rotation:
- Vector3f dir = listener.getDirection();
- Vector3f up = listener.getUp();
-
- break;
- case Velocity:
- Vector3f vel = listener.getVelocity();
-
- break;
- case Volume:
- // alListenerf(AL_GAIN, listener.getVolume());
- break;
- }
-
- }
-
- @Override
- public void update(float tpf) {
- float distance;
- float volume;
-
- // Loop over all mediaplayers
- for (AudioSource src : musicPlaying.keySet()) {
-
- MediaPlayer mp = musicPlaying.get(src);
-
- // Calc the distance to the listener
- distanceVector.set(listenerPosition);
- distanceVector.subtractLocal(src.getPosition());
- distance = FastMath.abs(distanceVector.length());
-
- if (distance < src.getRefDistance()) {
- distance = src.getRefDistance();
- }
- if (distance > src.getMaxDistance()) {
- distance = src.getMaxDistance();
- }
- volume = src.getRefDistance() / distance;
-
- AndroidAudioData audioData = (AndroidAudioData) src.getAudioData();
-
- if (FastMath.abs(audioData.getCurrentVolume() - volume) > FastMath.FLT_EPSILON) {
- // Left / Right channel get the same volume by now, only
- // positional
- mp.setVolume(volume, volume);
-
- audioData.setCurrentVolume(volume);
- }
-
- }
- }
-
- public void setListener(Listener listener) {
- if (audioDisabled) {
- return;
- }
-
- if (this.listener != null) {
- // previous listener no longer associated with current
- // renderer
- this.listener.setRenderer(null);
- }
-
- this.listener = listener;
- this.listener.setRenderer(this);
-
- }
-
- @Override
- public void cleanup() {
- // Cleanup sound pool
- if (soundPool != null) {
- soundPool.release();
- soundPool = null;
- }
-
- // Cleanup media player
- for (AudioSource src : musicPlaying.keySet()) {
- MediaPlayer mp = musicPlaying.get(src);
- {
- mp.stop();
- mp.release();
- src.setStatus(Status.Stopped);
- }
- }
- musicPlaying.clear();
- }
-
- @Override
- public void onCompletion(MediaPlayer mp) {
- if (mp.isPlaying()) {
- mp.seekTo(0);
- mp.stop();
- }
- // XXX: This has bad performance -> maybe change overall structure of
- // mediaplayer in this audiorenderer?
- for (AudioSource src : musicPlaying.keySet()) {
- if (musicPlaying.get(src) == mp) {
- src.setStatus(Status.Stopped);
- break;
- }
- }
-
- }
-
- /**
- * Plays using the {@link SoundPool} of Android. Due to hard limitation of
- * the SoundPool: After playing more instances of the sound you only have
- * the channel of the last played instance.
- *
- * It is not possible to get information about the state of the soundpool of
- * a specific streamid, so removing is not possilbe -> noone knows when
- * sound finished.
- */
- public void playSourceInstance(AudioSource src) {
- if (audioDisabled) {
- return;
- }
-
- AndroidAudioData audioData = (AndroidAudioData) src.getAudioData();
-
- if (!(audioData.getAssetKey() instanceof AudioKey)) {
- throw new IllegalArgumentException("Asset is not a AudioKey");
- }
-
- AudioKey assetKey = (AudioKey) audioData.getAssetKey();
-
- try {
-
- if (audioData.getId() < 0) { // found something to load
- int soundId = soundPool.load(
- assetManager.openFd(assetKey.getName()), 1);
- audioData.setId(soundId);
- }
-
- int channel = soundPool.play(audioData.getId(), 1f, 1f, 1, 0, 1f);
-
- if (channel == 0) {
- soundpoolStillLoading.put(audioData.getId(), src);
- } else {
- if (src.getStatus() != Status.Stopped) {
- soundPool.stop(channel);
- src.setStatus(Status.Stopped);
- }
- src.setChannel(channel); // receive a channel at the last
- setSourceParams(src);
- // playing at least
-
-
- }
- } catch (IOException e) {
- logger.log(Level.SEVERE,
- "Failed to load sound " + assetKey.getName(), e);
- audioData.setId(-1);
- }
- }
-
- @Override
- public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
- AudioSource src = soundpoolStillLoading.remove(sampleId);
-
- if (src == null) {
- logger.warning("Something went terribly wrong! onLoadComplete"
- + " had sampleId which was not in the HashMap of loading items");
- return;
- }
-
- AudioData audioData = src.getAudioData();
-
- // load was successfull
- if (status == 0) {
- int channelIndex;
- channelIndex = soundPool.play(audioData.getId(), 1f, 1f, 1, 0, 1f);
- src.setChannel(channelIndex);
- setSourceParams(src);
- }
- }
-
- public void playSource(AudioSource src) {
- if (audioDisabled) {
- return;
- }
-
- AndroidAudioData audioData = (AndroidAudioData) src.getAudioData();
-
- MediaPlayer mp = musicPlaying.get(src);
- if (mp == null) {
- mp = new MediaPlayer();
- mp.setOnCompletionListener(this);
- mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
- }
-
- try {
- if (src.getStatus() == Status.Stopped) {
- mp.reset();
- AssetKey> key = audioData.getAssetKey();
-
- AssetFileDescriptor afd = assetManager.openFd(key.getName()); // assetKey.getName()
- mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(),
- afd.getLength());
- mp.prepare();
- setSourceParams(src, mp);
- src.setChannel(0);
- src.setStatus(Status.Playing);
- musicPlaying.put(src, mp);
- mp.start();
- } else {
- mp.start();
- }
- } catch (IllegalStateException e) {
- e.printStackTrace();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- private void setSourceParams(AudioSource src, MediaPlayer mp) {
- mp.setLooping(src.isLooping());
- mp.setVolume(src.getVolume(), src.getVolume());
- //src.getDryFilter();
- }
-
- private void setSourceParams(AudioSource src) {
- soundPool.setLoop(src.getChannel(), src.isLooping() ? -1 : 0);
- soundPool.setVolume(src.getChannel(), src.getVolume(), src.getVolume());
- }
-
- /**
- * Pause the current playing sounds. Both from the {@link SoundPool} and the
- * active {@link MediaPlayer}s
- */
- public void pauseAll() {
- if (soundPool != null) {
- soundPool.autoPause();
- for (MediaPlayer mp : musicPlaying.values()) {
- if(mp.isPlaying()){
- mp.pause();
- }
- }
- }
- }
-
- /**
- * Resume all paused sounds.
- */
- public void resumeAll() {
- if (soundPool != null) {
- soundPool.autoResume();
- for (MediaPlayer mp : musicPlaying.values()) {
- mp.start(); //no resume -> api says call start to resume
- }
- }
- }
-
- public void pauseSource(AudioSource src) {
- if (audioDisabled) {
- return;
- }
-
- MediaPlayer mp = musicPlaying.get(src);
- if (mp != null) {
- mp.pause();
- src.setStatus(Status.Paused);
- } else {
- int channel = src.getChannel();
- if (channel != -1) {
- soundPool.pause(channel); // is not very likley to make
- } // something useful :)
- }
- }
-
- public void stopSource(AudioSource src) {
- if (audioDisabled) {
- return;
- }
-
- // can be stream or buffer -> so try to get mediaplayer
- // if there is non try to stop soundpool
- MediaPlayer mp = musicPlaying.get(src);
- if (mp != null) {
- mp.stop();
- mp.reset();
- src.setStatus(Status.Stopped);
- } else {
- int channel = src.getChannel();
- if (channel != -1) {
- soundPool.pause(channel); // is not very likley to make
- // something useful :)
- }
- }
-
- }
-
- @Override
- public void deleteAudioData(AudioData ad) {
-
- for (AudioSource src : musicPlaying.keySet()) {
- if (src.getAudioData() == ad) {
- MediaPlayer mp = musicPlaying.remove(src);
- mp.stop();
- mp.release();
- src.setStatus(Status.Stopped);
- src.setChannel(-1);
- ad.setId(-1);
- break;
- }
- }
-
- if (ad.getId() > 0) {
- soundPool.unload(ad.getId());
- ad.setId(-1);
- }
- }
-
- @Override
- public void setEnvironment(Environment env) {
- // not yet supported
- }
-
- @Override
- public void deleteFilter(Filter filter) {
- }
-
- @Override
- public float getSourcePlaybackTime(AudioSource src) {
- throw new UnsupportedOperationException("Not supported yet.");
- }
-}
diff --git a/jme3-android/src/main/java/com/jme3/renderer/android/TextureUtil.java b/jme3-android/src/main/java/com/jme3/renderer/android/TextureUtil.java
deleted file mode 100644
index 384824c41..000000000
--- a/jme3-android/src/main/java/com/jme3/renderer/android/TextureUtil.java
+++ /dev/null
@@ -1,591 +0,0 @@
-/*
- * Copyright (c) 2009-2015 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.renderer.android;
-
-import android.graphics.Bitmap;
-import android.opengl.ETC1;
-import android.opengl.ETC1Util.ETC1Texture;
-import android.opengl.GLES20;
-import android.opengl.GLUtils;
-import com.jme3.asset.AndroidImageInfo;
-import com.jme3.renderer.RendererException;
-import com.jme3.texture.Image;
-import com.jme3.texture.Image.Format;
-import com.jme3.util.BufferUtils;
-import java.nio.ByteBuffer;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * @deprecated Should not be used anymore. Use {@link GLRenderer} instead.
- */
-@Deprecated
-public class TextureUtil {
-
- private static final Logger logger = Logger.getLogger(TextureUtil.class.getName());
- //TODO Make this configurable through appSettings
- public static boolean ENABLE_COMPRESSION = true;
- private static boolean NPOT = false;
- private static boolean ETC1support = false;
- private static boolean DXT1 = false;
- private static boolean DEPTH24_STENCIL8 = false;
- private static boolean DEPTH_TEXTURE = false;
- private static boolean RGBA8 = false;
-
- // Same constant used by both GL_ARM_rgba8 and GL_OES_rgb8_rgba8.
- private static final int GL_RGBA8 = 0x8058;
-
- private static final int GL_DXT1 = 0x83F0;
- private static final int GL_DXT1A = 0x83F1;
-
- private static final int GL_DEPTH_STENCIL_OES = 0x84F9;
- private static final int GL_UNSIGNED_INT_24_8_OES = 0x84FA;
- private static final int GL_DEPTH24_STENCIL8_OES = 0x88F0;
-
- public static void loadTextureFeatures(String extensionString) {
- ETC1support = extensionString.contains("GL_OES_compressed_ETC1_RGB8_texture");
- DEPTH24_STENCIL8 = extensionString.contains("GL_OES_packed_depth_stencil");
- NPOT = extensionString.contains("GL_IMG_texture_npot")
- || extensionString.contains("GL_OES_texture_npot")
- || extensionString.contains("GL_NV_texture_npot_2D_mipmap");
-
- DXT1 = extensionString.contains("GL_EXT_texture_compression_dxt1");
- DEPTH_TEXTURE = extensionString.contains("GL_OES_depth_texture");
-
- RGBA8 = extensionString.contains("GL_ARM_rgba8") ||
- extensionString.contains("GL_OES_rgb8_rgba8");
-
- logger.log(Level.FINE, "Supports ETC1? {0}", ETC1support);
- logger.log(Level.FINE, "Supports DEPTH24_STENCIL8? {0}", DEPTH24_STENCIL8);
- logger.log(Level.FINE, "Supports NPOT? {0}", NPOT);
- logger.log(Level.FINE, "Supports DXT1? {0}", DXT1);
- logger.log(Level.FINE, "Supports DEPTH_TEXTURE? {0}", DEPTH_TEXTURE);
- logger.log(Level.FINE, "Supports RGBA8? {0}", RGBA8);
- }
-
- private static void buildMipmap(Bitmap bitmap, boolean compress) {
- int level = 0;
- int height = bitmap.getHeight();
- int width = bitmap.getWidth();
-
- logger.log(Level.FINEST, " - Generating mipmaps for bitmap using SOFTWARE");
-
- GLES20.glPixelStorei(GLES20.GL_UNPACK_ALIGNMENT, 1);
-
- while (height >= 1 || width >= 1) {
- //First of all, generate the texture from our bitmap and set it to the according level
- if (compress) {
- logger.log(Level.FINEST, " - Uploading LOD level {0} ({1}x{2}) with compression.", new Object[]{level, width, height});
- uploadBitmapAsCompressed(GLES20.GL_TEXTURE_2D, level, bitmap, false, 0, 0);
- } else {
- logger.log(Level.FINEST, " - Uploading LOD level {0} ({1}x{2}) directly.", new Object[]{level, width, height});
- GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, level, bitmap, 0);
- }
-
- if (height == 1 || width == 1) {
- break;
- }
-
- //Increase the mipmap level
- height /= 2;
- width /= 2;
- Bitmap bitmap2 = Bitmap.createScaledBitmap(bitmap, width, height, true);
-
- // Recycle any bitmaps created as a result of scaling the bitmap.
- // Do not recycle the original image (mipmap level 0)
- if (level != 0) {
- bitmap.recycle();
- }
-
- bitmap = bitmap2;
-
- level++;
- }
- }
-
- private static void uploadBitmapAsCompressed(int target, int level, Bitmap bitmap, boolean subTexture, int x, int y) {
- if (bitmap.hasAlpha()) {
- logger.log(Level.FINEST, " - Uploading bitmap directly. Cannot compress as alpha present.");
- if (subTexture) {
- GLUtils.texSubImage2D(target, level, x, y, bitmap);
- RendererUtil.checkGLError();
- } else {
- GLUtils.texImage2D(target, level, bitmap, 0);
- RendererUtil.checkGLError();
- }
- } else {
- // Convert to RGB565
- int bytesPerPixel = 2;
- Bitmap rgb565 = bitmap.copy(Bitmap.Config.RGB_565, true);
-
- // Put texture data into ByteBuffer
- ByteBuffer inputImage = BufferUtils.createByteBuffer(bitmap.getRowBytes() * bitmap.getHeight());
- rgb565.copyPixelsToBuffer(inputImage);
- inputImage.position(0);
-
- // Delete the copied RGB565 image
- rgb565.recycle();
-
- // Encode the image into the output bytebuffer
- int encodedImageSize = ETC1.getEncodedDataSize(bitmap.getWidth(), bitmap.getHeight());
- ByteBuffer compressedImage = BufferUtils.createByteBuffer(encodedImageSize);
- ETC1.encodeImage(inputImage, bitmap.getWidth(),
- bitmap.getHeight(),
- bytesPerPixel,
- bytesPerPixel * bitmap.getWidth(),
- compressedImage);
-
- // Delete the input image buffer
- BufferUtils.destroyDirectBuffer(inputImage);
-
- // Create an ETC1Texture from the compressed image data
- ETC1Texture etc1tex = new ETC1Texture(bitmap.getWidth(), bitmap.getHeight(), compressedImage);
-
- // Upload the ETC1Texture
- if (bytesPerPixel == 2) {
- int oldSize = (bitmap.getRowBytes() * bitmap.getHeight());
- int newSize = compressedImage.capacity();
- logger.log(Level.FINEST, " - Uploading compressed image to GL, oldSize = {0}, newSize = {1}, ratio = {2}", new Object[]{oldSize, newSize, (float) oldSize / newSize});
- if (subTexture) {
- GLES20.glCompressedTexSubImage2D(target,
- level,
- x, y,
- bitmap.getWidth(),
- bitmap.getHeight(),
- ETC1.ETC1_RGB8_OES,
- etc1tex.getData().capacity(),
- etc1tex.getData());
-
- RendererUtil.checkGLError();
- } else {
- GLES20.glCompressedTexImage2D(target,
- level,
- ETC1.ETC1_RGB8_OES,
- bitmap.getWidth(),
- bitmap.getHeight(),
- 0,
- etc1tex.getData().capacity(),
- etc1tex.getData());
-
- RendererUtil.checkGLError();
- }
-
-// ETC1Util.loadTexture(target, level, 0, GLES20.GL_RGB,
-// GLES20.GL_UNSIGNED_SHORT_5_6_5, etc1Texture);
-// } else if (bytesPerPixel == 3) {
-// ETC1Util.loadTexture(target, level, 0, GLES20.GL_RGB,
-// GLES20.GL_UNSIGNED_BYTE, etc1Texture);
- }
-
- BufferUtils.destroyDirectBuffer(compressedImage);
- }
- }
-
- /**
- * uploadTextureBitmap
uploads a native android bitmap
- */
- public static void uploadTextureBitmap(final int target, Bitmap bitmap, boolean needMips) {
- uploadTextureBitmap(target, bitmap, needMips, false, 0, 0);
- }
-
- /**
- * uploadTextureBitmap
uploads a native android bitmap
- */
- public static void uploadTextureBitmap(final int target, Bitmap bitmap, boolean needMips, boolean subTexture, int x, int y) {
- boolean recycleBitmap = false;
- //TODO, maybe this should raise an exception when NPOT is not supported
-
- boolean willCompress = ENABLE_COMPRESSION && ETC1support && !bitmap.hasAlpha();
- if (needMips && willCompress) {
- // Image is compressed and mipmaps are desired, generate them
- // using software.
- buildMipmap(bitmap, willCompress);
- } else {
- if (willCompress) {
- // Image is compressed but mipmaps are not desired, upload directly.
- logger.log(Level.FINEST, " - Uploading compressed bitmap. Mipmaps are not generated.");
- uploadBitmapAsCompressed(target, 0, bitmap, subTexture, x, y);
-
- } else {
- // Image is not compressed, mipmaps may or may not be desired.
- logger.log(Level.FINEST, " - Uploading bitmap directly.{0}",
- (needMips
- ? " Mipmaps will be generated in HARDWARE"
- : " Mipmaps are not generated."));
- if (subTexture) {
- System.err.println("x : " + x + " y :" + y + " , " + bitmap.getWidth() + "/" + bitmap.getHeight());
- GLUtils.texSubImage2D(target, 0, x, y, bitmap);
- RendererUtil.checkGLError();
- } else {
- GLUtils.texImage2D(target, 0, bitmap, 0);
- RendererUtil.checkGLError();
- }
-
- if (needMips) {
- // No pregenerated mips available,
- // generate from base level if required
- GLES20.glGenerateMipmap(target);
- RendererUtil.checkGLError();
- }
- }
- }
-
- if (recycleBitmap) {
- bitmap.recycle();
- }
- }
-
- public static void uploadTextureAny(Image img, int target, int index, boolean needMips) {
- if (img.getEfficentData() instanceof AndroidImageInfo) {
- logger.log(Level.FINEST, " === Uploading image {0}. Using BITMAP PATH === ", img);
- // If image was loaded from asset manager, use fast path
- AndroidImageInfo imageInfo = (AndroidImageInfo) img.getEfficentData();
- uploadTextureBitmap(target, imageInfo.getBitmap(), needMips);
- } else {
- logger.log(Level.FINEST, " === Uploading image {0}. Using BUFFER PATH === ", img);
- boolean wantGeneratedMips = needMips && !img.hasMipmaps();
- if (wantGeneratedMips && img.getFormat().isCompressed()) {
- logger.log(Level.WARNING, "Generating mipmaps is only"
- + " supported for Bitmap based or non-compressed images!");
- }
-
- // Upload using slower path
- logger.log(Level.FINEST, " - Uploading bitmap directly.{0}",
- (wantGeneratedMips
- ? " Mipmaps will be generated in HARDWARE"
- : " Mipmaps are not generated."));
-
- uploadTexture(img, target, index);
-
- // Image was uploaded using slower path, since it is not compressed,
- // then compress it
- if (wantGeneratedMips) {
- // No pregenerated mips available,
- // generate from base level if required
- GLES20.glGenerateMipmap(target);
- }
- }
- }
-
- private static void unsupportedFormat(Format fmt) {
- throw new UnsupportedOperationException("The image format '" + fmt + "' is unsupported by the video hardware.");
- }
-
- public static AndroidGLImageFormat getImageFormat(Format fmt, boolean forRenderBuffer)
- throws UnsupportedOperationException {
- AndroidGLImageFormat imageFormat = new AndroidGLImageFormat();
- switch (fmt) {
- case Depth32:
- case Depth32F:
- throw new UnsupportedOperationException("The image format '"
- + fmt + "' is not supported by OpenGL ES 2.0 specification.");
- case Alpha8:
- imageFormat.format = GLES20.GL_ALPHA;
- imageFormat.dataType = GLES20.GL_UNSIGNED_BYTE;
- if (RGBA8) {
- imageFormat.renderBufferStorageFormat = GL_RGBA8;
- } else {
- // Highest precision alpha supported by vanilla OGLES2
- imageFormat.renderBufferStorageFormat = GLES20.GL_RGBA4;
- }
- break;
- case Luminance8:
- imageFormat.format = GLES20.GL_LUMINANCE;
- imageFormat.dataType = GLES20.GL_UNSIGNED_BYTE;
- if (RGBA8) {
- imageFormat.renderBufferStorageFormat = GL_RGBA8;
- } else {
- // Highest precision luminance supported by vanilla OGLES2
- imageFormat.renderBufferStorageFormat = GLES20.GL_RGB565;
- }
- break;
- case Luminance8Alpha8:
- imageFormat.format = GLES20.GL_LUMINANCE_ALPHA;
- imageFormat.dataType = GLES20.GL_UNSIGNED_BYTE;
- if (RGBA8) {
- imageFormat.renderBufferStorageFormat = GL_RGBA8;
- } else {
- imageFormat.renderBufferStorageFormat = GLES20.GL_RGBA4;
- }
- break;
- case RGB565:
- imageFormat.format = GLES20.GL_RGB;
- imageFormat.dataType = GLES20.GL_UNSIGNED_SHORT_5_6_5;
- imageFormat.renderBufferStorageFormat = GLES20.GL_RGB565;
- break;
- case RGB5A1:
- imageFormat.format = GLES20.GL_RGBA;
- imageFormat.dataType = GLES20.GL_UNSIGNED_SHORT_5_5_5_1;
- imageFormat.renderBufferStorageFormat = GLES20.GL_RGB5_A1;
- break;
- case RGB8:
- imageFormat.format = GLES20.GL_RGB;
- imageFormat.dataType = GLES20.GL_UNSIGNED_BYTE;
- if (RGBA8) {
- imageFormat.renderBufferStorageFormat = GL_RGBA8;
- } else {
- // Fallback: Use RGB565 if RGBA8 is not available.
- imageFormat.renderBufferStorageFormat = GLES20.GL_RGB565;
- }
- break;
- case BGR8:
- imageFormat.format = GLES20.GL_RGB;
- imageFormat.dataType = GLES20.GL_UNSIGNED_BYTE;
- if (RGBA8) {
- imageFormat.renderBufferStorageFormat = GL_RGBA8;
- } else {
- imageFormat.renderBufferStorageFormat = GLES20.GL_RGB565;
- }
- break;
- case RGBA8:
- imageFormat.format = GLES20.GL_RGBA;
- imageFormat.dataType = GLES20.GL_UNSIGNED_BYTE;
- if (RGBA8) {
- imageFormat.renderBufferStorageFormat = GL_RGBA8;
- } else {
- imageFormat.renderBufferStorageFormat = GLES20.GL_RGBA4;
- }
- break;
- case Depth:
- case Depth16:
- if (!DEPTH_TEXTURE && !forRenderBuffer) {
- unsupportedFormat(fmt);
- }
- imageFormat.format = GLES20.GL_DEPTH_COMPONENT;
- imageFormat.dataType = GLES20.GL_UNSIGNED_SHORT;
- imageFormat.renderBufferStorageFormat = GLES20.GL_DEPTH_COMPONENT16;
- break;
- case Depth24:
- case Depth24Stencil8:
- if (!DEPTH_TEXTURE) {
- unsupportedFormat(fmt);
- }
- if (DEPTH24_STENCIL8) {
- // NEW: True Depth24 + Stencil8 format.
- imageFormat.format = GL_DEPTH_STENCIL_OES;
- imageFormat.dataType = GL_UNSIGNED_INT_24_8_OES;
- imageFormat.renderBufferStorageFormat = GL_DEPTH24_STENCIL8_OES;
- } else {
- // Vanilla OGLES2, only Depth16 available.
- imageFormat.format = GLES20.GL_DEPTH_COMPONENT;
- imageFormat.dataType = GLES20.GL_UNSIGNED_SHORT;
- imageFormat.renderBufferStorageFormat = GLES20.GL_DEPTH_COMPONENT16;
- }
- break;
- case DXT1:
- if (!DXT1) {
- unsupportedFormat(fmt);
- }
- imageFormat.format = GL_DXT1;
- imageFormat.dataType = GLES20.GL_UNSIGNED_BYTE;
- imageFormat.compress = true;
- break;
- case DXT1A:
- if (!DXT1) {
- unsupportedFormat(fmt);
- }
- imageFormat.format = GL_DXT1A;
- imageFormat.dataType = GLES20.GL_UNSIGNED_BYTE;
- imageFormat.compress = true;
- break;
- default:
- throw new UnsupportedOperationException("Unrecognized format: " + fmt);
- }
- return imageFormat;
- }
-
- public static class AndroidGLImageFormat {
-
- boolean compress = false;
- int format = -1;
- int renderBufferStorageFormat = -1;
- int dataType = -1;
- }
-
- private static void uploadTexture(Image img,
- int target,
- int index) {
-
- if (img.getEfficentData() instanceof AndroidImageInfo) {
- throw new RendererException("This image uses efficient data. "
- + "Use uploadTextureBitmap instead.");
- }
-
- // Otherwise upload image directly.
- // Prefer to only use power of 2 textures here to avoid errors.
- Image.Format fmt = img.getFormat();
- ByteBuffer data;
- if (index >= 0 || img.getData() != null && img.getData().size() > 0) {
- data = img.getData(index);
- } else {
- data = null;
- }
-
- int width = img.getWidth();
- int height = img.getHeight();
-
- if (!NPOT && img.isNPOT()) {
- // Check if texture is POT
- throw new RendererException("Non-power-of-2 textures "
- + "are not supported by the video hardware "
- + "and no scaling path available for image: " + img);
- }
- AndroidGLImageFormat imageFormat = getImageFormat(fmt, false);
-
- if (data != null) {
- GLES20.glPixelStorei(GLES20.GL_UNPACK_ALIGNMENT, 1);
- }
-
- int[] mipSizes = img.getMipMapSizes();
- int pos = 0;
- if (mipSizes == null) {
- if (data != null) {
- mipSizes = new int[]{data.capacity()};
- } else {
- mipSizes = new int[]{width * height * fmt.getBitsPerPixel() / 8};
- }
- }
-
- for (int i = 0; i < mipSizes.length; i++) {
- int mipWidth = Math.max(1, width >> i);
- int mipHeight = Math.max(1, height >> i);
-
- if (data != null) {
- data.position(pos);
- data.limit(pos + mipSizes[i]);
- }
-
- if (imageFormat.compress && data != null) {
- GLES20.glCompressedTexImage2D(target,
- i,
- imageFormat.format,
- mipWidth,
- mipHeight,
- 0,
- data.remaining(),
- data);
- } else {
- GLES20.glTexImage2D(target,
- i,
- imageFormat.format,
- mipWidth,
- mipHeight,
- 0,
- imageFormat.format,
- imageFormat.dataType,
- data);
- }
-
- pos += mipSizes[i];
- }
- }
-
- /**
- * Update the texture currently bound to target at with data from the given
- * Image at position x and y. The parameter index is used as the zoffset in
- * case a 3d texture or texture 2d array is being updated.
- *
- * @param image Image with the source data (this data will be put into the
- * texture)
- * @param target the target texture
- * @param index the mipmap level to update
- * @param x the x position where to put the image in the texture
- * @param y the y position where to put the image in the texture
- */
- public static void uploadSubTexture(
- Image img,
- int target,
- int index,
- int x,
- int y) {
- if (img.getEfficentData() instanceof AndroidImageInfo) {
- AndroidImageInfo imageInfo = (AndroidImageInfo) img.getEfficentData();
- uploadTextureBitmap(target, imageInfo.getBitmap(), true, true, x, y);
- return;
- }
-
- // Otherwise upload image directly.
- // Prefer to only use power of 2 textures here to avoid errors.
- Image.Format fmt = img.getFormat();
- ByteBuffer data;
- if (index >= 0 || img.getData() != null && img.getData().size() > 0) {
- data = img.getData(index);
- } else {
- data = null;
- }
-
- int width = img.getWidth();
- int height = img.getHeight();
-
- if (!NPOT && img.isNPOT()) {
- // Check if texture is POT
- throw new RendererException("Non-power-of-2 textures "
- + "are not supported by the video hardware "
- + "and no scaling path available for image: " + img);
- }
- AndroidGLImageFormat imageFormat = getImageFormat(fmt, false);
-
- if (data != null) {
- GLES20.glPixelStorei(GLES20.GL_UNPACK_ALIGNMENT, 1);
- }
-
- int[] mipSizes = img.getMipMapSizes();
- int pos = 0;
- if (mipSizes == null) {
- if (data != null) {
- mipSizes = new int[]{data.capacity()};
- } else {
- mipSizes = new int[]{width * height * fmt.getBitsPerPixel() / 8};
- }
- }
-
- for (int i = 0; i < mipSizes.length; i++) {
- int mipWidth = Math.max(1, width >> i);
- int mipHeight = Math.max(1, height >> i);
-
- if (data != null) {
- data.position(pos);
- data.limit(pos + mipSizes[i]);
- }
-
- if (imageFormat.compress && data != null) {
- GLES20.glCompressedTexSubImage2D(target, i, x, y, mipWidth, mipHeight, imageFormat.format, data.remaining(), data);
- RendererUtil.checkGLError();
- } else {
- GLES20.glTexSubImage2D(target, i, x, y, mipWidth, mipHeight, imageFormat.format, imageFormat.dataType, data);
- RendererUtil.checkGLError();
- }
-
- pos += mipSizes[i];
- }
- }
-}
diff --git a/jme3-android/src/main/java/com/jme3/texture/plugins/AndroidImageLoader.java b/jme3-android/src/main/java/com/jme3/texture/plugins/AndroidImageLoader.java
deleted file mode 100644
index f3c1464a2..000000000
--- a/jme3-android/src/main/java/com/jme3/texture/plugins/AndroidImageLoader.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.jme3.texture.plugins;
-
-import android.graphics.Bitmap;
-import com.jme3.asset.AndroidImageInfo;
-import com.jme3.asset.AssetInfo;
-import com.jme3.asset.AssetLoader;
-import com.jme3.texture.Image;
-import com.jme3.texture.image.ColorSpace;
-import java.io.IOException;
-
-@Deprecated
-public class AndroidImageLoader implements AssetLoader {
-
- public Object load(AssetInfo info) throws IOException {
- AndroidImageInfo imageInfo = new AndroidImageInfo(info);
- Bitmap bitmap = imageInfo.getBitmap();
-
- Image image = new Image(imageInfo.getFormat(), bitmap.getWidth(), bitmap.getHeight(), null, ColorSpace.sRGB);
-
- image.setEfficentData(imageInfo);
- return image;
- }
-}
diff --git a/jme3-core/src/main/java/com/jme3/animation/BoneAnimation.java b/jme3-core/src/main/java/com/jme3/animation/BoneAnimation.java
deleted file mode 100644
index 735ee05a5..000000000
--- a/jme3-core/src/main/java/com/jme3/animation/BoneAnimation.java
+++ /dev/null
@@ -1,44 +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.animation;
-
-/**
- * @deprecated use Animation instead with tracks of selected type (ie. BoneTrack, SpatialTrack, MeshTrack)
- */
-@Deprecated
-public final class BoneAnimation extends Animation {
-
- @Deprecated
- public BoneAnimation(String name, float length) {
- super(name, length);
- }
-}
diff --git a/jme3-core/src/main/java/com/jme3/animation/SpatialAnimation.java b/jme3-core/src/main/java/com/jme3/animation/SpatialAnimation.java
deleted file mode 100644
index 4a552bba6..000000000
--- a/jme3-core/src/main/java/com/jme3/animation/SpatialAnimation.java
+++ /dev/null
@@ -1,42 +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.animation;
-
-/**
- * @deprecated use Animation instead with tracks of selected type (ie. BoneTrack, SpatialTrack, MeshTrack)
- */
-@Deprecated
-public class SpatialAnimation extends Animation {
- public SpatialAnimation(String name, float length) {
- super(name, length);
- }
-}
diff --git a/jme3-core/src/main/java/com/jme3/effect/ParticleComparator.java b/jme3-core/src/main/java/com/jme3/effect/ParticleComparator.java
deleted file mode 100644
index 78ee034d7..000000000
--- a/jme3-core/src/main/java/com/jme3/effect/ParticleComparator.java
+++ /dev/null
@@ -1,76 +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.effect;
-
-import com.jme3.renderer.Camera;
-import java.util.Comparator;
-
-@Deprecated
-class ParticleComparator implements Comparator {
-
- private Camera cam;
-
- public void setCamera(Camera cam){
- this.cam = cam;
- }
-
- public int compare(Particle p1, Particle p2) {
- return 0; // unused
- /*
- if (p1.life <= 0 || p2.life <= 0)
- return 0;
-
-// if (p1.life <= 0)
-// return 1;
-// else if (p2.life <= 0)
-// return -1;
-
- float d1 = p1.distToCam, d2 = p2.distToCam;
-
- if (d1 == -1){
- d1 = cam.distanceToNearPlane(p1.position);
- p1.distToCam = d1;
- }
- if (d2 == -1){
- d2 = cam.distanceToNearPlane(p2.position);
- p2.distToCam = d2;
- }
-
- if (d1 < d2)
- return 1;
- else if (d1 > d2)
- return -1;
- else
- return 0;
- */
- }
-}
\ No newline at end of file
diff --git a/jme3-desktop/src/main/java/com/jme3/system/Natives.java b/jme3-desktop/src/main/java/com/jme3/system/Natives.java
deleted file mode 100644
index 423fda882..000000000
--- a/jme3-desktop/src/main/java/com/jme3/system/Natives.java
+++ /dev/null
@@ -1,359 +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;
-
-import java.io.*;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLConnection;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * Helper class for extracting the natives (dll, so) from the jars.
- * This class should only be used internally.
- *
- * @deprecated Use {@link NativeLibraryLoader} instead.
- */
-@Deprecated
-public final class Natives {
-
- private static final Logger logger = Logger.getLogger(Natives.class.getName());
- private static final byte[] buf = new byte[1024 * 100];
- private static File extractionDirOverride = null;
- private static File extractionDir = null;
-
- public static void setExtractionDir(String name) {
- extractionDirOverride = new File(name).getAbsoluteFile();
- }
-
- public static File getExtractionDir() {
- if (extractionDirOverride != null) {
- return extractionDirOverride;
- }
- if (extractionDir == null) {
- File workingFolder = new File("").getAbsoluteFile();
- if (!workingFolder.canWrite()) {
- setStorageExtractionDir();
- } else {
- try {
- File file = new File(workingFolder.getAbsolutePath() + File.separator + ".jmetestwrite");
- file.createNewFile();
- file.delete();
- extractionDir = workingFolder;
- } catch (Exception e) {
- setStorageExtractionDir();
- }
- }
- }
- return extractionDir;
- }
-
- private static void setStorageExtractionDir() {
- logger.log(Level.WARNING, "Working directory is not writable. Using home directory instead.");
- extractionDir = new File(JmeSystem.getStorageFolder(),
- "natives_" + Integer.toHexString(computeNativesHash()));
- if (!extractionDir.exists()) {
- extractionDir.mkdir();
- }
- }
-
- private static int computeNativesHash() {
- URLConnection conn = null;
- try {
- String classpath = System.getProperty("java.class.path");
- URL url = Thread.currentThread().getContextClassLoader().getResource("com/jme3/system/Natives.class");
-
- StringBuilder sb = new StringBuilder(url.toString());
- if (sb.indexOf("jar:") == 0) {
- sb.delete(0, 4);
- sb.delete(sb.indexOf("!"), sb.length());
- sb.delete(sb.lastIndexOf("/") + 1, sb.length());
- }
- try {
- url = new URL(sb.toString());
- } catch (MalformedURLException ex) {
- throw new UnsupportedOperationException(ex);
- }
-
- conn = url.openConnection();
- int hash = classpath.hashCode() ^ (int) conn.getLastModified();
- return hash;
- } catch (IOException ex) {
- throw new UnsupportedOperationException(ex);
- } finally {
- if (conn != null) {
- try {
- conn.getInputStream().close();
- conn.getOutputStream().close();
- } catch (IOException ex) { }
- }
- }
- }
-
- public static void extractNativeLib(String sysName, String name) throws IOException {
- extractNativeLib(sysName, name, false, true);
- }
-
- public static void extractNativeLib(String sysName, String name, boolean load) throws IOException {
- extractNativeLib(sysName, name, load, true);
- }
-
- public static void extractNativeLib(String sysName, String name, boolean load, boolean warning) throws IOException {
- String fullname;
- String path;
- //XXX: hack to allow specifying the extension via supplying an extension in the name (e.g. "blah.dylib")
- // this is needed on osx where the openal.dylib always needs to be extracted as dylib
- // and never as jnilib, even if that is the platform JNI lib suffix (OpenAL is no JNI library)
- if(!name.contains(".")){
- // automatic name mapping
- fullname = System.mapLibraryName(name);
- path = "native/" + sysName + "/" + fullname;
- //XXX: Hack to extract jnilib to dylib on OSX Java 1.7+
- // This assumes all jni libs for osx are stored as "jnilib" in the jar file.
- // It will be extracted with the name required for the platform.
- // At a later stage this should probably inverted so that dylib is the default name.
- if(sysName.equals("macosx")){
- path = path.replaceAll("dylib","jnilib");
- }
- } else{
- fullname = name;
- path = "native/" + sysName + "/" + fullname;
- }
-
- URL url = Thread.currentThread().getContextClassLoader().getResource(path);
-
- // Also check for binaries that are not packed in folders by jme team, e.g. maven artifacts
- if(url == null){
- path = fullname;
- if(sysName.equals("macosx") && !name.contains(".")){
- path = path.replaceAll("dylib","jnilib");
- }
- url = Thread.currentThread().getContextClassLoader().getResource(path);
- }
-
- if(url == null){
- if (!warning) {
- logger.log(Level.WARNING, "Cannot locate native library in classpath: {0}/{1}",
- new String[]{sysName, fullname});
- }
- // Still try loading the library without a filename, maybe it is
- // accessible otherwise
- try{
- System.loadLibrary(name);
- } catch(UnsatisfiedLinkError e){
- if (!warning) {
- logger.log(Level.WARNING, "Cannot load native library: {0}/{1}",
- new String[]{sysName, fullname});
- }
- }
- return;
- }
-
- URLConnection conn = url.openConnection();
- InputStream in = conn.getInputStream();
- File targetFile = new File(getExtractionDir(), fullname);
- OutputStream out = null;
- try {
- if (targetFile.exists()) {
- // OK, compare last modified date of this file to
- // file in jar
- long targetLastModified = targetFile.lastModified();
- long sourceLastModified = conn.getLastModified();
-
- // Allow ~1 second range for OSes that only support low precision
- if (targetLastModified + 1000 > sourceLastModified) {
- logger.log(Level.FINE, "Not copying library {0}. Latest already extracted.", fullname);
- return;
- }
- }
-
- out = new FileOutputStream(targetFile);
- int len;
- while ((len = in.read(buf)) > 0) {
- out.write(buf, 0, len);
- }
- in.close();
- in = null;
- out.close();
- out = null;
-
- // NOTE: On OSes that support "Date Created" property,
- // this will cause the last modified date to be lower than
- // date created which makes no sense
- targetFile.setLastModified(conn.getLastModified());
- } catch (FileNotFoundException ex) {
- if (ex.getMessage().contains("used by another process")) {
- return;
- }
-
- throw ex;
- } finally {
- if (load) {
- System.load(targetFile.getAbsolutePath());
- }
- if(in != null){
- in.close();
- }
- if(out != null){
- out.close();
- }
- }
- logger.log(Level.FINE, "Copied {0} to {1}", new Object[]{fullname, targetFile});
- }
-
- protected static boolean isUsingNativeBullet() {
- try {
- Class clazz = Class.forName("com.jme3.bullet.util.NativeMeshUtil");
- return clazz != null;
- } catch (ClassNotFoundException ex) {
- return false;
- }
- }
-
- public static void extractNativeLibs(Platform platform, AppSettings settings) throws IOException {
- if (true) {
- throw new UnsupportedEncodingException("Now, why would you EVER want to do that?");
- }
-
- String renderer = settings.getRenderer();
- String audioRenderer = settings.getAudioRenderer();
- boolean needLWJGL = false;
- boolean needOAL = false;
- boolean needJInput = false;
- boolean needNativeBullet = isUsingNativeBullet();
-
- if (renderer != null) {
- if (renderer.startsWith("LWJGL")) {
- needLWJGL = true;
- }
- }
- if (audioRenderer != null) {
- if (audioRenderer.equals("LWJGL")) {
- needLWJGL = true;
- needOAL = true;
- }
- }
- needJInput = settings.useJoysticks();
-
- String libraryPath = getExtractionDir().toString();
- if (needLWJGL) {
- logger.log(Level.INFO, "Extraction Directory: {0}", getExtractionDir().toString());
-
- // LWJGL supports this feature where
- // it can load libraries from this path.
- System.setProperty("org.lwjgl.librarypath", libraryPath);
- }
- if (needJInput) {
- // AND Luckily enough JInput supports the same feature.
- System.setProperty("net.java.games.input.librarypath", libraryPath);
- }
-
- switch (platform) {
- case Windows64:
- if (needLWJGL) {
- extractNativeLib("windows", "lwjgl64");
- }
- if (needOAL) {
- extractNativeLib("windows", "OpenAL64", true, false);
- }
- if (needJInput) {
- extractNativeLib("windows", "jinput-dx8_64");
- extractNativeLib("windows", "jinput-raw_64");
- }
- if (needNativeBullet) {
- extractNativeLib("windows", "bulletjme64", true, false);
- }
- break;
- case Windows32:
- if (needLWJGL) {
- extractNativeLib("windows", "lwjgl");
- }
- if (needOAL) {
- extractNativeLib("windows", "OpenAL32", true, false);
- }
- if (needJInput) {
- extractNativeLib("windows", "jinput-dx8");
- extractNativeLib("windows", "jinput-raw");
- }
- if (needNativeBullet) {
- extractNativeLib("windows", "bulletjme", true, false);
- }
- break;
- case Linux64:
- if (needLWJGL) {
- extractNativeLib("linux", "lwjgl64");
- }
- if (needJInput) {
- extractNativeLib("linux", "jinput-linux64");
- }
- if (needOAL) {
- extractNativeLib("linux", "openal64");
- }
- if (needNativeBullet) {
- extractNativeLib("linux", "bulletjme64", true, false);
- }
- break;
- case Linux32:
- if (needLWJGL) {
- extractNativeLib("linux", "lwjgl");
- }
- if (needJInput) {
- extractNativeLib("linux", "jinput-linux");
- }
- if (needOAL) {
- extractNativeLib("linux", "openal");
- }
- if (needNativeBullet) {
- extractNativeLib("linux", "bulletjme", true, false);
- }
- break;
- case MacOSX_PPC32:
- case MacOSX32:
- case MacOSX_PPC64:
- case MacOSX64:
- if (needLWJGL) {
- extractNativeLib("macosx", "lwjgl");
- }
- if (needOAL){
- extractNativeLib("macosx", "openal.dylib");
- }
- if (needJInput) {
- extractNativeLib("macosx", "jinput-osx");
- }
- if (needNativeBullet) {
- extractNativeLib("macosx", "bulletjme", true, false);
- }
- break;
- }
- }
-}
diff --git a/jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/lodcalc/LodCalculatorFactory.java b/jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/lodcalc/LodCalculatorFactory.java
deleted file mode 100644
index bfbd24a11..000000000
--- a/jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/lodcalc/LodCalculatorFactory.java
+++ /dev/null
@@ -1,49 +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.terrain.geomipmap.lodcalc;
-
-import com.jme3.export.Savable;
-import com.jme3.terrain.geomipmap.TerrainPatch;
-
-/**
- * Creates LOD Calculator objects for the terrain patches.
- *
- * @author Brent Owens
- * @deprecated phasing this out
- */
-public interface LodCalculatorFactory extends Savable, Cloneable {
-
- public LodCalculator createCalculator();
- public LodCalculator createCalculator(TerrainPatch terrainPatch);
-
- public LodCalculatorFactory clone();
-}
diff --git a/jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/lodcalc/LodDistanceCalculatorFactory.java b/jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/lodcalc/LodDistanceCalculatorFactory.java
deleted file mode 100644
index ab6e0037e..000000000
--- a/jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/lodcalc/LodDistanceCalculatorFactory.java
+++ /dev/null
@@ -1,87 +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.terrain.geomipmap.lodcalc;
-
-import com.jme3.export.InputCapsule;
-import com.jme3.export.JmeExporter;
-import com.jme3.export.JmeImporter;
-import com.jme3.export.OutputCapsule;
-import com.jme3.terrain.geomipmap.TerrainPatch;
-import java.io.IOException;
-
-/**
- *
- * @author bowens
- * @deprecated phasing out
- */
-public class LodDistanceCalculatorFactory implements LodCalculatorFactory {
-
- private float lodThresholdSize = 2.7f;
- private LodThreshold lodThreshold = null;
-
-
- public LodDistanceCalculatorFactory() {
- }
-
- public LodDistanceCalculatorFactory(LodThreshold lodThreshold) {
- this.lodThreshold = lodThreshold;
- }
-
- public LodCalculator createCalculator() {
- return new DistanceLodCalculator();
- }
-
- public LodCalculator createCalculator(TerrainPatch terrainPatch) {
- return new DistanceLodCalculator();
- }
-
- public void write(JmeExporter ex) throws IOException {
- OutputCapsule c = ex.getCapsule(this);
- c.write(lodThreshold, "lodThreshold", null);
- c.write(lodThresholdSize, "lodThresholdSize", 2);
- }
-
- public void read(JmeImporter im) throws IOException {
- InputCapsule c = im.getCapsule(this);
- lodThresholdSize = c.readFloat("lodThresholdSize", 2);
- lodThreshold = (LodThreshold) c.readSavable("lodThreshold", null);
- }
-
- @Override
- public LodDistanceCalculatorFactory clone() {
- LodDistanceCalculatorFactory clone = new LodDistanceCalculatorFactory();
- clone.lodThreshold = lodThreshold.clone();
- clone.lodThresholdSize = lodThresholdSize;
- return clone;
- }
-
-}
diff --git a/jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/lodcalc/LodPerspectiveCalculatorFactory.java b/jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/lodcalc/LodPerspectiveCalculatorFactory.java
deleted file mode 100644
index cb4a7d41e..000000000
--- a/jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/lodcalc/LodPerspectiveCalculatorFactory.java
+++ /dev/null
@@ -1,80 +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.terrain.geomipmap.lodcalc;
-
-import com.jme3.export.JmeExporter;
-import com.jme3.export.JmeImporter;
-import com.jme3.renderer.Camera;
-import com.jme3.terrain.geomipmap.TerrainPatch;
-import java.io.IOException;
-
-/**
- * TODO: Make it work with multiple cameras
- * TODO: Fix the cracks when the lod differences are greater than 1
- * for two adjacent blocks.
- * @deprecated phasing out
- */
-public class LodPerspectiveCalculatorFactory implements LodCalculatorFactory {
-
- private Camera cam;
- private float pixelError;
-
- public LodPerspectiveCalculatorFactory(Camera cam, float pixelError){
- this.cam = cam;
- this.pixelError = pixelError;
- }
-
- public LodCalculator createCalculator() {
- return new PerspectiveLodCalculator(cam, pixelError);
- }
-
- public LodCalculator createCalculator(TerrainPatch terrainPatch) {
- PerspectiveLodCalculator p = new PerspectiveLodCalculator(cam, pixelError);
- return p;
- }
-
- public void write(JmeExporter ex) throws IOException {
- }
-
- public void read(JmeImporter im) throws IOException {
- }
-
- @Override
- public LodCalculatorFactory clone() {
- try {
- return (LodCalculatorFactory) super.clone();
- } catch (CloneNotSupportedException ex) {
- throw new AssertionError();
- }
- }
-
-}
diff --git a/jme3-terrain/src/main/java/com/jme3/terrain/heightmap/ImageBasedHeightMapGrid.java b/jme3-terrain/src/main/java/com/jme3/terrain/heightmap/ImageBasedHeightMapGrid.java
deleted file mode 100644
index f0d841c22..000000000
--- a/jme3-terrain/src/main/java/com/jme3/terrain/heightmap/ImageBasedHeightMapGrid.java
+++ /dev/null
@@ -1,106 +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.terrain.heightmap;
-
-import com.jme3.asset.AssetManager;
-import com.jme3.asset.AssetNotFoundException;
-import com.jme3.asset.TextureKey;
-import com.jme3.math.Vector3f;
-import com.jme3.texture.Texture;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * Loads Terrain grid tiles with image heightmaps.
- * By default it expects a 16-bit grayscale image as the heightmap, but
- * you can also call setImageType(BufferedImage.TYPE_) to set it to be a different
- * image type. If you do this, you must also set a custom ImageHeightmap that will
- * understand and be able to parse the image. By default if you pass in an image of type
- * BufferedImage.TYPE_3BYTE_BGR, it will use the ImageBasedHeightMap for you.
- *
- * @author Anthyon, Brent Owens
- */
-@Deprecated
-/**
- * @Deprecated in favor of ImageTileLoader
- */
-public class ImageBasedHeightMapGrid implements HeightMapGrid {
-
- private static final Logger logger = Logger.getLogger(ImageBasedHeightMapGrid.class.getName());
- private final AssetManager assetManager;
- private final Namer namer;
- private int size;
-
-
- public ImageBasedHeightMapGrid(final String textureBase, final String textureExt, AssetManager assetManager) {
- this(assetManager, new Namer() {
-
- public String getName(int x, int y) {
- return textureBase + "_" + x + "_" + y + "." + textureExt;
- }
- });
- }
-
- public ImageBasedHeightMapGrid(AssetManager assetManager, Namer namer) {
- this.assetManager = assetManager;
- this.namer = namer;
- }
-
- public HeightMap getHeightMapAt(Vector3f location) {
- // HEIGHTMAP image (for the terrain heightmap)
- int x = (int) location.x;
- int z = (int) location.z;
-
- AbstractHeightMap heightmap = null;
- //BufferedImage im = null;
-
- try {
- String name = namer.getName(x, z);
- logger.log(Level.FINE, "Loading heightmap from file: {0}", name);
- final Texture texture = assetManager.loadTexture(new TextureKey(name));
-
- // CREATE HEIGHTMAP
- heightmap = new ImageBasedHeightMap(texture.getImage());
-
- heightmap.setHeightScale(1);
- heightmap.load();
-
- } catch (AssetNotFoundException e) {
- logger.log(Level.SEVERE, "Asset Not found! ", e);
- }
- return heightmap;
- }
-
- public void setSize(int size) {
- this.size = size - 1;
- }
-}
diff --git a/jme3-terrain/src/main/java/com/jme3/terrain/heightmap/ImageHeightmap.java b/jme3-terrain/src/main/java/com/jme3/terrain/heightmap/ImageHeightmap.java
deleted file mode 100644
index a61000e84..000000000
--- a/jme3-terrain/src/main/java/com/jme3/terrain/heightmap/ImageHeightmap.java
+++ /dev/null
@@ -1,55 +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.terrain.heightmap;
-
-/**
- * A heightmap that is built off an image.
- * If you want to be able to supply different Image types to
- * ImageBaseHeightMapGrid, you need to implement this interface,
- * and have that class extend Abstract heightmap.
- *
- * @author bowens
- * @deprecated
- */
-public interface ImageHeightmap {
-
- /**
- * Set the image to use for this heightmap
- */
- //public void setImage(Image image);
-
- /**
- * The BufferedImage.TYPE_ that is supported
- * by this ImageHeightmap
- */
- //public int getSupportedImageType();
-}