@ -43,7 +43,9 @@ import java.util.logging.Logger;
import com.jme3.asset.TextureKey ;
import com.jme3.material.Material ;
import com.jme3.material.RenderState ;
import com.jme3.math.ColorRGBA ;
import com.jme3.math.Matrix4f ;
import com.jme3.renderer.Caps ;
import com.jme3.renderer.RenderManager ;
import com.jme3.renderer.Renderer ;
import com.jme3.scene.Geometry ;
@ -52,6 +54,7 @@ import com.jme3.scene.VertexBuffer;
import com.jme3.scene.VertexBuffer.Type ;
import com.jme3.scene.VertexBuffer.Usage ;
import com.jme3.texture.Image.Format ;
import com.jme3.texture.image.ImageRaster ;
import com.jme3.texture.Texture.MagFilter ;
import com.jme3.texture.Texture.MinFilter ;
import com.jme3.texture.Texture2D ;
@ -214,6 +217,31 @@ public class JmeBatchRenderBackend implements BatchRenderBackend {
key . setGenerateMips ( false ) ;
Texture2D texture = ( Texture2D ) display . getAssetManager ( ) . loadTexture ( key ) ;
// Fix GLES format incompatibility issue with glTexSubImage
Renderer renderer = display . getRenderer ( ) ;
if ( renderer = = null | | renderer . getCaps ( ) . contains ( Caps . OpenGLES20 ) ) {
if ( texture . getImage ( ) . getFormat ( ) ! = Format . RGBA8 ) {
com . jme3 . texture . Image sourceImage = texture . getImage ( ) ;
int size = sourceImage . getWidth ( ) * sourceImage . getHeight ( ) * 4 ;
ByteBuffer buffer = BufferUtils . createByteBuffer ( size ) ;
com . jme3 . texture . Image rgba8Image = new com . jme3 . texture . Image ( Format . RGBA8 ,
sourceImage . getWidth ( ) ,
sourceImage . getHeight ( ) ,
buffer ,
sourceImage . getColorSpace ( ) ) ;
ImageRaster input = ImageRaster . create ( sourceImage , 0 , 0 , false ) ;
ImageRaster output = ImageRaster . create ( rgba8Image , 0 , 0 , false ) ;
ColorRGBA color = new ColorRGBA ( ) ;
for ( int y = 0 ; y < sourceImage . getHeight ( ) ; y + + ) {
for ( int x = 0 ; x < sourceImage . getWidth ( ) ; x + + ) {
output . setPixel ( x , y , input . getPixel ( x , y , color ) ) ;
}
}
return new ImageImpl ( rgba8Image ) ;
}
}
return new ImageImpl ( texture . getImage ( ) ) ;
}