|
@@ -46,6 +46,7 @@ import com.jme3.texture.Image.Format;
|
|
import com.jme3.texture.Texture;
|
|
import com.jme3.texture.Texture;
|
|
import com.jme3.texture.Texture2D;
|
|
import com.jme3.texture.Texture2D;
|
|
import com.jme3.util.BufferUtils;
|
|
import com.jme3.util.BufferUtils;
|
|
|
|
+import java.lang.reflect.InvocationTargetException;
|
|
import java.nio.ByteBuffer;
|
|
import java.nio.ByteBuffer;
|
|
import java.nio.FloatBuffer;
|
|
import java.nio.FloatBuffer;
|
|
import java.util.ArrayList;
|
|
import java.util.ArrayList;
|
|
@@ -274,6 +275,7 @@ public class TextureAtlas {
|
|
ByteBuffer sourceData = source.getData(0);
|
|
ByteBuffer sourceData = source.getData(0);
|
|
int height = source.getHeight();
|
|
int height = source.getHeight();
|
|
int width = source.getWidth();
|
|
int width = source.getWidth();
|
|
|
|
+ Image newImage = null;
|
|
for (int yPos = 0; yPos < height; yPos++) {
|
|
for (int yPos = 0; yPos < height; yPos++) {
|
|
for (int xPos = 0; xPos < width; xPos++) {
|
|
for (int xPos = 0; xPos < width; xPos++) {
|
|
int i = ((xPos + x) + (yPos + y) * atlasWidth) * 4;
|
|
int i = ((xPos + x) + (yPos + y) * atlasWidth) * 4;
|
|
@@ -307,19 +309,56 @@ public class TextureAtlas {
|
|
image[i + 1] = sourceData.get(j); //b
|
|
image[i + 1] = sourceData.get(j); //b
|
|
image[i + 2] = sourceData.get(j); //g
|
|
image[i + 2] = sourceData.get(j); //g
|
|
image[i + 3] = sourceData.get(j); //r
|
|
image[i + 3] = sourceData.get(j); //r
|
|
- } else if (source.getFormat() == Format.Luminance8Alpha8) {
|
|
|
|
|
|
+ } else if (source.getFormat() == Format.Luminance8Alpha8) {
|
|
int j = (xPos + yPos * width) * 2;
|
|
int j = (xPos + yPos * width) * 2;
|
|
image[i] = sourceData.get(j + 1); //a
|
|
image[i] = sourceData.get(j + 1); //a
|
|
image[i + 1] = sourceData.get(j); //b
|
|
image[i + 1] = sourceData.get(j); //b
|
|
image[i + 2] = sourceData.get(j); //g
|
|
image[i + 2] = sourceData.get(j); //g
|
|
image[i + 3] = sourceData.get(j); //r
|
|
image[i + 3] = sourceData.get(j); //r
|
|
} else {
|
|
} else {
|
|
- throw new UnsupportedOperationException("Cannot draw textures with format " + source.getFormat());
|
|
|
|
|
|
+ //ImageToAwt conversion
|
|
|
|
+ if (newImage == null) {
|
|
|
|
+ newImage = convertImageToAwt(source);
|
|
|
|
+ if (newImage != null) {
|
|
|
|
+ source = newImage;
|
|
|
|
+ sourceData = source.getData(0);
|
|
|
|
+ int j = (xPos + yPos * width) * 4;
|
|
|
|
+ image[i] = sourceData.get(j); //a
|
|
|
|
+ image[i + 1] = sourceData.get(j + 1); //b
|
|
|
|
+ image[i + 2] = sourceData.get(j + 2); //g
|
|
|
|
+ image[i + 3] = sourceData.get(j + 3); //r
|
|
|
|
+ }else{
|
|
|
|
+ throw new UnsupportedOperationException("Cannot draw or convert textures with format " + source.getFormat());
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ throw new UnsupportedOperationException("Cannot draw textures with format " + source.getFormat());
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ private Image convertImageToAwt(Image source) {
|
|
|
|
+ //use awt dependent classes without actual dependency via reflection
|
|
|
|
+ try {
|
|
|
|
+ Class clazz = Class.forName("jme3tools.converters.ImageToAwt");
|
|
|
|
+ if (clazz == null) {
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
|
|
+ Image newImage = new Image(format, source.getWidth(), source.getHeight(), BufferUtils.createByteBuffer(source.getWidth() * source.getHeight() * 4));
|
|
|
|
+ clazz.getMethod("convert", Image.class, Image.class).invoke(clazz.newInstance(), source, newImage);
|
|
|
|
+ return newImage;
|
|
|
|
+ } catch (InstantiationException ex) {
|
|
|
|
+ } catch (IllegalAccessException ex) {
|
|
|
|
+ } catch (IllegalArgumentException ex) {
|
|
|
|
+ } catch (InvocationTargetException ex) {
|
|
|
|
+ } catch (NoSuchMethodException ex) {
|
|
|
|
+ } catch (SecurityException ex) {
|
|
|
|
+ } catch (ClassNotFoundException ex) {
|
|
|
|
+ }
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* Get the <code>TextureAtlasTile</code> for the given Texture
|
|
* Get the <code>TextureAtlasTile</code> for the given Texture
|
|
* @param texture The texture to retrieve the <code>TextureAtlasTile</code> for.
|
|
* @param texture The texture to retrieve the <code>TextureAtlasTile</code> for.
|