Test code to create surface. it is a big hack to create a primare surface.

but we success create a primary surface. with this hack. 

svn path=/trunk/; revision=25104
This commit is contained in:
Magnus Olsen 2006-12-09 18:31:31 +00:00
parent 9360360cb5
commit 465b3d78e8

View file

@ -185,6 +185,7 @@ HRESULT WINAPI Main_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDE
LPDDRAWI_DDRAWSURFACE_INT That;
DDHAL_CANCREATESURFACEDATA mDdCanCreateSurface;
DDHAL_CREATESURFACEDATA mDdCreateSurface;
LPDDRAWI_DDRAWSURFACE_MORE SurfaceMore;
if (pUnkOuter!=NULL)
{
@ -250,6 +251,7 @@ HRESULT WINAPI Main_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDE
/* own code now */
mDdCanCreateSurface.lpDD = This->lpLcl->lpGbl;
mDdCanCreateSurface.bIsDifferentPixelFormat = FALSE;
mDdCanCreateSurface.lpDDSurfaceDesc = (LPDDSURFACEDESC) pDDSD;
@ -261,43 +263,77 @@ HRESULT WINAPI Main_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDE
mDdCreateSurface.dwSCnt = That->dwIntRefCnt + 1; // is this correct
mDdCreateSurface.lpDDSurfaceDesc = (LPDDSURFACEDESC) pDDSD;
//mDdCreateSurface.lplpSList = That->lpLcl->lpSurfMore->slist;
mDdCreateSurface.lplpSList = &That->lpLcl;
//mDdCreateSurface.lplpSList = &That->lpLcl;
SurfaceMore = DxHeapMemAlloc(sizeof(DDRAWI_DDRAWSURFACE_MORE));
if (SurfaceMore == NULL)
{
return DDERR_OUTOFMEMORY;
}
if (pDDSD->ddsCaps.dwCaps & DDSCAPS_PRIMARYSURFACE)
{
DDRAWI_DDRAWSURFACE_LCL *mpPrimaryLocals[1];
DDSURFACEDESC mddsdPrimary;
/* we only create one surface it is primary */
//LPDDRAWI_DDRAWSURFACE_LCL surf;
This->lpLcl->lpGbl->lp16DD = This->lpLcl->lpGbl;
That->lpLcl->lpSurfMore = SurfaceMore;
DX_STUB_str( "Can not create primary surface well yet");
ZeroMemory(&mddsdPrimary, sizeof(DDSURFACEDESC));
mddsdPrimary.dwSize = sizeof(DDSURFACEDESC);
mddsdPrimary.dwFlags = DDSD_CAPS;
mddsdPrimary.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY | DDSCAPS_VISIBLE;
if (mDdCanCreateSurface.CanCreateSurface(&mDdCanCreateSurface) == DDHAL_DRIVER_NOTHANDLED)
{
DX_STUB_str( "Can not create surface ");
return DDERR_NOTINITIALIZED;
}
mDdCanCreateSurface.lpDD = This->lpLcl->lpGbl;
mDdCanCreateSurface.CanCreateSurface = This->lpLcl->lpDDCB->HALDD.CanCreateSurface;
mDdCanCreateSurface.bIsDifferentPixelFormat = FALSE; //isDifferentPixelFormat;
mDdCanCreateSurface.lpDDSurfaceDesc = &mddsdPrimary; // pDDSD;
if (mDdCanCreateSurface.ddRVal != DD_OK)
{
DX_STUB_str( "Fail");
return mDdCanCreateSurface.ddRVal;
}
if (mDdCanCreateSurface.CanCreateSurface(&mDdCanCreateSurface)== DDHAL_DRIVER_NOTHANDLED)
{
return DDERR_NOTINITIALIZED;
}
DX_STUB_str( "Can not create primary surface well yet");
if (mDdCanCreateSurface.ddRVal != DD_OK)
{
return DDERR_NOTINITIALIZED;
}
if (mDdCreateSurface.CreateSurface(&mDdCreateSurface) == DDHAL_DRIVER_NOTHANDLED)
{
DX_STUB_str( "Can not create surface fail");
return DDERR_NOTINITIALIZED;
}
That->lpLcl->lpGbl->dwGlobalFlags = DDRAWISURFGBL_ISGDISURFACE;
That->lpLcl->lpGbl->lpDD = This->lpLcl->lpGbl;
That->lpLcl->lpGbl->lpDDHandle = This->lpLcl->lpGbl;
That->lpLcl->lpGbl->wWidth = 1024; //(WORD)mpModeInfos[0].dwWidth;
That->lpLcl->lpGbl->wHeight = 768; //(WORD)mpModeInfos[0].dwHeight;
That->lpLcl->lpGbl->lPitch = 32; //mpModeInfos[0].lPitch;
DX_STUB_str( "Can not create primary surface well yet");
memset(SurfaceMore, 0, sizeof(DDRAWI_DDRAWSURFACE_MORE));
SurfaceMore->dwSize = sizeof(DDRAWI_DDRAWSURFACE_MORE);
Main_DirectDraw_AddRef((LPDIRECTDRAW7)This);
Main_DDrawSurface_AddRef((LPDIRECTDRAWSURFACE7)That);
return mDdCreateSurface.ddRVal;
That->lpLcl->lpGbl = That->lpLcl->lpGbl;
That->lpLcl->lpSurfMore = SurfaceMore;
That->lpLcl->dwProcessId = GetCurrentProcessId();
That->lpLcl->dwFlags = DDRAWISURF_PARTOFPRIMARYCHAIN|DDRAWISURF_HASOVERLAYDATA;
That->lpLcl->ddsCaps.dwCaps = mddsdPrimary.ddsCaps.dwCaps;
mpPrimaryLocals[0] = That->lpLcl;
mDdCreateSurface.lpDD = This->lpLcl->lpGbl;
mDdCreateSurface.CreateSurface = This->lpLcl->lpDDCB->HALDD.CreateSurface;
mDdCreateSurface.lpDDSurfaceDesc = &mddsdPrimary;//pDDSD;
mDdCreateSurface.lplpSList = mpPrimaryLocals; //cSurfaces;
mDdCreateSurface.dwSCnt = 1 ; //ppSurfaces;
if (mDdCreateSurface.CreateSurface(&mDdCreateSurface) == DDHAL_DRIVER_NOTHANDLED)
{
return DDERR_NOTINITIALIZED;
}
if (mDdCreateSurface.ddRVal != DD_OK)
{
return mDdCreateSurface.ddRVal;
}
return DD_OK;
}
else if (pDDSD->ddsCaps.dwCaps & DDSCAPS_OVERLAY)
{