Page 1 of 1

symbian 3.6 release and vertical tearing

PostPosted: May 22, 2006 @ 6:34am
by ten foot ninja

PostPosted: May 23, 2006 @ 11:11am
by Johan
Hi!

I'm glad you like the new release. :-) Yes, updating the display after a Flip is now asynchronous, simply for maximum compliance to deal with incoming phone calls etc. GapiDraw should now behave better than ever together with other applications on Series 60 phones! The drawback is that as you said that flipping might not be as "instant" as it was before.

Regarding tearing, we use Symbian's own routines for the final blit to the display, and try to prevent tearing as much as possible. However on some devices this tearing might be more visible than others, unfortunately it's not something we can change easily.

//Johan

PostPosted: May 23, 2006 @ 7:01pm
by ten foot ninja
I can certainly see the benefit of having an async render process with the phone. But it changes things for me because with 3.5 when my game starts up, i load a splash screen, flip it and right away load all my images and game stuff which takes a few seconds (depending on the device).

Now, the same code doesn't work well, my splash screen pops up when i'm almost done loading everything and is ineffective. How can i know when the back buffer has been flipped? How can i know when to actually start loading game stuff? if its in the active scheduler, i can call Start() but will need something within the callback (which i have no access to) that calls Stop().

any ideas? thanks again!

PostPosted: May 23, 2006 @ 8:25pm
by Johan
Can you try calling a Sleep() right after the Flip? Like modify GapiApplication and set a member bool to "true" to wait a bit after Flip?

PostPosted: May 23, 2006 @ 9:23pm
by ten foot ninja
good idea, but it doesn't seem to work for some reason. Sleep calls User::after() which suspends the entire thread. I'm assuming the actual flipping is done outside of the CGapiApplication thread...

strange, if i take my image loading code out, the load screen gets displayed quickly, like my thread ties up the entire system or flipping happens from within the same thread.

i have another loading screen that happens before each level (loads specific tiles/bosses (which are big, as they should be). Same thing happens then too.

PostPosted: Jul 14, 2006 @ 9:06pm
by ten foot ninja
realizing thats its better to have the better OS cooperation that comes with 3.6 rather then the non-syncronous straight-forwardness of 3.5, i spent time sorting this problem out, heres what happens:

for some reason my game thread won't get pre-empted by the window server (that gapidraw uses to copy the backbuffer to the display buffer). i tried sleeping the thread as mentioned above to no avail

instead, what i've done is just get my thread to do nothing for half a second and that seems to make the back buffer flip into the display a lot faster