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

Last change on this file since 1567 was 1562, checked in by hugh, 26 years ago

Changes handling of Interfaces.
Now DX2 interface is default (shouldf be DX1 but no SW uses it)
and the others can be queried.

RESULT: Quake II runs again!!!

Remarked out ChangeUniqueValue in the functions
as this is a DX6 funciton so for the DX6 interface I should
implement these functions again with the code reenabled.

File size: 14.7 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 protected:
56 HRESULT lastError;
57 HDIVE hDive;
58 HDIVE hDiveCC; // Color conversion DIVE Handle
59 ULONG height, width;
60 ULONG screenHeight, screenWidth;
61 ULONG surfaceType;
62 ULONG diveBufNr;
63 OS2IDirectDraw *lpDraw;
64 OS2IDirectDrawClipper *lpClipper;
65 OS2IDirectDrawPalette *lpPalette;
66 DDSURFACEDESC2 DDSurfaceDesc;
67 BOOL fLocked;
68 HDC hdcImage;
69 HBITMAP hbmImage;
70 HGDIOBJ hgdiOld;
71 DWORD dwLastDCUnique;
72 // The real pointers hold the allocated memory (for the free)
73 // The other an pointer addjusted to QWORDs which we use and report
74 char *pFrameBuffer, *pFBreal;
75 char *pDiveBuffer, *pDBreal;
76 DWORD *pTransBufferSrc;
77 DWORD *pTransBufferDest;
78 DWORD dwPitchFB;
79 DWORD dwPitchDB;
80 DWORD dwBytesPPDive;
81 BOOL Updated;
82 BOOL ImplicitSurface;
83
84 // DDraw internal vars
85
86 DWORD dwUniqueValue;
87 HDPA DPA_SurfacePrivateData;
88
89 BOOL fOverlayValid;
90 LONG lOverlayX;
91 LONG lOverlayY;
92
93 // surface management
94
95 OS2IDirectDrawSurface* BackBuffer; // Backbuffer goes in here
96 OS2IDirectDrawSurface* FrontBuffer; // NULL if the real frontbuffer of a Flipchain otherwise the prev. Backbuffer
97 OS2IDirectDrawSurface* NextFlip; // Only valid in a frontbuffer
98
99 HDPA DPA_SurfaceMipMaps;
100 HDPA DPA_SurfaceAttached;
101 HDPA DPA_LockedRects;
102
103 friend HRESULT __stdcall SurfQueryInterface(THIS, REFIID riid, LPVOID FAR * ppvObj);
104 friend ULONG __stdcall SurfAddRef(THIS);
105 friend ULONG __stdcall SurfRelease(THIS);
106 friend HRESULT __stdcall SurfAddAttachedSurface(THIS, LPDIRECTDRAWSURFACE2);
107 friend HRESULT __stdcall SurfAddAttachedSurface3(THIS, LPDIRECTDRAWSURFACE3);
108 friend HRESULT __stdcall SurfAddAttachedSurface4(THIS, LPDIRECTDRAWSURFACE4);
109 friend HRESULT __stdcall SurfAddOverlayDirtyRect(THIS, LPRECT);
110 friend HRESULT __stdcall SurfBlt(THIS, LPRECT,LPDIRECTDRAWSURFACE2, LPRECT,DWORD, LPDDBLTFX);
111 friend HRESULT __stdcall SurfBlt3(THIS, LPRECT,LPDIRECTDRAWSURFACE3, LPRECT,DWORD, LPDDBLTFX);
112 friend HRESULT __stdcall SurfBlt4(THIS, LPRECT,LPDIRECTDRAWSURFACE4, LPRECT,DWORD, LPDDBLTFX);
113 friend HRESULT __stdcall SurfBltBatch(THIS, LPDDBLTBATCH, DWORD, DWORD );
114 friend HRESULT __stdcall SurfBltFast(THIS, DWORD,DWORD,LPDIRECTDRAWSURFACE2, LPRECT,DWORD);
115 friend HRESULT __stdcall SurfBltFast3(THIS, DWORD,DWORD,LPDIRECTDRAWSURFACE3, LPRECT,DWORD);
116 friend HRESULT __stdcall SurfBltFast4(THIS, DWORD,DWORD,LPDIRECTDRAWSURFACE4, LPRECT,DWORD);
117 friend HRESULT __stdcall SurfDeleteAttachedSurface(THIS, DWORD,LPDIRECTDRAWSURFACE2);
118 friend HRESULT __stdcall SurfDeleteAttachedSurface3(THIS, DWORD,LPDIRECTDRAWSURFACE3);
119 friend HRESULT __stdcall SurfDeleteAttachedSurface4(THIS, DWORD,LPDIRECTDRAWSURFACE4);
120 friend HRESULT __stdcall SurfEnumAttachedSurfaces(THIS, LPVOID,LPDDENUMSURFACESCALLBACK);
121 friend HRESULT __stdcall SurfEnumAttachedSurfaces4(THIS, LPVOID,LPDDENUMSURFACESCALLBACK2);
122 friend HRESULT __stdcall SurfEnumOverlayZOrders(THIS, DWORD,LPVOID,LPDDENUMSURFACESCALLBACK);
123 friend HRESULT __stdcall SurfEnumOverlayZOrders4(THIS, DWORD,LPVOID,LPDDENUMSURFACESCALLBACK2);
124 friend HRESULT __stdcall SurfFlip(THIS, LPDIRECTDRAWSURFACE2 , DWORD);
125 friend HRESULT __stdcall SurfFlip3(THIS, LPDIRECTDRAWSURFACE3 , DWORD);
126 friend HRESULT __stdcall SurfFlip4(THIS, LPDIRECTDRAWSURFACE4 , DWORD);
127 friend HRESULT __stdcall SurfGetAttachedSurface(THIS, LPDDSCAPS, LPDIRECTDRAWSURFACE2 FAR *);
128 friend HRESULT __stdcall SurfGetAttachedSurface3(THIS, LPDDSCAPS, LPDIRECTDRAWSURFACE3 FAR *);
129 friend HRESULT __stdcall SurfGetAttachedSurface4(THIS, LPDDSCAPS2, LPDIRECTDRAWSURFACE4 FAR *);
130 friend HRESULT __stdcall SurfGetBltStatus(THIS, DWORD);
131 friend HRESULT __stdcall SurfGetCaps(THIS, LPDDSCAPS);
132 friend HRESULT __stdcall SurfGetCaps4(THIS, LPDDSCAPS2);
133 friend HRESULT __stdcall SurfGetClipper(THIS, LPDIRECTDRAWCLIPPER FAR*);
134 friend HRESULT __stdcall SurfGetColorKey(THIS, DWORD, LPDDCOLORKEY);
135 friend HRESULT __stdcall SurfGetDC(THIS, HDC FAR *);
136 friend HRESULT __stdcall SurfGetFlipStatus(THIS, DWORD);
137 friend HRESULT __stdcall SurfGetOverlayPosition(THIS, LPLONG, LPLONG );
138 friend HRESULT __stdcall SurfGetPalette(THIS, LPDIRECTDRAWPALETTE FAR*);
139 friend HRESULT __stdcall SurfGetPixelFormat(THIS, LPDDPIXELFORMAT);
140 friend HRESULT __stdcall SurfGetSurfaceDesc(THIS, LPDDSURFACEDESC);
141 friend HRESULT __stdcall SurfGetSurfaceDesc4(THIS, LPDDSURFACEDESC2);
142 friend HRESULT __stdcall SurfInitialize(THIS, LPDIRECTDRAW, LPDDSURFACEDESC);
143 friend HRESULT __stdcall SurfInitialize4(THIS, LPDIRECTDRAW, LPDDSURFACEDESC2);
144 friend HRESULT __stdcall SurfIsLost(THIS);
145 friend HRESULT __stdcall SurfLock(THIS, LPRECT,LPDDSURFACEDESC,DWORD,HANDLE);
146 friend HRESULT __stdcall SurfLock4(THIS, LPRECT,LPDDSURFACEDESC2,DWORD,HANDLE);
147 friend HRESULT __stdcall SurfReleaseDC(THIS, HDC);
148 friend HRESULT __stdcall SurfRestore(THIS);
149 friend HRESULT __stdcall SurfSetClipper(THIS, LPDIRECTDRAWCLIPPER);
150 friend HRESULT __stdcall SurfSetColorKey(THIS, DWORD, LPDDCOLORKEY);
151 friend HRESULT __stdcall SurfSetOverlayPosition(THIS, LONG, LONG );
152 friend HRESULT __stdcall SurfSetPalette(THIS, LPDIRECTDRAWPALETTE);
153 friend HRESULT __stdcall SurfUnlock(THIS, LPVOID);
154 friend HRESULT __stdcall SurfUnlock4(THIS, LPRECT);
155 friend HRESULT __stdcall SurfUpdateOverlay(THIS, LPRECT, LPDIRECTDRAWSURFACE2,LPRECT,DWORD, LPDDOVERLAYFX);
156 friend HRESULT __stdcall SurfUpdateOverlay3(THIS, LPRECT, LPDIRECTDRAWSURFACE3,LPRECT,DWORD, LPDDOVERLAYFX);
157 friend HRESULT __stdcall SurfUpdateOverlay4(THIS, LPRECT, LPDIRECTDRAWSURFACE4,LPRECT,DWORD, LPDDOVERLAYFX);
158 friend HRESULT __stdcall SurfUpdateOverlayDisplay(THIS, DWORD);
159 friend HRESULT __stdcall SurfUpdateOverlayZOrder(THIS, DWORD, LPDIRECTDRAWSURFACE2);
160 friend HRESULT __stdcall SurfUpdateOverlayZOrder3(THIS, DWORD, LPDIRECTDRAWSURFACE3);
161 friend HRESULT __stdcall SurfUpdateOverlayZOrder4(THIS, DWORD, LPDIRECTDRAWSURFACE4);
162 // Added in V2 interface
163 friend HRESULT __stdcall SurfGetDDInterface(THIS, LPVOID FAR *);
164 friend HRESULT __stdcall SurfPageLock(THIS, DWORD);
165 friend HRESULT __stdcall SurfPageUnlock(THIS, DWORD);
166 // Added in V3 interface
167 friend HRESULT __stdcall SurfSetSurfaceDesc(THIS, LPDDSURFACEDESC, DWORD);
168 friend HRESULT __stdcall SurfSetSurfaceDesc4(THIS, LPDDSURFACEDESC2, DWORD);
169 // Added in V4 interface
170 friend HRESULT __stdcall SurfSetPrivateData(THIS, REFGUID, LPVOID, DWORD, DWORD);
171 friend HRESULT __stdcall SurfGetPrivateData(THIS, REFGUID, LPVOID, LPDWORD);
172 friend HRESULT __stdcall SurfFreePrivateData(THIS, REFGUID);
173 friend HRESULT __stdcall SurfGetUniquenessValue(THIS, LPDWORD);
174 friend HRESULT __stdcall SurfChangeUniquenessValue(THIS);
175};
176
177
178HRESULT __stdcall SurfQueryInterface(THIS, REFIID riid, LPVOID FAR * ppvObj);
179ULONG __stdcall SurfAddRef(THIS);
180ULONG __stdcall SurfRelease(THIS);
181HRESULT __stdcall SurfAddAttachedSurface(THIS, LPDIRECTDRAWSURFACE2);
182HRESULT __stdcall SurfAddAttachedSurface3(THIS, LPDIRECTDRAWSURFACE3);
183HRESULT __stdcall SurfAddAttachedSurface4(THIS, LPDIRECTDRAWSURFACE4);
184HRESULT __stdcall SurfAddOverlayDirtyRect(THIS, LPRECT);
185HRESULT __stdcall SurfBlt(THIS, LPRECT,LPDIRECTDRAWSURFACE2, LPRECT,DWORD, LPDDBLTFX);
186HRESULT __stdcall SurfBlt3(THIS, LPRECT,LPDIRECTDRAWSURFACE3, LPRECT,DWORD, LPDDBLTFX);
187HRESULT __stdcall SurfBlt4(THIS, LPRECT,LPDIRECTDRAWSURFACE4, LPRECT,DWORD, LPDDBLTFX);
188HRESULT __stdcall SurfBltBatch(THIS, LPDDBLTBATCH, DWORD, DWORD );
189HRESULT __stdcall SurfBltFast(THIS, DWORD,DWORD,LPDIRECTDRAWSURFACE2, LPRECT,DWORD);
190HRESULT __stdcall SurfBltFast3(THIS, DWORD,DWORD,LPDIRECTDRAWSURFACE3, LPRECT,DWORD);
191HRESULT __stdcall SurfBltFast4(THIS, DWORD,DWORD,LPDIRECTDRAWSURFACE4, LPRECT,DWORD);
192HRESULT __stdcall SurfDeleteAttachedSurface(THIS, DWORD,LPDIRECTDRAWSURFACE2);
193HRESULT __stdcall SurfDeleteAttachedSurface3(THIS, DWORD,LPDIRECTDRAWSURFACE3);
194HRESULT __stdcall SurfDeleteAttachedSurface4(THIS, DWORD,LPDIRECTDRAWSURFACE4);
195HRESULT __stdcall SurfEnumAttachedSurfaces(THIS, LPVOID,LPDDENUMSURFACESCALLBACK);
196HRESULT __stdcall SurfEnumAttachedSurfaces4(THIS, LPVOID,LPDDENUMSURFACESCALLBACK2);
197HRESULT __stdcall SurfEnumOverlayZOrders(THIS, DWORD,LPVOID,LPDDENUMSURFACESCALLBACK);
198HRESULT __stdcall SurfEnumOverlayZOrders4(THIS, DWORD,LPVOID,LPDDENUMSURFACESCALLBACK2);
199HRESULT __stdcall SurfFlip(THIS, LPDIRECTDRAWSURFACE2 , DWORD);
200HRESULT __stdcall SurfFlip3(THIS, LPDIRECTDRAWSURFACE3 , DWORD);
201HRESULT __stdcall SurfFlip4(THIS, LPDIRECTDRAWSURFACE4 , DWORD);
202HRESULT __stdcall SurfGetAttachedSurface(THIS, LPDDSCAPS, LPDIRECTDRAWSURFACE2 FAR *);
203HRESULT __stdcall SurfGetAttachedSurface3(THIS, LPDDSCAPS, LPDIRECTDRAWSURFACE3 FAR *);
204HRESULT __stdcall SurfGetAttachedSurface4(THIS, LPDDSCAPS2, LPDIRECTDRAWSURFACE4 FAR *);
205HRESULT __stdcall SurfGetBltStatus(THIS, DWORD);
206HRESULT __stdcall SurfGetCaps4(THIS, LPDDSCAPS2);
207HRESULT __stdcall SurfGetCaps(THIS, LPDDSCAPS);
208HRESULT __stdcall SurfGetClipper(THIS, LPDIRECTDRAWCLIPPER FAR*);
209HRESULT __stdcall SurfGetColorKey(THIS, DWORD, LPDDCOLORKEY);
210HRESULT __stdcall SurfGetDC(THIS, HDC FAR *);
211HRESULT __stdcall SurfGetFlipStatus(THIS, DWORD);
212HRESULT __stdcall SurfGetOverlayPosition(THIS, LPLONG, LPLONG );
213HRESULT __stdcall SurfGetPalette(THIS, LPDIRECTDRAWPALETTE FAR*);
214HRESULT __stdcall SurfGetPixelFormat(THIS, LPDDPIXELFORMAT);
215HRESULT __stdcall SurfGetSurfaceDesc(THIS, LPDDSURFACEDESC);
216HRESULT __stdcall SurfGetSurfaceDesc4(THIS, LPDDSURFACEDESC2);
217HRESULT __stdcall SurfInitialize(THIS, LPDIRECTDRAW, LPDDSURFACEDESC);
218HRESULT __stdcall SurfInitialize4(THIS, LPDIRECTDRAW, LPDDSURFACEDESC2);
219HRESULT __stdcall SurfIsLost(THIS);
220HRESULT __stdcall SurfLock(THIS, LPRECT,LPDDSURFACEDESC,DWORD,HANDLE);
221HRESULT __stdcall SurfLock4(THIS, LPRECT,LPDDSURFACEDESC2,DWORD,HANDLE);
222HRESULT __stdcall SurfReleaseDC(THIS, HDC);
223HRESULT __stdcall SurfRestore(THIS);
224HRESULT __stdcall SurfSetClipper(THIS, LPDIRECTDRAWCLIPPER);
225HRESULT __stdcall SurfSetColorKey(THIS, DWORD, LPDDCOLORKEY);
226HRESULT __stdcall SurfSetOverlayPosition(THIS, LONG, LONG );
227HRESULT __stdcall SurfSetPalette(THIS, LPDIRECTDRAWPALETTE);
228HRESULT __stdcall SurfUnlock(THIS, LPVOID);
229HRESULT __stdcall SurfUnlock4(THIS, LPRECT);
230HRESULT __stdcall SurfUpdateOverlay(THIS, LPRECT, LPDIRECTDRAWSURFACE2,LPRECT,DWORD, LPDDOVERLAYFX);
231HRESULT __stdcall SurfUpdateOverlay3(THIS, LPRECT, LPDIRECTDRAWSURFACE3,LPRECT,DWORD, LPDDOVERLAYFX);
232HRESULT __stdcall SurfUpdateOverlay4(THIS, LPRECT, LPDIRECTDRAWSURFACE4,LPRECT,DWORD, LPDDOVERLAYFX);
233HRESULT __stdcall SurfUpdateOverlayDisplay(THIS, DWORD);
234HRESULT __stdcall SurfUpdateOverlayZOrder(THIS, DWORD, LPDIRECTDRAWSURFACE2);
235HRESULT __stdcall SurfUpdateOverlayZOrder3(THIS, DWORD, LPDIRECTDRAWSURFACE3);
236HRESULT __stdcall SurfUpdateOverlayZOrder4(THIS, DWORD, LPDIRECTDRAWSURFACE4);
237HRESULT __stdcall SurfGetDDInterface(THIS, LPVOID FAR *);
238HRESULT __stdcall SurfPageLock(THIS, DWORD);
239HRESULT __stdcall SurfPageUnlock(THIS, DWORD);
240HRESULT __stdcall SurfSetSurfaceDesc(THIS, LPDDSURFACEDESC, DWORD);
241HRESULT __stdcall SurfSetSurfaceDesc4(THIS, LPDDSURFACEDESC2, DWORD);
242HRESULT __stdcall SurfSetPrivateData(THIS, REFGUID, LPVOID, DWORD, DWORD);
243HRESULT __stdcall SurfGetPrivateData(THIS, REFGUID, LPVOID, LPDWORD);
244HRESULT __stdcall SurfFreePrivateData(THIS, REFGUID);
245HRESULT __stdcall SurfGetUniquenessValue(THIS, LPDWORD);
246HRESULT __stdcall SurfChangeUniquenessValue(THIS);
247
248void __cdecl MoveRects(char* pBuffer, LPRECT lpDestRect, LPRECT lpSrcRect, int bbp, LONG lPitch);
249void __cdecl TransSRCBlit8(LPDDSURFACEDESC2 pDestDesc, LPDDSURFACEDESC2 pSrcDesc, char *pAlpha, LPRECT lpSrcRect);
250void __cdecl TransSRCBlit16(LPDDSURFACEDESC2 pDestDesc, LPDDSURFACEDESC2 pSrcDesc, char *pAlpha, LPRECT lpSrcRect);
251void __cdecl TransSRCBlit24(LPDDSURFACEDESC2 pDestDesc, LPDDSURFACEDESC2 pSrcDesc, char *pAlpha, LPRECT lpSrcRect);
252void __cdecl TransSRCBlit32(LPDDSURFACEDESC2 pDestDesc, LPDDSURFACEDESC2 pSrcDesc, char *pAlpha, LPRECT lpSrcRect);
253
254
255#endif
Note: See TracBrowser for help on using the repository browser.