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

Last change on this file since 1502 was 1434, checked in by hugh, 26 years ago

Fixed Bug in colorconversion, didn't iterate
ddex1.exe from the DX samples now works,
but bitmap is still mirrored up/down

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