5 LPDIRECTDRAW7 DirectDraw
;
8 BOOL
Test_GetMonitorFrequency (INT
* passed
, INT
* failed
);
10 HRESULT CALLBACK
DummyEnumDisplayModes( LPDDSURFACEDESC2 pDDSD
, ENUMCONTEXT
* Context
)
15 HRESULT CALLBACK
EnumDisplayModes( LPDDSURFACEDESC2 pDDSD
, ENUMCONTEXT
* Context
)
17 static int setcout
= 0;
21 DWORD lpdwFrequency
= 0;
22 INT
* passed
= Context
->passed
;
23 INT
* failed
= Context
->failed
;
24 DDSURFACEDESC2 DisplayMode
= {0};
25 DisplayMode
.dwSize
= sizeof(DDSURFACEDESC2
);
27 TEST ( pDDSD
->dwFlags
== (DDSD_HEIGHT
| DDSD_WIDTH
| DDSD_PITCH
| DDSD_PIXELFORMAT
| DDSD_REFRESHRATE
));
28 TEST ( pDDSD
->ddpfPixelFormat
.dwFlags
== (DDPF_RGB
| DDPF_PALETTEINDEXED8
) || pDDSD
->ddpfPixelFormat
.dwFlags
== DDPF_RGB
);
29 TEST ( Context
->DirectDraw
->SetDisplayMode (pDDSD
->dwWidth
, pDDSD
->dwHeight
, pDDSD
->ddpfPixelFormat
.dwRGBBitCount
, pDDSD
->dwRefreshRate
, 0) == DD_OK
);
30 TEST ( Context
->DirectDraw
->GetMonitorFrequency (&lpdwFrequency
) == DD_OK
&& lpdwFrequency
== pDDSD
->dwRefreshRate
);
31 TEST ( Context
->DirectDraw
->GetDisplayMode (&DisplayMode
) == DD_OK
32 && pDDSD
->dwHeight
== DisplayMode
.dwHeight
33 && pDDSD
->dwWidth
== DisplayMode
.dwWidth
34 && pDDSD
->dwRefreshRate
== DisplayMode
.dwRefreshRate
35 && pDDSD
->ddpfPixelFormat
.dwRGBBitCount
== DisplayMode
.ddpfPixelFormat
.dwRGBBitCount
36 && DisplayMode
.dwFlags
== (DDSD_HEIGHT
| DDSD_WIDTH
| DDSD_PITCH
| DDSD_PIXELFORMAT
| DDSD_REFRESHRATE
) );
42 BOOL
Test_DisplayModes (INT
* passed
, INT
* failed
)
44 /*** FIXME: Also test with surface as parameter; try busy/locked surface as well ***/
45 LPDIRECTDRAW7 DirectDraw
;
48 if (DirectDrawCreateEx(NULL
, (VOID
**)&DirectDraw
, IID_IDirectDraw7
, NULL
) != DD_OK
)
50 printf("ERROR: Failed to set up ddraw\n");
54 ENUMCONTEXT Context
= {passed
, failed
, DirectDraw
};
58 Test_GetMonitorFrequency(passed
, failed
);
60 /* First try with some generic display modes */
61 TEST ( DirectDraw
->SetDisplayMode (1586, 895, 0, 0, 0) == DDERR_UNSUPPORTED
);
62 TEST ( DirectDraw
->SetDisplayMode (0, 0, 0, 0, 0x123) == DDERR_INVALIDPARAMS
);
64 // does this change the display mode to DDSCL_EXCLUSIVE ?
65 TEST ( DirectDraw
->SetDisplayMode (0, 0, 0, 0, 0) == DD_OK
);
66 TEST ( DirectDraw
->SetDisplayMode (800, 600, 0, 0, 0) == DD_OK
);
67 TEST ( DirectDraw
->SetDisplayMode (0, 0, 16, 0, 0) == DD_OK
);
69 TEST ( DirectDraw
->GetDisplayMode (NULL
) == DDERR_INVALIDPARAMS
);
70 DDSURFACEDESC2 DisplayMode
= {0};
71 TEST ( DirectDraw
->GetDisplayMode (&DisplayMode
) == DDERR_INVALIDPARAMS
);
73 //* Now try getting vaild modes from drive */
74 TEST (DirectDraw
->EnumDisplayModes(DDEDM_STANDARDVGAMODES
, NULL
, (PVOID
)&Context
, NULL
) == DDERR_INVALIDPARAMS
);
75 TEST (DirectDraw
->EnumDisplayModes(0, NULL
, (PVOID
)&Context
, (LPDDENUMMODESCALLBACK2
)DummyEnumDisplayModes
) == DD_OK
);
76 TEST (DirectDraw
->EnumDisplayModes(DDEDM_REFRESHRATES
, NULL
, (PVOID
)&Context
, (LPDDENUMMODESCALLBACK2
)DummyEnumDisplayModes
) == DD_OK
);
77 TEST (DirectDraw
->EnumDisplayModes(DDEDM_STANDARDVGAMODES
, NULL
, (PVOID
)&Context
, (LPDDENUMMODESCALLBACK2
)DummyEnumDisplayModes
) == DD_OK
);
78 TEST (DirectDraw
->EnumDisplayModes(DDEDM_STANDARDVGAMODES
|DDEDM_REFRESHRATES
, NULL
, (PVOID
)&Context
, (LPDDENUMMODESCALLBACK2
)EnumDisplayModes
) == DD_OK
);
80 TEST (DirectDraw
->RestoreDisplayMode() == DD_OK
);
82 DirectDraw
->Release();
87 BOOL
Test_GetMonitorFrequency (INT
* passed
, INT
* failed
)
89 LPDIRECTDRAW7 DirectDraw
;
90 LPDDRAWI_DIRECTDRAW_INT This
;
93 if (DirectDrawCreateEx(NULL
, (VOID
**)&DirectDraw
, IID_IDirectDraw7
, NULL
) != DD_OK
)
95 printf("ERROR: Failed to set up ddraw\n");
98 This
= (LPDDRAWI_DIRECTDRAW_INT
)DirectDraw
;
104 TEST (DirectDraw
->GetMonitorFrequency((PDWORD
)0xdeadbeef) == DDERR_INVALIDPARAMS
);
105 TEST (DirectDraw
->GetMonitorFrequency(NULL
) == DDERR_INVALIDPARAMS
);
107 // result depends on our graphices card
108 retVal
= DirectDraw
->GetMonitorFrequency((PDWORD
)&lpFreq
);
109 TEST ( retVal
== DD_OK
|| retVal
== DDERR_UNSUPPORTED
);
111 /* Test by hacking interal structures */
113 // should return DDERR_UNSUPPORTED
114 This
->lpLcl
->lpGbl
->dwMonitorFrequency
= 0;
115 TEST (DirectDraw
->GetMonitorFrequency(&temp
) == DDERR_UNSUPPORTED
);
117 // should return DD_OK
118 This
->lpLcl
->lpGbl
->dwMonitorFrequency
= 85;
119 TEST (DirectDraw
->GetMonitorFrequency(&temp
) == DD_OK
);
122 This
->lpLcl
->lpGbl
->dwMonitorFrequency
= lpFreq
;
124 DirectDraw
->Release();