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, LPDDRAWI_DDRAWSURFACE_INT That,
LPDDSURFACEDESC2 pDDSD) LPDDSURFACEDESC2 pDDSD)
{ {
DDHAL_CANCREATESURFACEDATA mDdCanCreateSurface;
DDHAL_CREATESURFACEDATA mDdCreateSurface;
DWORD t; DWORD t;
/* we are building the backbuffersurface pointer list /* we are building the backbuffersurface pointer list
* and create the backbuffer surface and set it up * and create the backbuffer surface and set it up
*/ */
@ -44,7 +47,7 @@ CreateBackBufferSurface(LPDDRAWI_DIRECTDRAW_INT This,
return DDERR_OUTOFMEMORY; 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->lpVtbl = &DirectDrawSurface7_Vtable;
That->lpLcl->lpSurfMore->dwSize = sizeof(DDRAWI_DDRAWSURFACE_MORE); That->lpLcl->lpSurfMore->dwSize = sizeof(DDRAWI_DDRAWSURFACE_MORE);
That->lpLcl->lpSurfMore->lpDD_int = This; That->lpLcl->lpSurfMore->lpDD_int = This;
@ -112,7 +115,13 @@ CreateBackBufferSurface(LPDDRAWI_DIRECTDRAW_INT This,
return mDdCreateSurface.ddRVal; 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>main.c</file>
<file>startup.c</file> <file>startup.c</file>
<file>cleanup.c</file> <file>cleanup.c</file>
<file>createsurface.c</file>
<file>iface_clipper.c</file> <file>iface_clipper.c</file>
<file>iface_color.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_DIRECTDRAW_INT This = (LPDDRAWI_DIRECTDRAW_INT)iface;
LPDDRAWI_DDRAWSURFACE_INT That; LPDDRAWI_DDRAWSURFACE_INT That = NULL;
DDHAL_CANCREATESURFACEDATA mDdCanCreateSurface; DDHAL_CANCREATESURFACEDATA mDdCanCreateSurface;
DDHAL_CREATESURFACEDATA mDdCreateSurface; DDHAL_CREATESURFACEDATA mDdCreateSurface;
if (pUnkOuter!=NULL) if (pUnkOuter!=NULL)
{ {
@ -236,6 +236,8 @@ HRESULT WINAPI Main_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDE
if (pDDSD->dwFlags & DDSD_BACKBUFFERCOUNT) if (pDDSD->dwFlags & DDSD_BACKBUFFERCOUNT)
{ {
HRESULT retValue;
if (! pDDSD->ddsCaps.dwCaps & (DDSCAPS_FLIP | DDSCAPS_COMPLEX)) if (! pDDSD->ddsCaps.dwCaps & (DDSCAPS_FLIP | DDSCAPS_COMPLEX))
{ {
return DDERR_INVALIDPARAMS; return DDERR_INVALIDPARAMS;
@ -243,11 +245,20 @@ HRESULT WINAPI Main_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDE
if (pDDSD->dwBackBufferCount != 0) if (pDDSD->dwBackBufferCount != 0)
{ {
This->lpLcl->lpGbl->dsList = DxHeapMemAlloc(sizeof(DDRAWI_DIRECTDRAW_INT) * This->lpLcl->lpGbl->dsList = NULL;
pDDSD->dwBackBufferCount); //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 code should be a callback */
This->lpLcl->hWnd = hwnd; This->lpLcl->hWnd = hwnd;
This->lpLcl->hFocusWnd = hwnd; This->lpLcl->hFocusWnd = hwnd;
ReCreateDirectDraw((LPDIRECTDRAW*)iface); ReCreateDirectDraw((LPDIRECTDRAW*)iface);
// TODO: // TODO: