Hi,
As of memory requirements for texture loading, few revisions ago I added to DirectBufferedImage a method that can take existing byte[] of image data and construct an image basing on it.
Also to minimize memory usage you have to implement your own image loading mechanism instead of loading image in BufferedImage and after copying it into DirectBufferedImage like TextureLoader does:
BufferedImage bi;
InputStream imgData;
ImageInputStream stream = ImageIO.createImageInputStream(imgData);
Iterator iter = ImageIO.getImageReaders(stream);
if (iter.hasNext())
{
ImageReader reader = (ImageReader)iter.next();
ImageReadParam param = reader.getDefaultReadParam();
reader.setInput(stream, true, true);
int iw = reader.getWidth(0);
int ih = reader.getHeight(0);
BufferedImage dst = DirectBufferedImage.getDirectImageRGBA(iw, ih);
param.setDestination(dst);
bi = reader.read(0, param);
stream.close();
reader.dispose();
}
else
stream.close();
This code is supposed to save for you up to twice memory during image loading procedure.
Also I am thinking about adding lazy texture loading to the core and renderer, so textures will reside only in video memory rather than in both video and system memory. This sometimes may reduce performance, but in other cases will reduce runtime memory usage.
Yuri