mirror of
https://github.com/reactos/reactos.git
synced 2025-08-03 17:56:00 +00:00
Implement GetSurfaceDesc
svn path=/trunk/; revision=21533
This commit is contained in:
parent
6f2a74079c
commit
a477c01d94
4 changed files with 72 additions and 54 deletions
|
@ -13,7 +13,7 @@
|
|||
|
||||
HRESULT Hal_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDESC2 pDDSD, IDirectDrawSurfaceImpl *ppSurf, IUnknown *pUnkOuter)
|
||||
{
|
||||
//UINT i;
|
||||
// UINT i;
|
||||
IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
|
||||
IDirectDrawSurfaceImpl* That = ppSurf;
|
||||
|
||||
|
@ -101,26 +101,26 @@ HRESULT Hal_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDESC2 pDDS
|
|||
}
|
||||
else if (pDDSD->ddsCaps.dwCaps & DDSCAPS_OVERLAY)
|
||||
{
|
||||
DX_STUB_str( "Can not create overlay surface");
|
||||
////memset(&This->mddsdOverlay, 0, sizeof(DDSURFACEDESC));
|
||||
//memcpy(&This->mddsdOverlay,pDDSD,sizeof(DDSURFACEDESC));
|
||||
//This->mddsdOverlay.dwSize = sizeof(DDSURFACEDESC);
|
||||
////This->mddsdOverlay.dwFlags = DDSD_CAPS | DDSD_PIXELFORMAT | DDSD_BACKBUFFERCOUNT | DDSD_WIDTH | DDSD_HEIGHT;
|
||||
// DX_STUB_str( "Can not create overlay surface");
|
||||
// memset(&That->Surf->mddsdOverlay, 0, sizeof(DDSURFACEDESC));
|
||||
// memcpy(&That->Surf->mddsdOverlay,pDDSD,sizeof(DDSURFACEDESC));
|
||||
// That->Surf->mddsdOverlay.dwSize = sizeof(DDSURFACEDESC);
|
||||
//That->Surf->mddsdOverlay.dwFlags = DDSD_CAPS | DDSD_PIXELFORMAT | DDSD_BACKBUFFERCOUNT | DDSD_WIDTH | DDSD_HEIGHT;
|
||||
|
||||
////This->mddsdOverlay.ddsCaps.dwCaps = DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM | DDSCAPS_COMPLEX | DDSCAPS_FLIP;
|
||||
//That->Surf->mddsdOverlay.ddsCaps.dwCaps = DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM | DDSCAPS_COMPLEX | DDSCAPS_FLIP;
|
||||
|
||||
////This->mddsdOverlay.dwWidth = 100; //pels;
|
||||
////This->mddsdOverlay.dwHeight = 100; // lines;
|
||||
////This->mddsdOverlay.dwBackBufferCount = 1; //cBuffers;
|
||||
//That->Surf->mddsdOverlay.dwWidth = 100; //pels;
|
||||
//That->Surf->mddsdOverlay.dwHeight = 100; // lines;
|
||||
//That->Surf->mddsdOverlay.dwBackBufferCount = 1; //cBuffers;
|
||||
|
||||
////This->mddsdOverlay.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
|
||||
////This->mddsdOverlay.ddpfPixelFormat.dwFlags = DDPF_RGB;
|
||||
////This->mddsdOverlay.ddpfPixelFormat.dwRGBBitCount = 32;
|
||||
//That->Surf->mddsdOverlay.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
|
||||
//That->Surf->mddsdOverlay.ddpfPixelFormat.dwFlags = DDPF_RGB;
|
||||
//That->Surf->mddsdOverlay.ddpfPixelFormat.dwRGBBitCount = 32;
|
||||
|
||||
//mDdCanCreateSurface.lpDD = &This->mDDrawGlobal;
|
||||
//mDdCanCreateSurface.CanCreateSurface = This->mCallbacks.HALDD.CanCreateSurface;
|
||||
//mDdCanCreateSurface.bIsDifferentPixelFormat = TRUE; //isDifferentPixelFormat;
|
||||
//mDdCanCreateSurface.lpDDSurfaceDesc = &This->mddsdOverlay; // pDDSD;
|
||||
//mDdCanCreateSurface.lpDDSurfaceDesc = &That->Surf->mddsdOverlay; // pDDSD;
|
||||
|
||||
|
||||
//if (This->mHALInfo.lpDDCallbacks->CanCreateSurface(&mDdCanCreateSurface)== DDHAL_DRIVER_NOTHANDLED)
|
||||
|
@ -133,40 +133,40 @@ HRESULT Hal_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDESC2 pDDS
|
|||
// return DDERR_NOTINITIALIZED;
|
||||
//}
|
||||
|
||||
//memset(&This->mOverlayGlobal, 0, sizeof(DDRAWI_DDRAWSURFACE_GBL));
|
||||
//This->mOverlayGlobal.dwGlobalFlags = 0;
|
||||
//This->mOverlayGlobal.lpDD = &This->mDDrawGlobal;
|
||||
//This->mOverlayGlobal.lpDDHandle = &This->mDDrawGlobal;
|
||||
//This->mOverlayGlobal.wWidth = (WORD)This->mddsdOverlay.dwWidth;
|
||||
//This->mOverlayGlobal.wHeight = (WORD)This->mddsdOverlay.dwHeight;
|
||||
//This->mOverlayGlobal.lPitch = -1;
|
||||
//This->mOverlayGlobal.ddpfSurface = This->mddsdOverlay.ddpfPixelFormat;
|
||||
//memset(&That->Surf->mOverlayGlobal, 0, sizeof(DDRAWI_DDRAWSURFACE_GBL));
|
||||
//That->Surf->mOverlayGlobal.dwGlobalFlags = 0;
|
||||
//That->Surf->mOverlayGlobal.lpDD = &This->mDDrawGlobal;
|
||||
//That->Surf->mOverlayGlobal.lpDDHandle = &This->mDDrawGlobal;
|
||||
//That->Surf->mOverlayGlobal.wWidth = (WORD)That->Surf->mddsdOverlay.dwWidth;
|
||||
//That->Surf->mOverlayGlobal.wHeight = (WORD)That->Surf->mddsdOverlay.dwHeight;
|
||||
//That->Surf->mOverlayGlobal.lPitch = -1;
|
||||
//That->Surf->mOverlayGlobal.ddpfSurface = That->Surf->mddsdOverlay.ddpfPixelFormat;
|
||||
|
||||
//// setup front- and backbuffer surfaces
|
||||
//UINT cSurfaces = This->mddsdOverlay.dwBackBufferCount + 1;
|
||||
//UINT cSurfaces = That->Surf->mddsdOverlay.dwBackBufferCount + 1;
|
||||
//for (i = 0; i < cSurfaces; i++)
|
||||
//{
|
||||
// memset(&This->mOverlayMore[i], 0, sizeof(DDRAWI_DDRAWSURFACE_MORE));
|
||||
// This->mOverlayMore[i].dwSize = sizeof(DDRAWI_DDRAWSURFACE_MORE);
|
||||
// memset(&That->Surf->mOverlayMore[i], 0, sizeof(DDRAWI_DDRAWSURFACE_MORE));
|
||||
// That->Surf->mOverlayMore[i].dwSize = sizeof(DDRAWI_DDRAWSURFACE_MORE);
|
||||
|
||||
// memset(&This->mOverlayLocal[i], 0, sizeof(DDRAWI_DDRAWSURFACE_LCL));
|
||||
// This->mOverlayLocal[i].lpGbl = &This->mOverlayGlobal;
|
||||
// This->mOverlayLocal[i].lpSurfMore = &This->mOverlayMore[i];
|
||||
// This->mOverlayLocal[i].dwProcessId = GetCurrentProcessId();
|
||||
// This->mOverlayLocal[i].dwFlags = (i == 0) ?
|
||||
// memset(&That->Surf->mOverlayLocal[i], 0, sizeof(DDRAWI_DDRAWSURFACE_LCL));
|
||||
// That->Surf->mOverlayLocal[i].lpGbl = &That->Surf->mOverlayGlobal;
|
||||
// That->Surf->mOverlayLocal[i].lpSurfMore = &That->Surf->mOverlayMore[i];
|
||||
// That->Surf->mOverlayLocal[i].dwProcessId = GetCurrentProcessId();
|
||||
// That->Surf->mOverlayLocal[i].dwFlags = (i == 0) ?
|
||||
// (DDRAWISURF_IMPLICITROOT|DDRAWISURF_FRONTBUFFER):
|
||||
// (DDRAWISURF_IMPLICITCREATE|DDRAWISURF_BACKBUFFER);
|
||||
|
||||
// This->mOverlayLocal[i].dwFlags |= DDRAWISURF_ATTACHED|DDRAWISURF_ATTACHED_FROM| DDRAWISURF_HASPIXELFORMAT| DDRAWISURF_HASOVERLAYDATA;
|
||||
// That->Surf->mOverlayLocal[i].dwFlags |= DDRAWISURF_ATTACHED|DDRAWISURF_ATTACHED_FROM| DDRAWISURF_HASPIXELFORMAT| DDRAWISURF_HASOVERLAYDATA;
|
||||
|
||||
// This->mOverlayLocal[i].ddsCaps.dwCaps = This->mddsdOverlay.ddsCaps.dwCaps;
|
||||
// This->mpOverlayLocals[i] = &This->mOverlayLocal[i];
|
||||
// That->Surf->mOverlayLocal[i].ddsCaps.dwCaps = That->Surf->mddsdOverlay.ddsCaps.dwCaps;
|
||||
// That->Surf->mpOverlayLocals[i] = &That->Surf->mOverlayLocal[i];
|
||||
//}
|
||||
|
||||
//for (i = 0; i < cSurfaces; i++)
|
||||
//{
|
||||
// UINT j = (i + 1) % cSurfaces;
|
||||
// if (!DdAttachSurface(This->mpOverlayLocals[i], This->mpOverlayLocals[j]))
|
||||
// if (!DdAttachSurface(That->Surf->mpOverlayLocals[i], That->Surf->mpOverlayLocals[j]))
|
||||
// {
|
||||
// // derr(L"DirectDrawImpl[%08x]::__setupDevice DdAttachSurface(%d, %d) failed", this, i, j);
|
||||
// return DD_FALSE;
|
||||
|
@ -175,8 +175,8 @@ HRESULT Hal_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDESC2 pDDS
|
|||
|
||||
//mDdCreateSurface.lpDD = &This->mDDrawGlobal;
|
||||
//mDdCreateSurface.CreateSurface = This->mCallbacks.HALDD.CreateSurface;
|
||||
//mDdCreateSurface.lpDDSurfaceDesc = &This->mddsdOverlay;//pDDSD;
|
||||
//mDdCreateSurface.lplpSList = This->mpOverlayLocals; //cSurfaces;
|
||||
//mDdCreateSurface.lpDDSurfaceDesc = &That->Surf->mddsdOverlay;//pDDSD;
|
||||
//mDdCreateSurface.lplpSList = That->Surf->mpOverlayLocals; //cSurfaces;
|
||||
//mDdCreateSurface.dwSCnt = 1 ; //ppSurfaces;
|
||||
|
||||
//if (This->mHALInfo.lpDDCallbacks->CreateSurface(&mDdCreateSurface) == DDHAL_DRIVER_NOTHANDLED)
|
||||
|
@ -193,7 +193,7 @@ HRESULT Hal_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDESC2 pDDS
|
|||
//mDdUpdateOverlay.lpDD = &This->mDDrawGlobal;
|
||||
//mDdUpdateOverlay.UpdateOverlay = This->mCallbacks.HALDDSurface.UpdateOverlay;
|
||||
//mDdUpdateOverlay.lpDDDestSurface = That->Surf->mpPrimaryLocals[0];
|
||||
//mDdUpdateOverlay.lpDDSrcSurface = This->mpOverlayLocals[0];//pDDSurface;
|
||||
//mDdUpdateOverlay.lpDDSrcSurface = That->Surf->mpOverlayLocals[0];//pDDSurface;
|
||||
//mDdUpdateOverlay.dwFlags = DDOVER_SHOW;
|
||||
|
||||
//mDdUpdateOverlay.rDest.top = 0;
|
||||
|
@ -216,7 +216,7 @@ HRESULT Hal_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDESC2 pDDS
|
|||
// return mDdUpdateOverlay.ddRVal;
|
||||
//}
|
||||
|
||||
//return DD_OK;
|
||||
return DD_OK;
|
||||
return DDERR_INVALIDSURFACETYPE;
|
||||
|
||||
}
|
||||
|
|
|
@ -144,9 +144,7 @@ Main_DirectDraw_Release (LPDIRECTDRAW7 iface)
|
|||
if (iface!=NULL)
|
||||
{
|
||||
ref = InterlockedDecrement(&This->ref);
|
||||
|
||||
DX_WINDBG_trace_res((INT)This->mDDrawGlobal.dwRefCnt,(INT)ref,(INT)0);
|
||||
|
||||
|
||||
if (ref == 0)
|
||||
{
|
||||
// set resoltion back to the one in registry
|
||||
|
@ -481,22 +479,19 @@ HRESULT WINAPI Main_DirectDraw_GetDisplayMode(LPDIRECTDRAW7 iface, LPDDSURFACEDE
|
|||
pDDSD->dwWidth = This->mDDrawGlobal.vmiData.dwDisplayWidth;
|
||||
pDDSD->lPitch = This->mDDrawGlobal.vmiData.lDisplayPitch;
|
||||
pDDSD->dwRefreshRate = This->mDDrawGlobal.dwMonitorFrequency;
|
||||
|
||||
pDDSD->dwAlphaBitDepth = This->mDDrawGlobal.vmiData.ddpfDisplay.dwAlphaBitDepth;
|
||||
|
||||
RtlCopyMemory(&pDDSD->ddpfPixelFormat,&This->mDDrawGlobal.vmiData.ddpfDisplay,sizeof(DDPIXELFORMAT));
|
||||
RtlCopyMemory(&pDDSD->ddsCaps,&This->mDDrawGlobal.ddCaps,sizeof(DDCORECAPS));
|
||||
|
||||
RtlCopyMemory(&pDDSD->ddckCKDestOverlay,&This->mDDrawGlobal.ddckCKDestOverlay,sizeof(DDCOLORKEY));
|
||||
RtlCopyMemory(&pDDSD->ddckCKSrcOverlay,&This->mDDrawGlobal.ddckCKSrcOverlay,sizeof(DDCOLORKEY));
|
||||
|
||||
/* have not check where I should get hold of this info yet
|
||||
DWORD dwBackBufferCount;
|
||||
DWORD dwAlphaBitDepth;
|
||||
DWORD dwBackBufferCount;
|
||||
DWORD dwReserved;
|
||||
LPVOID lpSurface;
|
||||
union
|
||||
{
|
||||
DDCOLORKEY ddckCKDestOverlay;
|
||||
DWORD dwEmptyFaceColor;
|
||||
}
|
||||
DDCOLORKEY ddckCKDestBlt;
|
||||
DDCOLORKEY ddckCKSrcOverlay;
|
||||
LPVOID lpSurface;
|
||||
DDCOLORKEY ddckCKDestBlt;
|
||||
DDCOLORKEY ddckCKSrcBlt;
|
||||
DWORD dwTextureStage;
|
||||
*/
|
||||
|
|
|
@ -406,9 +406,24 @@ HRESULT WINAPI
|
|||
Main_DDrawSurface_GetSurfaceDesc(LPDIRECTDRAWSURFACE7 iface,
|
||||
LPDDSURFACEDESC2 pDDSD)
|
||||
{
|
||||
DWORD dwSize;
|
||||
DX_WINDBG_trace();
|
||||
|
||||
DX_STUB;
|
||||
IDirectDrawSurfaceImpl *This = (IDirectDrawSurfaceImpl *)iface;
|
||||
|
||||
dwSize = pDDSD->dwSize;
|
||||
|
||||
if ((dwSize != sizeof(DDSURFACEDESC)) &&
|
||||
(dwSize != sizeof(DDSURFACEDESC2)))
|
||||
{
|
||||
return DDERR_GENERIC;
|
||||
}
|
||||
|
||||
RtlZeroMemory(pDDSD,dwSize);
|
||||
memcpy(pDDSD, &This->Surf->mddsdPrimary, sizeof(DDSURFACEDESC));
|
||||
pDDSD->dwSize = dwSize;
|
||||
|
||||
return DD_OK;
|
||||
}
|
||||
|
||||
HRESULT WINAPI
|
||||
|
|
|
@ -92,6 +92,14 @@ typedef struct
|
|||
DDRAWI_DDRAWCLIPPER_GBL mPrimaryClipperGlobal;
|
||||
|
||||
DDSURFACEDESC mddsdPrimary;
|
||||
|
||||
DDRAWI_DDRAWSURFACE_GBL mOverlayGlobal;
|
||||
DDRAWI_DDRAWSURFACE_LCL mOverlayLocal[6];
|
||||
DDRAWI_DDRAWSURFACE_LCL *mpOverlayLocals[6];
|
||||
DDRAWI_DDRAWSURFACE_MORE mOverlayMore[6];
|
||||
|
||||
DDSURFACEDESC mddsdOverlay;
|
||||
|
||||
} DxSurf;
|
||||
|
||||
typedef struct
|
||||
|
@ -229,7 +237,7 @@ DWORD CALLBACK HelDdCanCreateSurface(LPDDHAL_CANCREATESURFACEDATA pccsd);
|
|||
char buffer[1024]; \
|
||||
sprintf ( buffer, "Enter Function %s (%s:%d)\n", __FUNCTION__,__FILE__,__LINE__ ); \
|
||||
OutputDebugStringA(buffer); \
|
||||
firstcallx = FALSE; \
|
||||
firstcallx = TRUE; \
|
||||
}
|
||||
|
||||
#define DX_WINDBG_trace_res(width,height,bpp) \
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue