1 | #ifndef __OS2SURFACE_H__
|
---|
2 | #define __OS2SURFACE_H__
|
---|
3 | #define FAR
|
---|
4 | #include "divewrap.h"
|
---|
5 | #include <commctrl.h>
|
---|
6 |
|
---|
7 | #define FAR
|
---|
8 | #undef THIS
|
---|
9 | #define THIS VOID*
|
---|
10 |
|
---|
11 | typedef struct _OS2RECTL {
|
---|
12 | LONG xLeft; /* X-coordinate of left-hand edge of rectangle. */
|
---|
13 | LONG yBottom; /* Y-coordinate of bottom edge of rectangle. */
|
---|
14 | LONG xRight; /* X-coordinate of right-hand edge of rectangle. */
|
---|
15 | LONG yTop; /* Y-coordinate of top edge of rectangle. */
|
---|
16 | } OS2RECTL;
|
---|
17 |
|
---|
18 | typedef struct _SURFPRIVATEDATA
|
---|
19 | {
|
---|
20 | GUID guidTag;
|
---|
21 | void *pData;
|
---|
22 | DWORD dwFlags;
|
---|
23 | DWORD dwSize;
|
---|
24 | BOOL isValid;
|
---|
25 | }SURFPRIVATEDATA , *PSURFPRIVATEDATA;
|
---|
26 |
|
---|
27 | class OS2IDirectDrawSurface
|
---|
28 | {
|
---|
29 | public:
|
---|
30 | //this one has to go first!
|
---|
31 | IDirectDrawSurface4Vtbl *lpVtbl;
|
---|
32 | IDirectDrawSurface2Vtbl Vtbl2;
|
---|
33 | IDirectDrawSurface3Vtbl Vtbl3;
|
---|
34 | IDirectDrawSurface4Vtbl Vtbl; // With Dx6 CreateSurface creates per default one with Interface 4 !
|
---|
35 |
|
---|
36 | OS2IDirectDrawSurface( OS2IDirectDraw *lpDirectDraw,
|
---|
37 | LPDDSURFACEDESC2 lpDDSurfaceDesc,
|
---|
38 | BOOL Implicit = FALSE, // Indicates that this surface was created as result of a complex surface
|
---|
39 | BOOL Mainchain = FALSE); // Indicates if an implicit surface belongs to the primary surface
|
---|
40 | ~OS2IDirectDrawSurface();
|
---|
41 | int Referenced;
|
---|
42 | inline HRESULT GetLastError() { return lastError; };
|
---|
43 | inline int GetDiveBufNr() { return diveBufNr; };
|
---|
44 | inline BOOL IsImplicitSurface() {return ImplicitSurface; };
|
---|
45 | inline OS2IDirectDrawSurface* GetFrontBuffer(){ return FrontBuffer;};
|
---|
46 | inline void SetFrontBuffer( OS2IDirectDrawSurface* NewFBuffer);
|
---|
47 | void ColorConversion(LPRECT lpRect);
|
---|
48 |
|
---|
49 | private:
|
---|
50 | HRESULT ColorFill(LPRECT, DWORD);
|
---|
51 | protected:
|
---|
52 | HRESULT lastError;
|
---|
53 | HDIVE hDive;
|
---|
54 | HDIVE hDiveCC; // Color conversion DIVE Handle
|
---|
55 | ULONG height, width;
|
---|
56 | ULONG screenHeight, screenWidth;
|
---|
57 | ULONG surfaceType;
|
---|
58 | ULONG diveBufNr;
|
---|
59 | OS2IDirectDraw *lpDraw;
|
---|
60 | OS2IDirectDrawClipper *lpClipper;
|
---|
61 | OS2IDirectDrawPalette *lpPalette;
|
---|
62 | DDSURFACEDESC2 DDSurfaceDesc;
|
---|
63 | BOOL fLocked;
|
---|
64 | HDC hdcImage;
|
---|
65 | HBITMAP hbmImage;
|
---|
66 | HGDIOBJ hgdiOld;
|
---|
67 | DWORD dwLastDCUnique;
|
---|
68 | // The real pointers hold the allocated memory (for the free)
|
---|
69 | // The other an pointer addjusted to QWORDs which we use and report
|
---|
70 | char *pFrameBuffer, *pFBreal;
|
---|
71 | char *pDiveBuffer, *pDBreal;
|
---|
72 | DWORD *pTransBufferSrc;
|
---|
73 | DWORD *pTransBufferDest;
|
---|
74 | DWORD dwPitchFB;
|
---|
75 | DWORD dwPitchDB;
|
---|
76 | DWORD dwBytesPPDive;
|
---|
77 | BOOL Updated;
|
---|
78 | BOOL ImplicitSurface;
|
---|
79 |
|
---|
80 | // DDraw internal vars
|
---|
81 |
|
---|
82 | DWORD dwUniqueValue;
|
---|
83 | HDPA DPA_SurfacePrivateData;
|
---|
84 |
|
---|
85 | BOOL fOverlayValid;
|
---|
86 | LONG lOverlayX;
|
---|
87 | LONG lOverlayY;
|
---|
88 |
|
---|
89 | // surface management
|
---|
90 |
|
---|
91 | OS2IDirectDrawSurface* BackBuffer; // Backbuffer goes in here
|
---|
92 | OS2IDirectDrawSurface* FrontBuffer; // NULL if the real frontbuffer of a Flipchain otherwise the prev. Backbuffer
|
---|
93 | OS2IDirectDrawSurface* NextFlip; // Only valid in a frontbuffer
|
---|
94 |
|
---|
95 | HDPA DPA_SurfaceMipMaps;
|
---|
96 | HDPA DPA_SurfaceAttached;
|
---|
97 | HDPA DPA_LockedRects;
|
---|
98 |
|
---|
99 | friend HRESULT __stdcall SurfQueryInterface(THIS, REFIID riid, LPVOID FAR * ppvObj);
|
---|
100 | friend ULONG __stdcall SurfAddRef(THIS);
|
---|
101 | friend ULONG __stdcall SurfRelease(THIS);
|
---|
102 | friend HRESULT __stdcall SurfAddAttachedSurface(THIS, LPDIRECTDRAWSURFACE2);
|
---|
103 | friend HRESULT __stdcall SurfAddAttachedSurface4(THIS, LPDIRECTDRAWSURFACE4);
|
---|
104 | friend HRESULT __stdcall SurfAddOverlayDirtyRect(THIS, LPRECT);
|
---|
105 | friend HRESULT __stdcall SurfBlt(THIS, LPRECT,LPDIRECTDRAWSURFACE2, LPRECT,DWORD, LPDDBLTFX);
|
---|
106 | friend HRESULT __stdcall SurfBlt4(THIS, LPRECT,LPDIRECTDRAWSURFACE4, LPRECT,DWORD, LPDDBLTFX);
|
---|
107 | friend HRESULT __stdcall SurfBltBatch(THIS, LPDDBLTBATCH, DWORD, DWORD );
|
---|
108 | friend HRESULT __stdcall SurfBltFast(THIS, DWORD,DWORD,LPDIRECTDRAWSURFACE2, LPRECT,DWORD);
|
---|
109 | friend HRESULT __stdcall SurfBltFast4(THIS, DWORD,DWORD,LPDIRECTDRAWSURFACE4, LPRECT,DWORD);
|
---|
110 | friend HRESULT __stdcall SurfDeleteAttachedSurface(THIS, DWORD,LPDIRECTDRAWSURFACE2);
|
---|
111 | friend HRESULT __stdcall SurfDeleteAttachedSurface4(THIS, DWORD,LPDIRECTDRAWSURFACE4);
|
---|
112 | friend HRESULT __stdcall SurfEnumAttachedSurfaces(THIS, LPVOID,LPDDENUMSURFACESCALLBACK);
|
---|
113 | friend HRESULT __stdcall SurfEnumAttachedSurfaces4(THIS, LPVOID,LPDDENUMSURFACESCALLBACK2);
|
---|
114 | friend HRESULT __stdcall SurfEnumOverlayZOrders(THIS, DWORD,LPVOID,LPDDENUMSURFACESCALLBACK);
|
---|
115 | friend HRESULT __stdcall SurfEnumOverlayZOrders4(THIS, DWORD,LPVOID,LPDDENUMSURFACESCALLBACK2);
|
---|
116 | friend HRESULT __stdcall SurfFlip(THIS, LPDIRECTDRAWSURFACE2 , DWORD);
|
---|
117 | friend HRESULT __stdcall SurfFlip4(THIS, LPDIRECTDRAWSURFACE4 , DWORD);
|
---|
118 | friend HRESULT __stdcall SurfGetAttachedSurface(THIS, LPDDSCAPS, LPDIRECTDRAWSURFACE2 FAR *);
|
---|
119 | friend HRESULT __stdcall SurfGetAttachedSurface4(THIS, LPDDSCAPS2, LPDIRECTDRAWSURFACE4 FAR *);
|
---|
120 | friend HRESULT __stdcall SurfGetBltStatus(THIS, DWORD);
|
---|
121 | friend HRESULT __stdcall SurfGetCaps(THIS, LPDDSCAPS);
|
---|
122 | friend HRESULT __stdcall SurfGetCaps4(THIS, LPDDSCAPS2);
|
---|
123 | friend HRESULT __stdcall SurfGetClipper(THIS, LPDIRECTDRAWCLIPPER FAR*);
|
---|
124 | friend HRESULT __stdcall SurfGetColorKey(THIS, DWORD, LPDDCOLORKEY);
|
---|
125 | friend HRESULT __stdcall SurfGetDC(THIS, HDC FAR *);
|
---|
126 | friend HRESULT __stdcall SurfGetFlipStatus(THIS, DWORD);
|
---|
127 | friend HRESULT __stdcall SurfGetOverlayPosition(THIS, LPLONG, LPLONG );
|
---|
128 | friend HRESULT __stdcall SurfGetPalette(THIS, LPDIRECTDRAWPALETTE FAR*);
|
---|
129 | friend HRESULT __stdcall SurfGetPixelFormat(THIS, LPDDPIXELFORMAT);
|
---|
130 | friend HRESULT __stdcall SurfGetSurfaceDesc(THIS, LPDDSURFACEDESC);
|
---|
131 | friend HRESULT __stdcall SurfGetSurfaceDesc4(THIS, LPDDSURFACEDESC2);
|
---|
132 | friend HRESULT __stdcall SurfInitialize(THIS, LPDIRECTDRAW, LPDDSURFACEDESC);
|
---|
133 | friend HRESULT __stdcall SurfInitialize4(THIS, LPDIRECTDRAW, LPDDSURFACEDESC2);
|
---|
134 | friend HRESULT __stdcall SurfIsLost(THIS);
|
---|
135 | friend HRESULT __stdcall SurfLock(THIS, LPRECT,LPDDSURFACEDESC,DWORD,HANDLE);
|
---|
136 | friend HRESULT __stdcall SurfLock4(THIS, LPRECT,LPDDSURFACEDESC2,DWORD,HANDLE);
|
---|
137 | friend HRESULT __stdcall SurfReleaseDC(THIS, HDC);
|
---|
138 | friend HRESULT __stdcall SurfRestore(THIS);
|
---|
139 | friend HRESULT __stdcall SurfSetClipper(THIS, LPDIRECTDRAWCLIPPER);
|
---|
140 | friend HRESULT __stdcall SurfSetColorKey(THIS, DWORD, LPDDCOLORKEY);
|
---|
141 | friend HRESULT __stdcall SurfSetOverlayPosition(THIS, LONG, LONG );
|
---|
142 | friend HRESULT __stdcall SurfSetPalette(THIS, LPDIRECTDRAWPALETTE);
|
---|
143 | friend HRESULT __stdcall SurfUnlock(THIS, LPVOID);
|
---|
144 | friend HRESULT __stdcall SurfUnlock4(THIS, LPRECT);
|
---|
145 | friend HRESULT __stdcall SurfUpdateOverlay(THIS, LPRECT, LPDIRECTDRAWSURFACE2,LPRECT,DWORD, LPDDOVERLAYFX);
|
---|
146 | friend HRESULT __stdcall SurfUpdateOverlay4(THIS, LPRECT, LPDIRECTDRAWSURFACE4,LPRECT,DWORD, LPDDOVERLAYFX);
|
---|
147 | friend HRESULT __stdcall SurfUpdateOverlayDisplay(THIS, DWORD);
|
---|
148 | friend HRESULT __stdcall SurfUpdateOverlayZOrder(THIS, DWORD, LPDIRECTDRAWSURFACE2);
|
---|
149 | friend HRESULT __stdcall SurfUpdateOverlayZOrder4(THIS, DWORD, LPDIRECTDRAWSURFACE4);
|
---|
150 | // Added in V2 interface
|
---|
151 | friend HRESULT __stdcall SurfGetDDInterface(THIS, LPVOID FAR *);
|
---|
152 | friend HRESULT __stdcall SurfPageLock(THIS, DWORD);
|
---|
153 | friend HRESULT __stdcall SurfPageUnlock(THIS, DWORD);
|
---|
154 | // Added in V3 interface
|
---|
155 | friend HRESULT __stdcall SurfSetSurfaceDesc(THIS, LPDDSURFACEDESC, DWORD);
|
---|
156 | friend HRESULT __stdcall SurfSetSurfaceDesc4(THIS, LPDDSURFACEDESC2, DWORD);
|
---|
157 | // Added in V4 interface
|
---|
158 | friend HRESULT __stdcall SurfSetPrivateData(THIS, REFGUID, LPVOID, DWORD, DWORD);
|
---|
159 | friend HRESULT __stdcall SurfGetPrivateData(THIS, REFGUID, LPVOID, LPDWORD);
|
---|
160 | friend HRESULT __stdcall SurfFreePrivateData(THIS, REFGUID);
|
---|
161 | friend HRESULT __stdcall SurfGetUniquenessValue(THIS, LPDWORD);
|
---|
162 | friend HRESULT __stdcall SurfChangeUniquenessValue(THIS);
|
---|
163 | };
|
---|
164 |
|
---|
165 |
|
---|
166 | HRESULT __stdcall SurfQueryInterface(THIS, REFIID riid, LPVOID FAR * ppvObj);
|
---|
167 | ULONG __stdcall SurfAddRef(THIS);
|
---|
168 | ULONG __stdcall SurfRelease(THIS);
|
---|
169 | HRESULT __stdcall SurfAddAttachedSurface(THIS, LPDIRECTDRAWSURFACE2);
|
---|
170 | HRESULT __stdcall SurfAddAttachedSurface4(THIS, LPDIRECTDRAWSURFACE4);
|
---|
171 | HRESULT __stdcall SurfAddOverlayDirtyRect(THIS, LPRECT);
|
---|
172 | HRESULT __stdcall SurfBlt(THIS, LPRECT,LPDIRECTDRAWSURFACE2, LPRECT,DWORD, LPDDBLTFX);
|
---|
173 | HRESULT __stdcall SurfBlt4(THIS, LPRECT,LPDIRECTDRAWSURFACE4, LPRECT,DWORD, LPDDBLTFX);
|
---|
174 | HRESULT __stdcall SurfBltBatch(THIS, LPDDBLTBATCH, DWORD, DWORD );
|
---|
175 | HRESULT __stdcall SurfBltFast(THIS, DWORD,DWORD,LPDIRECTDRAWSURFACE2, LPRECT,DWORD);
|
---|
176 | HRESULT __stdcall SurfBltFast4(THIS, DWORD,DWORD,LPDIRECTDRAWSURFACE4, LPRECT,DWORD);
|
---|
177 | HRESULT __stdcall SurfDeleteAttachedSurface(THIS, DWORD,LPDIRECTDRAWSURFACE2);
|
---|
178 | HRESULT __stdcall SurfDeleteAttachedSurface4(THIS, DWORD,LPDIRECTDRAWSURFACE4);
|
---|
179 | HRESULT __stdcall SurfEnumAttachedSurfaces(THIS, LPVOID,LPDDENUMSURFACESCALLBACK);
|
---|
180 | HRESULT __stdcall SurfEnumAttachedSurfaces4(THIS, LPVOID,LPDDENUMSURFACESCALLBACK2);
|
---|
181 | HRESULT __stdcall SurfEnumOverlayZOrders(THIS, DWORD,LPVOID,LPDDENUMSURFACESCALLBACK);
|
---|
182 | HRESULT __stdcall SurfEnumOverlayZOrders4(THIS, DWORD,LPVOID,LPDDENUMSURFACESCALLBACK2);
|
---|
183 | HRESULT __stdcall SurfFlip(THIS, LPDIRECTDRAWSURFACE2 , DWORD);
|
---|
184 | HRESULT __stdcall SurfFlip4(THIS, LPDIRECTDRAWSURFACE4 , DWORD);
|
---|
185 | HRESULT __stdcall SurfGetAttachedSurface(THIS, LPDDSCAPS, LPDIRECTDRAWSURFACE2 FAR *);
|
---|
186 | HRESULT __stdcall SurfGetAttachedSurface4(THIS, LPDDSCAPS2, LPDIRECTDRAWSURFACE4 FAR *);
|
---|
187 | HRESULT __stdcall SurfGetBltStatus(THIS, DWORD);
|
---|
188 | HRESULT __stdcall SurfGetCaps4(THIS, LPDDSCAPS2);
|
---|
189 | HRESULT __stdcall SurfGetCaps(THIS, LPDDSCAPS);
|
---|
190 | HRESULT __stdcall SurfGetClipper(THIS, LPDIRECTDRAWCLIPPER FAR*);
|
---|
191 | HRESULT __stdcall SurfGetColorKey(THIS, DWORD, LPDDCOLORKEY);
|
---|
192 | HRESULT __stdcall SurfGetDC(THIS, HDC FAR *);
|
---|
193 | HRESULT __stdcall SurfGetFlipStatus(THIS, DWORD);
|
---|
194 | HRESULT __stdcall SurfGetOverlayPosition(THIS, LPLONG, LPLONG );
|
---|
195 | HRESULT __stdcall SurfGetPalette(THIS, LPDIRECTDRAWPALETTE FAR*);
|
---|
196 | HRESULT __stdcall SurfGetPixelFormat(THIS, LPDDPIXELFORMAT);
|
---|
197 | HRESULT __stdcall SurfGetSurfaceDesc(THIS, LPDDSURFACEDESC);
|
---|
198 | HRESULT __stdcall SurfGetSurfaceDesc4(THIS, LPDDSURFACEDESC2);
|
---|
199 | HRESULT __stdcall SurfInitialize(THIS, LPDIRECTDRAW, LPDDSURFACEDESC);
|
---|
200 | HRESULT __stdcall SurfInitialize4(THIS, LPDIRECTDRAW, LPDDSURFACEDESC2);
|
---|
201 | HRESULT __stdcall SurfIsLost(THIS);
|
---|
202 | HRESULT __stdcall SurfLock(THIS, LPRECT,LPDDSURFACEDESC,DWORD,HANDLE);
|
---|
203 | HRESULT __stdcall SurfLock4(THIS, LPRECT,LPDDSURFACEDESC2,DWORD,HANDLE);
|
---|
204 | HRESULT __stdcall SurfReleaseDC(THIS, HDC);
|
---|
205 | HRESULT __stdcall SurfRestore(THIS);
|
---|
206 | HRESULT __stdcall SurfSetClipper(THIS, LPDIRECTDRAWCLIPPER);
|
---|
207 | HRESULT __stdcall SurfSetColorKey(THIS, DWORD, LPDDCOLORKEY);
|
---|
208 | HRESULT __stdcall SurfSetOverlayPosition(THIS, LONG, LONG );
|
---|
209 | HRESULT __stdcall SurfSetPalette(THIS, LPDIRECTDRAWPALETTE);
|
---|
210 | HRESULT __stdcall SurfUnlock(THIS, LPVOID);
|
---|
211 | HRESULT __stdcall SurfUnlock4(THIS, LPRECT);
|
---|
212 | HRESULT __stdcall SurfUpdateOverlay(THIS, LPRECT, LPDIRECTDRAWSURFACE2,LPRECT,DWORD, LPDDOVERLAYFX);
|
---|
213 | HRESULT __stdcall SurfUpdateOverlay4(THIS, LPRECT, LPDIRECTDRAWSURFACE4,LPRECT,DWORD, LPDDOVERLAYFX);
|
---|
214 | HRESULT __stdcall SurfUpdateOverlayDisplay(THIS, DWORD);
|
---|
215 | HRESULT __stdcall SurfUpdateOverlayZOrder(THIS, DWORD, LPDIRECTDRAWSURFACE2);
|
---|
216 | HRESULT __stdcall SurfUpdateOverlayZOrder4(THIS, DWORD, LPDIRECTDRAWSURFACE4);
|
---|
217 | HRESULT __stdcall SurfGetDDInterface(THIS, LPVOID FAR *);
|
---|
218 | HRESULT __stdcall SurfPageLock(THIS, DWORD);
|
---|
219 | HRESULT __stdcall SurfPageUnlock(THIS, DWORD);
|
---|
220 | HRESULT __stdcall SurfSetSurfaceDesc(THIS, LPDDSURFACEDESC, DWORD);
|
---|
221 | HRESULT __stdcall SurfSetSurfaceDesc4(THIS, LPDDSURFACEDESC2, DWORD);
|
---|
222 | HRESULT __stdcall SurfSetPrivateData(THIS, REFGUID, LPVOID, DWORD, DWORD);
|
---|
223 | HRESULT __stdcall SurfGetPrivateData(THIS, REFGUID, LPVOID, LPDWORD);
|
---|
224 | HRESULT __stdcall SurfFreePrivateData(THIS, REFGUID);
|
---|
225 | HRESULT __stdcall SurfGetUniquenessValue(THIS, LPDWORD);
|
---|
226 | HRESULT __stdcall SurfChangeUniquenessValue(THIS);
|
---|
227 |
|
---|
228 | void __cdecl MoveRects(char* pBuffer, LPRECT lpDestRect, LPRECT lpSrcRect, int bbp, LONG lPitch);
|
---|
229 | void __cdecl TransSRCBlit8(LPDDSURFACEDESC2 pDestDesc, LPDDSURFACEDESC2 pSrcDesc, char *pAlpha, LPRECT lpSrcRect);
|
---|
230 | void __cdecl TransSRCBlit16(LPDDSURFACEDESC2 pDestDesc, LPDDSURFACEDESC2 pSrcDesc, char *pAlpha, LPRECT lpSrcRect);
|
---|
231 | void __cdecl TransSRCBlit24(LPDDSURFACEDESC2 pDestDesc, LPDDSURFACEDESC2 pSrcDesc, char *pAlpha, LPRECT lpSrcRect);
|
---|
232 | void __cdecl TransSRCBlit32(LPDDSURFACEDESC2 pDestDesc, LPDDSURFACEDESC2 pSrcDesc, char *pAlpha, LPRECT lpSrcRect);
|
---|
233 |
|
---|
234 |
|
---|
235 | #endif
|
---|