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

Last change on this file since 5087 was 2174, checked in by hugh, 26 years ago

Added ODIn lic header with ID to all files where missing

Cleaned up Surface handling by movefing colorfill and
colorconversion into own files and use functionpointers
setup during creation.

updated makefile to add files

removed inhertiance from IBASE in DDrectangle class

File size: 16.6 KB
Line 
1/* $Id: OS2SURFACE.H,v 1.13 1999-12-21 01:28:19 hugh 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.