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

Last change on this file since 1036 was 587, checked in by hugh, 26 years ago

Implemented new colorconversion routine and fixed bug in fastblt function.
Changed the palettehandling code

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