Home | Info | Community | Development | myReactOS | Contact Us
Definition at line 202 of file ddtest.c.
Referenced by StartDDTest().
{ UINT_PTR TimerID, TimerIDUpdate; LPDIRECTDRAW lpDD; LPDIRECTDRAWSURFACE lpDDPrimarySurface; LPDIRECTDRAWSURFACE lpDDBackBuffer; DDSURFACEDESC DDSurfaceDesc; DDSURFACEDESC DDBBSurfaceDesc; DDSCAPS DDSCaps; MSG msg; RECT rectDD; POINT wndPoint; INT posX = 0, posY = 10, xGain = DD_SQUARE_STEP, yGain = DD_SQUARE_STEP; if(DirectDrawCreate(NULL, &lpDD, NULL) != DD_OK) return FALSE; ZeroMemory(&DDSurfaceDesc, sizeof(DDSurfaceDesc)); DDSurfaceDesc.dwSize = sizeof(DDSurfaceDesc); if(Fullscreen) { if(lpDD->lpVtbl->SetCooperativeLevel(lpDD, hWnd, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN) != DD_OK) { lpDD->lpVtbl->Release(lpDD); return FALSE; } if(lpDD->lpVtbl->SetDisplayMode(lpDD, WIDTH, HEIGHT, 32) != DD_OK) { lpDD->lpVtbl->Release(lpDD); return FALSE; } DDSurfaceDesc.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT; DDSurfaceDesc.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_FLIP | DDSCAPS_COMPLEX; DDSurfaceDesc.dwBackBufferCount = 1; } else { if(lpDD->lpVtbl->SetCooperativeLevel(lpDD, hWnd, DDSCL_NORMAL) != DD_OK) { lpDD->lpVtbl->Release(lpDD); return FALSE; } DDSurfaceDesc.dwFlags = DDSD_CAPS; DDSurfaceDesc.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE; } if(lpDD->lpVtbl->CreateSurface(lpDD, &DDSurfaceDesc, &lpDDPrimarySurface, NULL) != DD_OK) { lpDD->lpVtbl->Release(lpDD); return FALSE; } if(Fullscreen) { DDSCaps.dwCaps = DDSCAPS_BACKBUFFER; if (lpDDPrimarySurface->lpVtbl->GetAttachedSurface(lpDDPrimarySurface, &DDSCaps,&lpDDBackBuffer) != DD_OK) { lpDDPrimarySurface->lpVtbl->Release(lpDDPrimarySurface); lpDD->lpVtbl->Release(lpDD); return FALSE; } } else { /* create our offscreen back buffer */ ZeroMemory(&DDBBSurfaceDesc,sizeof(DDBBSurfaceDesc)); DDBBSurfaceDesc.dwSize = sizeof(DDBBSurfaceDesc); DDBBSurfaceDesc.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT; DDBBSurfaceDesc.dwHeight = HEIGHT; DDBBSurfaceDesc.dwWidth = WIDTH; DDBBSurfaceDesc.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN; if(lpDD->lpVtbl->CreateSurface(lpDD, &DDBBSurfaceDesc, &lpDDBackBuffer, NULL) != DD_OK) { lpDD->lpVtbl->Release(lpDD); lpDDPrimarySurface->lpVtbl->Release(lpDDPrimarySurface); return FALSE; } wndPoint.x = 0; wndPoint.y = 0; ClientToScreen(hWnd, &wndPoint); GetClientRect(hWnd, &rectDD); OffsetRect(&rectDD, wndPoint.x, wndPoint.y); } /* set our timers, TimerID - for test timeout, TimerIDUpdate - for frame updating */ TimerID = SetTimer(hWnd, -1, (UINT)TEST_DURATION, NULL); TimerIDUpdate = SetTimer(hWnd, 2, (UINT)10, NULL); (void)TimerIDUpdate; while (TRUE) { if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { if (msg.message == WM_TIMER) { if(msg.wParam == TimerID) { break; } else { DDUpdateFrame(lpDDPrimarySurface,lpDDBackBuffer, Fullscreen,&posX, &posY, &xGain, &yGain, &rectDD); } } TranslateMessage(&msg); DispatchMessage(&msg); } } lpDDPrimarySurface->lpVtbl->Release(lpDDPrimarySurface); /* backbuffer is released automatically when in fullscreen */ if(!Fullscreen) lpDDBackBuffer->lpVtbl->Release(lpDDBackBuffer); lpDD->lpVtbl->Release(lpDD); return TRUE; }