Fixed all hack in createsurface, we still have some bugs and do not create surface as we should.

but we lest create a single primary surface. 

svn path=/trunk/; revision=25113
This commit is contained in:
Magnus Olsen 2006-12-10 13:32:35 +00:00
parent 33ba72260b
commit 0fe6b951ac

View file

@ -185,7 +185,6 @@ HRESULT WINAPI Main_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDE
LPDDRAWI_DDRAWSURFACE_INT That; LPDDRAWI_DDRAWSURFACE_INT That;
DDHAL_CANCREATESURFACEDATA mDdCanCreateSurface; DDHAL_CANCREATESURFACEDATA mDdCanCreateSurface;
DDHAL_CREATESURFACEDATA mDdCreateSurface; DDHAL_CREATESURFACEDATA mDdCreateSurface;
LPDDRAWI_DDRAWSURFACE_MORE SurfaceMore;
/* /*
* check if pUnkOuter is NULL if it is not fail * check if pUnkOuter is NULL if it is not fail
@ -267,6 +266,17 @@ HRESULT WINAPI Main_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDE
return DDERR_OUTOFMEMORY; return DDERR_OUTOFMEMORY;
} }
That->lpLcl->lpSurfMore->slist = DxHeapMemAlloc(sizeof(LPDDRAWI_DDRAWSURFACE_LCL)<<1);
if (That->lpLcl->lpSurfMore->slist == NULL)
{
/* shall we free it if it fail ?? */
DxHeapMemFree(That->lpLcl->lpSurfMore);
DxHeapMemFree(That->lpLcl);
DxHeapMemFree(That);
return DDERR_OUTOFMEMORY;
}
/* setup some value */ /* setup some value */
*ppSurf = (LPDIRECTDRAWSURFACE7)That; *ppSurf = (LPDIRECTDRAWSURFACE7)That;
@ -276,6 +286,7 @@ HRESULT WINAPI Main_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDE
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;
That->lpLcl->lpSurfMore->lpDD_lcl = This->lpLcl; That->lpLcl->lpSurfMore->lpDD_lcl = This->lpLcl;
That->lpLcl->lpSurfMore->slist[0] = That->lpLcl;
That->lpLcl->dwProcessId = GetCurrentProcessId(); That->lpLcl->dwProcessId = GetCurrentProcessId();
/* this two line should be move to startup code */ /* this two line should be move to startup code */
@ -301,15 +312,13 @@ HRESULT WINAPI Main_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDE
mDdCreateSurface.ddRVal = DDERR_GENERIC; mDdCreateSurface.ddRVal = DDERR_GENERIC;
mDdCreateSurface.dwSCnt = That->dwIntRefCnt + 1; // is this correct mDdCreateSurface.dwSCnt = That->dwIntRefCnt + 1; // is this correct
mDdCreateSurface.lpDDSurfaceDesc = (LPDDSURFACEDESC) pDDSD; mDdCreateSurface.lpDDSurfaceDesc = (LPDDSURFACEDESC) pDDSD;
//mDdCreateSurface.lplpSList = That->lpLcl->lpSurfMore->slist;
//mDdCreateSurface.lplpSList = &That->lpLcl; mDdCreateSurface.lplpSList = That->lpLcl->lpSurfMore->slist;
if (pDDSD->ddsCaps.dwCaps & DDSCAPS_PRIMARYSURFACE) if (pDDSD->ddsCaps.dwCaps & DDSCAPS_PRIMARYSURFACE)
{ {
DDRAWI_DDRAWSURFACE_LCL *mpPrimaryLocals[1];
This->lpLcl->lpPrimary = That; This->lpLcl->lpPrimary = That;
That->lpLcl->lpSurfMore->slist = mpPrimaryLocals;
if (mDdCanCreateSurface.CanCreateSurface(&mDdCanCreateSurface)== DDHAL_DRIVER_NOTHANDLED) if (mDdCanCreateSurface.CanCreateSurface(&mDdCanCreateSurface)== DDHAL_DRIVER_NOTHANDLED)
{ {
@ -321,15 +330,32 @@ HRESULT WINAPI Main_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDE
return DDERR_NOTINITIALIZED; return DDERR_NOTINITIALIZED;
} }
That->lpLcl->lpGbl->wWidth = This->lpLcl->lpGbl->vmiData.dwDisplayWidth; /* FIXME
That->lpLcl->lpGbl->wHeight = This->lpLcl->lpGbl->vmiData.dwDisplayHeight; * check the value from pDDSD and use it as size
That->lpLcl->lpGbl->lPitch = This->lpLcl->lpGbl->vmiData.lDisplayPitch; */
That->lpLcl->dwFlags = DDRAWISURF_PARTOFPRIMARYCHAIN|DDRAWISURF_HASOVERLAYDATA; if (This->lpLcl->dwLocalFlags & DDRAWILCL_ISFULLSCREEN)
{
That->lpLcl->lpGbl->wWidth = This->lpLcl->lpGbl->vmiData.dwDisplayWidth;
That->lpLcl->lpGbl->wHeight = This->lpLcl->lpGbl->vmiData.dwDisplayHeight;
That->lpLcl->lpGbl->lPitch = This->lpLcl->lpGbl->vmiData.lDisplayPitch;
}
else
{
RECT rect;
if(GetWindowRect((HWND)This->lpLcl->hWnd, &rect))
{
That->lpLcl->lpGbl->wWidth = rect.right - rect.left;
That->lpLcl->lpGbl->wHeight = rect.bottom - rect.top;
That->lpLcl->lpGbl->lPitch = This->lpLcl->lpGbl->vmiData.lDisplayPitch;
}
}
// That->lpLcl->dwFlags = DDRAWISURF_PARTOFPRIMARYCHAIN|DDRAWISURF_HASOVERLAYDATA;
That->lpLcl->ddsCaps.dwCaps = pDDSD->ddsCaps.dwCaps; That->lpLcl->ddsCaps.dwCaps = pDDSD->ddsCaps.dwCaps;
mpPrimaryLocals[0] = That->lpLcl;
mDdCreateSurface.lplpSList = That->lpLcl->lpSurfMore->slist; mDdCreateSurface.lplpSList = That->lpLcl->lpSurfMore->slist;
if (mDdCreateSurface.CreateSurface(&mDdCreateSurface) == DDHAL_DRIVER_NOTHANDLED) if (mDdCreateSurface.CreateSurface(&mDdCreateSurface) == DDHAL_DRIVER_NOTHANDLED)