[Scummvm-devel] copyRectToScreen clipping
Joost Peters
joostp at 7fc1.org
Sun Nov 6 17:13:08 CET 2005
Hi Max,
> Personally, I'd tend to augment the OSystem API specs to explicitly
> state that clipping has to be performed. This way incorrect usage won't
> lead to crashes, ever, even in new engines, or if copyRectToScreen
> usage is changed in an existing engine. I prefer this defensive style
> of coding (and the performance penalty should be close to zero,
> compared to the time the blitting itself takes, shouldn't it?).
Sure, I agree, they should always be checked by the backend.
The point up for debate is *how*; i.e whether the backend should
gracefully handle such violations by silently adjusting the parameters
(as it does now), or should error out with a failed assertion, helping
expose such 'bugs' in the engines.
Personally I'm in favour of the last option, simply because of the added
'free' debugging/testing functionality.
Anyone else have an opinion on this? :)
> At the same time, though, I'd still be interested in tracking down why
> FT uses a negative height in copyRectToScreen. Out of curiosity, can
> you tell me which copyRectToScreen invocation is the one leading to the
> crash?
It's the bottom call in ScummEngine::drawStripToScreen (a more complete
backtrace attached below[1]).
Quickly looking at the code tells me it does atleast some checking, but
obviously not enough.
To reproduce: use bootparam 360, pick the lock, touch the ladder and
hide in the shadow. The resulting cutscene will make these calls after
the first line of dialogue ("Remain where you--").
Regards,
Joost
[1]:
#6 0x0804d608 in OSystem_SDL::copyRectToScreen (this=0x8414f10,
src=0x8455e00 '\024' <repeats 21 times>, ",,,c=`\031", '\024'
<repeats 20 times>, "\032\032\032\032\032\032*", '\032' <repeats 13
times>, "\036", '\032' <repeats 28 times>, "\031o", '\030' <repeats 16
times>, "mm", '\032' <repeats 36 times>, '\030' <repeats 19 times>,
'\024' <repeats 28 times>..., pitch=320, x=40, y=246, w=8, h=-46)
at backends/sdl/graphics.cpp:801
#7 0x080d4c9a in Scumm::ScummEngine::drawStripToScreen (this=0x842a618,
vs=0x84362fc, x=40, width=8, top=246,
bottom=276) at scumm/gfx.cpp:589
#8 0x080d4d50 in Scumm::ScummEngine::updateDirtyScreen (this=0x842a618,
slot=Scumm::kMainVirtScreen)
at scumm/gfx.cpp:497
#9 0x080d6324 in Scumm::ScummEngine::drawDirtyScreenParts
(this=0x842a618) at scumm/gfx.cpp:434
#10 0x080d78db in Scumm::ScummEngine_v6::drawDirtyScreenParts
(this=0x842a618) at scumm/gfx.cpp:463
#11 0x0805c764 in Scumm::ScummEngine::scummLoop (this=0x842a618,
delta=6) at scumm/scumm.cpp:2503
#12 0x0805ca03 in Scumm::ScummEngine::go (this=0x842a618) at
scumm/scumm.cpp:2205
More information about the Scummvm-devel
mailing list