rectangle rodeo
Long ago I wrote a SDL driver for AROS hosted. Back then I wrote about it being slow because of deficiencies in the driver interface that require flushing the output to the screen for every pixel plotted by software fallbacks. Go and read that first.
I never did finish my implementation originally, but in the last week I’ve resurrected the branch and completed it. Its taken adding an UpdateRect
method to the bitmap class and then modifying graphics.library
to call it after ever operation. If its running a tight loop to paint a rectangle or something, it will call this once when its finished to push its output.
To test, I removed all the “accelerated” methods in the SDL bitmap class, leaving only GetPixel
and PutPixel
. Back when I first writing sdl.hidd
this was all I had implemented, and it worked fine, but was slow enough that you could watch the individual pixels appear on the screen. With the UpdateRect
stuff its now very usable. Its not blinding fast, but its snappy enough to be comfortable.
And the best thing is that no changes are required to existing graphics drivers. For those, the call to UpdateRect
will just use the baseclass version, which is a no-op. I’ve confirmed this is actually the case with the X11 driver, so yay.
I’m not sure what’s next for my hacking. I’m really just studying graphics.library
and graphics.hidd
at the moment, trying to get my head around how it all fits together. Something big is coming, I’m just not sure what it looks like yet :)