Implement Surface_GetDC
[reactos.git] / reactos / dll / directx / ddraw / rosdraw.h
1 #ifndef __DDRAW_PRIVATE
2 #define __DDRAW_PRIVATE
3
4 /********* Includes *********/
5
6 #include <windows.h>
7 #include <stdio.h>
8 #include <ddraw.h>
9 #include <ddrawi.h>
10 #include <d3dhal.h>
11 #include <ddrawgdi.h>
12
13 /* own macro to alloc memmory */
14 #define DxHeapMemAlloc(m) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, m)
15 #define DxHeapMemFree(p) HeapFree(GetProcessHeap(), 0, p);
16 /******** Main Object ********/
17
18 typedef struct
19 {
20 /* Setup the Vtbl COM table */
21 IDirectDraw7Vtbl* lpVtbl;
22 IDirectDraw4Vtbl* lpVtbl_v4;
23 IDirectDraw2Vtbl* lpVtbl_v2;
24 IDirectDrawVtbl* lpVtbl_v1;
25
26 /* The main struct that contain all info from the HAL and HEL */
27 HDC hdc;
28 DDRAWI_DIRECTDRAW_GBL mDDrawGlobal;
29 DDRAWI_DIRECTDRAW_LCL mDDrawLocal;
30 DDHALINFO mHALInfo;
31
32 DDHAL_CALLBACKS mCallbacks;
33 DDHAL_DDEXEBUFCALLBACKS mD3dBufferCallbacks;
34 D3DHAL_CALLBACKS mD3dCallbacks;
35 D3DHAL_GLOBALDRIVERDATA mD3dDriverData;
36
37 UINT mcModeInfos;
38 DDHALMODEINFO *mpModeInfos;
39
40 UINT mcvmList;
41 VIDMEM *mpvmList;
42
43 UINT mcFourCC;
44 DWORD *mpFourCC;
45
46 UINT mcTextures;
47 DDSURFACEDESC *mpTextures;
48
49
50
51
52 /* ExclusiveOwner */
53
54 DWORD cooperative_level;
55
56
57 BOOL InitializeDraw;
58
59 /* HEL stuff */
60 DWORD HELMemoryAvilable;
61
62 } IDirectDrawImpl;
63
64 /******** Surface Object ********/
65 typedef struct
66 {
67 DDRAWI_DDRAWSURFACE_GBL mPrimaryGlobal;
68 DDRAWI_DDRAWSURFACE_MORE mPrimaryMore;
69 DDRAWI_DDRAWSURFACE_LCL mPrimaryLocal;
70 DDRAWI_DDRAWSURFACE_LCL *mpPrimaryLocals[1];
71
72 DDRAWI_DDRAWCLIPPER_LCL mPrimaryClipperLocal;
73 DDRAWI_DDRAWCLIPPER_GBL mPrimaryClipperGlobal;
74
75 DDSURFACEDESC mddsdPrimary;
76 } DxSurf;
77
78 typedef struct
79 {
80 IDirectDrawSurface7Vtbl* lpVtbl;
81 IDirectDrawSurface3Vtbl* lpVtbl_v3;
82
83 IDirectDrawImpl* owner;
84
85 DDRAWI_DDRAWSURFACE_GBL Global;
86 DDRAWI_DDRAWSURFACE_MORE More;
87 DDRAWI_DDRAWSURFACE_LCL Local;
88 DDRAWI_DDRAWSURFACE_LCL *pLocal[2];
89 DDSURFACEDESC ddsd;
90
91 DxSurf *Surf;
92
93 } IDirectDrawSurfaceImpl;
94
95
96
97
98
99 /******** Clipper Object ********/
100
101 typedef struct
102 {
103 IDirectDrawClipperVtbl* lpVtbl;
104 LONG ref;
105
106 IDirectDrawImpl* owner;
107
108 } IDirectDrawClipperImpl;
109
110 /******** Palette Object ********/
111
112 typedef struct
113 {
114 IDirectDrawPaletteVtbl* lpVtbl;
115 LONG ref;
116
117 IDirectDrawImpl* owner;
118
119 } IDirectDrawPaletteImpl;
120
121 /*********** VTables ************/
122
123 extern IDirectDraw7Vtbl DirectDraw7_Vtable;
124 extern IDirectDrawVtbl DDRAW_IDirectDraw_VTable;
125 extern IDirectDraw2Vtbl DDRAW_IDirectDraw2_VTable;
126 extern IDirectDraw4Vtbl DDRAW_IDirectDraw4_VTable;
127
128 extern IDirectDrawSurface7Vtbl DirectDrawSurface7_Vtable;
129 extern IDirectDrawSurface3Vtbl DDRAW_IDDS3_Thunk_VTable;
130
131 extern IDirectDrawPaletteVtbl DirectDrawPalette_Vtable;
132 extern IDirectDrawClipperVtbl DirectDrawClipper_Vtable;
133 extern IDirectDrawColorControlVtbl DirectDrawColorControl_Vtable;
134 extern IDirectDrawGammaControlVtbl DirectDrawGammaControl_Vtable;
135
136 /********* Prototypes **********/
137
138 HRESULT WINAPI Main_DirectDraw_GetAvailableVidMem(LPDIRECTDRAW7 iface, LPDDSCAPS2 ddscaps, LPDWORD total, LPDWORD free);
139
140 HRESULT Hal_DirectDraw_Initialize (LPDIRECTDRAW7 );
141 HRESULT Hal_DirectDraw_SetCooperativeLevel (LPDIRECTDRAW7 );
142 VOID Hal_DirectDraw_Release (LPDIRECTDRAW7 );
143 HRESULT Hal_DirectDraw_GetAvailableVidMem(LPDIRECTDRAW7, LPDDSCAPS2, LPDWORD, LPDWORD );
144 HRESULT Hal_DirectDraw_WaitForVerticalBlank(LPDIRECTDRAW7, DWORD, HANDLE );
145 HRESULT Hal_DirectDraw_GetScanLine(LPDIRECTDRAW7 , LPDWORD );
146 HRESULT Hal_DirectDraw_FlipToGDISurface(LPDIRECTDRAW7 );
147 HRESULT Hal_DirectDraw_SetDisplayMode (LPDIRECTDRAW7, DWORD, DWORD, DWORD, DWORD, DWORD );
148 HRESULT Hal_DDrawSurface_Blt(LPDIRECTDRAWSURFACE7, LPRECT, LPDIRECTDRAWSURFACE7, LPRECT, DWORD, LPDDBLTFX );
149 HRESULT Hal_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDESC2 pDDSD, IDirectDrawSurfaceImpl *ppSurf, IUnknown *pUnkOuter);
150 HRESULT Hal_DDrawSurface_Lock(LPDIRECTDRAWSURFACE7 iface, LPRECT prect, LPDDSURFACEDESC2 pDDSD, DWORD flags, HANDLE event);
151
152
153
154
155 HRESULT Hel_DirectDraw_Initialize (LPDIRECTDRAW7 );
156 HRESULT Hel_DirectDraw_SetCooperativeLevel (LPDIRECTDRAW7 );
157 VOID Hel_DirectDraw_Release (LPDIRECTDRAW7 );
158 HRESULT Hel_DirectDraw_GetAvailableVidMem(LPDIRECTDRAW7 , LPDDSCAPS2 ddsaps, LPDWORD , LPDWORD );
159 HRESULT Hel_DirectDraw_WaitForVerticalBlank(LPDIRECTDRAW7, DWORD, HANDLE );
160 HRESULT Hel_DirectDraw_GetScanLine(LPDIRECTDRAW7 , LPDWORD );
161 HRESULT Hel_DirectDraw_FlipToGDISurface(LPDIRECTDRAW7 );
162 HRESULT Hel_DirectDraw_SetDisplayMode (LPDIRECTDRAW7 , DWORD , DWORD ,DWORD , DWORD , DWORD );
163 HRESULT Hel_DDrawSurface_Blt(LPDIRECTDRAWSURFACE7, LPRECT, LPDIRECTDRAWSURFACE7, LPRECT, DWORD, LPDDBLTFX );
164 HRESULT Hel_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDESC2 pDDSD, LPDIRECTDRAWSURFACE7 *ppSurf, IUnknown *pUnkOuter);
165 HRESULT Hel_DDrawSurface_Lock(LPDIRECTDRAWSURFACE7 iface, LPRECT prect, LPDDSURFACEDESC2 pDDSD, DWORD flags, HANDLE event);
166
167 /* Setting for HEL should be move to ros special reg key ? */
168
169 /* setup how much graphic memory should hel be limit, set it now to 64MB */
170 #define HEL_GRAPHIC_MEMORY_MAX 67108864
171
172 /*********** Macros ***********/
173
174 #define DX_STUB \
175 static BOOL firstcall = TRUE; \
176 if (firstcall) \
177 { \
178 char buffer[1024]; \
179 sprintf ( buffer, "Function %s is not implemented yet (%s:%d)\n", __FUNCTION__,__FILE__,__LINE__ ); \
180 OutputDebugStringA(buffer); \
181 firstcall = FALSE; \
182 } \
183 return DDERR_UNSUPPORTED;
184
185 #define DX_STUB_str(x) \
186 static BOOL firstcall = TRUE; \
187 if (firstcall) \
188 { \
189 char buffer[1024]; \
190 sprintf ( buffer, "Function %s %s (%s:%d)\n", __FUNCTION__,x,__FILE__,__LINE__ ); \
191 OutputDebugStringA(buffer); \
192 firstcall = FALSE; \
193 }
194
195 #endif /* __DDRAW_PRIVATE */