![Smile :)](./images/smilies/icon_e_smile.gif)
1. The ability to drop frames. This is required for vf3. Currently in the level transition loading phases we are drawing crazy amounts of garbage. There are some hacks in the renderer to actually stop it blowing up during these stages, without it would probably crash. A few games will crash in rare circumstances if you under clock the CPU and the renderer will try to render incomplete frames. Other games during boot are trying to draw stuff they shouldn't, I think virtua-on is doing this.
- To make this work we I rewrote the renderer to make the 3d graphics independent from the 2d, before the image was composited, which made independent drawing basically impossible.
What's left?
- Just need to plug in the correct logic to make this work. Frames seem to be terminated when a 0xC write is written to the tilegen. For the 3d to kick off 0x88 has to have been written to the 3d hardware. Some games will call this a few times per frame. I *think* it kind of just marks the transfer as complete. Some games will write extra data after 0x88 has been called. Not sure if this is after the ping_pong bit, or if these writes are double buffered at all. I am not 100% sure.
2. Move the start of the frame back to when v-blank is fired. The h/w will start writing data for a new frame something like 2/3rds of the way through the current frame, for a sort of triple buffered approach. To fix data straddling to frames I shifted the end of the frame to be where this ping_pong bit flips, but this is a bit of a kludge.
- To make this work we need to figure out exactly how the double buffered memory writes happen.
3. Some games ie scud and possibly lost world will update the tilegen mid frame, which is perfectly legal to do. Scud has an animated car which currently is completely missing from emulation. Quite often updates happen after the ping_pong bit flips, but in theory the games could write anywhere in the frame.
- To fix this we should draw line by line when the tilegen hardware will be updating the image. The 3d and the 2d hardware can not be drawing at the same time with opengl, to make this work we'd have to buffer all the writes for the tilegen. All the efficiency of the GPU tilegen shader implementation basically goes out the window as soon as you try and draw line by line or having to buffer memory writes.
- I've actually nearly finished this. I ported the GLSL shader code basically back to software, which was a port of Bart's original tilegen code. Just need to clean it up a bit really.
4. Code cleanup. The project originally was I assume? mostly done in visual studio. Bart later Bart changed the project to use 2 spaces for tabs instead of 4. For us visual studio peasants this is really painful lol. I'd personally like to convert it back to 4 spaces for tabs ...
I'm sure there are plenty of other bits in the code to clean up.
5. What's missing?