From: Maarten t. H. <mt...@st...> - 2002-04-28 19:38:29
|
Hi, Most sprite problems are fixed now. Space Manbow, Vampire Killer and Psycho World all display correctly now. I fixed a lot of issues with the VDP subcomponent timings, so I'm not sure exactly which changes made the difference. My guess is these were the two most important problems: - VDP::frameStart first updated the internal VDP per-frame state (PAL/NTSC, vertical adjust) before calling frameStart on Renderer and SpriteChecker. This is wrong: Renderer and SpriteChecker have to update to the end-of-frame time and should do so with the state of the old frame, not the new one. - SpriteChecker::sync would read from VRAM, which would update the command engine, which would write VRAM, which would call SpriteChecker::sync. This could also occur through a longer chain involving the Renderer as well. But the sync method is not re-entrant. Solved by creating checkUntil (SpriteChecker) and renderUntil (Renderer), which update using the current VRAM state and only synchronise with VRAM in sync(). Remaining problems: - SCREEN7/8 sprites are broken at the moment, because reorder is not applied. - I saw some remaining glitches in the starfield of UR. - "Rendered into next frame's time" messages still appear. - SDLGL is not up-to-date. - It's a bit slow. Did I forget something? I left some asserts in the code, if you manage to trigger any of them, please inform me. Bye, Maarten |