animated custom mouse cursor in LWJGL

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!