Directx Page flipping blues
hi everyone. i''ve written a short piece of code that creates a primary surface and then attempts to get the attached surfaces but i keep getting the DDERR_NOTFOUND error. what exactly can it not find? it cant be the primary surface because it definitely exists. heres the code i''ve written.
any help would be much appreciated.
//include all stuff, etc
WNDCLASS mainWindowClass;
LPDIRECTDRAW7 directDraw7;
HINSTANCE mainWindowInstance;
HWND mainWindowHandle;
LPDIRECTDRAWSURFACE7 actives; //active surface
DDSURFACEDESC2 surfaceDescription;//surface description
LPDIRECTDRAWSURFACE7 front; //front buffer
LPDIRECTDRAWSURFACE7 back; //back buffer
LRESULT CALLBACK windowProc(HWND, UINT, WPARAM, LPARAM);
void systemMsg(char *);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int)
{
mainWindowInstance=hInstance;
mainWindowClass.style =CS_DBLCLKS|CS_OWNDC|CS_HREDRAW|CS_VREDRAW;
mainWindowClass.lpfnWndProc =windowProc;
mainWindowClass.cbClsExtra =0;
mainWindowClass.cbWndExtra =0;
mainWindowClass.hInstance =mainWindowInstance;
mainWindowClass.hIcon =LoadIcon(NULL, IDI_APPLICATION);
mainWindowClass.hCursor =LoadCursor(NULL, IDC_ARROW);
mainWindowClass.hbrBackground =(HBRUSH)GetStockObject(BLACK_BRUSH);
mainWindowClass.lpszMenuName =NULL;
mainWindowClass.lpszClassName ="WINCLASS1";
if(RegisterClass(&mainWindowClass)==0) //can we register our class?
{
systemMsg("Could not register class.");
return FALSE;
}
mainWindowHandle=CreateWindow("WINCLASS1",
"Test",
WS_POPUP,
0, 0,
1, 1,
NULL,
NULL,
mainWindowHandle,
NULL);
if(mainWindowHandle==NULL) //was our window succelssful?
{
systemMsg("Could not create window.");
return FALSE;
}
ShowWindow(mainWindowHandle, SW_SHOW);
if(DirectDrawCreateEx(NULL, (LPVOID*)&directDraw7, IID_IDirectDraw7, NULL)!=DD_OK)
{
systemMsg("Could not create direct draw object.");
return FALSE;
}
directDraw7->SetCooperativeLevel(mainWindowHandle, DDSCL_EXCLUSIVE|DDSCL_FULLSCREEN);
if(directDraw7->SetDisplayMode(640, 480, 16, 0, 0)!=DD_OK)
{
systemMsg("Could not set display mode.");
return FALSE;
}
memset(&surfaceDescription, 0, sizeof(surfaceDescription));
surfaceDescription.dwSize =sizeof(surfaceDescription);
surfaceDescription.dwFlags =DDSD_CAPS | DDSD_BACKBUFFERCOUNT;
surfaceDescription.ddsCaps.dwCaps =DDSCAPS_PRIMARYSURFACE|DDSCAPS_FLIP|DDSCAPS_COMPLEX;
surfaceDescription.dwBackBufferCount =1;
if(directDraw7->CreateSurface(&surfaceDescription, &front, NULL)!=DD_OK)
{
systemMsg("Cannot create primary surface.");
return FALSE;
}
DDSCAPS2 ddscaps;
ddscaps.dwCaps=DDSCAPS_BACKBUFFER;
/**
THE FOLLOWING CODE PRODUCES AN ERROR!
THE GETATTACHEDSURFACE FUNCTION RETURNS A DDERR_NOTFOUND ERROR.
I DONT UNDERSTAND WHY. I HAVE A FEELING ITS TO DO WITH THE THE
LPDIRECTSURFACE7 VARIABLE DEFINITIONS BUT CANT SEE WHAT EXACTLY
CAN ANYBODY HELP, PLEASE??
**/
if((front->GetAttachedSurface(&ddscaps, &back))!=DD_OK)
{
systemMsg("Could not get attached surfaces.");
return FALSE;
}
systemMsg("Successful!");
return TRUE;
}
LRESULT CALLBACK windowProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT windowPaintStruct;
switch(msg)
{
case WM_CREATE: //window has been created
{
return 0;
}
case WM_PAINT: //window requires a re-spray
{
BeginPaint(hWnd, &windowPaintStruct);
EndPaint(hWnd, &windowPaintStruct);
return 0;
}
case WM_DESTROY: //window needs demolishing!
{
PostQuitMessage(0);
return 0;
}
case WM_SIZE: //resize occured
{
//reference: w=LOWORD(lParam), h=HIWORD(lParam)
return 0;
}
default:
break;
}
return(DefWindowProc(hWnd, msg, wParam, lParam));
}
void systemMsg(char *e)
{
MessageBox(mainWindowHandle, e, "Information", MB_OK);
}
see ya!!!
Maybe adding:
ZeroMemory(&ddscaps, sizeof(ddscaps));
after the declaration? Could be junk in there that''s screwing it up.
Breakaway Games
ZeroMemory(&ddscaps, sizeof(ddscaps));
after the declaration? Could be junk in there that''s screwing it up.
Breakaway Games
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement