source: trunk/src/ddraw/OS2SURFACE.H@ 2012

Last change on this file since 2012 was 1746, checked in by hugh, 26 years ago

Fixes to let RA run

File size: 15.4 KB
Line 
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
11typedef 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
18typedef struct _SURFPRIVATEDATA
19{
20 GUID guidTag;
21 void *pData;
22 DWORD dwFlags;
23 DWORD dwSize;
24 BOOL isValid;
25}SURFPRIVATEDATA , *PSURFPRIVATEDATA;
26
27class OS2IDirectDrawSurface
28{
29 public:
30 //this one has to go first!
31 IDirectDrawSurface2Vtbl *lpVtbl;
32 IDirectDrawSurface2Vtbl *lpVtbl2; // 2nd Vtable pointer An other MS assumtion see below
33// IDirectDrawSurface4Vtbl *lpVtbl;
34// IDirectDrawSurface4Vtbl *lpVtbl2; // 2nd Vtable pointer An other MS assumtion see below
35 DWORD dwUnknownData; // Pointer to unknown data set to DEADDEAD to indicate that we can't handle this
36 IDirectDrawSurface2Vtbl Vtbl2;
37 IDirectDrawSurface3Vtbl Vtbl3;
38 IDirectDrawSurface4Vtbl Vtbl; // With Dx6 CreateSurface creates per default one with Interface 4 !
39
40 OS2IDirectDrawSurface( OS2IDirectDraw *lpDirectDraw,
41 LPDDSURFACEDESC2 lpDDSurfaceDesc,
42 BOOL Implicit = FALSE, // Indicates that this surface was created as result of a complex surface
43 BOOL Mainchain = FALSE); // Indicates if an implicit surface belongs to the primary surface
44 ~OS2IDirectDrawSurface();
45 int Referenced;
46 inline HRESULT GetLastError() { return lastError; };
47 inline int GetDiveBufNr() { return diveBufNr; };
48 inline BOOL IsImplicitSurface() {return ImplicitSurface; };
49 inline OS2IDirectDrawSurface* GetFrontBuffer(){ return FrontBuffer;};
50 inline void SetFrontBuffer( OS2IDirectDrawSurface* NewFBuffer);
51 void ColorConversion(LPRECT lpRect);
52
53 private:
54 HRESULT ColorFill(LPRECT, DWORD);
55 void (__cdecl *BltSolid)( char *pDBDst,
56 char *pFBDst,
57 DWORD dwDstTop,
58 DWORD dwDstLeft,
59 DWORD dwPitchDBDst,
60 DWORD dwPitchFBDst,
61 char *pDBSrc,
62 char *pFBSrc,
63 DWORD dwSrcTop,
64 DWORD dwSrcLeft,
65 DWORD dwWidth,
66 DWORD dwHeight,
67 DWORD dwPitchDBSrc,
68 DWORD dwPitchFBSrc
69 );
70 protected:
71 HRESULT lastError;
72 HDIVE hDive;
73 HDIVE hDiveCC; // Color conversion DIVE Handle
74 ULONG height, width;
75 ULONG screenHeight, screenWidth;
76 ULONG surfaceType;
77 ULONG diveBufNr;
78 OS2IDirectDraw *lpDraw;
79 OS2IDirectDrawClipper *lpClipper;
80 OS2IDirectDrawPalette *lpPalette;
81 DDSURFACEDESC2 DDSurfaceDesc;
82 BOOL fLocked;
83 HDC hdcImage;
84 HBITMAP hbmImage;
85 HGDIOBJ hgdiOld;
86 DWORD dwLastDCUnique;
87 // The real pointers hold the allocated memory (for the free)
88 // The other an pointer addjusted to QWORDs which we use and report
89 char *pFrameBuffer, *pFBreal;
90 char *pDiveBuffer, *pDBreal;
91 DWORD *pTransBufferSrc;
92 DWORD *pTransBufferDest;
93 DWORD dwPitchFB;
94 DWORD dwPitchDB;
95 DWORD dwBytesPPDive;
96 BOOL Updated;
97 BOOL ImplicitSurface;
98
99 // DDraw internal vars
100
101 DWORD dwUniqueValue;
102 HDPA DPA_SurfacePrivateData;
103
104 BOOL fOverlayValid;
105 LONG lOverlayX;
106 LONG lOverlayY;
107
108 // surface management
109
110 OS2IDirectDrawSurface* BackBuffer; // Backbuffer goes in here
111 OS2IDirectDrawSurface* FrontBuffer; // NULL if the real frontbuffer of a Flipchain otherwise the prev. Backbuffer
112 OS2IDirectDrawSurface* NextFlip; // Only valid in a frontbuffer
113
114 HDPA DPA_SurfaceMipMaps;
115 HDPA DPA_SurfaceAttached;
116 HDPA DPA_LockedRects;
117
118 friend HRESULT __stdcall SurfQueryInterface(THIS, REFIID riid, LPVOID FAR * ppvObj);
119 friend ULONG __stdcall SurfAddRef(THIS);
120 friend ULONG __stdcall SurfRelease(THIS);
121 friend HRESULT __stdcall SurfAddAttachedSurface(THIS, LPDIRECTDRAWSURFACE2);
122 friend HRESULT __stdcall SurfAddAttachedSurface3(THIS, LPDIRECTDRAWSURFACE3);
123 friend HRESULT __stdcall SurfAddAttachedSurface4(THIS, LPDIRECTDRAWSURFACE4);
124 friend HRESULT __stdcall SurfAddOverlayDirtyRect(THIS, LPRECT);
125 friend HRESULT __stdcall SurfBlt(THIS, LPRECT,LPDIRECTDRAWSURFACE2, LPRECT,DWORD, LPDDBLTFX);
126 friend HRESULT __stdcall SurfBlt3(THIS, LPRECT,LPDIRECTDRAWSURFACE3, LPRECT,DWORD, LPDDBLTFX);
127 friend HRESULT __stdcall SurfBlt4(THIS, LPRECT,LPDIRECTDRAWSURFACE4, LPRECT,DWORD, LPDDBLTFX);
128 friend HRESULT __stdcall SurfBltBatch(THIS, LPDDBLTBATCH, DWORD, DWORD );
129 friend HRESULT __stdcall SurfBltFast(THIS, DWORD,DWORD,LPDIRECTDRAWSURFACE2, LPRECT,DWORD);
130 friend HRESULT __stdcall SurfBltFast3(THIS, DWORD,DWORD,LPDIRECTDRAWSURFACE3, LPRECT,DWORD);
131 friend HRESULT __stdcall SurfBltFast4(THIS, DWORD,DWORD,LPDIRECTDRAWSURFACE4, LPRECT,DWORD);
132 friend HRESULT __stdcall SurfDeleteAttachedSurface(THIS, DWORD,LPDIRECTDRAWSURFACE2);
133 friend HRESULT __stdcall SurfDeleteAttachedSurface3(THIS, DWORD,LPDIRECTDRAWSURFACE3);
134 friend HRESULT __stdcall SurfDeleteAttachedSurface4(THIS, DWORD,LPDIRECTDRAWSURFACE4);
135 friend HRESULT __stdcall SurfEnumAttachedSurfaces(THIS, LPVOID,LPDDENUMSURFACESCALLBACK);
136 friend HRESULT __stdcall SurfEnumAttachedSurfaces4(THIS, LPVOID,LPDDENUMSURFACESCALLBACK2);
137 friend HRESULT __stdcall SurfEnumOverlayZOrders(THIS, DWORD,LPVOID,LPDDENUMSURFACESCALLBACK);
138 friend HRESULT __stdcall SurfEnumOverlayZOrders4(THIS, DWORD,LPVOID,LPDDENUMSURFACESCALLBACK2);
139 friend HRESULT __stdcall SurfFlip(THIS, LPDIRECTDRAWSURFACE2 , DWORD);
140 friend HRESULT __stdcall SurfFlip3(THIS, LPDIRECTDRAWSURFACE3 , DWORD);
141 friend HRESULT __stdcall SurfFlip4(THIS, LPDIRECTDRAWSURFACE4 , DWORD);
142 friend HRESULT __stdcall SurfGetAttachedSurface(THIS, LPDDSCAPS, LPDIRECTDRAWSURFACE2 FAR *);
143 friend HRESULT __stdcall SurfGetAttachedSurface3(THIS, LPDDSCAPS, LPDIRECTDRAWSURFACE3 FAR *);
144 friend HRESULT __stdcall SurfGetAttachedSurface4(THIS, LPDDSCAPS2, LPDIRECTDRAWSURFACE4 FAR *);
145 friend HRESULT __stdcall SurfGetBltStatus(THIS, DWORD);
146 friend HRESULT __stdcall SurfGetCaps(THIS, LPDDSCAPS);
147 friend HRESULT __stdcall SurfGetCaps4(THIS, LPDDSCAPS2);
148 friend HRESULT __stdcall SurfGetClipper(THIS, LPDIRECTDRAWCLIPPER FAR*);
149 friend HRESULT __stdcall SurfGetColorKey(THIS, DWORD, LPDDCOLORKEY);
150 friend HRESULT __stdcall SurfGetDC(THIS, HDC FAR *);
151 friend HRESULT __stdcall SurfGetFlipStatus(THIS, DWORD);
152 friend HRESULT __stdcall SurfGetOverlayPosition(THIS, LPLONG, LPLONG );
153 friend HRESULT __stdcall SurfGetPalette(THIS, LPDIRECTDRAWPALETTE FAR*);
154 friend HRESULT __stdcall SurfGetPixelFormat(THIS, LPDDPIXELFORMAT);
155 friend HRESULT __stdcall SurfGetSurfaceDesc(THIS, LPDDSURFACEDESC);
156 friend HRESULT __stdcall SurfGetSurfaceDesc4(THIS, LPDDSURFACEDESC2);
157 friend HRESULT __stdcall SurfInitialize(THIS, LPDIRECTDRAW, LPDDSURFACEDESC);
158 friend HRESULT __stdcall SurfInitialize4(THIS, LPDIRECTDRAW, LPDDSURFACEDESC2);
159 friend HRESULT __stdcall SurfIsLost(THIS);
160 friend HRESULT __stdcall SurfLock(THIS, LPRECT,LPDDSURFACEDESC,DWORD,HANDLE);
161 friend HRESULT __stdcall SurfLock4(THIS, LPRECT,LPDDSURFACEDESC2,DWORD,HANDLE);
162 friend HRESULT __stdcall SurfReleaseDC(THIS, HDC);
163 friend HRESULT __stdcall SurfRestore(THIS);
164 friend HRESULT __stdcall SurfSetClipper(THIS, LPDIRECTDRAWCLIPPER);
165 friend HRESULT __stdcall SurfSetColorKey(THIS, DWORD, LPDDCOLORKEY);
166 friend HRESULT __stdcall SurfSetOverlayPosition(THIS, LONG, LONG );
167 friend HRESULT __stdcall SurfSetPalette(THIS, LPDIRECTDRAWPALETTE);
168 friend HRESULT __stdcall SurfUnlock(THIS, LPVOID);
169 friend HRESULT __stdcall SurfUnlock4(THIS, LPRECT);
170 friend HRESULT __stdcall SurfUpdateOverlay(THIS, LPRECT, LPDIRECTDRAWSURFACE2,LPRECT,DWORD, LPDDOVERLAYFX);
171 friend HRESULT __stdcall SurfUpdateOverlay3(THIS, LPRECT, LPDIRECTDRAWSURFACE3,LPRECT,DWORD, LPDDOVERLAYFX);
172 friend HRESULT __stdcall SurfUpdateOverlay4(THIS, LPRECT, LPDIRECTDRAWSURFACE4,LPRECT,DWORD, LPDDOVERLAYFX);
173 friend HRESULT __stdcall SurfUpdateOverlayDisplay(THIS, DWORD);
174 friend HRESULT __stdcall SurfUpdateOverlayZOrder(THIS, DWORD, LPDIRECTDRAWSURFACE2);
175 friend HRESULT __stdcall SurfUpdateOverlayZOrder3(THIS, DWORD, LPDIRECTDRAWSURFACE3);
176 friend HRESULT __stdcall SurfUpdateOverlayZOrder4(THIS, DWORD, LPDIRECTDRAWSURFACE4);
177 // Added in V2 interface
178 friend HRESULT __stdcall SurfGetDDInterface(THIS, LPVOID FAR *);
179 friend HRESULT __stdcall SurfPageLock(THIS, DWORD);
180 friend HRESULT __stdcall SurfPageUnlock(THIS, DWORD);
181 // Added in V3 interface
182 friend HRESULT __stdcall SurfSetSurfaceDesc(THIS, LPDDSURFACEDESC, DWORD);
183 friend HRESULT __stdcall SurfSetSurfaceDesc4(THIS, LPDDSURFACEDESC2, DWORD);
184 // Added in V4 interface
185 friend HRESULT __stdcall SurfSetPrivateData(THIS, REFGUID, LPVOID, DWORD, DWORD);
186 friend HRESULT __stdcall SurfGetPrivateData(THIS, REFGUID, LPVOID, LPDWORD);
187 friend HRESULT __stdcall SurfFreePrivateData(THIS, REFGUID);
188 friend HRESULT __stdcall SurfGetUniquenessValue(THIS, LPDWORD);
189 friend HRESULT __stdcall SurfChangeUniquenessValue(THIS);
190};
191
192
193HRESULT __stdcall SurfQueryInterface(THIS, REFIID riid, LPVOID FAR * ppvObj);
194ULONG __stdcall SurfAddRef(THIS);
195ULONG __stdcall SurfRelease(THIS);
196HRESULT __stdcall SurfAddAttachedSurface(THIS, LPDIRECTDRAWSURFACE2);
197HRESULT __stdcall SurfAddAttachedSurface3(THIS, LPDIRECTDRAWSURFACE3);
198HRESULT __stdcall SurfAddAttachedSurface4(THIS, LPDIRECTDRAWSURFACE4);
199HRESULT __stdcall SurfAddOverlayDirtyRect(THIS, LPRECT);
200HRESULT __stdcall SurfBlt(THIS, LPRECT,LPDIRECTDRAWSURFACE2, LPRECT,DWORD, LPDDBLTFX);
201HRESULT __stdcall SurfBlt3(THIS, LPRECT,LPDIRECTDRAWSURFACE3, LPRECT,DWORD, LPDDBLTFX);
202HRESULT __stdcall SurfBlt4(THIS, LPRECT,LPDIRECTDRAWSURFACE4, LPRECT,DWORD, LPDDBLTFX);
203HRESULT __stdcall SurfBltBatch(THIS, LPDDBLTBATCH, DWORD, DWORD );
204HRESULT __stdcall SurfBltFast(THIS, DWORD,DWORD,LPDIRECTDRAWSURFACE2, LPRECT,DWORD);
205HRESULT __stdcall SurfBltFast3(THIS, DWORD,DWORD,LPDIRECTDRAWSURFACE3, LPRECT,DWORD);
206HRESULT __stdcall SurfBltFast4(THIS, DWORD,DWORD,LPDIRECTDRAWSURFACE4, LPRECT,DWORD);
207HRESULT __stdcall SurfDeleteAttachedSurface(THIS, DWORD,LPDIRECTDRAWSURFACE2);
208HRESULT __stdcall SurfDeleteAttachedSurface3(THIS, DWORD,LPDIRECTDRAWSURFACE3);
209HRESULT __stdcall SurfDeleteAttachedSurface4(THIS, DWORD,LPDIRECTDRAWSURFACE4);
210HRESULT __stdcall SurfEnumAttachedSurfaces(THIS, LPVOID,LPDDENUMSURFACESCALLBACK);
211HRESULT __stdcall SurfEnumAttachedSurfaces4(THIS, LPVOID,LPDDENUMSURFACESCALLBACK2);
212HRESULT __stdcall SurfEnumOverlayZOrders(THIS, DWORD,LPVOID,LPDDENUMSURFACESCALLBACK);
213HRESULT __stdcall SurfEnumOverlayZOrders4(THIS, DWORD,LPVOID,LPDDENUMSURFACESCALLBACK2);
214HRESULT __stdcall SurfFlip(THIS, LPDIRECTDRAWSURFACE2 , DWORD);
215HRESULT __stdcall SurfFlip3(THIS, LPDIRECTDRAWSURFACE3 , DWORD);
216HRESULT __stdcall SurfFlip4(THIS, LPDIRECTDRAWSURFACE4 , DWORD);
217HRESULT __stdcall SurfGetAttachedSurface(THIS, LPDDSCAPS, LPDIRECTDRAWSURFACE2 FAR *);
218HRESULT __stdcall SurfGetAttachedSurface3(THIS, LPDDSCAPS, LPDIRECTDRAWSURFACE3 FAR *);
219HRESULT __stdcall SurfGetAttachedSurface4(THIS, LPDDSCAPS2, LPDIRECTDRAWSURFACE4 FAR *);
220HRESULT __stdcall SurfGetBltStatus(THIS, DWORD);
221HRESULT __stdcall SurfGetCaps4(THIS, LPDDSCAPS2);
222HRESULT __stdcall SurfGetCaps(THIS, LPDDSCAPS);
223HRESULT __stdcall SurfGetClipper(THIS, LPDIRECTDRAWCLIPPER FAR*);
224HRESULT __stdcall SurfGetColorKey(THIS, DWORD, LPDDCOLORKEY);
225HRESULT __stdcall SurfGetDC(THIS, HDC FAR *);
226HRESULT __stdcall SurfGetFlipStatus(THIS, DWORD);
227HRESULT __stdcall SurfGetOverlayPosition(THIS, LPLONG, LPLONG );
228HRESULT __stdcall SurfGetPalette(THIS, LPDIRECTDRAWPALETTE FAR*);
229HRESULT __stdcall SurfGetPixelFormat(THIS, LPDDPIXELFORMAT);
230HRESULT __stdcall SurfGetSurfaceDesc(THIS, LPDDSURFACEDESC);
231HRESULT __stdcall SurfGetSurfaceDesc4(THIS, LPDDSURFACEDESC2);
232HRESULT __stdcall SurfInitialize(THIS, LPDIRECTDRAW, LPDDSURFACEDESC);
233HRESULT __stdcall SurfInitialize4(THIS, LPDIRECTDRAW, LPDDSURFACEDESC2);
234HRESULT __stdcall SurfIsLost(THIS);
235HRESULT __stdcall SurfLock(THIS, LPRECT,LPDDSURFACEDESC,DWORD,HANDLE);
236HRESULT __stdcall SurfLock4(THIS, LPRECT,LPDDSURFACEDESC2,DWORD,HANDLE);
237HRESULT __stdcall SurfReleaseDC(THIS, HDC);
238HRESULT __stdcall SurfRestore(THIS);
239HRESULT __stdcall SurfSetClipper(THIS, LPDIRECTDRAWCLIPPER);
240HRESULT __stdcall SurfSetColorKey(THIS, DWORD, LPDDCOLORKEY);
241HRESULT __stdcall SurfSetOverlayPosition(THIS, LONG, LONG );
242HRESULT __stdcall SurfSetPalette(THIS, LPDIRECTDRAWPALETTE);
243HRESULT __stdcall SurfUnlock(THIS, LPVOID);
244HRESULT __stdcall SurfUnlock4(THIS, LPRECT);
245HRESULT __stdcall SurfUpdateOverlay(THIS, LPRECT, LPDIRECTDRAWSURFACE2,LPRECT,DWORD, LPDDOVERLAYFX);
246HRESULT __stdcall SurfUpdateOverlay3(THIS, LPRECT, LPDIRECTDRAWSURFACE3,LPRECT,DWORD, LPDDOVERLAYFX);
247HRESULT __stdcall SurfUpdateOverlay4(THIS, LPRECT, LPDIRECTDRAWSURFACE4,LPRECT,DWORD, LPDDOVERLAYFX);
248HRESULT __stdcall SurfUpdateOverlayDisplay(THIS, DWORD);
249HRESULT __stdcall SurfUpdateOverlayZOrder(THIS, DWORD, LPDIRECTDRAWSURFACE2);
250HRESULT __stdcall SurfUpdateOverlayZOrder3(THIS, DWORD, LPDIRECTDRAWSURFACE3);
251HRESULT __stdcall SurfUpdateOverlayZOrder4(THIS, DWORD, LPDIRECTDRAWSURFACE4);
252HRESULT __stdcall SurfGetDDInterface(THIS, LPVOID FAR *);
253HRESULT __stdcall SurfPageLock(THIS, DWORD);
254HRESULT __stdcall SurfPageUnlock(THIS, DWORD);
255HRESULT __stdcall SurfSetSurfaceDesc(THIS, LPDDSURFACEDESC, DWORD);
256HRESULT __stdcall SurfSetSurfaceDesc4(THIS, LPDDSURFACEDESC2, DWORD);
257HRESULT __stdcall SurfSetPrivateData(THIS, REFGUID, LPVOID, DWORD, DWORD);
258HRESULT __stdcall SurfGetPrivateData(THIS, REFGUID, LPVOID, LPDWORD);
259HRESULT __stdcall SurfFreePrivateData(THIS, REFGUID);
260HRESULT __stdcall SurfGetUniquenessValue(THIS, LPDWORD);
261HRESULT __stdcall SurfChangeUniquenessValue(THIS);
262
263void __cdecl MoveRects(char* pBuffer, LPRECT lpDestRect, LPRECT lpSrcRect, int bbp, LONG lPitch);
264void __cdecl TransSRCBlit8(LPDDSURFACEDESC2 pDestDesc, LPDDSURFACEDESC2 pSrcDesc, char *pAlpha, LPRECT lpSrcRect);
265void __cdecl TransSRCBlit16(LPDDSURFACEDESC2 pDestDesc, LPDDSURFACEDESC2 pSrcDesc, char *pAlpha, LPRECT lpSrcRect);
266void __cdecl TransSRCBlit24(LPDDSURFACEDESC2 pDestDesc, LPDDSURFACEDESC2 pSrcDesc, char *pAlpha, LPRECT lpSrcRect);
267void __cdecl TransSRCBlit32(LPDDSURFACEDESC2 pDestDesc, LPDDSURFACEDESC2 pSrcDesc, char *pAlpha, LPRECT lpSrcRect);
268
269
270#endif
Note: See TracBrowser for help on using the repository browser.