Jump to content

  • Log In with Google      Sign In   
  • Create Account

Interested in a FREE copy of HTML5 game maker Construct 2?

We'll be giving away three Personal Edition licences in next Tuesday's GDNet Direct email newsletter!

Sign up from the right-hand sidebar on our homepage and read Tuesday's newsletter for details!


We're also offering banner ads on our site from just $5! 1. Details HERE. 2. GDNet+ Subscriptions HERE. 3. Ad upload HERE.


DDRAW: prim/back-flip shaking! I need smooth scrolling.


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
5 replies to this topic

#1 Hans   Members   -  Reputation: 122

Like
Likes
Like

Posted 30 December 1999 - 05:05 PM

I copied some code from ddex3 and did a scrolling screen to my game. But when fps's get low, the picture starts to shake! It only shakes when I move the view, not when I stay still. And shaking is little, but annoying. Well.. here's some code. drawAll() draws the level to the lpsurface:
---------
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.


Sponsor:

#2 Vore   Members   -  Reputation: 122

Like
Likes
Like

Posted 28 December 1999 - 04:37 PM

Hmmm, does it look like things are sorta, transparent?

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!


#3 Anonymous Poster_Anonymous Poster_*   Guests   -  Reputation:

Likes

Posted 28 December 1999 - 07:46 PM

The only thing I would change would be this line:

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.



#4 ZomeonE   Members   -  Reputation: 122

Like
Likes
Like

Posted 29 December 1999 - 02:39 AM

Why not try and wait for a vertical refresh!

directdrawobject->WaitForVerticalBlank(DDWAITVB_BLOCKEND, 0);


#5 Hans   Members   -  Reputation: 122

Like
Likes
Like

Posted 30 December 1999 - 02:08 PM

Thanks but.. still not working
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.


#6 Sixpack   Members   -  Reputation: 122

Like
Likes
Like

Posted 30 December 1999 - 05:05 PM

"the program would flip before drawing is actually complete"

...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





Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS