source: trunk/src/ddraw/new/OS2SURFACE.H@ 10366

Last change on this file since 10366 was 3345, checked in by mike, 25 years ago

Experimental fullscreen DDraw

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