Jump to content
  • Advertisement

Archived

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

Xeno

Lock() problem in Directx7

This topic is 6479 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

first i have a question , can i lock my back surface while im using D3D and the back buffer as a 3D Device? second , why i cant when i try it? im doing it like that: hRet = lp_back->Lock(lp_rect,&ddsd2,DDLOCK_WAIT,NULL); if(hRet != DD_OK) return hRet; and its fails , now , when im trying to see what is the returned HRESULT value i get something like -21342.... something like it... amm.... any suggestions? ************************* "Everything you know is wrong" - Bono *************************

- Goblineye Entertainment Edited by - xeno on February 17, 2001 2:16:26 PM

Share this post


Link to post
Share on other sites
Advertisement
Couple of ways to fix it (possibly...)

First, make sure you memset the DDSURFACEDESC to 0 before using it. Second, make absolutely sure that you fill in the .dwSize member of the structure with sizeof(DDSURFACEDESC). If you don't do this, it will return the error DDERR_INVALIDPARAMS.

The second method is something that you should do all the time. Every error you get, log it (either through a MessageBox or to a file) and save it as hex, not decimal. When you save it in hex, you can then just go to ddraw.h and look up the error that it returned.

Or, you could just use this function. It returns a char string of a lot of errors (but not all):

const char* makeDXError(const int err)
{
switch (err)
{
case DDERR_ALREADYINITIALIZED: return "DDERR_ALREADYINITIALIZED";
case DDERR_CANNOTATTACHSURFACE: return "DDERR_CANNOTATTACHSURFACE";
case DDERR_CANNOTDETACHSURFACE: return "DDERR_CANNOTDETACHSURFACE";
case DDERR_CURRENTLYNOTAVAIL: return "DDERR_CURRENTLYNOTAVAIL";
case DDERR_EXCEPTION: return "DDERR_EXCEPTION";
case DDERR_GENERIC: return "DDERR_GENERIC";
case DDERR_HEIGHTALIGN: return "DDERR_HEIGHTALIGN";
case DDERR_INCOMPATIBLEPRIMARY: return "DDERR_INCOMPATIBLEPRIMARY";
case DDERR_INVALIDCAPS: return "DDERR_INVALIDCAPS";
case DDERR_INVALIDCLIPLIST: return "DDERR_INVALIDCLIPLIST";
case DDERR_INVALIDMODE: return "DDERR_INVALIDMODE";
case DDERR_INVALIDOBJECT: return "DDERR_INVALIDOBJECT";
case DDERR_INVALIDPARAMS: return "DDERR_INVALIDPARAMS";
case DDERR_INVALIDPIXELFORMAT: return "DDERR_INVALIDPIXELFORMAT";
case DDERR_INVALIDRECT: return "DDERR_INVALIDRECT";
case DDERR_LOCKEDSURFACES: return "DDERR_LOCKEDSURFACES";
case DDERR_NO3D: return "DDERR_NO3D";
case DDERR_NOALPHAHW: return "DDERR_NOALPHAHW";
case DDERR_NOCLIPLIST: return "DDERR_NOCLIPLIST";
case DDERR_NOCOLORCONVHW: return "DDERR_NOCOLORCONVHW";
case DDERR_NOCOOPERATIVELEVELSET: return "DDERR_NOCOOPERATIVELEVELSET";
case DDERR_NOCOLORKEY: return "DDERR_NOCOLORKEY";
case DDERR_NOCOLORKEYHW: return "DDERR_NOCOLORKEYHW";
case DDERR_NODIRECTDRAWSUPPORT: return "DDERR_NODIRECTDRAWSUPPORT";
case DDERR_NOEXCLUSIVEMODE: return "DDERR_NOEXCLUSIVEMODE";
case DDERR_NOFLIPHW: return "DDERR_NOFLIPHW";
case DDERR_NOGDI: return "DDERR_NOGDI";
case DDERR_NOMIRRORHW: return "DDERR_NOMIRRORHW";
case DDERR_NOTFOUND: return "DDERR_NOTFOUND";
case DDERR_NOOVERLAYHW: return "DDERR_NOOVERLAYHW";
case DDERR_NORASTEROPHW: return "DDERR_NORASTEROPHW";
case DDERR_NOROTATIONHW: return "DDERR_NOROTATIONHW";
case DDERR_NOSTRETCHHW: return "DDERR_NOSTRETCHHW";
case DDERR_NOT4BITCOLOR: return "DDERR_NOT4BITCOLOR";
case DDERR_NOT4BITCOLORINDEX: return "DDERR_NOT4BITCOLORINDEX";
case DDERR_NOT8BITCOLOR: return "DDERR_NOT8BITCOLOR";
case DDERR_NOTEXTUREHW: return "DDERR_NOTEXTUREHW";
case DDERR_NOVSYNCHW: return "DDERR_NOVSYNCHW";
case DDERR_NOZBUFFERHW: return "DDERR_NOZBUFFERHW";
case DDERR_NOZOVERLAYHW: return "DDERR_NOZOVERLAYHW";
case DDERR_OUTOFCAPS: return "DDERR_OUTOFCAPS";
case DDERR_OUTOFMEMORY: return "DDERR_OUTOFMEMORY";
case DDERR_OUTOFVIDEOMEMORY: return "DDERR_OUTOFVIDEOMEMORY";
case DDERR_OVERLAYCANTCLIP: return "DDERR_OVERLAYCANTCLIP";
case DDERR_OVERLAYCOLORKEYONLYONEACTIVE: return "DDERR_OVERLAYCOLORKEYONLYONEACTIVE";
case DDERR_PALETTEBUSY: return "DDERR_PALETTEBUSY";
case DDERR_COLORKEYNOTSET: return "DDERR_COLORKEYNOTSET";
case DDERR_SURFACEALREADYATTACHED: return "DDERR_SURFACEALREADYATTACHED";
case DDERR_SURFACEALREADYDEPENDENT: return "DDERR_SURFACEALREADYDEPENDENT";
case DDERR_SURFACEBUSY: return "DDERR_SURFACEBUSY";
case DDERR_CANTLOCKSURFACE: return "DDERR_CANTLOCKSURFACE";
case DDERR_SURFACEISOBSCURED: return "DDERR_SURFACEISOBSCURED";
case DDERR_SURFACELOST: return "DDERR_SURFACELOST";
case DDERR_SURFACENOTATTACHED: return "DDERR_SURFACENOTATTACHED";
case DDERR_TOOBIGHEIGHT: return "DDERR_TOOBIGHEIGHT";
case DDERR_TOOBIGSIZE: return "DDERR_TOOBIGSIZE";
case DDERR_TOOBIGWIDTH: return "DDERR_TOOBIGWIDTH";
case DDERR_UNSUPPORTED: return "DDERR_UNSUPPORTED";
case DDERR_UNSUPPORTEDFORMAT: return "DDERR_UNSUPPORTEDFORMAT";
case DDERR_UNSUPPORTEDMASK: return "DDERR_UNSUPPORTEDMASK";
case DDERR_VERTICALBLANKINPROGRESS: return "DDERR_VERTICALBLANKINPROGRESS";
case DDERR_WASSTILLDRAWING: return "DDERR_WASSTILLDRAWING";
case DDERR_XALIGN: return "DDERR_XALIGN";
case DDERR_INVALIDDIRECTDRAWGUID: return "DDERR_INVALIDDIRECTDRAWGUID";
case DDERR_DIRECTDRAWALREADYCREATED: return "DDERR_DIRECTDRAWALREADYCREATED";
case DDERR_NODIRECTDRAWHW: return "DDERR_NODIRECTDRAWHW";
case DDERR_PRIMARYSURFACEALREADYEXISTS: return "DDERR_PRIMARYSURFACEALREADYEXISTS";
case DDERR_NOEMULATION: return "DDERR_NOEMULATION";
case DDERR_REGIONTOOSMALL: return "DDERR_REGIONTOOSMALL";
case DDERR_CLIPPERISUSINGHWND: return "DDERR_CLIPPERISUSINGHWND";
case DDERR_NOCLIPPERATTACHED: return "DDERR_NOCLIPPERATTACHED";
case DDERR_NOHWND: return "DDERR_NOHWND";
case DDERR_HWNDSUBCLASSED: return "DDERR_HWNDSUBCLASSED";
case DDERR_HWNDALREADYSET: return "DDERR_HWNDALREADYSET";
case DDERR_NOPALETTEATTACHED: return "DDERR_NOPALETTEATTACHED";
case DDERR_NOPALETTEHW: return "DDERR_NOPALETTEHW";
case DDERR_BLTFASTCANTCLIP: return "DDERR_BLTFASTCANTCLIP";
case DDERR_NOBLTHW: return "DDERR_NOBLTHW";
case DDERR_NODDROPSHW: return "DDERR_NODDROPSHW";
case DDERR_OVERLAYNOTVISIBLE: return "DDERR_OVERLAYNOTVISIBLE";
case DDERR_NOOVERLAYDEST: return "DDERR_NOOVERLAYDEST";
case DDERR_INVALIDPOSITION: return "DDERR_INVALIDPOSITION";
case DDERR_NOTAOVERLAYSURFACE: return "DDERR_NOTAOVERLAYSURFACE";
case DDERR_EXCLUSIVEMODEALREADYSET: return "DDERR_EXCLUSIVEMODEALREADYSET";
case DDERR_NOTFLIPPABLE: return "DDERR_NOTFLIPPABLE";
case DDERR_CANTDUPLICATE: return "DDERR_CANTDUPLICATE";
case DDERR_NOTLOCKED: return "DDERR_NOTLOCKED";
case DDERR_CANTCREATEDC: return "DDERR_CANTCREATEDC";
case DDERR_NODC: return "DDERR_NODC";
case DDERR_WRONGMODE: return "DDERR_WRONGMODE";
case DDERR_IMPLICITLYCREATED: return "DDERR_IMPLICITLYCREATED";
case DDERR_NOTPALETTIZED: return "DDERR_NOTPALETTIZED";
case DDERR_UNSUPPORTEDMODE: return "DDERR_UNSUPPORTEDMODE";
case DDERR_NOMIPMAPHW: return "DDERR_NOMIPMAPHW";
case DDERR_INVALIDSURFACETYPE: return "DDERR_INVALIDSURFACETYPE";
case DDERR_NOOPTIMIZEHW: return "DDERR_NOOPTIMIZEHW";
case DDERR_NOTLOADED: return "DDERR_NOTLOADED";
case DDERR_NOFOCUSWINDOW: return "DDERR_NOFOCUSWINDOW";
case DDERR_DCALREADYCREATED: return "DDERR_DCALREADYCREATED";
case DDERR_NONONLOCALVIDMEM: return "DDERR_NONONLOCALVIDMEM";
case DDERR_CANTPAGELOCK: return "DDERR_CANTPAGELOCK";
case DDERR_CANTPAGEUNLOCK: return "DDERR_CANTPAGEUNLOCK";
case DDERR_NOTPAGELOCKED: return "DDERR_NOTPAGELOCKED";
case DDERR_MOREDATA: return "DDERR_MOREDATA";
case DDERR_VIDEONOTACTIVE: return "DDERR_VIDEONOTACTIVE";
case DDERR_DEVICEDOESNTOWNSURFACE: return "DDERR_DEVICEDOESNTOWNSURFACE";
case DDERR_NOTINITIALIZED: return "DDERR_NOTINITIALIZED";
}
return "Unknown error";
}


---
Wait, you mean I have to actually... THINK?!

Edited by - random on February 18, 2001 5:24:40 PM

Share this post


Link to post
Share on other sites
I''m not sure if you are still having this problem because of your other post, but I will answer it anyway. In the example code that you give, you are not setting the dwSize member of ddsd2. You must ALWAYS set this. It should work as a D3D surface. Lock your surface like this:

DDSURFACEDESC2 ddsd2;
ddsd2.dwSize = sizeof(ddsd2);
hRet = lp_back->Lock (lp_rect, &ddsd2, DDLOCK_WAIT|DDLOCK_SURFACEMEMORYPTR, NULL);
if (hRet != DD_OK) return hRet;

(I''m not sure if you need DDLOCK_SURFACEMEMORYPTR, but I always do it anyway)

Dave2001,
MAILTO(Forrester6@msn.com);

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!