-
DX: Surfaces
Does anyone have any clue why I am failing to lock this surface?
Code:
DDSURFACEDESC2 ddsd;
// this should lock the entire region...
if(FAILED(_lpPrimarySurface->Lock(NULL, &ddsd, DDLOCK_SURFACEMEMORYPTR | DDLOCK_WAIT, NULL)))
{
DisplayError("Failed to Lock Surface.");
}
-
Have you initialized the surface descriptor? I think you must always zero those structs out and set dwSize to the correct value, even if you only want to retrieve information.
Code:
DDSURFACEDESC2 ddsd;
ZeroMemory(&ddsd, sizeof(DDSURFACEDESC2));
ddsd.dwSize = sizeof(DDSURFACEDESC2);
BTW, this is a handy macro for DirectDraw programming:
Code:
#define DD_INITSTRUCT(s) \
ZeroMemory(&(s), sizeof((s)));\
(s).dwSize = sizeof((s));
or in C++ (only MSVC++7, it won't work properly for 6 or older Borlands):
Code:
template<typename T>
inline void DD_INITSTRUCT(T &s) {
::ZeroMemory(&s, sizeof(T));
s.dwSize = sizeof(T);
}
-
Yes, you're exactly right...when I removed it from my testing function which included the creation of the surface I had already done that, it stopped functioning. Nice call :-)