Oh carp...
After playing around with Visual Studio's profiling (also
available for the command line even if you don't have the Team Developer edition) I've found that the game spent most of it's time in SDL_UpdateRects when watching a demo and holding down cursor-right.
After looking at the code that calls it (i.e. CBitmapManager::UpdateRects) I've found that the game runs at it's "
normal"
speed and without any blinking/lag if I just make the game repaint the whole screen instead of only the changed areas, i.e. replace the
if (this->rects.size() > 50)
with
if (1)
I guess I'll have to look into compiling SDL to gather further insights.
(Also, I need sleep. Now. Desparately.
)
EDIT: Okay, since setting "
Windib=1"
in DROD.ini speeds things up a lot I'm pretty sure something fishy is going on in SDL's DirectX video driver here...
EDIT²: Well, since instrumenting a self-compiled SDL.dll shows that the most time spent fast-forwarding a demo is spent in DDRAW.dll I'm quite convinced this (performance of lots of small blits vs. one big one) isn't something that can be improved much - how about adding an option similar to "
Windib=1"
in DROD.ini to always do a fullscreen blit? (I'll cook up a patch if this would get included in regular DROD...)
EDIT³: Using BIEW to patch the original 3.2.1.86 DROD.exe to make it always blit the whole screen does indeed make the game run as fast as I was used to in Windows XP.
np: Das Bierbeben - Dunkle Tage (Das Bierbeben)
____________________________
"
I'm not anti-anything, I'm anti-everything, it fits better."
- Sole
R.I.P. Robert Feldhoff (1962-2009)
[Last edited by Briareos at 08-30-2009 01:55 PM]