Directx Page flipping blues

Started by
1 comment, last by transverse 22 years, 2 months ago
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!!!
:o)
Advertisement
Maybe adding:

ZeroMemory(&ddscaps, sizeof(ddscaps));

after the declaration? Could be junk in there that''s screwing it up.


Breakaway Games

Former Microsoft XNA and Xbox MVP | Check out my blog for random ramblings on game development

hey thanks!

im sure i tried that before, but must have just dreamt it!!!

it works

cheers matey!!!!!!!!


:o)

This topic is closed to new replies.

Advertisement