It *sounds* like your not giving it enough time to draw everything before you flip the surfaces, however looking at your code, it looks like you wait for everything to finish, so I'm not sure. I guesse it would depend on what you have inside of the DrawAll function... Good luck!
DDRAW: prim/back-flip shaking! I need smooth scrolling.
ddrval = lpDDSPrimary->Flip(NULL,0)
try using
ddrval = lpDDSPrimary->Flip(NULL,DDFLIP_WAIT)
but your surface must specify these flags:
DDSCAPS_FLIP and DDSCAPS_FRONTBUFFER
I'm sure you have the both flagged because you are using the Primary surface in your code, and the flip function seems to be working currently.
directdrawobject->WaitForVerticalBlank(DDWAITVB_BLOCKEND, 0);
I tried all your suggestions with no luck. Wasn't sure thought where that directdrawobject->WaitForVerticalBlank(DDWAITVB_BLOCKEND, 0); should be placed so I tried putting it everywhere.. Still didn't look any better.
Yes you fiqured my problem right: it seems like I have *four* 25% transparent pictures on my screen. One is the current frame and the other three are the last three frames.
Yes they are so noticeable I could count how many there were.
And the problem is not in drawAll() because it just draws it all...
Someone here must have succeeded in making a smooth scroller! Please tell me what should I do.
---------
ddsd.dwSize = sizeof(ddsd);
do {
result = lpDDSBack->Lock(NULL, &ddsd, DDLOCK_SURFACEMEMORYPTR | DDLOCK_WAIT, NULL);
} while (result == DDERR_SURFACEBUSY | | result == DDERR_WASSTILLDRAWING);
if (result != DD_OK) return;
drawAll((short*)(ddsd.lpSurface),ddsd.lPitch);
lpDDSBack->Unlock(NULL);
// Flip the surfaces (this is from ddex3)
while( 1 )
{
ddrval = lpDDSPrimary->Flip( NULL, 0 );
if( ddrval == DD_OK ) {break;}
if( ddrval == DDERR_SURFACELOST )
{
ddrval = restoreAll(); if( ddrval != DD_OK ) {break;}
}
if( ddrval != DDERR_WASSTILLDRAWING )
{break;}
}
-----
I don't use any blits yet, only my own slow code to draw things in drawAll().
The shaking actually looks like .. the program would flip before drawing is actually complete. Or it skips the drawing every second frame. But my code doesn't allow this to happen. Or does it? I don't know about Window's evil tricks yet...
And if fps's are high, the shaking disappears!
Any ideas about this shaking screen problem?
Anybody here with a smooth scroller?
Thanks already.
...then...
"And the problem is not in drawAll() because it just draws it all... "
In drawAll(), I assume you're using BltFast? Are you using the DDBLTFAST_WAIT flag with it?
btw- WaitForVerticalBlank should be called before the flip. You could try the WaitForSync method, but I think Vore is correct in thinking that your problem is in your DrawAll function.
good luck,
Six