Author: greatlrd
Date: Thu Apr 13 13:14:32 2006
New Revision: 21576
URL:
http://svn.reactos.ru/svn/reactos?rev=21576&view=rev
Log:
This commit is redesign off ddraw primare surface, we need reach primare surface from
every where. We have now a expriment code that show how to create overlay with this new
design but we do not set it up right yet.
Modified:
trunk/reactos/dll/directx/ddraw/hal/surface_hal.c
trunk/reactos/dll/directx/ddraw/main/ddraw_main.c
trunk/reactos/dll/directx/ddraw/main/surface_main.c
trunk/reactos/dll/directx/ddraw/rosdraw.h
Modified: trunk/reactos/dll/directx/ddraw/hal/surface_hal.c
URL:
http://svn.reactos.ru/svn/reactos/trunk/reactos/dll/directx/ddraw/hal/surfa…
==============================================================================
--- trunk/reactos/dll/directx/ddraw/hal/surface_hal.c (original)
+++ trunk/reactos/dll/directx/ddraw/hal/surface_hal.c Thu Apr 13 13:14:32 2006
@@ -30,14 +30,14 @@
return DD_FALSE;
}
- if (!(This->owner->mDDrawGlobal.lpDDCBtmp->HALDDSurface.dwFlags &
DDHAL_SURFCB32_BLT))
+ if (!(This->Owner->mDDrawGlobal.lpDDCBtmp->HALDDSurface.dwFlags &
DDHAL_SURFCB32_BLT))
{
return DDERR_NODRIVERSUPPORT;
}
- mDdBlt.lpDDDestSurface = This->Surf->mpPrimaryLocals[0];
-
- if (!DdResetVisrgn(This->Surf->mpPrimaryLocals[0], NULL))
+ mDdBlt.lpDDDestSurface = This->Owner->mpPrimaryLocals[0];
+
+ if (!DdResetVisrgn(This->Owner->mpPrimaryLocals[0], NULL))
{
return DDERR_NOGDI;
}
@@ -62,12 +62,12 @@
if (src != NULL)
{
- mDdBlt.lpDDSrcSurface = That->Surf->mpPrimaryLocals[0];
- }
-
- mDdBlt.lpDD = &This->owner->mDDrawGlobal;
- mDdBlt.Blt = This->owner->mCallbacks.HALDDSurface.Blt;
- mDdBlt.lpDDDestSurface = This->Surf->mpPrimaryLocals[0];
+ mDdBlt.lpDDSrcSurface = That->Surf->mpSurfLocals[0];
+ }
+
+ mDdBlt.lpDD = &This->Owner->mDDrawGlobal;
+ mDdBlt.Blt = This->Owner->mCallbacks.HALDDSurface.Blt;
+ mDdBlt.lpDDDestSurface = This->Owner->mpPrimaryLocals[0];
mDdBlt.dwFlags = dwFlags;
@@ -107,13 +107,13 @@
}
Lock.ddRVal = DDERR_NOTPALETTIZED;
- Lock.Lock = This->owner->mCallbacks.HALDDSurface.Lock;
+ Lock.Lock = This->Owner->mCallbacks.HALDDSurface.Lock;
Lock.dwFlags = flags;
- Lock.lpDDSurface = &This->Surf->mPrimaryLocal;
- Lock.lpDD = &This->owner->mDDrawGlobal;
+ Lock.lpDDSurface = &This->Owner->mPrimaryLocal;
+ Lock.lpDD = &This->Owner->mDDrawGlobal;
Lock.lpSurfData = NULL;
- if (!DdResetVisrgn(&This->Surf->mPrimaryLocal, NULL))
+ if (!DdResetVisrgn(&This->Owner->mPrimaryLocal, NULL))
{
OutputDebugStringA("Here DdResetVisrgn lock");
return DDERR_UNSUPPORTED;
@@ -138,13 +138,13 @@
{
RtlZeroMemory(pDDSD,sizeof(DDSURFACEDESC2));
// FIXME the interanl mddsdPrimary shall be DDSURFACEDESC2
- memcpy(pDDSD,&This->Surf->mddsdPrimary,sizeof(DDSURFACEDESC));
+ memcpy(pDDSD,&This->Owner->mddsdPrimary,sizeof(DDSURFACEDESC));
pDDSD->dwSize = sizeof(DDSURFACEDESC2);
}
if (pDDSD->dwSize == sizeof(DDSURFACEDESC))
{
RtlZeroMemory(pDDSD,sizeof(DDSURFACEDESC));
- memcpy(pDDSD,&This->Surf->mddsdPrimary,sizeof(DDSURFACEDESC));
+ memcpy(pDDSD,&This->Owner->mddsdPrimary,sizeof(DDSURFACEDESC));
pDDSD->dwSize = sizeof(DDSURFACEDESC);
}
@@ -159,9 +159,9 @@
DDHAL_UNLOCKDATA unLock;
unLock.ddRVal = DDERR_NOTPALETTIZED;
- unLock.lpDD = &This->owner->mDDrawGlobal;
- unLock.lpDDSurface = &This->Surf->mPrimaryLocal;
- unLock.Unlock = This->owner->mCallbacks.HALDDSurface.Unlock;
+ unLock.lpDD = &This->Owner->mDDrawGlobal;
+ unLock.lpDDSurface = &This->Owner->mPrimaryLocal;
+ unLock.Unlock = This->Owner->mCallbacks.HALDDSurface.Unlock;
Modified: trunk/reactos/dll/directx/ddraw/main/ddraw_main.c
URL:
http://svn.reactos.ru/svn/reactos/trunk/reactos/dll/directx/ddraw/main/ddra…
==============================================================================
--- trunk/reactos/dll/directx/ddraw/main/ddraw_main.c (original)
+++ trunk/reactos/dll/directx/ddraw/main/ddraw_main.c Thu Apr 13 13:14:32 2006
@@ -357,6 +357,11 @@
DdReenableDirectDrawObject(&This->mDDrawGlobal, &dummy);
/* FIXME fill the This->DirectDrawGlobal.vmiData right */
}
+
+ //This->mDDrawGlobal.lpExclusiveOwner->hDC = (ULONG_PTR)GetDC(
(HWND)This->mDDrawGlobal.lpExclusiveOwner->hWnd);
+
+
+
return ret;
}
@@ -446,11 +451,11 @@
// FIXME free This->mDDrawGlobal.dsList on release
This->mDDrawGlobal.dsList = (LPDDRAWI_DDRAWSURFACE_INT)HeapAlloc(GetProcessHeap(),
HEAP_ZERO_MEMORY,
sizeof(DDRAWI_DDRAWSURFACE_INT));
- That->owner = (IDirectDrawImpl *)This;
- That->owner->mDDrawGlobal.dsList->dwIntRefCnt =1;
+ That->Owner = (IDirectDrawImpl *)This;
+ That->Owner->mDDrawGlobal.dsList->dwIntRefCnt =1;
/* we alwasy set to use the DirectDrawSurface7_Vtable as internel */
- That->owner->mDDrawGlobal.dsList->lpVtbl = (PVOID)
&DirectDrawSurface7_Vtable;
+ That->Owner->mDDrawGlobal.dsList->lpVtbl = (PVOID)
&DirectDrawSurface7_Vtable;
That->Surf = surf;
@@ -465,11 +470,11 @@
if (pDDSD->ddsCaps.dwCaps & DDSCAPS_PRIMARYSURFACE)
{
-
- memcpy(&That->Surf->mddsdPrimary,pDDSD,sizeof(DDSURFACEDESC));
- That->Surf->mddsdPrimary.dwSize = sizeof(DDSURFACEDESC);
+ OutputDebugStringA("Create DDSCAPS_PRIMARYSURFACE\n");
+ memcpy(&That->Owner->mddsdPrimary,pDDSD,sizeof(DDSURFACEDESC));
+ That->Owner->mddsdPrimary.dwSize = sizeof(DDSURFACEDESC);
This->mDdCanCreateSurface.bIsDifferentPixelFormat = FALSE;
- This->mDdCanCreateSurface.lpDDSurfaceDesc =
&That->Surf->mddsdPrimary;
+ This->mDdCanCreateSurface.lpDDSurfaceDesc =
&That->Owner->mddsdPrimary;
if
(This->mDdCanCreateSurface.CanCreateSurface(&This->mDdCanCreateSurface)==
DDHAL_DRIVER_NOTHANDLED)
{
@@ -481,34 +486,34 @@
return DDERR_NOTINITIALIZED;
}
- memset(&That->Surf->mPrimaryGlobal, 0,
sizeof(DDRAWI_DDRAWSURFACE_GBL));
- That->Surf->mPrimaryGlobal.dwGlobalFlags = DDRAWISURFGBL_ISGDISURFACE;
- That->Surf->mPrimaryGlobal.lpDD = &This->mDDrawGlobal;
- That->Surf->mPrimaryGlobal.lpDDHandle = &This->mDDrawGlobal;
- That->Surf->mPrimaryGlobal.wWidth =
(WORD)This->mpModeInfos[0].dwWidth;
- That->Surf->mPrimaryGlobal.wHeight =
(WORD)This->mpModeInfos[0].dwHeight;
- That->Surf->mPrimaryGlobal.lPitch = This->mpModeInfos[0].lPitch;
-
- memset(&That->Surf->mPrimaryMore, 0,
sizeof(DDRAWI_DDRAWSURFACE_MORE));
- That->Surf->mPrimaryMore.dwSize = sizeof(DDRAWI_DDRAWSURFACE_MORE);
-
- memset(&That->Surf->mPrimaryLocal, 0,
sizeof(DDRAWI_DDRAWSURFACE_LCL));
- That->Surf->mPrimaryLocal.lpGbl = &That->Surf->mPrimaryGlobal;
- That->Surf->mPrimaryLocal.lpSurfMore =
&That->Surf->mPrimaryMore;
- That->Surf->mPrimaryLocal.dwProcessId = GetCurrentProcessId();
+ memset(&That->Owner->mPrimaryGlobal, 0,
sizeof(DDRAWI_DDRAWSURFACE_GBL));
+ That->Owner->mPrimaryGlobal.dwGlobalFlags = DDRAWISURFGBL_ISGDISURFACE;
+ That->Owner->mPrimaryGlobal.lpDD = &This->mDDrawGlobal;
+ That->Owner->mPrimaryGlobal.lpDDHandle = &This->mDDrawGlobal;
+ That->Owner->mPrimaryGlobal.wWidth =
(WORD)This->mpModeInfos[0].dwWidth;
+ That->Owner->mPrimaryGlobal.wHeight =
(WORD)This->mpModeInfos[0].dwHeight;
+ That->Owner->mPrimaryGlobal.lPitch = This->mpModeInfos[0].lPitch;
+
+ memset(&That->Owner->mPrimaryMore, 0,
sizeof(DDRAWI_DDRAWSURFACE_MORE));
+ That->Owner->mPrimaryMore.dwSize = sizeof(DDRAWI_DDRAWSURFACE_MORE);
+
+ memset(&That->Owner->mPrimaryLocal, 0,
sizeof(DDRAWI_DDRAWSURFACE_LCL));
+ That->Owner->mPrimaryLocal.lpGbl =
&That->Owner->mPrimaryGlobal;
+ That->Owner->mPrimaryLocal.lpSurfMore =
&That->Owner->mPrimaryMore;
+ That->Owner->mPrimaryLocal.dwProcessId = GetCurrentProcessId();
/*
FIXME Check the flags if we shall create a primaresurface for overlay or
something else
Examine windows which flags are being set for we assume this is right unsue
I think
*/
//That->Surf->mPrimaryLocal.dwFlags =
DDRAWISURF_PARTOFPRIMARYCHAIN|DDRAWISURF_HASOVERLAYDATA;
- That->Surf->mPrimaryLocal.ddsCaps.dwCaps =
That->Surf->mddsdPrimary.ddsCaps.dwCaps;
- That->Surf->mpPrimaryLocals[0] = &That->Surf->mPrimaryLocal;
+ That->Owner->mPrimaryLocal.ddsCaps.dwCaps =
That->Owner->mddsdPrimary.ddsCaps.dwCaps;
+ That->Owner->mpPrimaryLocals[0] = &That->Owner->mPrimaryLocal;
- This->mDdCreateSurface.lpDDSurfaceDesc =
&That->Surf->mddsdPrimary;
- This->mDdCreateSurface.lplpSList = That->Surf->mpPrimaryLocals;
+ This->mDdCreateSurface.lpDDSurfaceDesc =
&That->Owner->mddsdPrimary;
+ This->mDdCreateSurface.lplpSList = That->Owner->mpPrimaryLocals;
This->mDdCreateSurface.dwSCnt =
This->mDDrawGlobal.dsList->dwIntRefCnt ;
@@ -535,41 +540,41 @@
DDSD_ZBUFFERBITDEPTH
*/
- That->Surf->mddsdPrimary.dwFlags = DDSD_CAPS + DDSD_PIXELFORMAT;
-
RtlCopyMemory(&That->Surf->mddsdPrimary.ddpfPixelFormat,&This->mDDrawGlobal.vmiData.ddpfDisplay,sizeof(DDPIXELFORMAT));
-
RtlCopyMemory(&That->Surf->mddsdPrimary.ddsCaps,&This->mDDrawGlobal.ddCaps,sizeof(DDCORECAPS));
+ That->Owner->mddsdPrimary.dwFlags = DDSD_CAPS + DDSD_PIXELFORMAT;
+
RtlCopyMemory(&That->Owner->mddsdPrimary.ddpfPixelFormat,&This->mDDrawGlobal.vmiData.ddpfDisplay,sizeof(DDPIXELFORMAT));
+
//RtlCopyMemory(&That->Surf->mddsdPrimary.ddsCaps,&This->mDDrawGlobal.ddCaps,sizeof(DDCORECAPS));
//RtlCopyMemory(&pDDSD->ddckCKDestOverlay,&This->mDDrawGlobal.ddckCKDestOverlay,sizeof(DDCOLORKEY));
//RtlCopyMemory(&pDDSD->ddckCKSrcOverlay,&This->mDDrawGlobal.ddckCKSrcOverlay,sizeof(DDCOLORKEY));
if (This->mDDrawGlobal.vmiData.dwDisplayHeight != 0)
{
- That->Surf->mddsdPrimary.dwFlags += DDSD_HEIGHT ;
- That->Surf->mddsdPrimary.dwHeight =
This->mDDrawGlobal.vmiData.dwDisplayHeight;
+ That->Owner->mddsdPrimary.dwFlags += DDSD_HEIGHT ;
+ That->Owner->mddsdPrimary.dwHeight =
This->mDDrawGlobal.vmiData.dwDisplayHeight;
}
if (This->mDDrawGlobal.vmiData.dwDisplayWidth != 0)
{
- That->Surf->mddsdPrimary.dwFlags += DDSD_WIDTH ;
- That->Surf->mddsdPrimary.dwWidth =
This->mDDrawGlobal.vmiData.dwDisplayWidth;
+ That->Owner->mddsdPrimary.dwFlags += DDSD_WIDTH ;
+ That->Owner->mddsdPrimary.dwWidth =
This->mDDrawGlobal.vmiData.dwDisplayWidth;
}
if (This->mDDrawGlobal.vmiData.lDisplayPitch != 0)
{
- That->Surf->mddsdPrimary.dwFlags += DDSD_PITCH ;
- That->Surf->mddsdPrimary.lPitch =
This->mDDrawGlobal.vmiData.lDisplayPitch;
+ That->Owner->mddsdPrimary.dwFlags += DDSD_PITCH ;
+ That->Owner->mddsdPrimary.lPitch =
This->mDDrawGlobal.vmiData.lDisplayPitch;
}
if ( This->mDDrawGlobal.dwMonitorFrequency != 0)
{
- That->Surf->mddsdPrimary.dwFlags += DDSD_REFRESHRATE ;
- That->Surf->mddsdPrimary.dwRefreshRate =
This->mDDrawGlobal.dwMonitorFrequency;
+ That->Owner->mddsdPrimary.dwFlags += DDSD_REFRESHRATE ;
+ That->Owner->mddsdPrimary.dwRefreshRate =
This->mDDrawGlobal.dwMonitorFrequency;
}
if (This->mDDrawGlobal.vmiData.ddpfDisplay.dwAlphaBitDepth != 0)
{
- That->Surf->mddsdPrimary.dwFlags += DDSD_ALPHABITDEPTH ;
- That->Surf->mddsdPrimary.dwAlphaBitDepth =
This->mDDrawGlobal.vmiData.ddpfDisplay.dwAlphaBitDepth;
+ That->Owner->mddsdPrimary.dwFlags += DDSD_ALPHABITDEPTH ;
+ That->Owner->mddsdPrimary.dwAlphaBitDepth =
This->mDDrawGlobal.vmiData.ddpfDisplay.dwAlphaBitDepth;
}
return DD_OK;
@@ -578,123 +583,136 @@
else if (pDDSD->ddsCaps.dwCaps & DDSCAPS_OVERLAY)
{
// 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;
-
- //That->Surf->mddsdOverlay.ddsCaps.dwCaps = DDSCAPS_OVERLAY |
DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM | DDSCAPS_COMPLEX | DDSCAPS_FLIP;
-
- //That->Surf->mddsdOverlay.dwWidth = 100; //pels;
- //That->Surf->mddsdOverlay.dwHeight = 100; // lines;
- //That->Surf->mddsdOverlay.dwBackBufferCount = 1; //cBuffers;
-
- //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 = &That->Surf->mddsdOverlay;
// pDDSD;
-
-
- //if
(This->mHALInfo.lpDDCallbacks->CanCreateSurface(&mDdCanCreateSurface)==
DDHAL_DRIVER_NOTHANDLED)
- //{
- // return DDERR_NOTINITIALIZED;
- //}
-
- //if (mDdCanCreateSurface.ddRVal != DD_OK)
- //{
- // return DDERR_NOTINITIALIZED;
- //}
-
- //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 = That->Surf->mddsdOverlay.dwBackBufferCount + 1;
- //for (i = 0; i < cSurfaces; i++)
- //{
- // memset(&That->Surf->mOverlayMore[i], 0,
sizeof(DDRAWI_DDRAWSURFACE_MORE));
- // That->Surf->mOverlayMore[i].dwSize =
sizeof(DDRAWI_DDRAWSURFACE_MORE);
-
- // 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);
-
- // That->Surf->mOverlayLocal[i].dwFlags |=
DDRAWISURF_ATTACHED|DDRAWISURF_ATTACHED_FROM| DDRAWISURF_HASPIXELFORMAT|
DDRAWISURF_HASOVERLAYDATA;
-
- // 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(That->Surf->mpOverlayLocals[i],
That->Surf->mpOverlayLocals[j]))
- // {
- // // derr(L"DirectDrawImpl[%08x]::__setupDevice DdAttachSurface(%d,
%d) failed", this, i, j);
- // return DD_FALSE;
- // }
- //}
+ OutputDebugStringA("Create DDSCAPS_OVERLAY\n");
+
+ memset(&That->Surf->mddsdOverlay, 0, sizeof(DDSURFACEDESC));
+ That->Surf->mddsdOverlay.dwSize = sizeof(DDSURFACEDESC);
+ That->Surf->mddsdOverlay.dwFlags = DDSD_CAPS | DDSD_PIXELFORMAT |
DDSD_BACKBUFFERCOUNT | DDSD_WIDTH | DDSD_HEIGHT;
+ That->Surf->mddsdOverlay.ddsCaps.dwCaps = DDSCAPS_OVERLAY |
DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM | DDSCAPS_COMPLEX | DDSCAPS_FLIP;
+//
+ That->Surf->mddsdOverlay.dwWidth = 100; //pels;
+ That->Surf->mddsdOverlay.dwHeight = 100; // lines;
+ That->Surf->mddsdOverlay.dwBackBufferCount = 1; //cBuffers;
+
+ That->Surf->mddsdOverlay.ddpfPixelFormat.dwSize =
sizeof(DDPIXELFORMAT);
+ That->Surf->mddsdOverlay.ddpfPixelFormat.dwFlags = DDPF_RGB;
+ That->Surf->mddsdOverlay.ddpfPixelFormat.dwRGBBitCount = 32;
+//
+//
+ DDHAL_CANCREATESURFACEDATA mDdCanCreateSurface;
+ mDdCanCreateSurface.lpDD = &This->mDDrawGlobal;
+ mDdCanCreateSurface.CanCreateSurface =
This->mCallbacks.HALDD.CanCreateSurface;
+ mDdCanCreateSurface.bIsDifferentPixelFormat = TRUE; //isDifferentPixelFormat;
+ mDdCanCreateSurface.lpDDSurfaceDesc = &That->Surf->mddsdOverlay; //
pDDSD;
+
+ if
(This->mHALInfo.lpDDCallbacks->CanCreateSurface(&mDdCanCreateSurface)==
DDHAL_DRIVER_NOTHANDLED)
+ {
+ // derr(L"DirectDrawImpl[%08x]::__createPrimary Cannot create
primary [%08x]", this, rv);
+ return DDERR_NOTINITIALIZED;
+ }
+
+ if (mDdCanCreateSurface.ddRVal != DD_OK)
+ {
+ return DDERR_NOTINITIALIZED;
+ }
+
+
+ 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 = That->Surf->mddsdOverlay.dwBackBufferCount + 1;
+ UINT i;
+ for ( i = 0; i < cSurfaces; i++)
+ {
+ memset(&That->Surf->mOverlayMore[i], 0,
sizeof(DDRAWI_DDRAWSURFACE_MORE));
+ That->Surf->mOverlayMore[i].dwSize = sizeof(DDRAWI_DDRAWSURFACE_MORE);
+
+ 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);
+
+ That->Surf->mOverlayLocal[i].dwFlags |=
+ DDRAWISURF_ATTACHED|DDRAWISURF_ATTACHED_FROM|
+ DDRAWISURF_HASPIXELFORMAT|
+ DDRAWISURF_HASOVERLAYDATA;
+
+ 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(That->Surf->mpOverlayLocals[i],
That->Surf->mpOverlayLocals[j]))
+ {
+ return DD_FALSE;
+ }
+
+ }
+
+
+ DDHAL_CREATESURFACEDATA mDdCreateSurface;
+ mDdCreateSurface.lpDD = &This->mDDrawGlobal;
+ mDdCreateSurface.CreateSurface = This->mCallbacks.HALDD.CreateSurface;
+ 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)
+ {
+ return DDERR_NOTINITIALIZED;
+ }
- //mDdCreateSurface.lpDD = &This->mDDrawGlobal;
- //mDdCreateSurface.CreateSurface = This->mCallbacks.HALDD.CreateSurface;
- //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)
- //{
- // return DDERR_NOTINITIALIZED;
- //}
+
+ if (mDdCreateSurface.ddRVal != DD_OK)
+ {
+ return mDdCreateSurface.ddRVal;
+ }
+
+ DDHAL_UPDATEOVERLAYDATA mDdUpdateOverlay;
+ mDdUpdateOverlay.lpDD = &This->mDDrawGlobal;
+ mDdUpdateOverlay.UpdateOverlay =
This->mCallbacks.HALDDSurface.UpdateOverlay;
+ mDdUpdateOverlay.lpDDDestSurface = This->mpPrimaryLocals[0];
+ mDdUpdateOverlay.lpDDSrcSurface =
That->Surf->mpOverlayLocals[0];//pDDSurface;
+ mDdUpdateOverlay.dwFlags = DDOVER_SHOW;
+
- //if (mDdCreateSurface.ddRVal != DD_OK)
- //{
- // return mDdCreateSurface.ddRVal;
- //}
+ mDdUpdateOverlay.rDest.top = 0;
+ mDdUpdateOverlay.rDest.left = 0;
+ mDdUpdateOverlay.rDest.right = 50;
+ mDdUpdateOverlay.rDest.bottom = 50;
+
+ mDdUpdateOverlay.rSrc.top = 0;
+ mDdUpdateOverlay.rSrc.left = 0;
+ mDdUpdateOverlay.rSrc.right = 50;
+ mDdUpdateOverlay.rSrc.bottom = 50;
+
+ if ( mDdUpdateOverlay.UpdateOverlay(&mDdUpdateOverlay) ==
DDHAL_DRIVER_NOTHANDLED)
+ {
+ return DDERR_NOTINITIALIZED;
+ }
- //DDHAL_UPDATEOVERLAYDATA mDdUpdateOverlay;
- //mDdUpdateOverlay.lpDD = &This->mDDrawGlobal;
- //mDdUpdateOverlay.UpdateOverlay =
This->mCallbacks.HALDDSurface.UpdateOverlay;
- //mDdUpdateOverlay.lpDDDestSurface = That->Surf->mpPrimaryLocals[0];
- //mDdUpdateOverlay.lpDDSrcSurface =
That->Surf->mpOverlayLocals[0];//pDDSurface;
- //mDdUpdateOverlay.dwFlags = DDOVER_SHOW;
-
- //mDdUpdateOverlay.rDest.top = 0;
- //mDdUpdateOverlay.rDest.left = 0;
- //mDdUpdateOverlay.rDest.right = 50;
- //mDdUpdateOverlay.rDest.bottom = 50;
-
- //mDdUpdateOverlay.rSrc.top = 0;
- //mDdUpdateOverlay.rSrc.left = 0;
- //mDdUpdateOverlay.rSrc.right = 50;
- //mDdUpdateOverlay.rSrc.bottom = 50;
-
- //if (mDdUpdateOverlay.UpdateOverlay(&mDdUpdateOverlay) ==
DDHAL_DRIVER_NOTHANDLED)
- //{
- // return DDERR_NOTINITIALIZED;
- //}
-
- //if (mDdUpdateOverlay.ddRVal != DD_OK)
- //{
- // return mDdUpdateOverlay.ddRVal;
- //}
-
- return DD_OK;
- return DDERR_INVALIDSURFACETYPE;
-
+ if (mDdUpdateOverlay.ddRVal != DD_OK)
+ {
+ return mDdUpdateOverlay.ddRVal;
+ }
+
+ return DD_OK;
}
else if (pDDSD->ddsCaps.dwCaps & DDSCAPS_BACKBUFFER)
{
Modified: trunk/reactos/dll/directx/ddraw/main/surface_main.c
URL:
http://svn.reactos.ru/svn/reactos/trunk/reactos/dll/directx/ddraw/main/surf…
==============================================================================
--- trunk/reactos/dll/directx/ddraw/main/surface_main.c (original)
+++ trunk/reactos/dll/directx/ddraw/main/surface_main.c Thu Apr 13 13:14:32 2006
@@ -32,14 +32,14 @@
DX_WINDBG_trace();
- return
InterlockedIncrement((PLONG)&This->owner->mDDrawGlobal.dsList->dwIntRefCnt);
+ return
InterlockedIncrement((PLONG)&This->Owner->mDDrawGlobal.dsList->dwIntRefCnt);
}
ULONG WINAPI Main_DDrawSurface_Release(LPDIRECTDRAWSURFACE7 iface)
{
IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
- ULONG ref =
InterlockedDecrement((PLONG)&This->owner->mDDrawGlobal.dsList->dwIntRefCnt);
+ ULONG ref =
InterlockedDecrement((PLONG)&This->Owner->mDDrawGlobal.dsList->dwIntRefCnt);
if (ref == 0)
HeapFree(GetProcessHeap(), 0, This);
@@ -66,7 +66,7 @@
IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
- if (This->owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_BLT)
+ if (This->Owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_BLT)
{
return Hal_DDrawSurface_Blt( iface, rdst, src, rsrc, dwFlags,
lpbltfx);
}
@@ -87,7 +87,7 @@
return DDERR_INVALIDPARAMS;
}
- if (This->owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_LOCK)
+ if (This->Owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_LOCK)
{
return Hal_DDrawSurface_Lock( iface, prect, pDDSD, flags, event);
}
@@ -101,7 +101,7 @@
IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
- if (This->owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_LOCK)
+ if (This->Owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_LOCK)
{
return Hal_DDrawSurface_Unlock( iface, pRect);
}
@@ -125,7 +125,7 @@
That = (IDirectDrawSurfaceImpl*)pAttach;
//FIXME Have I put This and That in right order ?? DdAttachSurface(from, to)
- return DdAttachSurface(
That->Surf->mpPrimaryLocals[0],This->Surf->mpPrimaryLocals[0]);
+ return DdAttachSurface(
That->Owner->mpPrimaryLocals[0],This->Owner->mpPrimaryLocals[0]);
}
/* MSDN: "not currently implemented." */
@@ -213,7 +213,7 @@
IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
- if (This->owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_FLIP)
+ if (This->Owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_FLIP)
{
return Hal_DDrawSurface_Flip(iface, override, dwFlags);
}
@@ -246,7 +246,7 @@
IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
- if (This->owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_FLIP)
+ if (This->Owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_FLIP)
{
return Hal_DDrawSurface_GetBltStatus( iface, dwFlags);
}
@@ -274,7 +274,7 @@
This = (IDirectDrawSurfaceImpl*)iface;
RtlZeroMemory(pCaps,sizeof(DDSCAPS2));
- pCaps->dwCaps = This->Surf->mddsdPrimary.ddsCaps.dwCaps;
+ pCaps->dwCaps = This->Owner->mddsdPrimary.ddsCaps.dwCaps;
return DD_OK;
}
@@ -321,14 +321,14 @@
for now we aussme the surface exits and create the hDC for it
*/
- if ((HDC)This->Surf->mPrimaryLocal.hDC == NULL)
- {
- This->Surf->mPrimaryLocal.hDC =
(ULONG_PTR)GetDC((HWND)This->owner->mDDrawGlobal.lpExclusiveOwner->hWnd);
- *phDC = (HDC)This->Surf->mPrimaryLocal.hDC;
+ if ((HDC)This->Owner->mPrimaryLocal.hDC == NULL)
+ {
+ This->Owner->mPrimaryLocal.hDC =
(ULONG_PTR)GetDC((HWND)This->Owner->mDDrawGlobal.lpExclusiveOwner->hWnd);
+ *phDC = (HDC)This->Owner->mPrimaryLocal.hDC;
}
else
{
- *phDC = (HDC)This->Surf->mpPrimaryLocals[0]->hDC;
+ *phDC = (HDC)This->Owner->mpPrimaryLocals[0]->hDC;
}
return DD_OK;
@@ -420,7 +420,7 @@
}
RtlZeroMemory(pDDSD,dwSize);
- memcpy(pDDSD, &This->Surf->mddsdPrimary, sizeof(DDSURFACEDESC));
+ memcpy(pDDSD, &This->Owner->mddsdPrimary, sizeof(DDSURFACEDESC));
pDDSD->dwSize = dwSize;
return DD_OK;
@@ -480,12 +480,12 @@
/* FIXME check if surface exits or not */
- if ((HDC)This->Surf->mPrimaryLocal.hDC == NULL)
+ if ((HDC)This->Owner->mPrimaryLocal.hDC == NULL)
{
return DDERR_GENERIC;
}
- ReleaseDC((HWND)This->owner->mDDrawGlobal.lpExclusiveOwner->hWnd,hDC);
+ ReleaseDC((HWND)This->Owner->mDDrawGlobal.lpExclusiveOwner->hWnd,hDC);
return DD_OK;
}
@@ -507,7 +507,7 @@
IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
- if (This->owner->mCallbacks.HALDDSurface.dwFlags &
DDHAL_SURFCB32_SETCOLORKEY)
+ if (This->Owner->mCallbacks.HALDDSurface.dwFlags &
DDHAL_SURFCB32_SETCOLORKEY)
{
return Hal_DDrawSurface_SetColorKey (iface, dwFlags, pCKey);
}
@@ -575,7 +575,7 @@
IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
- if (This->owner->mCallbacks.HALDDSurface.dwFlags &
DDHAL_SURFCB32_UPDATEOVERLAY)
+ if (This->Owner->mCallbacks.HALDDSurface.dwFlags &
DDHAL_SURFCB32_UPDATEOVERLAY)
{
return Hal_DDrawSurface_UpdateOverlayDisplay ( iface, dwFlags);
}
Modified: trunk/reactos/dll/directx/ddraw/rosdraw.h
URL:
http://svn.reactos.ru/svn/reactos/trunk/reactos/dll/directx/ddraw/rosdraw.h…
==============================================================================
--- trunk/reactos/dll/directx/ddraw/rosdraw.h (original)
+++ trunk/reactos/dll/directx/ddraw/rosdraw.h Thu Apr 13 13:14:32 2006
@@ -82,20 +82,28 @@
DDHAL_CREATESURFACEDATA mDdCreateSurface;
DDHAL_CANCREATESURFACEDATA mDdCanCreateSurface;
-} IDirectDrawImpl;
-
-/******** Surface Object ********/
-typedef struct
-{
+ /* Primarey surface we must reach it from every where */
DDRAWI_DDRAWSURFACE_GBL mPrimaryGlobal;
DDRAWI_DDRAWSURFACE_MORE mPrimaryMore;
DDRAWI_DDRAWSURFACE_LCL mPrimaryLocal;
DDRAWI_DDRAWSURFACE_LCL *mpPrimaryLocals[1];
-
DDRAWI_DDRAWCLIPPER_LCL mPrimaryClipperLocal;
DDRAWI_DDRAWCLIPPER_GBL mPrimaryClipperGlobal;
DDSURFACEDESC mddsdPrimary;
+
+} IDirectDrawImpl;
+
+/******** Surface Object ********/
+typedef struct
+{
+
+ DDRAWI_DDRAWSURFACE_GBL mSurfGlobal;
+ DDRAWI_DDRAWSURFACE_MORE mSurfMore;
+ DDRAWI_DDRAWSURFACE_LCL mSurfLocal;
+ DDRAWI_DDRAWSURFACE_LCL *mpSurfLocals[1];
+ DDRAWI_DDRAWCLIPPER_LCL mSurfClipperLocal;
+ DDRAWI_DDRAWCLIPPER_GBL mSurfClipperGlobal;
DDRAWI_DDRAWSURFACE_GBL mOverlayGlobal;
DDRAWI_DDRAWSURFACE_LCL mOverlayLocal[6];
@@ -111,7 +119,7 @@
IDirectDrawSurface7Vtbl* lpVtbl;
IDirectDrawSurface3Vtbl* lpVtbl_v3;
- IDirectDrawImpl* owner;
+ IDirectDrawImpl* Owner;
DDRAWI_DDRAWSURFACE_GBL Global;
DDRAWI_DDRAWSURFACE_MORE More;
@@ -233,9 +241,9 @@
firstcall = FALSE; \
}
-#define DX_WINDBG_trace()
-
-/*
+//#define DX_WINDBG_trace()
+
+
#define DX_WINDBG_trace() \
static BOOL firstcallx = TRUE; \
if (firstcallx) \
@@ -245,7 +253,7 @@
OutputDebugStringA(buffer); \
firstcallx = TRUE; \
}
-*/
+
#define DX_WINDBG_trace_res(width,height,bpp) \
static BOOL firstcallxx = TRUE; \