diff --git a/reactos/dll/directx/ddraw/callbacks_hel.c b/reactos/dll/directx/ddraw/callbacks_hel.c index 1ef5543c07c..b423f023e8e 100644 --- a/reactos/dll/directx/ddraw/callbacks_hel.c +++ b/reactos/dll/directx/ddraw/callbacks_hel.c @@ -28,12 +28,12 @@ DWORD CALLBACK HelDdCreateSurface(LPDDHAL_CREATESURFACEDATA lpCreateSurface) DX_STUB; } -/* + DWORD CALLBACK HelDdSetColorKey(LPDDHAL_SETCOLORKEYDATA lpSetColorKey) { DX_STUB; } -*/ + DWORD CALLBACK HelDdSetMode(LPDDHAL_SETMODEDATA SetMode) { diff --git a/reactos/dll/directx/ddraw/ddraw.rbuild b/reactos/dll/directx/ddraw/ddraw.rbuild index e6c0ef3a63b..69a7390650f 100644 --- a/reactos/dll/directx/ddraw/ddraw.rbuild +++ b/reactos/dll/directx/ddraw/ddraw.rbuild @@ -29,6 +29,7 @@ iface_kernel.c callbacks_hel.c + callbacks_surf_hel.c ddraw_main.c diff --git a/reactos/dll/directx/ddraw/rosdraw.h b/reactos/dll/directx/ddraw/rosdraw.h index f168355fa99..21764c6317f 100644 --- a/reactos/dll/directx/ddraw/rosdraw.h +++ b/reactos/dll/directx/ddraw/rosdraw.h @@ -571,6 +571,23 @@ DWORD CALLBACK HelDdGetScanLine(LPDDHAL_GETSCANLINEDATA lpGetScanLine); DWORD CALLBACK HelDdSetExclusiveMode(LPDDHAL_SETEXCLUSIVEMODEDATA lpSetExclusiveMode); DWORD CALLBACK HelDdFlipToGDISurface(LPDDHAL_FLIPTOGDISURFACEDATA lpFlipToGDISurface); +DWORD CALLBACK HelDdSurfAddAttachedSurface(LPDDHAL_ADDATTACHEDSURFACEDATA lpDestroySurface); +DWORD CALLBACK HelDdSurfBlt(LPDDHAL_BLTDATA lpBltData); +DWORD CALLBACK HelDdSurfDestroySurface(LPDDHAL_DESTROYSURFACEDATA lpDestroySurfaceData); +DWORD CALLBACK HelDdSurfFlip(LPDDHAL_FLIPDATA lpFlipData); +DWORD CALLBACK HelDdSurfGetBltStatus(LPDDHAL_GETBLTSTATUSDATA lpGetBltStatusData); +DWORD CALLBACK HelDdSurfGetFlipStatus(LPDDHAL_GETFLIPSTATUSDATA lpGetFlipStatusData); +DWORD CALLBACK HelDdSurfLock(LPDDHAL_LOCKDATA lpLockData); +DWORD CALLBACK HelDdSurfreserved4(DWORD *lpPtr); +DWORD CALLBACK HelDdSurfSetClipList(LPDDHAL_SETCLIPLISTDATA lpSetClipListData); +DWORD CALLBACK HelDdSurfSetColorKey(LPDDHAL_SETCOLORKEYDATA lpSetColorKeyData); +DWORD CALLBACK HelDdSurfSetOverlayPosition(LPDDHAL_SETOVERLAYPOSITIONDATA lpSetOverlayPositionData); +DWORD CALLBACK HelDdSurfSetPalette(LPDDHAL_SETPALETTEDATA lpSetPaletteData); +DWORD CALLBACK HelDdSurfUnlock(LPDDHAL_UNLOCKDATA lpUnLockData); +DWORD CALLBACK HelDdSurfUpdateOverlay(LPDDHAL_UPDATEOVERLAYDATA lpUpDateOveryLayData); + + + /* Setting for HEL should be move to ros special reg key ? */ diff --git a/reactos/dll/directx/ddraw/startup.c b/reactos/dll/directx/ddraw/startup.c index ee48b0253f4..cf70d8f3875 100644 --- a/reactos/dll/directx/ddraw/startup.c +++ b/reactos/dll/directx/ddraw/startup.c @@ -170,8 +170,7 @@ StartDirectDraw(LPDIRECTDRAW* iface, LPGUID lpGuid) This->lpLcl->hDD = This->lpLcl->lpGbl->hDD; - /* Mix the DDCALLBACKS */ - + /* Mix the DDCALLBACKS */ This->lpLcl->lpDDCB->cbDDCallbacks.dwSize = sizeof(This->lpLcl->lpDDCB->cbDDCallbacks); if ((This->lpLcl->lpDDCB->HALDD.dwFlags & DDHAL_CB32_CANCREATESURFACE) && (devicetypes !=3)) @@ -490,14 +489,41 @@ StartDirectDraw(LPDIRECTDRAW* iface, LPGUID lpGuid) This->lpLcl->lpDDCB->HELDDSurface.UpdateOverlay; } + /* Mix the DDPALETTE CALLBACKS */ + This->lpLcl->lpDDCB->HALDDPalette.dwSize = sizeof(This->lpLcl->lpDDCB->HALDDPalette); - /* Mix the DDPALETTE CALLBACKS - This->lpLcl->lpDDCB->HELDDPalette.DestroyPalette = HelDdPalDestroyPalette; - This->lpLcl->lpDDCB->HELDDPalette.SetEntries = HelDdPalSetEntries; - This->lpLcl->lpDDCB->HELDDPalette.dwSize = sizeof(This->lpLcl->lpDDCB->HELDDPalette); - */ + if ((This->lpLcl->lpDDCB->HALDDPalette.dwFlags & DDHAL_PALCB32_DESTROYPALETTE) && (devicetypes !=3)) + { + This->lpLcl->lpDDCB->cbDDPaletteCallbacks.dwFlags |= DDHAL_PALCB32_SETENTRIES; + + This->lpLcl->lpDDCB->cbDDPaletteCallbacks.DestroyPalette = + This->lpLcl->lpDDCB->HALDDPalette.DestroyPalette; + } + else if ((This->lpLcl->lpDDCB->HELDDPalette.dwFlags & DDHAL_PALCB32_DESTROYPALETTE) && (devicetypes !=2)) + { + This->lpLcl->lpDDCB->cbDDPaletteCallbacks.dwFlags |= DDHAL_PALCB32_DESTROYPALETTE; + + This->lpLcl->lpDDCB->cbDDPaletteCallbacks.DestroyPalette = + This->lpLcl->lpDDCB->HELDDPalette.DestroyPalette; + } + + if ((This->lpLcl->lpDDCB->HALDDPalette.dwFlags & DDHAL_PALCB32_SETENTRIES) && (devicetypes !=3)) + { + This->lpLcl->lpDDCB->cbDDPaletteCallbacks.dwFlags |= DDHAL_PALCB32_SETENTRIES; + + This->lpLcl->lpDDCB->cbDDPaletteCallbacks.SetEntries = + This->lpLcl->lpDDCB->HALDDPalette.SetEntries; + } + else if ((This->lpLcl->lpDDCB->HELDDPalette.dwFlags & DDHAL_PALCB32_SETENTRIES) && (devicetypes !=2)) + { + This->lpLcl->lpDDCB->cbDDPaletteCallbacks.dwFlags |= DDHAL_PALCB32_SETENTRIES; + + This->lpLcl->lpDDCB->cbDDPaletteCallbacks.SetEntries = + This->lpLcl->lpDDCB->HELDDPalette.SetEntries; + } /* Mix the DDExeBuf CALLBACKS */ + This->lpLcl->lpDDCB->cbDDExeBufCallbacks.dwSize = sizeof(This->lpLcl->lpDDCB->cbDDExeBufCallbacks); if ((This->lpLcl->lpDDCB->HALDDExeBuf.dwFlags & DDHAL_EXEBUFCB32_CANCREATEEXEBUF) && (devicetypes !=3)) { @@ -770,9 +796,9 @@ StartDirectDrawHel(LPDIRECTDRAW* iface) This->lpLcl->lpDDCB->HELDD.CreateSurface = HelDdCreateSurface; This->lpLcl->lpDDCB->HELDD.CreatePalette = HelDdCreatePalette; This->lpLcl->lpDDCB->HELDD.DestroyDriver = HelDdDestroyDriver; - //This->lpLcl->lpDDCB->HELDD.FlipToGDISurface = HelDdFlipToGDISurface + This->lpLcl->lpDDCB->HELDD.FlipToGDISurface = HelDdFlipToGDISurface; This->lpLcl->lpDDCB->HELDD.GetScanLine = HelDdGetScanLine; - // This->lpLcl->lpDDCB->HELDD.SetColorKey = HelDdSetColorKey; + //This->lpLcl->lpDDCB->HELDD.SetColorKey = HelDdSetColorKey; This->lpLcl->lpDDCB->HELDD.SetExclusiveMode = HelDdSetExclusiveMode; This->lpLcl->lpDDCB->HELDD.SetMode = HelDdSetMode; This->lpLcl->lpDDCB->HELDD.WaitForVerticalBlank = HelDdWaitForVerticalBlank; @@ -781,17 +807,15 @@ StartDirectDrawHel(LPDIRECTDRAW* iface) DDHAL_CB32_CREATESURFACE | DDHAL_CB32_CREATEPALETTE | DDHAL_CB32_DESTROYDRIVER | - // DDHAL_CB32_FLIPTOGDISURFACE | + DDHAL_CB32_FLIPTOGDISURFACE | DDHAL_CB32_GETSCANLINE | - // DDHAL_CB32_SETCOLORKEY | + //DDHAL_CB32_SETCOLORKEY | DDHAL_CB32_SETEXCLUSIVEMODE | DDHAL_CB32_SETMODE | DDHAL_CB32_WAITFORVERTICALBLANK ; - This->lpLcl->lpDDCB->HELDD.dwSize = sizeof(This->lpLcl->lpDDCB->HELDD); - - /* + This->lpLcl->lpDDCB->HELDDSurface.AddAttachedSurface = HelDdSurfAddAttachedSurface; This->lpLcl->lpDDCB->HELDDSurface.Blt = HelDdSurfBlt; This->lpLcl->lpDDCB->HELDDSurface.DestroySurface = HelDdSurfDestroySurface; @@ -806,8 +830,24 @@ StartDirectDrawHel(LPDIRECTDRAW* iface) This->lpLcl->lpDDCB->HELDDSurface.SetPalette = HelDdSurfSetPalette; This->lpLcl->lpDDCB->HELDDSurface.Unlock = HelDdSurfUnlock; This->lpLcl->lpDDCB->HELDDSurface.UpdateOverlay = HelDdSurfUpdateOverlay; - */ + + This->lpLcl->lpDDCB->HELDDSurface.dwFlags = DDHAL_SURFCB32_ADDATTACHEDSURFACE | + DDHAL_SURFCB32_BLT | + DDHAL_SURFCB32_DESTROYSURFACE | + DDHAL_SURFCB32_FLIP | + DDHAL_SURFCB32_GETBLTSTATUS | + DDHAL_SURFCB32_GETFLIPSTATUS | + DDHAL_SURFCB32_LOCK | + DDHAL_SURFCB32_RESERVED4 | + DDHAL_SURFCB32_SETCLIPLIST | + DDHAL_SURFCB32_SETCOLORKEY | + DDHAL_SURFCB32_SETOVERLAYPOSITION | + DDHAL_SURFCB32_SETPALETTE | + DDHAL_SURFCB32_UNLOCK | + DDHAL_SURFCB32_UPDATEOVERLAY; + This->lpLcl->lpDDCB->HELDDSurface.dwSize = sizeof(This->lpLcl->lpDDCB->HELDDSurface); + /* This->lpLcl->lpDDCB->HELDDPalette.DestroyPalette = HelDdPalDestroyPalette; This->lpLcl->lpDDCB->HELDDPalette.SetEntries = HelDdPalSetEntries;