[Scummvm-devel] Minimal screen updates and possible OSystem improvements

Vladimir Menshakov whoozle at yandex.ru
Tue Nov 10 14:54:56 CET 2009



10.11.09, 14:27, "Max Horn" <max at quendi.de>:

> Hi Vladimir!
> Am 10.11.2009 um 13:14 schrieb Vladimir Menshakov:
> > Good day, everyone!
> >
> > I hope you could tell me about "minimal updates" approach in  
> > scummvm's OSystem. I found several possible oversights in API:
> > 1. copyRectToScreen() does not support colorkey or alpha blits.
> This is not an oversight, this is intentional -- OSystem does not  
> support colorkey nor alpha blits for the screen surface, and there are  
> no plans currently to change that.
> > 2. lock-unlockScreen() invalidates whole screen (for obvious reasons).
> >
> > Something easily could be done here:
> > 1. We could implement various copyRectToScreen variations (colorkey,  
> > alpha, colorkey + alpha). Or, at least, colorkey, I'm pretty sure it  
> > could be accelerated in the most embedded backends.
> OK, but to what end? Which frontend code would benefit from that??
I've heard about psp problems with fullscreen-every-frame-updates. Anyway, such simple optimization could save cpu cycles. 

> > 2. Add lockRect()/unlockRect functions, returning pixel data  
> > pointer, and pitch info (usually screen scanline width) which  
> > invalidates only requested rectangle.
> Same as above: Which application do you have in mind? At first glance,  
> these would only be helpful if some code needs to read a rect from the  
> current screen, modify it, and write it back. Otherwise, one can  
> simply use copyRectToScreen().
How could dirty rectangles updates(with colorkey or alpha) could be implemented on top of copyRectToScreen? 
1. Create temporary surface or use back-buffer
2. Blit background into it
3. Modify its pixel data (no colorkeying support, manual blitting)
4. CopyRectToScreen(it)
5. Repeat for each dirty rectangle, then updateScreen();

I thought about different scenario without any extra allocations:
1. Render dirty rectangle background with CopyRectToScreen() 
2. LockRect it
3. Modify data (colorkey blit)
4. Unlock it.
5. Repeat for each dirty rectangle and then updateScreen()
> Bye,
> Max
> ------------------------------------------------------------------------------
> Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
> trial. Simplify your report design, integration and deployment - and focus on 
> what you do best, core application coding. Discover what's new with
> Crystal Reports now.  http://p.sf.net/sfu/bobj-july
> _______________________________________________
> Scummvm-devel mailing list
> Scummvm-devel at lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/scummvm-devel




More information about the Scummvm-devel mailing list