- add ImageToAwt fallback (using reflection, no AWT dependency) to TextureAtlas conversion
git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@9062 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
This commit is contained in:
parent
8a08f8d505
commit
3b91333636
@ -46,6 +46,7 @@ import com.jme3.texture.Image.Format;
|
||||
import com.jme3.texture.Texture;
|
||||
import com.jme3.texture.Texture2D;
|
||||
import com.jme3.util.BufferUtils;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.FloatBuffer;
|
||||
import java.util.ArrayList;
|
||||
@ -274,6 +275,7 @@ public class TextureAtlas {
|
||||
ByteBuffer sourceData = source.getData(0);
|
||||
int height = source.getHeight();
|
||||
int width = source.getWidth();
|
||||
Image newImage = null;
|
||||
for (int yPos = 0; yPos < height; yPos++) {
|
||||
for (int xPos = 0; xPos < width; xPos++) {
|
||||
int i = ((xPos + x) + (yPos + y) * atlasWidth) * 4;
|
||||
@ -307,19 +309,56 @@ public class TextureAtlas {
|
||||
image[i + 1] = sourceData.get(j); //b
|
||||
image[i + 2] = sourceData.get(j); //g
|
||||
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;
|
||||
image[i] = sourceData.get(j + 1); //a
|
||||
image[i + 1] = sourceData.get(j); //b
|
||||
image[i + 2] = sourceData.get(j); //g
|
||||
image[i + 3] = sourceData.get(j); //r
|
||||
} 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
|
||||
* @param texture The texture to retrieve the <code>TextureAtlasTile</code> for.
|
||||
|
Loading…
x
Reference in New Issue
Block a user