commit some bugfix for ddraw createsurface, fixing comping as well

svn path=/trunk/; revision=26738
This commit is contained in:
Magnus Olsen 2007-05-12 19:20:54 +00:00
parent e535eb641e
commit 053c08fc8e
4 changed files with 20 additions and 9 deletions

View file

@ -29,6 +29,7 @@ Main_DirectDraw_QueryInterface (LPDIRECTDRAW7 iface,
{ {
/* DirectDraw7 Vtable */ /* DirectDraw7 Vtable */
This->lpVtbl = &DirectDraw7_Vtable; This->lpVtbl = &DirectDraw7_Vtable;
This->lpLcl->dwLocalFlags = This->lpLcl->dwLocalFlags + DDRAWILCL_DIRECTDRAW7;
*obj = &This->lpVtbl; *obj = &This->lpVtbl;
} }
else else
@ -155,11 +156,11 @@ HRESULT WINAPI Main_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDE
if (pDDSD->dwSize == sizeof(DDSURFACEDESC)) if (pDDSD->dwSize == sizeof(DDSURFACEDESC))
{ {
CopyDDSurfDescToDDSurfDesc2(&dd_desc_v2,pDDSD); CopyDDSurfDescToDDSurfDesc2(&dd_desc_v2, (LPDDSURFACEDESC)pDDSD);
} }
else if (pDDSD->dwSize == sizeof(DDSURFACEDESC2)) else if (pDDSD->dwSize == sizeof(DDSURFACEDESC2))
{ {
RtlCopyMemory(&dd_desc_v2,pDDSD,sizeof(DDSURFACEDESC2)); RtlCopyMemory(&dd_desc_v2, pDDSD,sizeof(DDSURFACEDESC2));
} }
else else
{ {
@ -168,13 +169,13 @@ HRESULT WINAPI Main_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDE
} }
/* check if this process belong to this ddraw */ /* check if this process belong to this ddraw */
if ( dd_int->lcl->dwProcessId != GetCurrentProcessId() ) if ( dd_int->lpLcl->dwProcessId != GetCurrentProcessId() )
{ {
/* FIXME send back right return code */ /* FIXME send back right return code */
return DDERR_GENERIC; return DDERR_GENERIC;
} }
ret = internal_CreateSurface(dd_int,dd_desc_v2,ppSurf,pUnkOuter); ret = Internal_CreateSurface(dd_int,&dd_desc_v2, ppSurf,pUnkOuter);
LeaveCriticalSection(&ddcs); LeaveCriticalSection(&ddcs);
return ret; return ret;

View file

@ -10,11 +10,19 @@
#include "rosdraw.h" #include "rosdraw.h"
HRESULT HRESULT
Internal_CreateSurface(LPDDRAWI_DIRECTDRAW_INT pDDraw, Internal_CreateSurface( LPDDRAWI_DIRECTDRAW_INT pDDraw, LPDDSURFACEDESC2 pDDSD,
LPDDRAWI_DDRAWSURFACE_LCL *lpLcl, LPDIRECTDRAWSURFACE7 *ppSurf, IUnknown *pUnkOuter)
LPDDSURFACEDESC2 pDDSD)
{ {
return DDERR_GENERIC; if (!pDDraw->lpLcl->dwLocalFlags & DDRAWILCL_DIRECTDRAW7)
{
/* it is directdraw 1-6 so no DirectD3D support */
}
else
{
/* directdraw 7 support */
}
return DDERR_GENERIC;
} }
void CopyDDSurfDescToDDSurfDesc2(LPDDSURFACEDESC2 dst_pDesc, LPDDSURFACEDESC src_pDesc) void CopyDDSurfDescToDDSurfDesc2(LPDDSURFACEDESC2 dst_pDesc, LPDDSURFACEDESC src_pDesc)

View file

@ -71,4 +71,4 @@ DWORD CALLBACK HelDdFlipToGDISurface(LPDDHAL_FLIPTOGDISURFACEDATA lpFlipToGDISu
HRESULT CreateOverlaySurface(LPDDRAWI_DIRECTDRAW_INT This, LPDDRAWI_DDRAWSURFACE_INT *That, LPDDSURFACEDESC2 pDDSD); HRESULT CreateOverlaySurface(LPDDRAWI_DIRECTDRAW_INT This, LPDDRAWI_DDRAWSURFACE_INT *That, LPDDSURFACEDESC2 pDDSD);
HRESULT CreateBackBufferSurface(LPDDRAWI_DIRECTDRAW_INT This, LPDDRAWI_DDRAWSURFACE_INT *That, LPDDRAWI_DDRAWSURFACE_LCL *lpLcl, LPDDSURFACEDESC2 pDDSD); HRESULT CreateBackBufferSurface(LPDDRAWI_DIRECTDRAW_INT This, LPDDRAWI_DDRAWSURFACE_INT *That, LPDDRAWI_DDRAWSURFACE_LCL *lpLcl, LPDDSURFACEDESC2 pDDSD);
HRESULT CreatePrimarySurface(LPDDRAWI_DIRECTDRAW_INT This, LPDDRAWI_DDRAWSURFACE_INT *That,LPDDRAWI_DDRAWSURFACE_LCL *lpLcl, LPDDSURFACEDESC2 pDDSD); HRESULT CreatePrimarySurface(LPDDRAWI_DIRECTDRAW_INT This, LPDDRAWI_DDRAWSURFACE_INT *That,LPDDRAWI_DDRAWSURFACE_LCL *lpLcl, LPDDSURFACEDESC2 pDDSD);
HRESULT Internal_CreateSurface(LPDDRAWI_DIRECTDRAW_INT, LPDDRAWI_DDRAWSURFACE_LCL*, LPDDSURFACEDESC2);

View file

@ -24,6 +24,8 @@ HRESULT WINAPI StartDirectDrawHal(LPDIRECTDRAW* iface, BOOL reenable);
HRESULT WINAPI StartDirectDrawHel(LPDIRECTDRAW* iface, BOOL reenable); HRESULT WINAPI StartDirectDrawHel(LPDIRECTDRAW* iface, BOOL reenable);
HRESULT WINAPI Create_DirectDraw (LPGUID pGUID, LPDIRECTDRAW* pIface, REFIID id, BOOL ex); HRESULT WINAPI Create_DirectDraw (LPGUID pGUID, LPDIRECTDRAW* pIface, REFIID id, BOOL ex);
HRESULT WINAPI ReCreateDirectDraw(LPDIRECTDRAW* iface); HRESULT WINAPI ReCreateDirectDraw(LPDIRECTDRAW* iface);
HRESULT Internal_CreateSurface( LPDDRAWI_DIRECTDRAW_INT pDDraw, LPDDSURFACEDESC2 pDDSD,
LPDIRECTDRAWSURFACE7 *ppSurf, IUnknown *pUnkOuter);
/* convert DDSURFACEDESC to DDSURFACEDESC2 */ /* convert DDSURFACEDESC to DDSURFACEDESC2 */
void CopyDDSurfDescToDDSurfDesc2(LPDDSURFACEDESC2 dst_pDesc, LPDDSURFACEDESC src_pDesc); void CopyDDSurfDescToDDSurfDesc2(LPDDSURFACEDESC2 dst_pDesc, LPDDSURFACEDESC src_pDesc);