Reactos
at master 130 lines 4.9 kB view raw
1/* 2 * COPYRIGHT: See COPYING in the top level directory 3 * PROJECT: ReactOS kernel 4 * PURPOSE: Native DirectDraw implementation 5 * FILE: win32ss/reactx/ntddraw/dd.c 6 * PROGRAMER: Magnus Olsen (greatlord@reactos.org) 7 * REVISION HISTORY: 8 * 19/1-2006 Magnus Olsen 9 */ 10 11#include <win32k.h> 12 13// #define NDEBUG 14#include <debug.h> 15 16/************************************************************************/ 17/* NtGdiDdCreateSurface */ 18/************************************************************************/ 19DWORD 20APIENTRY 21NtGdiDdCreateSurface(HANDLE hDirectDrawLocal, 22 HANDLE *hSurface, 23 DDSURFACEDESC *puSurfaceDescription, 24 DD_SURFACE_GLOBAL *puSurfaceGlobalData, 25 DD_SURFACE_LOCAL *puSurfaceLocalData, 26 DD_SURFACE_MORE *puSurfaceMoreData, 27 PDD_CREATESURFACEDATA puCreateSurfaceData, 28 HANDLE *puhSurface) 29{ 30 PGD_DDCREATESURFACE pfnDdCreateSurface = (PGD_DDCREATESURFACE)gpDxFuncs[DXG_INDEX_DxDdCreateSurface].pfn; 31 32 if (pfnDdCreateSurface == NULL) 33 { 34 DPRINT1("Warning: no pfnDdCreateSurface\n"); 35 return DDHAL_DRIVER_NOTHANDLED; 36 } 37 38 DPRINT("Calling dxg.sys pfnDdCreateSurface\n"); 39 return pfnDdCreateSurface(hDirectDrawLocal,hSurface,puSurfaceDescription,puSurfaceGlobalData, 40 puSurfaceLocalData,puSurfaceMoreData,puCreateSurfaceData,puhSurface); 41} 42 43/************************************************************************/ 44/* NtGdiDdWaitForVerticalBlank */ 45/************************************************************************/ 46DWORD 47APIENTRY 48NtGdiDdWaitForVerticalBlank(HANDLE hDirectDraw, 49 PDD_WAITFORVERTICALBLANKDATA puWaitForVerticalBlankData) 50{ 51 PGD_DXDDWAITFORVERTICALBLANK pfnDdWaitForVerticalBlank = (PGD_DXDDWAITFORVERTICALBLANK)gpDxFuncs[DXG_INDEX_DxDdWaitForVerticalBlank].pfn; 52 53 if (pfnDdWaitForVerticalBlank == NULL) 54 { 55 DPRINT1("Warning: no pfnDdWaitForVerticalBlank\n"); 56 return DDHAL_DRIVER_NOTHANDLED; 57 } 58 59 DPRINT("Calling dxg.sys pfnDdWaitForVerticalBlank\n"); 60 return pfnDdWaitForVerticalBlank(hDirectDraw, puWaitForVerticalBlankData); 61} 62 63/************************************************************************/ 64/* NtGdiDdCanCreateSurface */ 65/************************************************************************/ 66DWORD 67APIENTRY 68NtGdiDdCanCreateSurface(HANDLE hDirectDrawLocal, 69 PDD_CANCREATESURFACEDATA puCanCreateSurfaceData) 70{ 71 PGD_DDCANCREATESURFACE pfnDdCanCreateSurface = (PGD_DDCANCREATESURFACE)gpDxFuncs[DXG_INDEX_DxDdCanCreateSurface].pfn; 72 73 if (pfnDdCanCreateSurface == NULL) 74 { 75 DPRINT1("Warning: no pfnDdCanCreateSurface\n"); 76 return DDHAL_DRIVER_NOTHANDLED; 77 } 78 79 DPRINT("Calling dxg.sys pfnDdCanCreateSurface\n"); 80 81 return pfnDdCanCreateSurface(hDirectDrawLocal,puCanCreateSurfaceData); 82} 83 84/************************************************************************/ 85/* NtGdiDdGetScanLine */ 86/************************************************************************/ 87DWORD 88APIENTRY 89NtGdiDdGetScanLine(HANDLE hDirectDrawLocal, 90 PDD_GETSCANLINEDATA puGetScanLineData) 91{ 92 PGD_DXDDGETSCANLINE pfnDdGetScanLine = (PGD_DXDDGETSCANLINE)gpDxFuncs[DXG_INDEX_DxDdGetScanLine].pfn; 93 94 if (pfnDdGetScanLine == NULL) 95 { 96 DPRINT1("Warning: no pfnDdGetScanLine\n"); 97 return DDHAL_DRIVER_NOTHANDLED; 98 } 99 100 DPRINT("Calling dxg.sys pfnDdGetScanLine\n"); 101 102 return pfnDdGetScanLine(hDirectDrawLocal,puGetScanLineData); 103} 104 105 106/************************************************************************/ 107/* This is not part of the ddsurface interface but it */ 108/* deals with the surface */ 109/************************************************************************/ 110 111/************************************************************************/ 112/* NtGdiDdCreateSurfaceEx */ 113/************************************************************************/ 114DWORD 115APIENTRY 116NtGdiDdCreateSurfaceEx(HANDLE hDirectDraw, 117 HANDLE hSurface, 118 DWORD dwSurfaceHandle) 119{ 120 PGD_DXDDCREATESURFACEEX pfnDdCreateSurfaceEx = (PGD_DXDDCREATESURFACEEX)gpDxFuncs[DXG_INDEX_DxDdCreateSurfaceEx].pfn; 121 122 if (pfnDdCreateSurfaceEx == NULL) 123 { 124 DPRINT1("Warning: no pfnDdCreateSurfaceEx\n"); 125 return DDHAL_DRIVER_NOTHANDLED; 126 } 127 128 DPRINT("Calling dxg.sys pfnDdCreateSurfaceEx\n"); 129 return pfnDdCreateSurfaceEx(hDirectDraw,hSurface,dwSurfaceHandle); 130}