Jump to content

  • Log In with Google      Sign In   
  • Create Account


DirectDraw - Lost surfaces problems


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
8 replies to this topic

#1 illuna   Members   -  Reputation: 122

Like
Likes
Like

Posted 30 September 1999 - 06:10 AM

Hi

I programmed the code to restore the surfaces if the display mode changed. It works just right but I need to know how to loose a surface otherwise (it works already when I change the resolution of the screen and the color palette). Can you suggest me other ways to loose a surface so I can check my code?

Thanks!

Here is a sample code

BOOL RestoreAll(void){
HRESULT ddrval;
ddrval = lpDDSPrimary->Restore();

if (ddrval==DDERR_WRONGMODE){
// Display mode changed
// No problem here
}
else if (FAILED(ddrval)){
// Random restore failure
// How can I make this case happen?
}
else{
// We're ok retore everything else
// How can I make this case happen?
}
return TRUE;
}


Sponsor:

#2 Anonymous Poster_Anonymous Poster_*   Guests   -  Reputation:

Likes

Posted 29 September 1999 - 04:58 AM

In DirectX 6, you have a sample application that 'simulate' (force) surfaces lost. I don't remember the name though (I don't have DirectX at job :-( )

#3 CGameProgrammer   Members   -  Reputation: 640

Like
Likes
Like

Posted 29 September 1999 - 05:07 AM

After you restore lost surfaces, do they lock correctly? Mine don't. Blt, BltFast, and GetDC work fine, but Lock returns DDERR_SURFACELOST.

------------------
~CGameProgrammer( );


#4 illuna   Members   -  Reputation: 122

Like
Likes
Like

Posted 29 September 1999 - 05:46 AM

CGameProgrammer,

Well. I wouldn't be able to anwser your question. I'm 19 and I'm a junior programmer. I'm just beginning to master DirectDraw but mayby someone else here would know the anwser?

Illuna


#5 mason   Members   -  Reputation: 128

Like
Likes
Like

Posted 29 September 1999 - 06:43 AM

Now that you mention it...

I've had all shades of trouble trying to get DDraw surfaces to restore correctly. The only thing that's seemed to work is if I Release() all surfaces (including the primary), Release() the DDraw interface, create a completely new DDraw interface, and then create completely new surfaces.

This solution for me was easier than trying to figure out exactly why surface restoring was sketchy, but I'm still curious, so if anyone's seen this and solved it, I'd love to hear about it.

Mason McCuskey
Spin Studios
www.spin-studios.com


#6 Zenroth   Members   -  Reputation: 127

Like
Likes
Like

Posted 29 September 1999 - 08:59 AM

Not sure bout locking,but I have had no problems restoring surfaces. Thue I do use a linked list to keep track of all the bitmaps loaded and there flags ect. Then if I detect a lost surface I just call restorallsurfaces(); which is a directx 6 command.

Then i reload in the data for any video bitmaps.

Also system memory bitmaps don't seem to get lost.


#7 mutex   Members   -  Reputation: 1109

Like
Likes
Like

Posted 29 September 1999 - 04:50 PM

here's what i do. create a class that manages a directdraw surface. the class will load a bitmap onto the surface, destroy the surface, etc. whenever you need to use the surface (when you need to Blt), check if the surface is lost. if it is, restore it, and then reload the data. it works fine with my game, and you can see an example (together with other garbage) with source at members.xoom.com/mutex0. goto defyengine

#8 CGameProgrammer   Members   -  Reputation: 640

Like
Likes
Like

Posted 29 September 1999 - 06:06 PM

That's what I do. I wrote a CImage class. I too have a ReloadAll() command, and it works: all surfaces get reloaded. The problem isn't restoring the surfaces; it's getting the Lock command to work after doing so.

Probably mason is right: I gotta reload all surfaces. Probably many games do this, because if you Alt+Tab to something else, then switch back to their game, it takes several full seconds to restore everything.

------------------
~CGameProgrammer( );


#9 Sphet   Members   -  Reputation: 631

Like
Likes
Like

Posted 30 September 1999 - 06:10 AM

An alternative might be to use your own buffers, not direct draw surfaces? That way they never get lost.




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