mirror of
https://github.com/reactos/reactos.git
synced 2025-02-24 01:15:09 +00:00
prepare some directdraw syscall using cache info, that will make our ddraw.dll work evently in reactos.
svn path=/trunk/; revision=18747
This commit is contained in:
parent
d4f5019aa8
commit
ccae733920
1 changed files with 68 additions and 1 deletions
|
@ -208,12 +208,19 @@ DWORD STDCALL NtGdiDdCreateSurface(
|
|||
)
|
||||
{
|
||||
DWORD ddRVal = DDHAL_DRIVER_NOTHANDLED;
|
||||
|
||||
PDD_DIRECTDRAW_GLOBAL lgpl;
|
||||
|
||||
PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hDirectDrawLocal, GDI_OBJECT_TYPE_DIRECTDRAW);
|
||||
if (pDirectDraw == NULL)
|
||||
return DDHAL_DRIVER_NOTHANDLED;
|
||||
|
||||
/* backup the orignal PDev and info */
|
||||
lgpl = puCreateSurfaceData->lpDD;
|
||||
|
||||
/* use our cache version instead */
|
||||
puCreateSurfaceData->lpDD = &pDirectDraw->Global;
|
||||
|
||||
/* make the call */
|
||||
if (!(pDirectDraw->DD.dwFlags & DDHAL_CB32_CANCREATESURFACE))
|
||||
ddRVal = DDHAL_DRIVER_NOTHANDLED;
|
||||
else
|
||||
|
@ -221,6 +228,9 @@ DWORD STDCALL NtGdiDdCreateSurface(
|
|||
ddRVal = pDirectDraw->DD.CreateSurface(puCreateSurfaceData);
|
||||
}
|
||||
|
||||
/* But back the orignal PDev */
|
||||
puCreateSurfaceData->lpDD = lgpl;
|
||||
|
||||
GDIOBJ_UnlockObjByPtr(pDirectDraw);
|
||||
return ddRVal;
|
||||
}
|
||||
|
@ -231,15 +241,27 @@ DWORD STDCALL NtGdiDdWaitForVerticalBlank(
|
|||
)
|
||||
{
|
||||
DWORD ddRVal;
|
||||
PDD_DIRECTDRAW_GLOBAL lgpl;
|
||||
|
||||
PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hDirectDrawLocal, GDI_OBJECT_TYPE_DIRECTDRAW);
|
||||
if (pDirectDraw == NULL)
|
||||
return DDHAL_DRIVER_NOTHANDLED;
|
||||
|
||||
/* backup the orignal PDev and info */
|
||||
lgpl = puWaitForVerticalBlankData->lpDD;
|
||||
|
||||
/* use our cache version instead */
|
||||
puWaitForVerticalBlankData->lpDD = &pDirectDraw->Global;
|
||||
|
||||
/* make the call */
|
||||
if (!(pDirectDraw->DD.dwFlags & DDHAL_CB32_WAITFORVERTICALBLANK))
|
||||
ddRVal = DDHAL_DRIVER_NOTHANDLED;
|
||||
else
|
||||
ddRVal = pDirectDraw->DD.WaitForVerticalBlank(puWaitForVerticalBlankData);
|
||||
|
||||
/* But back the orignal PDev */
|
||||
puWaitForVerticalBlankData->lpDD = lgpl;
|
||||
|
||||
GDIOBJ_UnlockObjByPtr(pDirectDraw);
|
||||
return ddRVal;
|
||||
}
|
||||
|
@ -250,16 +272,27 @@ DWORD STDCALL NtGdiDdCanCreateSurface(
|
|||
)
|
||||
{
|
||||
DWORD ddRVal;
|
||||
PDD_DIRECTDRAW_GLOBAL lgpl;
|
||||
|
||||
PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hDirectDrawLocal, GDI_OBJECT_TYPE_DIRECTDRAW);
|
||||
if (pDirectDraw == NULL)
|
||||
return DDHAL_DRIVER_NOTHANDLED;
|
||||
|
||||
/* backup the orignal PDev and info */
|
||||
lgpl = puCanCreateSurfaceData->lpDD;
|
||||
|
||||
/* use our cache version instead */
|
||||
puCanCreateSurfaceData->lpDD = &pDirectDraw->Global;
|
||||
|
||||
/* make the call */
|
||||
if (!(pDirectDraw->DD.dwFlags & DDHAL_CB32_CANCREATESURFACE))
|
||||
ddRVal = DDHAL_DRIVER_NOTHANDLED;
|
||||
else
|
||||
ddRVal = pDirectDraw->DD.CanCreateSurface(puCanCreateSurfaceData);
|
||||
|
||||
/* But back the orignal PDev */
|
||||
puCanCreateSurfaceData->lpDD = lgpl;
|
||||
|
||||
GDIOBJ_UnlockObjByPtr(pDirectDraw);
|
||||
return ddRVal;
|
||||
}
|
||||
|
@ -270,16 +303,27 @@ DWORD STDCALL NtGdiDdGetScanLine(
|
|||
)
|
||||
{
|
||||
DWORD ddRVal;
|
||||
PDD_DIRECTDRAW_GLOBAL lgpl;
|
||||
|
||||
PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hDirectDrawLocal, GDI_OBJECT_TYPE_DIRECTDRAW);
|
||||
if (pDirectDraw == NULL)
|
||||
return DDHAL_DRIVER_NOTHANDLED;
|
||||
|
||||
/* backup the orignal PDev and info */
|
||||
lgpl = puGetScanLineData->lpDD;
|
||||
|
||||
/* use our cache version instead */
|
||||
puGetScanLineData->lpDD = &pDirectDraw->Global;
|
||||
|
||||
/* make the call */
|
||||
if (!(pDirectDraw->DD.dwFlags & DDHAL_CB32_GETSCANLINE))
|
||||
ddRVal = DDHAL_DRIVER_NOTHANDLED;
|
||||
else
|
||||
ddRVal = pDirectDraw->DD.GetScanLine(puGetScanLineData);
|
||||
|
||||
/* But back the orignal PDev */
|
||||
puGetScanLineData->lpDD = lgpl;
|
||||
|
||||
GDIOBJ_UnlockObjByPtr(pDirectDraw);
|
||||
return ddRVal;
|
||||
}
|
||||
|
@ -321,6 +365,7 @@ DWORD STDCALL NtGdiDdDestroySurface(
|
|||
ddRVal = pDirectDraw->Surf.DestroySurface(&DestroySurf);
|
||||
}
|
||||
|
||||
|
||||
GDIOBJ_UnlockObjByPtr(pDirectDraw);
|
||||
return ddRVal;
|
||||
}
|
||||
|
@ -334,16 +379,27 @@ DWORD STDCALL NtGdiDdFlip(
|
|||
)
|
||||
{
|
||||
DWORD ddRVal;
|
||||
PDD_DIRECTDRAW_GLOBAL lgpl;
|
||||
|
||||
PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hSurfaceTarget, GDI_OBJECT_TYPE_DIRECTDRAW);
|
||||
if (pDirectDraw == NULL)
|
||||
return DDHAL_DRIVER_NOTHANDLED;
|
||||
|
||||
/* backup the orignal PDev and info */
|
||||
lgpl = puFlipData->lpDD;
|
||||
|
||||
/* use our cache version instead */
|
||||
puFlipData->lpDD = &pDirectDraw->Global;
|
||||
|
||||
/* make the call */
|
||||
if (!(pDirectDraw->Surf.dwFlags & DDHAL_SURFCB32_FLIP))
|
||||
ddRVal = DDHAL_DRIVER_NOTHANDLED;
|
||||
else
|
||||
ddRVal = pDirectDraw->Surf.Flip(puFlipData);
|
||||
|
||||
/* But back the orignal PDev */
|
||||
puFlipData->lpDD = lgpl;
|
||||
|
||||
GDIOBJ_UnlockObjByPtr(pDirectDraw);
|
||||
return ddRVal;
|
||||
}
|
||||
|
@ -355,16 +411,27 @@ DWORD STDCALL NtGdiDdLock(
|
|||
)
|
||||
{
|
||||
DWORD ddRVal;
|
||||
PDD_DIRECTDRAW_GLOBAL lgpl;
|
||||
|
||||
PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(hSurface, GDI_OBJECT_TYPE_DIRECTDRAW);
|
||||
if (pDirectDraw == NULL)
|
||||
return DDHAL_DRIVER_NOTHANDLED;
|
||||
|
||||
/* backup the orignal PDev and info */
|
||||
lgpl = puLockData->lpDD;
|
||||
|
||||
/* use our cache version instead */
|
||||
puLockData->lpDD = &pDirectDraw->Global;
|
||||
|
||||
/* make the call */
|
||||
if (!(pDirectDraw->Surf.dwFlags & DDHAL_SURFCB32_LOCK))
|
||||
ddRVal = DDHAL_DRIVER_NOTHANDLED;
|
||||
else
|
||||
ddRVal = pDirectDraw->Surf.Lock(puLockData);
|
||||
|
||||
/* But back the orignal PDev */
|
||||
puLockData->lpDD = lgpl;
|
||||
|
||||
GDIOBJ_UnlockObjByPtr(pDirectDraw);
|
||||
return ddRVal;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue