Something went wrong. Try again.
Reactos
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314/* * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel * PURPOSE: Native DirectDraw implementation * FILE: win32ss/reactx/ntddraw/ddsurf.c * PROGRAMER: Magnus Olsen (greatlord@reactos.org) * REVISION HISTORY: * 19/7-2006 Magnus Olsen */
#include <win32k.h>
// #define NDEBUG#include <debug.h>
/************************************************************************//* NtGdiDdDestroySurface *//************************************************************************/DWORDAPIENTRYNtGdiDdDestroySurface(HANDLE hSurface, BOOL bRealDestroy){ PGD_DXDDDESTROYSURFACE pfnDdDestroySurface = (PGD_DXDDDESTROYSURFACE)gpDxFuncs[DXG_INDEX_DxDdDestroySurface].pfn;
if (pfnDdDestroySurface == NULL) { DPRINT1("Warning: no pfnDdDestroySurface\n"); return DDHAL_DRIVER_NOTHANDLED; }
DPRINT("Calling dxg.sys pfnDdDestroySurface\n"); return pfnDdDestroySurface(hSurface, bRealDestroy);}
/************************************************************************//* NtGdiDdFlip *//************************************************************************/DWORDAPIENTRYNtGdiDdFlip(HANDLE hSurfaceCurrent, HANDLE hSurfaceTarget, HANDLE hSurfaceCurrentLeft, HANDLE hSurfaceTargetLeft, PDD_FLIPDATA puFlipData){ PGD_DXDDFLIP pfnDdDdFlip = (PGD_DXDDFLIP)gpDxFuncs[DXG_INDEX_DxDdFlip].pfn;
if (pfnDdDdFlip == NULL) { DPRINT1("Warning: no pfnDdDdFlip\n"); return DDHAL_DRIVER_NOTHANDLED; }
DPRINT("Calling dxg.sys pfnDdDdFlip\n"); return pfnDdDdFlip(hSurfaceCurrent, hSurfaceTarget, hSurfaceCurrentLeft, hSurfaceTargetLeft, puFlipData);}
/************************************************************************//* NtGdiDdUnlock *//************************************************************************/DWORDAPIENTRYNtGdiDdLock(HANDLE hSurface, PDD_LOCKDATA puLockData, HDC hdcClip){ PGD_DXDDLOCK pfnDdLock = (PGD_DXDDLOCK)gpDxFuncs[DXG_INDEX_DxDdLock].pfn;
if (pfnDdLock == NULL) { DPRINT1("Warning: no pfnDdLock\n"); return DDHAL_DRIVER_NOTHANDLED; }
DPRINT("Calling dxg.sys pfnDdLock\n"); return pfnDdLock(hSurface, puLockData, hdcClip);}
/************************************************************************//* NtGdiDdunlock *//************************************************************************/DWORDAPIENTRYNtGdiDdUnlock(HANDLE hSurface, PDD_UNLOCKDATA puUnlockData){ PGD_DXDDUNLOCK pfnDdUnlock = (PGD_DXDDUNLOCK)gpDxFuncs[DXG_INDEX_DxDdUnlock].pfn;
if (pfnDdUnlock == NULL) { DPRINT1("Warning: no pfnDdUnlock\n"); return DDHAL_DRIVER_NOTHANDLED; }
DPRINT("Calling dxg.sys pfnDdUnlock\n"); return pfnDdUnlock(hSurface, puUnlockData);}
/************************************************************************//* NtGdiDdBlt *//************************************************************************/DWORDAPIENTRYNtGdiDdBlt(HANDLE hSurfaceDest, HANDLE hSurfaceSrc, PDD_BLTDATA puBltData){ PGD_DDBLT pfnDdBlt = (PGD_DDBLT)gpDxFuncs[DXG_INDEX_DxDdBlt].pfn;
if (pfnDdBlt == NULL) { DPRINT1("Warning: no pfnDdBlt\n"); return DDHAL_DRIVER_NOTHANDLED; }
DPRINT("Calling dxg.sys pfnDdBlt\n"); return pfnDdBlt(hSurfaceDest,hSurfaceSrc,puBltData);}
/************************************************************************//* NtGdiDdSetColorKey *//************************************************************************/DWORDAPIENTRYNtGdiDdSetColorKey(HANDLE hSurface, PDD_SETCOLORKEYDATA puSetColorKeyData){ PGD_DXDDSETCOLORKEY pfnDdSetColorKey = (PGD_DXDDSETCOLORKEY)gpDxFuncs[DXG_INDEX_DxDdSetColorKey].pfn;
if (pfnDdSetColorKey == NULL) { DPRINT1("Warning: no pfnDdSetColorKey\n"); return DDHAL_DRIVER_NOTHANDLED; }
DPRINT("Calling dxg.sys pfnDdSetColorKey\n"); return pfnDdSetColorKey(hSurface,puSetColorKeyData);}
/************************************************************************//* NtGdiDdAddAttachedSurface *//************************************************************************/DWORDAPIENTRYNtGdiDdAddAttachedSurface(HANDLE hSurface, HANDLE hSurfaceAttached, PDD_ADDATTACHEDSURFACEDATA puAddAttachedSurfaceData){ PGD_DDADDATTACHEDSURFACE pfnDdAddAttachedSurface = (PGD_DDADDATTACHEDSURFACE)gpDxFuncs[DXG_INDEX_DxDdAddAttachedSurface].pfn;
if (pfnDdAddAttachedSurface == NULL) { DPRINT1("Warning: no pfnDdAddAttachedSurface\n"); return DDHAL_DRIVER_NOTHANDLED; }
DPRINT("Calling dxg.sys pfnDdAddAttachedSurface\n"); return pfnDdAddAttachedSurface(hSurface,hSurfaceAttached,puAddAttachedSurfaceData);}
/************************************************************************//* NtGdiDdGetBltStatus *//************************************************************************/DWORDAPIENTRYNtGdiDdGetBltStatus(HANDLE hSurface, PDD_GETBLTSTATUSDATA puGetBltStatusData){ PGD_DXDDGETBLTSTATUS pfnDdGetBltStatus = (PGD_DXDDGETBLTSTATUS)gpDxFuncs[DXG_INDEX_DxDdGetBltStatus].pfn;
if (pfnDdGetBltStatus == NULL) { DPRINT1("Warning: no pfnDdGetBltStatus\n"); return DDHAL_DRIVER_NOTHANDLED; }
DPRINT("Calling dxg.sys pfnDdGetBltStatus\n"); return pfnDdGetBltStatus(hSurface,puGetBltStatusData);}
/************************************************************************//* NtGdiDdGetFlipStatus *//************************************************************************/DWORDAPIENTRYNtGdiDdGetFlipStatus(HANDLE hSurface, PDD_GETFLIPSTATUSDATA puGetFlipStatusData){ PGD_DXDDGETFLIPSTATUS pfnDdGetFlipStatus = (PGD_DXDDGETFLIPSTATUS)gpDxFuncs[DXG_INDEX_DxDdGetFlipStatus].pfn;
if (pfnDdGetFlipStatus == NULL) { DPRINT1("Warning: no pfnDdGetFlipStatus\n"); return DDHAL_DRIVER_NOTHANDLED; }
DPRINT("Calling dxg.sys pfnDdGetFlipStatus\n"); return pfnDdGetFlipStatus(hSurface,puGetFlipStatusData);}
/************************************************************************//* NtGdiDdUpdateOverlay *//************************************************************************/DWORDAPIENTRYNtGdiDdUpdateOverlay(HANDLE hSurfaceDestination, HANDLE hSurfaceSource, PDD_UPDATEOVERLAYDATA puUpdateOverlayData){ PGD_DXDDUPDATEOVERLAY pfnDdUpdateOverlay = (PGD_DXDDUPDATEOVERLAY)gpDxFuncs[DXG_INDEX_DxDdUpdateOverlay].pfn;
if (pfnDdUpdateOverlay == NULL) { DPRINT1("Warning: no pfnDdUpdateOverlay\n"); return DDHAL_DRIVER_NOTHANDLED; }
DPRINT("Calling dxg.sys pfnDdUpdateOverlay\n"); return pfnDdUpdateOverlay(hSurfaceDestination,hSurfaceSource,puUpdateOverlayData);}
/************************************************************************//* NtGdiDdSetOverlayPosition *//************************************************************************/DWORDAPIENTRYNtGdiDdSetOverlayPosition(HANDLE hSurfaceSource, HANDLE hSurfaceDestination, PDD_SETOVERLAYPOSITIONDATA puSetOverlayPositionData){ PGD_DXDDSETOVERLAYPOSITION pfnDdSetOverlayPosition = (PGD_DXDDSETOVERLAYPOSITION)gpDxFuncs[DXG_INDEX_DxDdSetOverlayPosition].pfn;
if (pfnDdSetOverlayPosition == NULL) { DPRINT1("Warning: no pfnDdSetOverlayPosition\n"); return DDHAL_DRIVER_NOTHANDLED; }
DPRINT("Calling dxg.sys pfnDdSetOverlayPosition\n"); return pfnDdSetOverlayPosition(hSurfaceSource,hSurfaceDestination,puSetOverlayPositionData);}
/************************************************************************//* This is not part of the ddsurface interface but it *//* deals with the surface *//************************************************************************/
/************************************************************************//* NtGdiDdAlphaBlt *//************************************************************************/DWORDAPIENTRYNtGdiDdAlphaBlt(HANDLE hSurfaceDest, HANDLE hSurfaceSrc, PDD_BLTDATA puBltData){ PGD_DDALPHABLT pfnDdAlphaBlt = (PGD_DDALPHABLT)gpDxFuncs[DXG_INDEX_DxDdAlphaBlt].pfn;
if (pfnDdAlphaBlt == NULL) { DPRINT1("Warning: no pfnDdAlphaBlt\n"); return DDHAL_DRIVER_NOTHANDLED; }
DPRINT("Calling dxg.sys pfnDdAlphaBlt\n"); return pfnDdAlphaBlt(hSurfaceDest,hSurfaceSrc,puBltData);}
/************************************************************************//* NtGdiDdAttachSurface *//************************************************************************/BOOLAPIENTRYNtGdiDdAttachSurface(HANDLE hSurfaceFrom, HANDLE hSurfaceTo){ PGD_DDATTACHSURFACE pfnDdAttachSurface = (PGD_DDATTACHSURFACE)gpDxFuncs[DXG_INDEX_DxDdAttachSurface].pfn;
if (pfnDdAttachSurface == NULL) { DPRINT1("Warning: no pfnDdAttachSurface\n"); return DDHAL_DRIVER_NOTHANDLED; }
DPRINT("Calling dxg.sys pfnDdAttachSurface\n"); return pfnDdAttachSurface(hSurfaceFrom,hSurfaceTo);}
/************************************************************************//* NtGdiDdUnattachSurface *//************************************************************************//* Note: MSDN protypes is VOID APIENTRY NtGdiDdUnattachSurface(HANDLE hSurface, HANDLE hSurfaceAttached) But it say it return either DDHAL_DRIVER_NOTHANDLED or DDHAL_DRIVER_HANDLED so I guess it is a typo in MSDN for this prototype for the info contradicts itself.*/NTSTATUSAPIENTRYNtGdiDdUnattachSurface(HANDLE hSurface, HANDLE hSurfaceAttached){ PGD_DXDDUNATTACHSURFACE pfnDdUnattachSurface = (PGD_DXDDUNATTACHSURFACE)gpDxFuncs[DXG_INDEX_DxDdUnattachSurface].pfn; if (pfnDdUnattachSurface == NULL) { DPRINT1("Warning: no pfnDdUnattachSurface\n"); //return DDHAL_DRIVER_NOTHANDLED; return STATUS_NOT_IMPLEMENTED; }
DPRINT("Calling dxg.sys pfnDdUnattachSurface\n"); return pfnDdUnattachSurface(hSurface,hSurfaceAttached);}