Jump to content
  • Advertisement

Archived

This topic is now archived and is closed to further replies.

lakibuk

directx return values

This topic is 6632 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

If you do things with directx, e.g. creating a surface, you get a return value like DD_OK or some error value. Is it possible to show on the screen, what value was returned. It need this especially for debugging purposes. How can it be done,if you just show the value,you only see a number. How to see the return-values name (like DD_SURFACELOST).

Share this post


Link to post
Share on other sites
Advertisement
Hi

The Names are just defines, so they are replaced by the preprocessor. So the Names aren't in the final code, and can't be written out.
One way to get detailed Error Information is to use the errorhandling function from the D3DX Package, but i don't know how good it is.
The other way is, to write your own Function maybe like that :

    
DirectXError(int Error)
{
switch(Error)
{
case DD_OK :
break;
case DD_LOSTSURFACE :
MessageBox("Uuups i lost that Surface");
break;
.
.
.
}
}


Using your own Function, you have the Advantage of making everything you wan't with the errors, and give them out like you wan't to, mayba to an extra Window or something.

Lars

Edited by - Lars W. on June 18, 2000 7:08:06 AM

Share this post


Link to post
Share on other sites
I got tired of seeing numbers myself So, I wrote up a function for each DX component that converts the return values to strings. Yes, it was tedious. Just big switch statements casing every return code in the docs. I use these in conjuction with an error out function that writes to an error file. So, for example, if I there is an error calling a DirectDraw function:

    
HRESULT hr
hr = SomeDirectDrawFunction
if (FAILED(hr))
{
Error_Out ("SomeDirectDrawFunction failed \n%s\n",
DHR_To_String (hr));
}




Edited by - Aldacron on June 18, 2000 7:19:54 AM

Share this post


Link to post
Share on other sites
I use the following code (Partially shown):

///////////////////////////////////////////////////////////////////////
// ERROR MESSAGE HANDLING
///////////////////////////////////////////////////////////////////////

BOOL xDDMsg(char* func, HRESULT hr) //Format & Display DD error msgbox
{
char text[64];
char emsg[64];
xlatDDerr( hr, emsg );
sprintf(text,"%s: %s\0",func,emsg);
ErrMsg(text);
return FALSE;
}

BOOL ErrMsg(char* emsg) //Display Message box
{
//lpDD7->FlipToGDISurface();
MessageBox(hDDWnd,emsg,"Direct Draw Error",MB_OK/MB_ICONSTOP/MB_SYSTEMMODAL);
return FALSE;
}

/////////////////////////////////////////////////////////////////////

void xlatDDerr(HRESULT rc, char* EMsg) //translate DD HRESULT codes
{
#ifdef testmode
if(rc==DD_OK) { strcpy(EMsg,"DD_OK"); return; }
if(rc==DDERR_ALREADYINITIALIZED ) { strcpy(EMsg,"DDERR_ALREADYINITIALIZED "); return; }
if(rc==DDERR_BLTFASTCANTCLIP) { strcpy(EMsg,"DDERR_BLTFASTCANTCLIP"); return; }

---etc---

if(rc==DDERR_WASSTILLDRAWING) { strcpy(EMsg,"DDERR_WASSTILLDRAWING"); return; }
if(rc==DDERR_WRONGMODE) { strcpy(EMsg,"DDERR_WRONGMODE"); return; }
if(rc==DDERR_XALIGN) { strcpy(EMsg,"DDERR_XALIGN"); return; }
#endif
sprintf(EMsg,"HRESULT=%X\0",rc);
}
/////////////////////////////////////////////////////////////////////

...it may not be the most efficient, but it works. I derived the error names from the SDK documentation via cut and paste.


hmm.. I see Lars posted at the same time - the case method might be a little better, but I like the single message box function, and actual error names.... We''ll let you decide

Share this post


Link to post
Share on other sites
thx !
i hoped there was an easier way to solve this problem.
there are thousands of error values 8-(

Share this post


Link to post
Share on other sites
This is how it is done in UnrealTournament:

    FString D3DError( HRESULT h )
{
#define D3DERR(x) case x: return TEXT(#x);
switch( h )
{
D3DERR(DD_OK)
D3DERR(DDERR_ALREADYINITIALIZED)
D3DERR(DDERR_BLTFASTCANTCLIP)
//More error values...

default: return FString:<img src="tongue.gif" width=15 height=15 align=middle>rintf(TEXT("%08X"),(INT)h);
}
#undef D3DERR
}

Share this post


Link to post
Share on other sites

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!