From 662f1546cff7b1fb0b9a04cb37731919ef485da3 Mon Sep 17 00:00:00 2001 From: Magnus Olsen Date: Thu, 14 Dec 2006 20:03:06 +0000 Subject: [PATCH] create backbuffer works, left todo is to implement getattach surface. svn path=/trunk/; revision=25164 --- reactos/dll/directx/ddraw/createsurface.c | 15 +++++++++++--- reactos/dll/directx/ddraw/ddraw.rbuild | 1 + reactos/dll/directx/ddraw/main/ddraw_main.c | 23 +++++++++++++++------ 3 files changed, 30 insertions(+), 9 deletions(-) diff --git a/reactos/dll/directx/ddraw/createsurface.c b/reactos/dll/directx/ddraw/createsurface.c index 6f72452e972..b28c7c0cdd1 100644 --- a/reactos/dll/directx/ddraw/createsurface.c +++ b/reactos/dll/directx/ddraw/createsurface.c @@ -6,8 +6,11 @@ CreateBackBufferSurface(LPDDRAWI_DIRECTDRAW_INT This, LPDDRAWI_DDRAWSURFACE_INT That, LPDDSURFACEDESC2 pDDSD) { + DDHAL_CANCREATESURFACEDATA mDdCanCreateSurface; + DDHAL_CREATESURFACEDATA mDdCreateSurface; DWORD t; + /* we are building the backbuffersurface pointer list * and create the backbuffer surface and set it up */ @@ -44,7 +47,7 @@ CreateBackBufferSurface(LPDDRAWI_DIRECTDRAW_INT This, return DDERR_OUTOFMEMORY; } - memcpy(That->lpLcl->lpGbl, &ddSurfGbl,sizeof(DDRAWI_DDRAWSURFACE_GBL); + memcpy(That->lpLcl->lpGbl, &ddSurfGbl,sizeof(DDRAWI_DDRAWSURFACE_GBL)); That->lpVtbl = &DirectDrawSurface7_Vtable; That->lpLcl->lpSurfMore->dwSize = sizeof(DDRAWI_DDRAWSURFACE_MORE); That->lpLcl->lpSurfMore->lpDD_int = This; @@ -112,7 +115,13 @@ CreateBackBufferSurface(LPDDRAWI_DIRECTDRAW_INT This, return mDdCreateSurface.ddRVal; } - This->lpLcl->lpGbl->dsList[t] = That; - } + /* Build the linking buffer */ + if (This->lpLcl->lpGbl->dsList != NULL) + { + This->lpLink = This->lpLcl->lpGbl->dsList; + } + This->lpLcl->lpGbl->dsList = That; + } + return DD_OK; } diff --git a/reactos/dll/directx/ddraw/ddraw.rbuild b/reactos/dll/directx/ddraw/ddraw.rbuild index 86d56e2a8ed..84f2733e37a 100644 --- a/reactos/dll/directx/ddraw/ddraw.rbuild +++ b/reactos/dll/directx/ddraw/ddraw.rbuild @@ -20,6 +20,7 @@ main.c startup.c cleanup.c + createsurface.c iface_clipper.c iface_color.c diff --git a/reactos/dll/directx/ddraw/main/ddraw_main.c b/reactos/dll/directx/ddraw/main/ddraw_main.c index b6ae6b96719..6df6822f5d9 100644 --- a/reactos/dll/directx/ddraw/main/ddraw_main.c +++ b/reactos/dll/directx/ddraw/main/ddraw_main.c @@ -167,9 +167,9 @@ HRESULT WINAPI Main_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDE { LPDDRAWI_DIRECTDRAW_INT This = (LPDDRAWI_DIRECTDRAW_INT)iface; - LPDDRAWI_DDRAWSURFACE_INT That; + LPDDRAWI_DDRAWSURFACE_INT That = NULL; DDHAL_CANCREATESURFACEDATA mDdCanCreateSurface; - DDHAL_CREATESURFACEDATA mDdCreateSurface; + DDHAL_CREATESURFACEDATA mDdCreateSurface; if (pUnkOuter!=NULL) { @@ -236,6 +236,8 @@ HRESULT WINAPI Main_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDE if (pDDSD->dwFlags & DDSD_BACKBUFFERCOUNT) { + HRESULT retValue; + if (! pDDSD->ddsCaps.dwCaps & (DDSCAPS_FLIP | DDSCAPS_COMPLEX)) { return DDERR_INVALIDPARAMS; @@ -243,11 +245,20 @@ HRESULT WINAPI Main_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDE if (pDDSD->dwBackBufferCount != 0) { - This->lpLcl->lpGbl->dsList = DxHeapMemAlloc(sizeof(DDRAWI_DIRECTDRAW_INT) * - pDDSD->dwBackBufferCount); + This->lpLcl->lpGbl->dsList = NULL; + //DxHeapMemAlloc(sizeof(DDRAWI_DIRECTDRAW_INT)); + } + else + { + return DDERR_INVALIDSURFACETYPE; } - // CreateBackBufferSurface(This,That,pDDSD); + retValue = CreateBackBufferSurface(This,That,pDDSD); + if (retValue != DD_OK) + { + DX_STUB_str( "Fail to create backbuffer surface"); + return retValue; + } } @@ -819,7 +830,7 @@ Main_DirectDraw_SetCooperativeLevel (LPDIRECTDRAW7 iface, HWND hwnd, DWORD coopl /* This code should be a callback */ This->lpLcl->hWnd = hwnd; - This->lpLcl->hFocusWnd = hwnd; + This->lpLcl->hFocusWnd = hwnd; ReCreateDirectDraw((LPDIRECTDRAW*)iface); // TODO: