Hi all,
I have been trying some hours now and searching the forums, but I can’t get my own custom Mouse Cursor Animation working in LWJGL.
Please take a look.
Here is my Code:
private static Cursor getCursor() throws IOException, LWJGLException{
int cursorWidth = 32;
int cursorHeight = 32;
int numImages= 16;
// note that image needs to be flipped, because OpenGL and image formats disagree about the coordinate system
BufferedImage img = ImageIO.read(new File("data/img/input/mouseCursor.png"));
int[] rgbs = new int[cursorWidth*cursorHeight];
IntBuffer imageBuffer = IntBuffer.allocate(img.getWidth()*img.getHeight()/16*numImages);
IntBuffer delays = IntBuffer.allocate(cursorAmount);
for( int y = 0; y < img.getHeight()/cursorHeight; y++){
for (int x = 0; x < img.getWidth()/cursorWidth; x++){
if( y*(img.getWidth()/cursorWidth)+x < numImages){
imageBuffer.put(img.getRGB(x*cursorWidth, y*cursorHeight, cursorWidth, cursorHeight, rgbs, 0, cursorWidth));
delays.put(100);
}
}
}
imageBuffer.rewind();
delays.rewind();
System.out.println(cursorWidth*cursorHeight*numImages+" "+imageBuffer.remaining());
return new Cursor(cursorWidth,cursorHeight,0,cursorWidth-1,numImages,imageBuffer,delays);//,delays);
}
When I run it, it gives me the following Error:
java.lang.IllegalArgumentException: widthheightnumImages > images.remaining()
It is an error, that is thrown by the Cursor Constructor:
public Cursor(int width, int height, int xHotspot, int yHotspot, int numImages, IntBuffer images, IntBuffer delays) throws LWJGLException {
synchronized (OpenGLPackageAccess.global_lock) {
if ((getCapabilities() & CURSOR_ONE_BIT_TRANSPARENCY) == 0)
throw new LWJGLException("Native cursors not supported");
images = NondirectBufferWrapper.wrapBuffer(images, width*height*numImages);
if (delays != null)
delays = NondirectBufferWrapper.wrapBuffer(delays, numImages);
if (!Mouse.isCreated())
throw new IllegalStateException("Mouse must be created before creating cursor objects");
if (width*height*numImages > images.remaining())
throw new IllegalArgumentException("width*height*numImages > images.remaining()");
if (xHotspot >= width || xHotspot < 0)
throw new IllegalArgumentException("xHotspot > width || xHotspot < 0");
if (yHotspot >= height || yHotspot < 0)
throw new IllegalArgumentException("yHotspot > height || yHotspot < 0");
Sys.initialize();
// Hmm
yHotspot = height - 1 - yHotspot;
// create cursor (or cursors if multiple images supplied)
cursors = createCursors(width, height, xHotspot, yHotspot, numImages, images, delays);
}
}
But note, that my console output says for widthheightnumImages 16384 and for images.remaining() it says also 16384, so why does it trigger the error?
When I use only one Cursor and set delays to null, it is working by the way. The problem only occurs with more then 1 cursor images…
Thank you!