xref: /reactos/dll/directx/ddraw/rosdraw.h (revision 845faec4)
1 #pragma once
2 
3 /********* Includes  *********/
4 #include <windows.h>
5 #include <stdio.h>
6 #include <ddraw.h>
7 #include <ddrawi.h>
8 #include <d3dhal.h>
9 #include <ddrawgdi.h>
10 #include <pseh/pseh.h>
11 
12 #include <pseh/pseh2.h>
13 
14 #include "Ddraw/ddraw.h"
15 #include "Surface/surface.h"
16 #include "Clipper/clipper.h"
17 
18 #include "resource.h"
19 
20 /* DirectDraw startup code only internal use  */
21 extern DDRAWI_DIRECTDRAW_GBL ddgbl;
22 extern DDRAWI_DDRAWSURFACE_GBL ddSurfGbl;
23 extern WCHAR classname[128];
24 extern WNDCLASSW wnd_class;
25 extern CRITICAL_SECTION ddcs;
26 extern IDirectDraw7Vtbl DirectDraw7_Vtable;
27 extern IDirectDraw4Vtbl DirectDraw4_Vtable;
28 extern IDirectDraw2Vtbl DirectDraw2_Vtable;
29 extern IDirectDrawVtbl DirectDraw_Vtable;
30 
31 
32 extern IDirectDrawSurface7Vtbl DirectDrawSurface7_Vtable;
33 extern IDirectDrawSurface4Vtbl DirectDrawSurface4_Vtable;
34 extern IDirectDrawSurface3Vtbl DirectDrawSurface3_Vtable;
35 extern IDirectDrawSurface2Vtbl DirectDrawSurface2_Vtable;
36 extern IDirectDrawSurfaceVtbl DirectDrawSurface_Vtable;
37 extern const IDirectDrawPaletteVtbl DirectDrawPalette_Vtable;
38 extern IDirectDrawClipperVtbl DirectDrawClipper_Vtable;
39 extern IDirectDrawColorControlVtbl DirectDrawColorControl_Vtable;
40 extern IDirectDrawGammaControlVtbl DirectDrawGammaControl_Vtable;
41 extern IDirectDrawKernelVtbl        DirectDrawKernel_Vtable;
42 extern IDirectDrawSurfaceKernelVtbl DirectDrawSurfaceKernel_Vtable;
43 
44 extern IDirect3DVtbl IDirect3D_Vtbl;
45 extern IDirect3D2Vtbl IDirect3D2_Vtbl;
46 extern IDirect3D3Vtbl IDirect3D3_Vtbl;
47 extern IDirect3D7Vtbl IDirect3D7_Vtbl;
48 
49 /* Start up direct hal or hel
50  * iface = a pointer to the com object
51  * pGUID = guid hardware accelerations or software acceleration this can  be NULL
52  * reenable = FALSE if we whant create a new directdraw com
53  *          = TRUE if we really whant rebuild the whole com interface (not in use)
54  */
55 
56 HRESULT WINAPI
57 StartDirectDraw(
58                 LPDIRECTDRAW iface,
59                 LPGUID pGUID,
60                 BOOL reenable);
61 
62 /* iface = a pointer to the com object
63  * reenable = FALSE / TRUE rebuld dx hal interface, this is need if we doing a mode change
64  */
65 
66 HRESULT WINAPI
67 StartDirectDrawHal(
68                    LPDIRECTDRAW iface,
69                    BOOL reenable);
70 
71 /* iface = a pointer to the com object
72  * reenable = FALSE / TRUE rebuld dx hel interface, this is need if we doing a mode change
73  */
74 
75 HRESULT WINAPI
76 StartDirectDrawHel(
77                    LPDIRECTDRAW iface,
78                    BOOL reenable);
79 
80 HRESULT WINAPI
81 Create_DirectDraw (
82                    LPGUID pGUID,
83                    LPDIRECTDRAW* pIface,
84                    REFIID id,
85                    BOOL ex);
86 
87 HRESULT WINAPI
88 ReCreateDirectDraw(LPDIRECTDRAW iface);
89 HRESULT
90 Internal_CreateSurface(
91                        LPDDRAWI_DIRECTDRAW_INT pDDraw,
92                        LPDDSURFACEDESC2 pDDSD,
93                        LPDDRAWI_DDRAWSURFACE_INT *ppSurf,
94                        IUnknown *pUnkOuter);
95 
96 HRESULT
97 Internal_CreatePalette( LPDDRAWI_DIRECTDRAW_INT pDDraw, DWORD dwFlags,
98                   LPPALETTEENTRY palent, LPDIRECTDRAWPALETTE* ppPalette, LPUNKNOWN pUnkOuter);
99 
100 /* convert DDSURFACEDESC to DDSURFACEDESC2 */
101 void CopyDDSurfDescToDDSurfDesc2(LPDDSURFACEDESC2 dst_pDesc, LPDDSURFACEDESC src_pDesc);
102 
103 /* DirectDraw Cleanup code only internal use */
104 VOID Cleanup(LPDDRAWI_DIRECTDRAW_INT iface);
105 
106 /* own macro to alloc memory */
107 
108 /*
109 #define DxHeapMemAlloc(m)  HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, m)
110 #define DxHeapMemFree(p)   HeapFree(GetProcessHeap(), 0, p); \
111                            p = NULL;
112 */
113 #define DxHeapMemAlloc(p, m)  { \
114                                 p = malloc(m); \
115                                 if (p != NULL) \
116                                 { \
117                                     ZeroMemory(p,m); \
118                                 } \
119                               }
120 #define DxHeapMemFree(p)   { \
121                              free(p); \
122                              p = NULL; \
123                            }
124 
125 /******** Main Object ********/
126 
127 /* Public interface */
128 VOID WINAPI AcquireDDThreadLock(VOID);
129 VOID WINAPI ReleaseDDThreadLock(VOID);
130 
131 ULONG WINAPI  DirectDrawClipper_AddRef (LPDIRECTDRAWCLIPPER iface);
132 HRESULT WINAPI  DirectDrawClipper_Initialize( LPDIRECTDRAWCLIPPER iface, LPDIRECTDRAW lpDD, DWORD dwFlags);
133 
134 typedef struct DDRAWI_DDCOLORCONTROL_INT
135 {
136   LPVOID  lpVtbl;
137   LPVOID  lpLcl;
138   LPVOID  lpLink;
139   DWORD  dwIntRefCnt;
140 } DDRAWI_DDCOLORCONTROL_INT, *LPDDRAWI_DDCOLORCONTROL_INT;
141 
142 typedef struct _DDRAWI_DDGAMMACONTROL_INT
143 {
144   LPVOID  lpVtbl;
145   LPVOID  lpLcl;
146   LPVOID  lpLink;
147   DWORD  dwIntRefCnt;
148 } DDRAWI_DDGAMMACONTROL_INT, *LPDDRAWI_DDGAMMACONTROL_INT;
149 
150 typedef struct _DDRAWI_DDKERNEL_INT
151 {
152   LPVOID  lpVtbl;
153   LPVOID  lpLcl;
154   LPVOID  lpLink;
155   DWORD  dwIntRefCnt;
156 } DDRAWI_KERNEL_INT, *LPDDRAWI_KERNEL_INT;
157 
158 typedef struct _DDRAWI_DDKERNELSURFACE_INT
159 {
160   LPVOID  lpVtbl;
161   LPVOID  lpLcl;
162   LPVOID  lpLink;
163   DWORD  dwIntRefCnt;
164 } _DDRAWI_DDKERNELSURFACE_INT, *LPDDRAWI_DDKERNELSURFACE_INT;
165 
166 /* now to real info that are for private use and are our own */
167 
168 
169 
170 
171 
172 
173 
174 
175 /********* Prototypes **********/
176 VOID Hal_DirectDraw_Release (LPDIRECTDRAW7);
177 
178 /* Setting for HEL should be move to ros special reg key ? */
179 
180 /* setup how much graphic memory should hel be limit, set it now to 64MB */
181 #define HEL_GRAPHIC_MEMORY_MAX 67108864
182 
183 /*********** Macros ***********/
184 
185 /*
186    use this macro to close
187    down the debugger text complete
188    no debuging at all, it will
189    crash ms debugger in VS
190 */
191 
192 //#define DX_WINDBG_trace()
193 //#define DX_STUB
194 //#define DX_STUB_DD_OK return DD_OK;
195 //#define DX_STUB_str(x)
196 //#define DX_WINDBG_trace_res
197 
198 
199 /*
200    Use this macro if you want debug in visual studio or
201    if you have a program to look at the _INT struct from
202    ReactOS ddraw.dll or ms ddraw.dll, so you can see what
203    value ms are being setup.
204 
205    This macro will create allot warnings and can not be help when you compile
206 */
207 
208 
209 //#define DX_WINDBG_trace()
210 //#define DX_STUB
211 //#define DX_STUB_DD_OK return DD_OK;
212 //#define DX_STUB_str(x) printf("%s",x);
213 //#define DX_WINDBG_trace_res
214 
215 /*
216    use this if want doing a trace from a program
217    like a game and ReactOS ddraw.dll in windows
218    so you can figout what going wrong and what
219    api are being call or if it hel or is it hal
220 
221    This marco does not create warnings when you compile
222 */
223 
224 #define DX_STUB \
225 { \
226 	static BOOL firstcall = TRUE; \
227 	if (firstcall) \
228 	{ \
229 		char buffer[1024]; \
230 		sprintf ( buffer, "Function %s is not implemented yet (%s:%d)\n", __FUNCTION__,__FILE__,__LINE__ ); \
231 		OutputDebugStringA(buffer); \
232 		firstcall = FALSE; \
233 	} \
234 } \
235 	return DDERR_UNSUPPORTED;
236 
237 
238 
239 #define DX_STUB_DD_OK \
240 { \
241 	static BOOL firstcall = TRUE; \
242 	if (firstcall) \
243 	{ \
244 		char buffer[1024]; \
245 		sprintf ( buffer, "Function %s is not implemented yet (%s:%d)\n", __FUNCTION__,__FILE__,__LINE__ ); \
246 		OutputDebugStringA(buffer); \
247 		firstcall = FALSE; \
248 	} \
249 } \
250 	return DD_OK;
251 
252 
253 #if 1
254     #define DX_STUB_str(x) \
255     { \
256         char buffer[1024]; \
257         sprintf ( buffer, "Function %s %s (%s:%d)\n", __FUNCTION__,x,__FILE__,__LINE__ ); \
258         OutputDebugStringA(buffer); \
259     }
260 
261 
262     #define DX_WINDBG_trace() \
263         static BOOL firstcallx = TRUE; \
264         if (firstcallx) \
265         { \
266             char buffer[1024]; \
267             sprintf ( buffer, "Enter Function %s (%s:%d)\n", __FUNCTION__,__FILE__,__LINE__ ); \
268             OutputDebugStringA(buffer); \
269             firstcallx = TRUE; \
270         }
271 
272 
273 #define DX_WINDBG_trace_res(width,height,bpp, freq) \
274     static BOOL firstcallxx = TRUE; \
275     if (firstcallxx) \
276     { \
277         char buffer[1024]; \
278         sprintf ( buffer, "Setmode have been req width=%ld, height=%ld bpp=%ld freq = %ld\n",width,height,bpp, freq); \
279         OutputDebugStringA(buffer); \
280         firstcallxx = TRUE; \
281     }
282 #else
283     #define DX_WINDBG_trace() //
284     #define DX_WINDBG_trace_res(width,height,bpp, freq) \\
285 
286     #define DX_STUB_str(x) //
287 
288 #endif
289