Clean up the code bit, and move some code. nothing new really, it is basic new redesign for createsurface code.

svn path=/trunk/; revision=25174
This commit is contained in:
Magnus Olsen 2006-12-15 23:54:15 +00:00
parent b3b09c712f
commit 91742d22de

View file

@ -167,7 +167,10 @@ HRESULT WINAPI Main_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDE
{
LPDDRAWI_DIRECTDRAW_INT This = (LPDDRAWI_DIRECTDRAW_INT)iface;
LPDDRAWI_DDRAWSURFACE_INT That = NULL;
LPDDRAWI_DDRAWSURFACE_INT *That = NULL;
LPDDRAWI_DDRAWSURFACE_LCL *lpLcl;
DWORD dwHowManySurface = 1;
DWORD i;
if (pUnkOuter!=NULL)
{
@ -189,6 +192,43 @@ HRESULT WINAPI Main_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDE
{
return DDERR_UNSUPPORTED;
}
if( (pDDSD->ddsCaps.dwCaps & DDSCAPS_VIDEOMEMORY) &&
(pDDSD->ddsCaps.dwCaps & DDSCAPS_SYSTEMMEMORY ) )
{
return DDERR_INVALIDCAPS;
}
/* Calc how many surface we need setup */
if (pDDSD->ddsCaps.dwCaps &DDSD_BACKBUFFERCOUNT)
{
/* One primary + xx backbuffer */
dwHowManySurface |= pDDSD->dwBackBufferCount;
}
/* Alloc all memory we need for all createsurface here */
lpLcl = DxHeapMemAlloc(sizeof(LPDDRAWI_DDRAWSURFACE_LCL) * dwHowManySurface);
if (lpLcl == NULL)
{
return DDERR_OUTOFMEMORY;
}
That = DxHeapMemAlloc(sizeof(LPDDRAWI_DDRAWSURFACE_INT) * dwHowManySurface);
if (That == NULL)
{
return DDERR_OUTOFMEMORY;
}
for (i=0;i<dwHowManySurface;i++)
{
That[i] = (LPDDRAWI_DDRAWSURFACE_INT) DxHeapMemAlloc(sizeof(DDRAWI_DDRAWSURFACE_INT));
lpLcl[i] = (LPDDRAWI_DDRAWSURFACE_LCL) DxHeapMemAlloc(sizeof(DDRAWI_DDRAWSURFACE_LCL));
if ( (lpLcl[i] == NULL) ||
(That[i] == NULL))
{
return DDERR_OUTOFMEMORY;
}
That[i]->lpLcl = lpLcl[i];
}
@ -232,7 +272,7 @@ HRESULT WINAPI Main_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDE
/* Create the surface */
if (pDDSD->ddsCaps.dwCaps & DDSCAPS_PRIMARYSURFACE)
{
CreatePrimarySurface(This,That,pDDSD);
CreatePrimarySurface(This,That,lpLcl,pDDSD);
}
if (pDDSD->ddsCaps.dwCaps & DDSCAPS_OVERLAY)
{
@ -283,8 +323,7 @@ HRESULT WINAPI Main_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDE
DX_STUB_str( "Can not create offscreenplain surface");
}
*ppSurf = (LPDIRECTDRAWSURFACE7)This->lpLcl->lpPrimary;
*ppSurf = (LPDIRECTDRAWSURFACE7)That[0];
return DD_OK;
}