create backbuffer works, left todo is to implement getattach surface.

svn path=/trunk/; revision=25164
This commit is contained in:
Magnus Olsen 2006-12-14 20:03:06 +00:00
parent 23153cc3cf
commit 662f1546cf
3 changed files with 30 additions and 9 deletions

View file

@ -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;
}

View file

@ -20,6 +20,7 @@
<file>main.c</file>
<file>startup.c</file>
<file>cleanup.c</file>
<file>createsurface.c</file>
<file>iface_clipper.c</file>
<file>iface_color.c</file>

View file

@ -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: