ddraw: Double buffered primary surfaces can only be created in EXLUSIVE mode.
This commit is contained in:
parent
49beec8635
commit
2d5b19c182
|
@ -45,7 +45,7 @@
|
|||
|
||||
/* Given an object and interface name, returns a pointer to that interface. */
|
||||
#define ICOM_INTERFACE(implobj, iface) \
|
||||
(&((implobj)->ICOM_VFIELD_MULTI_NAME(iface)))
|
||||
(implobj == NULL ? NULL :&((implobj)->ICOM_VFIELD_MULTI_NAME(iface)))
|
||||
|
||||
#define ICOM_INIT_INTERFACE(implobj, ifacename, vtblname) \
|
||||
do { \
|
||||
|
|
|
@ -2132,6 +2132,14 @@ IDirectDrawImpl_CreateSurface(IDirectDraw7 *iface,
|
|||
DDSD->dwFlags &= ~DDSD_LPSURFACE;
|
||||
}
|
||||
|
||||
if((DDSD->ddsCaps.dwCaps & (DDSCAPS_FLIP | DDSCAPS_PRIMARYSURFACE)) == (DDSCAPS_FLIP | DDSCAPS_PRIMARYSURFACE) &&
|
||||
!(This->cooperative_level & DDSCL_EXCLUSIVE))
|
||||
{
|
||||
TRACE("(%p): Attempt to create a flipable primary surface without DDSCL_EXCLUSIVE set\n", This);
|
||||
*Surf = NULL;
|
||||
return DDERR_NOEXCLUSIVEMODE;
|
||||
}
|
||||
|
||||
if (Surf == NULL)
|
||||
{
|
||||
FIXME("(%p) You want to get back a surface? Don't give NULL ptrs!\n", This);
|
||||
|
|
|
@ -222,6 +222,15 @@ static void testdisplaymodes(void)
|
|||
static void testcooperativelevels_normal(void)
|
||||
{
|
||||
HRESULT rc;
|
||||
DDSURFACEDESC surfacedesc;
|
||||
IDirectDrawSurface *surface = (IDirectDrawSurface *) 0xdeadbeef;
|
||||
|
||||
memset(&surfacedesc, 0, sizeof(surfacedesc));
|
||||
surfacedesc.dwSize = sizeof(surfacedesc);
|
||||
surfacedesc.ddpfPixelFormat.dwSize = sizeof(surfacedesc.ddpfPixelFormat);
|
||||
surfacedesc.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT;
|
||||
surfacedesc.dwBackBufferCount = 1;
|
||||
surfacedesc.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_COMPLEX | DDSCAPS_FLIP;
|
||||
|
||||
/* Do some tests with DDSCL_NORMAL mode */
|
||||
|
||||
|
@ -229,6 +238,12 @@ static void testcooperativelevels_normal(void)
|
|||
hwnd, DDSCL_NORMAL);
|
||||
ok(rc==DD_OK,"SetCooperativeLevel(DDSCL_NORMAL) returned: %lx\n",rc);
|
||||
|
||||
/* Try creating a double buffered primary in normal mode */
|
||||
rc = IDirectDraw_CreateSurface(lpDD, &surfacedesc, &surface, NULL);
|
||||
ok(rc == DDERR_NOEXCLUSIVEMODE, "IDirectDraw_CreateSurface returned %08lx\n", rc);
|
||||
ok(surface == NULL, "Returned surface pointer is %p\n", surface);
|
||||
if(surface) IDirectDrawSurface_Release(surface);
|
||||
|
||||
/* Set the focus window */
|
||||
rc = IDirectDraw_SetCooperativeLevel(lpDD,
|
||||
hwnd, DDSCL_SETFOCUSWINDOW);
|
||||
|
|
Loading…
Reference in New Issue