Well, the drawing is taking up 95% of the CPU at the moment, so would that still be the case? Also, I rigged an equivalent boolean grid to hold which values need to be re-rendered, and that slows down the initial frames from 15 to 8, but once all the pixels have fallen to the bottom, I get the full 60 fps I have set as a limit at the moment.
Okay, I tried making a buffered image and using setRGB to set the pixels, but it appears slick can't render a buffered image. I tried casting to an image, but it can't be cast to a slick image, and slick can't draw awt.image data =/
EDIT: Found a BufferedImageUtil in the javadocs for slick, but it returns a texture and I'm not sure how to render that. Also, even before rendering it, just setting the texture data is slower than drawing all those rectangles and setting the ints.
EDIT2: I got it working at an okay speed for now by rendering 4x4 rectangles instead of 1x1. Here's the current source code now: http://epitaph64.pastebin.com/f40f56562