2005-05-08 02:11:54 +00:00
|
|
|
/*
|
2003-10-28 19:30:08 +00:00
|
|
|
* COPYRIGHT: See COPYING in the top level directory
|
|
|
|
* PROJECT: ReactOS kernel
|
|
|
|
* PURPOSE: Native DirectDraw implementation
|
|
|
|
* FILE: subsys/win32k/ntddraw/ddraw.c
|
|
|
|
* PROGRAMER: Peter Bajusz (hyp-x@stormregion.com)
|
|
|
|
* REVISION HISTORY:
|
|
|
|
* 25-10-2003 PB Created
|
|
|
|
*/
|
2005-06-29 07:09:25 +00:00
|
|
|
|
2005-06-25 20:05:56 +00:00
|
|
|
#include <w32k.h>
|
2003-10-28 19:30:08 +00:00
|
|
|
|
|
|
|
#define NDEBUG
|
|
|
|
#include <debug.h>
|
|
|
|
|
|
|
|
/************************************************************************/
|
|
|
|
/* DIRECT DRAW OBJECT */
|
|
|
|
/************************************************************************/
|
|
|
|
|
2005-10-05 19:29:08 +00:00
|
|
|
BOOL INTERNAL_CALL
|
|
|
|
DD_Cleanup(PVOID ObjectBody)
|
2003-10-28 19:30:08 +00:00
|
|
|
{
|
2005-10-05 19:29:08 +00:00
|
|
|
PDD_DIRECTDRAW pDD = (PDD_DIRECTDRAW)ObjectBody;
|
2004-12-12 01:40:39 +00:00
|
|
|
pDD->DrvDisableDirectDraw(pDD->Global.dhpdev);
|
2003-10-28 19:30:08 +00:00
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
2005-05-08 02:11:54 +00:00
|
|
|
HANDLE STDCALL NtGdiDdCreateDirectDrawObject(
|
2003-10-28 19:30:08 +00:00
|
|
|
HDC hdc
|
|
|
|
)
|
|
|
|
{
|
|
|
|
DD_CALLBACKS callbacks;
|
|
|
|
DD_SURFACECALLBACKS surface_callbacks;
|
|
|
|
DD_PALETTECALLBACKS palette_callbacks;
|
|
|
|
|
|
|
|
RtlZeroMemory(&callbacks, sizeof(callbacks));
|
|
|
|
callbacks.dwSize = sizeof(callbacks);
|
|
|
|
RtlZeroMemory(&surface_callbacks, sizeof(surface_callbacks));
|
|
|
|
surface_callbacks.dwSize = sizeof(surface_callbacks);
|
|
|
|
RtlZeroMemory(&palette_callbacks, sizeof(palette_callbacks));
|
|
|
|
palette_callbacks.dwSize = sizeof(palette_callbacks);
|
|
|
|
|
|
|
|
DC *pDC = DC_LockDc(hdc);
|
|
|
|
if (!pDC)
|
|
|
|
return NULL;
|
|
|
|
|
|
|
|
if (!pDC->DriverFunctions.EnableDirectDraw)
|
|
|
|
{
|
|
|
|
// Driver doesn't support DirectDraw
|
2005-06-07 16:34:07 +00:00
|
|
|
DC_UnlockDc(pDC);
|
2003-10-28 19:30:08 +00:00
|
|
|
return NULL;
|
|
|
|
}
|
2005-10-05 19:29:08 +00:00
|
|
|
|
2003-10-28 19:30:08 +00:00
|
|
|
BOOL success = pDC->DriverFunctions.EnableDirectDraw(
|
|
|
|
pDC->PDev, &callbacks, &surface_callbacks, &palette_callbacks);
|
|
|
|
|
|
|
|
if (!success)
|
|
|
|
{
|
|
|
|
// DirectDraw creation failed
|
2005-06-07 16:34:07 +00:00
|
|
|
DC_UnlockDc(pDC);
|
2003-10-28 19:30:08 +00:00
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
2004-12-12 01:40:39 +00:00
|
|
|
HANDLE hDirectDraw = GDIOBJ_AllocObj(GDI_OBJECT_TYPE_DIRECTDRAW);
|
2005-10-05 19:50:48 +00:00
|
|
|
if (!hDirectDraw)
|
|
|
|
{
|
|
|
|
/* No more memmory */
|
|
|
|
DC_UnlockDc(pDC);
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
2003-10-28 19:30:08 +00:00
|
|
|
PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hDirectDraw, GDI_OBJECT_TYPE_DIRECTDRAW);
|
2005-10-05 19:50:48 +00:00
|
|
|
if (!pDirectDraw)
|
|
|
|
{
|
|
|
|
/* invalid handle */
|
|
|
|
DC_UnlockDc(pDC);
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
2003-10-28 19:30:08 +00:00
|
|
|
|
|
|
|
pDirectDraw->Global.dhpdev = pDC->PDev;
|
|
|
|
pDirectDraw->Local.lpGbl = &pDirectDraw->Global;
|
|
|
|
|
|
|
|
pDirectDraw->DrvGetDirectDrawInfo = pDC->DriverFunctions.GetDirectDrawInfo;
|
|
|
|
pDirectDraw->DrvDisableDirectDraw = pDC->DriverFunctions.DisableDirectDraw;
|
|
|
|
|
2004-12-12 01:40:39 +00:00
|
|
|
if (callbacks.dwFlags & DDHAL_CB32_CREATESURFACE)
|
2003-10-28 19:30:08 +00:00
|
|
|
pDirectDraw->DdCreateSurface = callbacks.CreateSurface;
|
2004-12-12 01:40:39 +00:00
|
|
|
if (callbacks.dwFlags & DDHAL_CB32_SETCOLORKEY)
|
2003-10-28 19:30:08 +00:00
|
|
|
pDirectDraw->DdDrvSetColorKey = callbacks.SetColorKey;
|
2004-12-12 01:40:39 +00:00
|
|
|
if (callbacks.dwFlags & DDHAL_CB32_WAITFORVERTICALBLANK)
|
2003-10-28 19:30:08 +00:00
|
|
|
pDirectDraw->DdWaitForVerticalBlank = callbacks.WaitForVerticalBlank;
|
2004-12-12 01:40:39 +00:00
|
|
|
if (callbacks.dwFlags & DDHAL_CB32_CANCREATESURFACE)
|
2003-10-28 19:30:08 +00:00
|
|
|
pDirectDraw->DdCanCreateSurface = callbacks.CanCreateSurface;
|
2004-12-12 01:40:39 +00:00
|
|
|
if (callbacks.dwFlags & DDHAL_CB32_CREATEPALETTE)
|
2003-10-28 19:30:08 +00:00
|
|
|
pDirectDraw->DdCreatePalette = callbacks.CreatePalette;
|
2004-12-12 01:40:39 +00:00
|
|
|
if (callbacks.dwFlags & DDHAL_CB32_GETSCANLINE)
|
2003-10-28 19:30:08 +00:00
|
|
|
pDirectDraw->DdGetScanLine = callbacks.GetScanLine;
|
2004-12-12 01:40:39 +00:00
|
|
|
if (callbacks.dwFlags & DDHAL_CB32_MAPMEMORY)
|
2003-10-28 19:30:08 +00:00
|
|
|
pDirectDraw->DdMapMemory = callbacks.MapMemory;
|
|
|
|
|
2004-12-12 01:40:39 +00:00
|
|
|
if (surface_callbacks.dwFlags & DDHAL_SURFCB32_DESTROYSURFACE)
|
2003-10-28 19:30:08 +00:00
|
|
|
pDirectDraw->DdDestroySurface = surface_callbacks.DestroySurface;
|
2004-12-12 01:40:39 +00:00
|
|
|
if (surface_callbacks.dwFlags & DDHAL_SURFCB32_FLIP)
|
2003-10-28 19:30:08 +00:00
|
|
|
pDirectDraw->DdFlip = surface_callbacks.Flip;
|
2004-12-12 01:40:39 +00:00
|
|
|
if (surface_callbacks.dwFlags & DDHAL_SURFCB32_SETCLIPLIST)
|
2003-10-28 19:30:08 +00:00
|
|
|
pDirectDraw->DdSetClipList = surface_callbacks.SetClipList;
|
2004-12-12 01:40:39 +00:00
|
|
|
if (surface_callbacks.dwFlags & DDHAL_SURFCB32_LOCK)
|
2003-10-28 19:30:08 +00:00
|
|
|
pDirectDraw->DdLock = surface_callbacks.Lock;
|
2004-12-12 01:40:39 +00:00
|
|
|
if (surface_callbacks.dwFlags & DDHAL_SURFCB32_UNLOCK)
|
2003-10-28 19:30:08 +00:00
|
|
|
pDirectDraw->DdUnlock = surface_callbacks.Unlock;
|
2004-12-12 01:40:39 +00:00
|
|
|
if (surface_callbacks.dwFlags & DDHAL_SURFCB32_BLT)
|
2003-10-28 19:30:08 +00:00
|
|
|
pDirectDraw->DdBlt = surface_callbacks.Blt;
|
2004-12-12 01:40:39 +00:00
|
|
|
if (surface_callbacks.dwFlags & DDHAL_SURFCB32_SETCOLORKEY)
|
2003-10-28 19:30:08 +00:00
|
|
|
pDirectDraw->DdSetColorKey = surface_callbacks.SetColorKey;
|
2004-12-12 01:40:39 +00:00
|
|
|
if (surface_callbacks.dwFlags & DDHAL_SURFCB32_ADDATTACHEDSURFACE)
|
2003-10-28 19:30:08 +00:00
|
|
|
pDirectDraw->DdAddAttachedSurface = surface_callbacks.AddAttachedSurface;
|
2004-12-12 01:40:39 +00:00
|
|
|
if (surface_callbacks.dwFlags & DDHAL_SURFCB32_GETBLTSTATUS)
|
2003-10-28 19:30:08 +00:00
|
|
|
pDirectDraw->DdGetBltStatus = surface_callbacks.GetBltStatus;
|
2004-12-12 01:40:39 +00:00
|
|
|
if (surface_callbacks.dwFlags & DDHAL_SURFCB32_GETFLIPSTATUS)
|
2003-10-28 19:30:08 +00:00
|
|
|
pDirectDraw->DdGetFlipStatus = surface_callbacks.GetFlipStatus;
|
2004-12-12 01:40:39 +00:00
|
|
|
if (surface_callbacks.dwFlags & DDHAL_SURFCB32_UPDATEOVERLAY)
|
2003-10-28 19:30:08 +00:00
|
|
|
pDirectDraw->DdUpdateOverlay = surface_callbacks.UpdateOverlay;
|
2004-12-12 01:40:39 +00:00
|
|
|
if (surface_callbacks.dwFlags & DDHAL_SURFCB32_SETOVERLAYPOSITION)
|
2003-10-28 19:30:08 +00:00
|
|
|
pDirectDraw->DdSetOverlayPosition = surface_callbacks.SetOverlayPosition;
|
2004-12-12 01:40:39 +00:00
|
|
|
if (surface_callbacks.dwFlags & DDHAL_SURFCB32_SETPALETTE)
|
2003-10-28 19:30:08 +00:00
|
|
|
pDirectDraw->DdSetPalette = surface_callbacks.SetPalette;
|
|
|
|
|
2004-12-12 01:40:39 +00:00
|
|
|
if (palette_callbacks.dwFlags & DDHAL_PALCB32_DESTROYPALETTE)
|
2003-10-28 19:30:08 +00:00
|
|
|
pDirectDraw->DdDestroyPalette = palette_callbacks.DestroyPalette;
|
2004-12-12 01:40:39 +00:00
|
|
|
if (palette_callbacks.dwFlags & DDHAL_PALCB32_SETENTRIES)
|
2003-10-28 19:30:08 +00:00
|
|
|
pDirectDraw->DdSetEntries = palette_callbacks.SetEntries;
|
|
|
|
|
2005-06-07 16:34:07 +00:00
|
|
|
GDIOBJ_UnlockObjByPtr(pDirectDraw);
|
|
|
|
DC_UnlockDc(pDC);
|
2003-10-28 19:30:08 +00:00
|
|
|
|
|
|
|
return hDirectDraw;
|
|
|
|
}
|
|
|
|
|
2005-05-08 02:11:54 +00:00
|
|
|
BOOL STDCALL NtGdiDdDeleteDirectDrawObject(
|
2003-10-28 19:30:08 +00:00
|
|
|
HANDLE hDirectDrawLocal
|
|
|
|
)
|
|
|
|
{
|
2004-12-12 01:40:39 +00:00
|
|
|
return GDIOBJ_FreeObj(hDirectDrawLocal, GDI_OBJECT_TYPE_DIRECTDRAW);
|
2003-10-28 19:30:08 +00:00
|
|
|
}
|
|
|
|
|
2005-05-08 02:11:54 +00:00
|
|
|
BOOL STDCALL NtGdiDdQueryDirectDrawObject(
|
2003-10-28 19:30:08 +00:00
|
|
|
HANDLE hDirectDrawLocal,
|
|
|
|
DD_HALINFO *pHalInfo,
|
|
|
|
DWORD *pCallBackFlags,
|
|
|
|
PD3DNTHAL_CALLBACKS puD3dCallbacks,
|
|
|
|
PD3DNTHAL_GLOBALDRIVERDATA puD3dDriverData,
|
|
|
|
PDD_D3DBUFCALLBACKS puD3dBufferCallbacks,
|
|
|
|
LPDDSURFACEDESC puD3dTextureFormats,
|
|
|
|
DWORD *puNumHeaps,
|
|
|
|
VIDEOMEMORY *puvmList,
|
|
|
|
DWORD *puNumFourCC,
|
|
|
|
DWORD *puFourCC
|
|
|
|
)
|
|
|
|
{
|
|
|
|
PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hDirectDrawLocal, GDI_OBJECT_TYPE_DIRECTDRAW);
|
|
|
|
if (!pDirectDraw)
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
BOOL success = pDirectDraw->DrvGetDirectDrawInfo(
|
|
|
|
pDirectDraw->Global.dhpdev,
|
|
|
|
pHalInfo,
|
|
|
|
puNumHeaps,
|
|
|
|
puvmList,
|
|
|
|
puNumFourCC,
|
|
|
|
puFourCC);
|
|
|
|
|
|
|
|
if (!success)
|
|
|
|
{
|
2005-06-07 16:34:07 +00:00
|
|
|
GDIOBJ_UnlockObjByPtr(pDirectDraw);
|
2003-10-28 19:30:08 +00:00
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (pHalInfo->lpD3DHALCallbacks)
|
|
|
|
{
|
|
|
|
RtlMoveMemory(puD3dCallbacks, pHalInfo->lpD3DHALCallbacks, sizeof(D3DNTHAL_CALLBACKS));
|
|
|
|
pDirectDraw->D3dContextCreate = puD3dCallbacks->ContextCreate;
|
|
|
|
pDirectDraw->D3dContextDestroy = puD3dCallbacks->ContextDestroy;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (pHalInfo->lpD3DGlobalDriverData)
|
|
|
|
{
|
|
|
|
RtlMoveMemory(puD3dDriverData, pHalInfo->lpD3DGlobalDriverData, sizeof(D3DNTHAL_GLOBALDRIVERDATA));
|
|
|
|
}
|
2005-05-08 02:11:54 +00:00
|
|
|
|
2003-10-28 19:30:08 +00:00
|
|
|
if (pHalInfo->lpD3DBufCallbacks)
|
|
|
|
{
|
|
|
|
RtlMoveMemory(puD3dBufferCallbacks, pHalInfo->lpD3DBufCallbacks, sizeof(DD_D3DBUFCALLBACKS));
|
|
|
|
pDirectDraw->DdCanCreateD3DBuffer = puD3dBufferCallbacks->CanCreateD3DBuffer;
|
|
|
|
pDirectDraw->DdCreateD3DBuffer = puD3dBufferCallbacks->CreateD3DBuffer;
|
|
|
|
pDirectDraw->DdDestroyD3DBuffer = puD3dBufferCallbacks->DestroyD3DBuffer;
|
|
|
|
pDirectDraw->DdLockD3DBuffer = puD3dBufferCallbacks->LockD3DBuffer;
|
|
|
|
pDirectDraw->DdUnlockD3DBuffer = puD3dBufferCallbacks->UnlockD3DBuffer;
|
|
|
|
}
|
2005-04-26 22:02:32 +00:00
|
|
|
|
2005-05-08 02:11:54 +00:00
|
|
|
|
2005-06-07 16:34:07 +00:00
|
|
|
GDIOBJ_UnlockObjByPtr(pDirectDraw);
|
2003-10-28 19:30:08 +00:00
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
/************************************************************************/
|
|
|
|
/* SURFACE OBJECT */
|
|
|
|
/************************************************************************/
|
|
|
|
|
2005-10-05 19:29:08 +00:00
|
|
|
BOOL INTERNAL_CALL
|
|
|
|
DDSURF_Cleanup(PVOID pDDSurf)
|
2003-10-28 19:30:08 +00:00
|
|
|
{
|
2005-10-05 19:29:08 +00:00
|
|
|
/* FIXME: implement
|
|
|
|
* PDD_SURFACE pDDSurf = PVOID pDDSurf
|
|
|
|
*/
|
2003-10-28 19:30:08 +00:00
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
2005-05-08 02:11:54 +00:00
|
|
|
HANDLE STDCALL NtGdiDdCreateSurfaceObject(
|
2003-10-28 19:30:08 +00:00
|
|
|
HANDLE hDirectDrawLocal,
|
|
|
|
HANDLE hSurface,
|
|
|
|
PDD_SURFACE_LOCAL puSurfaceLocal,
|
|
|
|
PDD_SURFACE_MORE puSurfaceMore,
|
|
|
|
PDD_SURFACE_GLOBAL puSurfaceGlobal,
|
|
|
|
BOOL bComplete
|
|
|
|
)
|
|
|
|
{
|
|
|
|
PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hDirectDrawLocal, GDI_OBJECT_TYPE_DIRECTDRAW);
|
|
|
|
if (!pDirectDraw)
|
|
|
|
return NULL;
|
|
|
|
|
|
|
|
if (!hSurface)
|
2004-12-12 01:40:39 +00:00
|
|
|
hSurface = GDIOBJ_AllocObj(GDI_OBJECT_TYPE_DD_SURFACE);
|
2003-10-28 19:30:08 +00:00
|
|
|
|
|
|
|
PDD_SURFACE pSurface = GDIOBJ_LockObj(hSurface, GDI_OBJECT_TYPE_DD_SURFACE);
|
2004-12-12 01:40:39 +00:00
|
|
|
/* FIXME - Handle pSurface == NULL!!!! */
|
2005-05-08 02:11:54 +00:00
|
|
|
|
2003-10-28 19:30:08 +00:00
|
|
|
RtlMoveMemory(&pSurface->Local, puSurfaceLocal, sizeof(DD_SURFACE_LOCAL));
|
|
|
|
RtlMoveMemory(&pSurface->More, puSurfaceMore, sizeof(DD_SURFACE_MORE));
|
|
|
|
RtlMoveMemory(&pSurface->Global, puSurfaceGlobal, sizeof(DD_SURFACE_GLOBAL));
|
|
|
|
pSurface->Local.lpGbl = &pSurface->Global;
|
|
|
|
pSurface->Local.lpSurfMore = &pSurface->More;
|
|
|
|
pSurface->Local.lpAttachList = NULL;
|
|
|
|
pSurface->Local.lpAttachListFrom = NULL;
|
|
|
|
pSurface->More.lpVideoPort = NULL;
|
|
|
|
// FIXME: figure out how to use this
|
|
|
|
pSurface->bComplete = bComplete;
|
|
|
|
|
2005-06-07 16:34:07 +00:00
|
|
|
GDIOBJ_UnlockObjByPtr(pSurface);
|
|
|
|
GDIOBJ_UnlockObjByPtr(pDirectDraw);
|
2003-10-28 19:30:08 +00:00
|
|
|
|
|
|
|
return hSurface;
|
|
|
|
}
|
|
|
|
|
2005-05-08 02:11:54 +00:00
|
|
|
BOOL STDCALL NtGdiDdDeleteSurfaceObject(
|
2003-10-28 19:30:08 +00:00
|
|
|
HANDLE hSurface
|
|
|
|
)
|
|
|
|
{
|
2004-12-12 01:40:39 +00:00
|
|
|
return GDIOBJ_FreeObj(hSurface, GDI_OBJECT_TYPE_DD_SURFACE);
|
2003-10-28 19:30:08 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
2005-05-08 02:11:54 +00:00
|
|
|
BOOL STDCALL NtGdiDdAttachSurface(
|
2003-10-28 19:30:08 +00:00
|
|
|
HANDLE hSurfaceFrom,
|
|
|
|
HANDLE hSurfaceTo
|
|
|
|
)
|
|
|
|
{
|
|
|
|
PDD_SURFACE pSurfaceFrom = GDIOBJ_LockObj(hSurfaceFrom, GDI_OBJECT_TYPE_DD_SURFACE);
|
|
|
|
if (!pSurfaceFrom)
|
|
|
|
return FALSE;
|
|
|
|
PDD_SURFACE pSurfaceTo = GDIOBJ_LockObj(hSurfaceTo, GDI_OBJECT_TYPE_DD_SURFACE);
|
|
|
|
if (!pSurfaceTo)
|
|
|
|
{
|
2005-06-07 16:34:07 +00:00
|
|
|
GDIOBJ_UnlockObjByPtr(pSurfaceFrom);
|
2003-10-28 19:30:08 +00:00
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (pSurfaceFrom->Local.lpAttachListFrom)
|
|
|
|
{
|
|
|
|
pSurfaceFrom->Local.lpAttachListFrom = pSurfaceFrom->AttachListFrom;
|
|
|
|
}
|
|
|
|
|
2005-06-07 16:34:07 +00:00
|
|
|
GDIOBJ_UnlockObjByPtr(pSurfaceFrom);
|
|
|
|
GDIOBJ_UnlockObjByPtr(pSurfaceTo);
|
2003-10-28 19:30:08 +00:00
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
*/
|
|
|
|
|
2005-03-16 11:50:24 +00:00
|
|
|
|
|
|
|
|
2005-05-08 02:11:54 +00:00
|
|
|
DWORD STDCALL NtGdiDdGetDriverInfo(
|
2005-03-16 11:50:24 +00:00
|
|
|
HANDLE hDirectDrawLocal,
|
2005-05-08 02:11:54 +00:00
|
|
|
PDD_GETDRIVERINFODATA puGetDriverInfoData)
|
2005-03-16 11:50:24 +00:00
|
|
|
|
2005-05-08 02:11:54 +00:00
|
|
|
{
|
|
|
|
DWORD pdwNumHeaps;
|
2005-03-16 11:50:24 +00:00
|
|
|
VIDEOMEMORY *pvmList = NULL;
|
|
|
|
DWORD pdwNumFourCC;
|
|
|
|
DWORD *pdwFourCC = NULL;
|
|
|
|
DWORD ddRVal;
|
2005-05-08 02:11:54 +00:00
|
|
|
|
2005-03-16 11:50:24 +00:00
|
|
|
PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hDirectDrawLocal, GDI_OBJECT_TYPE_DIRECTDRAW);
|
|
|
|
|
2005-10-06 21:18:59 +00:00
|
|
|
ddRVal = pDirectDraw->DrvGetDirectDrawInfo(
|
2005-03-16 11:50:24 +00:00
|
|
|
pDirectDraw->Global.dhpdev,(PDD_HALINFO) puGetDriverInfoData,
|
|
|
|
&pdwNumHeaps, pvmList, &pdwNumFourCC, pdwFourCC);
|
2005-05-08 02:11:54 +00:00
|
|
|
|
2005-06-07 16:34:07 +00:00
|
|
|
GDIOBJ_UnlockObjByPtr(pDirectDraw);
|
2005-05-08 02:11:54 +00:00
|
|
|
|
2005-03-16 11:50:24 +00:00
|
|
|
return ddRVal;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
2005-05-08 02:11:54 +00:00
|
|
|
DWORD STDCALL NtGdiDdWaitForVerticalBlank(
|
2005-03-16 11:50:24 +00:00
|
|
|
HANDLE hDirectDrawLocal,
|
|
|
|
PDD_WAITFORVERTICALBLANKDATA puWaitForVerticalBlankData
|
|
|
|
)
|
|
|
|
{
|
|
|
|
DWORD ddRVal;
|
|
|
|
PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hDirectDrawLocal, GDI_OBJECT_TYPE_DIRECTDRAW);
|
2005-10-06 21:18:59 +00:00
|
|
|
|
2005-03-16 11:50:24 +00:00
|
|
|
ddRVal = pDirectDraw->DdWaitForVerticalBlank(puWaitForVerticalBlankData);
|
|
|
|
|
2005-06-07 16:34:07 +00:00
|
|
|
GDIOBJ_UnlockObjByPtr(pDirectDraw);
|
2005-03-16 11:50:24 +00:00
|
|
|
|
|
|
|
return ddRVal;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2005-05-08 02:11:54 +00:00
|
|
|
DWORD STDCALL NtGdiDdCanCreateSurface(
|
2005-04-26 17:19:06 +00:00
|
|
|
HANDLE hDirectDrawLocal,
|
|
|
|
PDD_CANCREATESURFACEDATA puCanCreateSurfaceData
|
|
|
|
)
|
|
|
|
{
|
|
|
|
DWORD ddRVal;
|
|
|
|
|
|
|
|
PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hDirectDrawLocal, GDI_OBJECT_TYPE_DIRECTDRAW);
|
|
|
|
|
|
|
|
ddRVal = pDirectDraw->DdCanCreateSurface(puCanCreateSurfaceData);
|
|
|
|
|
2005-06-07 16:34:07 +00:00
|
|
|
GDIOBJ_UnlockObjByPtr(pDirectDraw);
|
2005-05-08 02:11:54 +00:00
|
|
|
|
2005-04-26 17:19:06 +00:00
|
|
|
return ddRVal;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
2005-05-08 02:11:54 +00:00
|
|
|
DWORD STDCALL NtGdiDdBlt(
|
2005-04-26 22:02:32 +00:00
|
|
|
HANDLE hSurfaceDest,
|
|
|
|
HANDLE hSurfaceSrc,
|
|
|
|
PDD_BLTDATA puBltData
|
|
|
|
)
|
|
|
|
{
|
|
|
|
DWORD ddRVal;
|
|
|
|
|
2005-05-08 02:11:54 +00:00
|
|
|
PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hSurfaceDest, GDI_OBJECT_TYPE_DIRECTDRAW);
|
|
|
|
|
2005-04-26 22:02:32 +00:00
|
|
|
puBltData->lpDDDestSurface = hSurfaceDest;
|
|
|
|
puBltData->lpDDSrcSurface = hSurfaceSrc;
|
|
|
|
puBltData->lpDD = pDirectDraw->Local.lpGbl;
|
|
|
|
|
|
|
|
ddRVal = pDirectDraw->DdBlt(puBltData);
|
|
|
|
|
2005-06-07 16:34:07 +00:00
|
|
|
GDIOBJ_UnlockObjByPtr(pDirectDraw);
|
2005-04-26 22:02:32 +00:00
|
|
|
|
|
|
|
return ddRVal;
|
|
|
|
}
|
|
|
|
|
2005-10-06 21:18:59 +00:00
|
|
|
/* FIXME
|
|
|
|
this call is not implement yet
|
|
|
|
where to get the pointer DdGetAvailDriverMemory(puGetAvailDriverMemoryData
|
|
|
|
for the call in NtGdiDdCreateDirectDrawObject `??
|
|
|
|
or some where else ??
|
|
|
|
*/
|
|
|
|
|
|
|
|
DWORD STDCALL NtGdiDdGetAvailDriverMemory(
|
|
|
|
HANDLE hDirectDrawLocal,
|
|
|
|
PDD_GETAVAILDRIVERMEMORYDATA puGetAvailDriverMemoryData
|
|
|
|
)
|
|
|
|
{
|
|
|
|
DWORD ddRVal;
|
|
|
|
|
|
|
|
PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hDirectDrawLocal, GDI_OBJECT_TYPE_DIRECTDRAW);
|
|
|
|
|
|
|
|
ddRVal = pDirectDraw->DdGetAvailDriverMemory(puGetAvailDriverMemoryData);
|
|
|
|
|
|
|
|
GDIOBJ_UnlockObjByPtr(pDirectDraw);
|
|
|
|
|
|
|
|
return ddRVal;
|
|
|
|
}
|
2005-04-26 22:02:32 +00:00
|
|
|
|
2005-04-26 22:28:24 +00:00
|
|
|
|
2005-04-26 22:02:32 +00:00
|
|
|
|
2005-03-16 11:50:24 +00:00
|
|
|
|
2003-10-28 19:30:08 +00:00
|
|
|
/* EOF */
|