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
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.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 :)