📄 gdientry.c
字号:
{
pDDSurfaceCallbacks->UpdateOverlay = DdUpdateOverlay;
}
if (Flags & DDHAL_SURFCB32_SETOVERLAYPOSITION)
{
pDDSurfaceCallbacks->SetOverlayPosition = DdSetOverlayPosition;
}
if (Flags & DDHAL_SURFCB32_ADDATTACHEDSURFACE)
{
pDDSurfaceCallbacks->AddAttachedSurface = DdAddAttachedSurface;
}
}
/* Check for DD Palette Callbacks */
if (pDDPaletteCallbacks)
{
/* Zero the struct */
RtlZeroMemory(pDDPaletteCallbacks, sizeof(DDHAL_DDPALETTECALLBACKS));
/* Get the flags for this one */
Flags = CallbackFlags[2];
/* Write the header */
pDDPaletteCallbacks->dwSize = sizeof(DDHAL_DDPALETTECALLBACKS);
pDDPaletteCallbacks->dwFlags = Flags;
}
/* Check for D3D Callbacks */
if (pD3dCallbacks)
{
/* Zero the struct */
RtlZeroMemory(pD3dCallbacks, sizeof(D3DHAL_CALLBACKS));
/* Check if we have one */
if (D3dCallbacks.dwSize)
{
/* Write the header */
pD3dCallbacks->dwSize = sizeof(D3DHAL_CALLBACKS);
/* Now check for each callback */
if (D3dCallbacks.ContextCreate)
{
/* FIXME
pD3dCallbacks->ContextCreate = D3dContextCreate;
*/
}
if (D3dCallbacks.ContextDestroy)
{
pD3dCallbacks->ContextDestroy = (LPD3DHAL_CONTEXTDESTROYCB) NtGdiD3dContextDestroy;
}
if (D3dCallbacks.ContextDestroyAll)
{
/* FIXME
pD3dCallbacks->ContextDestroyAll = (LPD3DHAL_CONTEXTDESTROYALLCB) NtGdiD3dContextDestroyAll;
*/
}
}
}
/* Check for D3D Driver Data */
if (pD3dDriverData)
{
/* Copy the struct */
RtlMoveMemory(pD3dDriverData,
&D3dDriverData,
sizeof(D3DHAL_GLOBALDRIVERDATA));
/* Write the pointer to the texture formats */
pD3dDriverData->lpTextureFormats = pD3dTextureFormats;
}
/* FIXME: Check for D3D Buffer Callbacks */
return TRUE;
}
/*
* @implemented
*
* GDIEntry 3
*/
BOOL
WINAPI
DdDeleteDirectDrawObject(LPDDRAWI_DIRECTDRAW_GBL pDirectDrawGlobal)
{
BOOL Return = FALSE;
/* If this is the global object */
if(pDirectDrawGlobal->hDD)
{
/* Free it */
Return = NtGdiDdDeleteDirectDrawObject((HANDLE)pDirectDrawGlobal->hDD);
if (Return == TRUE)
{
pDirectDrawGlobal->hDD = 0;
}
}
else if (ghDirectDraw)
{
/* Always success here */
Return = TRUE;
/* Make sure this is the last instance */
if (!(--gcDirectDraw))
{
/* Delete the object */
Return = NtGdiDdDeleteDirectDrawObject(ghDirectDraw);
if (Return == TRUE)
{
ghDirectDraw = 0;
}
}
}
/* Return */
return Return;
}
/*
* @implemented
*
* GDIEntry 4
*/
BOOL
WINAPI
DdCreateSurfaceObject( LPDDRAWI_DDRAWSURFACE_LCL pSurfaceLocal,
BOOL bPrimarySurface)
{
return bDDCreateSurface(pSurfaceLocal, TRUE);
//return bDdCreateSurfaceObject(pSurfaceLocal, TRUE);
}
/*
* @implemented
*
* GDIEntry 5
*/
BOOL
WINAPI
DdDeleteSurfaceObject(LPDDRAWI_DDRAWSURFACE_LCL pSurfaceLocal)
{
BOOL Return = FALSE;
/* Make sure there is one */
if (pSurfaceLocal->hDDSurface)
{
/* Delete it */
Return = NtGdiDdDeleteSurfaceObject((HANDLE)pSurfaceLocal->hDDSurface);
pSurfaceLocal->hDDSurface = 0;
}
return Return;
}
/*
* @implemented
*
* GDIEntry 6
*/
BOOL
WINAPI
DdResetVisrgn(LPDDRAWI_DDRAWSURFACE_LCL pSurfaceLocal,
HWND hWnd)
{
/* Call win32k directly */
return NtGdiDdResetVisrgn((HANDLE) pSurfaceLocal->hDDSurface, hWnd);
}
/*
* @implemented
*
* GDIEntry 7
*/
HDC
WINAPI
DdGetDC(LPDDRAWI_DDRAWSURFACE_LCL pSurfaceLocal,
LPPALETTEENTRY pColorTable)
{
/* Call win32k directly */
return NtGdiDdGetDC(pColorTable, (HANDLE) pSurfaceLocal->hDDSurface);
}
/*
* @implemented
*
* GDIEntry 8
*/
BOOL
WINAPI
DdReleaseDC(LPDDRAWI_DDRAWSURFACE_LCL pSurfaceLocal)
{
/* Call win32k directly */
return NtGdiDdReleaseDC((HANDLE) pSurfaceLocal->hDDSurface);
}
/*
* @unimplemented
* GDIEntry 9
*/
HBITMAP
STDCALL
DdCreateDIBSection(HDC hdc,
CONST BITMAPINFO *pbmi,
UINT iUsage,
VOID **ppvBits,
HANDLE hSectionApp,
DWORD dwOffset)
{
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
return 0;
}
/*
* @implemented
*
* GDIEntry 10
*/
BOOL
WINAPI
DdReenableDirectDrawObject(LPDDRAWI_DIRECTDRAW_GBL pDirectDrawGlobal,
BOOL *pbNewMode)
{
/* Call win32k directly */
return NtGdiDdReenableDirectDrawObject(GetDdHandle(pDirectDrawGlobal->hDD),
pbNewMode);
}
/*
* @implemented
*
* GDIEntry 11
*/
BOOL
STDCALL
DdAttachSurface( LPDDRAWI_DDRAWSURFACE_LCL pSurfaceFrom,
LPDDRAWI_DDRAWSURFACE_LCL pSurfaceTo)
{
/* Create Surface if it does not exits one */
if (pSurfaceFrom->hDDSurface)
{
if (!bDDCreateSurface(pSurfaceFrom, FALSE))
{
return FALSE;
}
}
/* Create Surface if it does not exits one */
if (pSurfaceTo->hDDSurface)
{
if (!bDDCreateSurface(pSurfaceTo, FALSE))
{
return FALSE;
}
}
/* Call win32k */
return NtGdiDdAttachSurface((HANDLE)pSurfaceFrom->hDDSurface,
(HANDLE)pSurfaceTo->hDDSurface);
}
/*
* @implemented
*
* GDIEntry 12
*/
VOID
STDCALL
DdUnattachSurface(LPDDRAWI_DDRAWSURFACE_LCL pSurface,
LPDDRAWI_DDRAWSURFACE_LCL pSurfaceAttached)
{
/* Call win32k */
NtGdiDdUnattachSurface((HANDLE)pSurface->hDDSurface,
(HANDLE)pSurfaceAttached->hDDSurface);
}
/*
* @implemented
*
* GDIEntry 13
*/
ULONG
STDCALL
DdQueryDisplaySettingsUniqueness()
{
return RemberDdQueryDisplaySettingsUniquenessID;
}
/*
* @implemented
*
* GDIEntry 14
*/
HANDLE
WINAPI
DdGetDxHandle(LPDDRAWI_DIRECTDRAW_LCL pDDraw,
LPDDRAWI_DDRAWSURFACE_LCL pSurface,
BOOL bRelease)
{
HANDLE hDD = NULL;
HANDLE hSurface = (HANDLE)pSurface->hDDSurface;
/* Check if we already have a surface */
if (!pSurface)
{
/* We don't have one, use the DirectDraw Object handle instead */
hSurface = NULL;
hDD = GetDdHandle(pDDraw->lpGbl->hDD);
}
/* Call the API */
return (HANDLE)NtGdiDdGetDxHandle(hDD, hSurface, bRelease);
}
/*
* @implemented
*
* GDIEntry 15
*/
BOOL
WINAPI
DdSetGammaRamp(LPDDRAWI_DIRECTDRAW_LCL pDDraw,
HDC hdc,
LPVOID lpGammaRamp)
{
/* Call win32k directly */
return NtGdiDdSetGammaRamp(GetDdHandle(pDDraw->lpGbl->hDD),
hdc,
lpGammaRamp);
}
/*
* @implemented
*
* GDIEntry 16
*/
DWORD
WINAPI
DdSwapTextureHandles(LPDDRAWI_DIRECTDRAW_LCL pDDraw,
LPDDRAWI_DDRAWSURFACE_LCL pDDSLcl1,
LPDDRAWI_DDRAWSURFACE_LCL pDDSLcl2)
{
/* Always returns success */
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -