When trying to load an 8bpp RGBA png image, I get the following error:
I get the following error:
Exception in thread "main" java.lang.IllegalArgumentException: Number of remaining buffer elements is 24576, must be at least 98304
at org.lwjgl.BufferChecks.throwBufferSizeException(BufferChecks.java:125)
at org.lwjgl.BufferChecks.checkBufferSize(BufferChecks.java:140)
at org.lwjgl.NondirectBufferWrapper.wrapBuffer(NondirectBufferWrapper.java:101)
at org.lwjgl.opengl.GL11.glTexImage2D(GL11.java:2926)
at NewGame.Texture.loadTexture(Texture.java:116)
[...]
private void loadTexture(String sPath){
System.out.println(this.getClass().getResource(sPath));
BufferedImage oBufferedImage = null;
try{
System.out.println("Loading image: \"" + sPath + "\"");
oBufferedImage = ImageIO.read(this.getClass().getResource(sPath));
} catch(IOException e){
System.err.println("Oh noes :x");
e.printStackTrace();
}
int bytesPerPixel = oBufferedImage.getColorModel().getPixelSize() / 8;
DataBufferByte oDataBufferByte = ((DataBufferByte) oBufferedImage.getRaster().getDataBuffer());
ByteBuffer oPixelsBuffer = ByteBuffer.allocateDirect(oBufferedImage.getWidth() * oBufferedImage.getHeight() * bytesPerPixel).order(ByteOrder.nativeOrder());
oPixelsBuffer.put(oDataBufferByte.getData());
oPixelsBuffer.rewind();
IntBuffer buf = ByteBuffer.allocateDirect(4).order(ByteOrder.nativeOrder()).asIntBuffer();
GL11.glGenTextures(buf); // Create Texture In OpenGL
GL11.glBindTexture(GL11.GL_TEXTURE_2D, buf.get(0));
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR);
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR);
if(oBufferedImage.getColorModel().getPixelSize() == 32){
System.out.println("32");
GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL11.GL_RGBA, oBufferedImage.getWidth(), oBufferedImage.getHeight(), 0, GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, oPixelsBuffer);
}else{
System.out.println(oBufferedImage.getColorModel().getPixelSize());
// THIS IS THE LINE WITH THE ERROR
GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL11.GL_RGBA, oBufferedImage.getWidth(), oBufferedImage.getHeight(), 0, GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, oPixelsBuffer);
}
_iId = buf.get(0);
_iWidth = oBufferedImage.getWidth();
_iHeight = oBufferedImage.getHeight();
}
Works fine with 32bpp RGBA png images.
I'm guessing it's because I'm using GL11.GL_RGBA for it, I tried using GL11.GL_RGBA2, but got a "wrong enum" error, or something like that.
Any help?