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

Last change on this file since 247 was 211, checked in by hugh, 26 years ago

Include for DX6 verion of ddraw

File size: 13.4 KB
Line 
1#ifndef __OS2SURFACE_H__
2#define __OS2SURFACE_H__
3#define FAR
4#define INITGUID
5#include "os2ddraw.h"
6#include "os2clipper.h"
7#include "os2palette.h"
8#include <dive.h>
9#include <iseq.h>
10#include <irect.hpp>
11
12#define FAR
13#undef THIS
14#define THIS VOID*
15
16typedef struct _OS2RECTL {
17 LONG xLeft; /* X-coordinate of left-hand edge of rectangle. */
18 LONG yBottom; /* Y-coordinate of bottom edge of rectangle. */
19 LONG xRight; /* X-coordinate of right-hand edge of rectangle. */
20 LONG yTop; /* Y-coordinate of top edge of rectangle. */
21 } OS2RECTL;
22
23typedef struct _SURFPRIVATEDATA
24{
25 GUID guidTag;
26 void *pData;
27 DWORD dwFlags;
28 DWORD dwSize;
29 BOOL isValid;
30}SURFPRIVATEDATA , *PSURFPRIVATEDATA;
31
32class OS2IDirectDrawSurface
33{
34 public:
35 //this one has to go first!
36 IDirectDrawSurface4Vtbl *lpVtbl;
37 IDirectDrawSurface2Vtbl Vtbl2;
38 IDirectDrawSurface3Vtbl Vtbl3;
39 IDirectDrawSurface4Vtbl Vtbl; // With Dx6 CreateSurface creates per default one with Interface 4 !
40
41 OS2IDirectDrawSurface( OS2IDirectDraw *lpDirectDraw,
42 LPDDSURFACEDESC2 lpDDSurfaceDesc,
43 BOOL Implicit = FALSE, // Indicates that this surface was created as result of a complex surface
44 BOOL Mainchain = FALSE); // Indicates if an implicit surface belongs to the primary surface
45 ~OS2IDirectDrawSurface();
46 int Referenced;
47 inline HRESULT GetLastError() { return lastError; };
48 inline int GetDiveBufNr() { return diveBufNr; };
49 inline BOOL IsImplicitSurface() {return ImplicitSurface; };
50 inline OS2IDirectDrawSurface* GetFrontBuffer(){ return FrontBuffer;};
51 inline void SetFrontBuffer( OS2IDirectDrawSurface* NewFBuffer);
52 void ColorConversion(LPRECT lpRect);
53
54 private:
55 HRESULT ColorFill(LPRECT, DWORD);
56 protected:
57 HRESULT lastError;
58 HDIVE hDive;
59 HDIVE hDiveCC; // Color conversion DIVE Handle
60 ULONG height, width;
61 ULONG screenHeight, screenWidth;
62 ULONG surfaceType;
63 ULONG diveBufNr;
64 OS2IDirectDraw *lpDraw;
65 OS2IDirectDrawClipper *lpClipper;
66 OS2IDirectDrawPalette *lpPalette;
67 DDSURFACEDESC2 DDSurfaceDesc;
68 BOOL fLocked;
69 HDC hdcImage;
70 HBITMAP hbmImage;
71 HGDIOBJ hgdiOld;
72 DWORD dwLastDCUnique;
73 // The real pointers hold the allocated memory (for the free)
74 // The other an pointer addjusted to QWORDs which we use and report
75 char *pFrameBuffer, *pFBreal;
76 char *pDiveBuffer, *pDBreal;
77 DWORD *pTransBufferSrc;
78 DWORD *pTransBufferDest;
79 DWORD dwPitchFB;
80 DWORD dwPitchDB;
81 DWORD dwBytesPPDive;
82 BOOL Updated;
83 BOOL ImplicitSurface;
84
85 // DDraw internal vars
86
87 DWORD dwUniqueValue;
88 ISequence<PSURFPRIVATEDATA> SurfaceSequencePrivateData;
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 ISequence <OS2IDirectDrawSurface*> SurfaceSequenceMipMap; // MipMaps go in this one
99 ISequence <OS2IDirectDrawSurface*> SurfaceSequenceAttached; // Other attached go in this one
100 ISequence <OS2IDirectDrawSurface*>::Cursor *SurfaceCursorMipMap; // Iterator for MipMaps
101 ISequence <OS2IDirectDrawSurface*>::Cursor *SurfaceCursorAttached; // Iterator for other attached surfaces
102
103 ISequence <IRectangle*> LockedRectSequence; // List for locked rectangles
104
105 friend HRESULT __stdcall SurfQueryInterface(THIS, REFIID riid, LPVOID FAR * ppvObj);
106 friend ULONG __stdcall SurfAddRef(THIS);
107 friend ULONG __stdcall SurfRelease(THIS);
108 friend HRESULT __stdcall SurfAddAttachedSurface(THIS, LPDIRECTDRAWSURFACE2);
109 friend HRESULT __stdcall SurfAddAttachedSurface4(THIS, LPDIRECTDRAWSURFACE4);
110 friend HRESULT __stdcall SurfAddOverlayDirtyRect(THIS, LPRECT);
111 friend HRESULT __stdcall SurfBlt(THIS, LPRECT,LPDIRECTDRAWSURFACE2, 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 SurfBltFast4(THIS, DWORD,DWORD,LPDIRECTDRAWSURFACE4, LPRECT,DWORD);
116 friend HRESULT __stdcall SurfDeleteAttachedSurface(THIS, DWORD,LPDIRECTDRAWSURFACE2);
117 friend HRESULT __stdcall SurfDeleteAttachedSurface4(THIS, DWORD,LPDIRECTDRAWSURFACE4);
118 friend HRESULT __stdcall SurfEnumAttachedSurfaces(THIS, LPVOID,LPDDENUMSURFACESCALLBACK);
119 friend HRESULT __stdcall SurfEnumAttachedSurfaces4(THIS, LPVOID,LPDDENUMSURFACESCALLBACK2);
120 friend HRESULT __stdcall SurfEnumOverlayZOrders(THIS, DWORD,LPVOID,LPDDENUMSURFACESCALLBACK);
121 friend HRESULT __stdcall SurfEnumOverlayZOrders4(THIS, DWORD,LPVOID,LPDDENUMSURFACESCALLBACK2);
122 friend HRESULT __stdcall SurfFlip(THIS, LPDIRECTDRAWSURFACE2 , DWORD);
123 friend HRESULT __stdcall SurfFlip4(THIS, LPDIRECTDRAWSURFACE4 , DWORD);
124 friend HRESULT __stdcall SurfGetAttachedSurface(THIS, LPDDSCAPS, LPDIRECTDRAWSURFACE2 FAR *);
125 friend HRESULT __stdcall SurfGetAttachedSurface4(THIS, LPDDSCAPS2, LPDIRECTDRAWSURFACE4 FAR *);
126 friend HRESULT __stdcall SurfGetBltStatus(THIS, DWORD);
127 friend HRESULT __stdcall SurfGetCaps(THIS, LPDDSCAPS);
128 friend HRESULT __stdcall SurfGetCaps4(THIS, LPDDSCAPS2);
129 friend HRESULT __stdcall SurfGetClipper(THIS, LPDIRECTDRAWCLIPPER FAR*);
130 friend HRESULT __stdcall SurfGetColorKey(THIS, DWORD, LPDDCOLORKEY);
131 friend HRESULT __stdcall SurfGetDC(THIS, HDC FAR *);
132 friend HRESULT __stdcall SurfGetFlipStatus(THIS, DWORD);
133 friend HRESULT __stdcall SurfGetOverlayPosition(THIS, LPLONG, LPLONG );
134 friend HRESULT __stdcall SurfGetPalette(THIS, LPDIRECTDRAWPALETTE FAR*);
135 friend HRESULT __stdcall SurfGetPixelFormat(THIS, LPDDPIXELFORMAT);
136 friend HRESULT __stdcall SurfGetSurfaceDesc(THIS, LPDDSURFACEDESC);
137 friend HRESULT __stdcall SurfGetSurfaceDesc4(THIS, LPDDSURFACEDESC2);
138 friend HRESULT __stdcall SurfInitialize(THIS, LPDIRECTDRAW, LPDDSURFACEDESC);
139 friend HRESULT __stdcall SurfInitialize4(THIS, LPDIRECTDRAW, LPDDSURFACEDESC2);
140 friend HRESULT __stdcall SurfIsLost(THIS);
141 friend HRESULT __stdcall SurfLock(THIS, LPRECT,LPDDSURFACEDESC,DWORD,HANDLE);
142 friend HRESULT __stdcall SurfLock4(THIS, LPRECT,LPDDSURFACEDESC2,DWORD,HANDLE);
143 friend HRESULT __stdcall SurfReleaseDC(THIS, HDC);
144 friend HRESULT __stdcall SurfRestore(THIS);
145 friend HRESULT __stdcall SurfSetClipper(THIS, LPDIRECTDRAWCLIPPER);
146 friend HRESULT __stdcall SurfSetColorKey(THIS, DWORD, LPDDCOLORKEY);
147 friend HRESULT __stdcall SurfSetOverlayPosition(THIS, LONG, LONG );
148 friend HRESULT __stdcall SurfSetPalette(THIS, LPDIRECTDRAWPALETTE);
149 friend HRESULT __stdcall SurfUnlock(THIS, LPRECT);
150 friend HRESULT __stdcall SurfUpdateOverlay(THIS, LPRECT, LPDIRECTDRAWSURFACE2,LPRECT,DWORD, LPDDOVERLAYFX);
151 friend HRESULT __stdcall SurfUpdateOverlay4(THIS, LPRECT, LPDIRECTDRAWSURFACE4,LPRECT,DWORD, LPDDOVERLAYFX);
152 friend HRESULT __stdcall SurfUpdateOverlayDisplay(THIS, DWORD);
153 friend HRESULT __stdcall SurfUpdateOverlayZOrder(THIS, DWORD, LPDIRECTDRAWSURFACE2);
154 friend HRESULT __stdcall SurfUpdateOverlayZOrder4(THIS, DWORD, LPDIRECTDRAWSURFACE4);
155 // Added in V2 interface
156 friend HRESULT __stdcall SurfGetDDInterface(THIS, LPVOID FAR *);
157 friend HRESULT __stdcall SurfPageLock(THIS, DWORD);
158 friend HRESULT __stdcall SurfPageUnlock(THIS, DWORD);
159 // Added in V3 interface
160 friend HRESULT __stdcall SurfSetSurfaceDesc(THIS, LPDDSURFACEDESC, DWORD);
161 friend HRESULT __stdcall SurfSetSurfaceDesc4(THIS, LPDDSURFACEDESC2, DWORD);
162 // Added in V4 interface
163 friend HRESULT __stdcall SurfSetPrivateData(THIS, REFGUID, LPVOID, DWORD, DWORD);
164 friend HRESULT __stdcall SurfGetPrivateData(THIS, REFGUID, LPVOID, LPDWORD);
165 friend HRESULT __stdcall SurfFreePrivateData(THIS, REFGUID);
166 friend HRESULT __stdcall SurfGetUniquenessValue(THIS, LPDWORD);
167 friend HRESULT __stdcall SurfChangeUniquenessValue(THIS);
168};
169
170
171HRESULT __stdcall SurfQueryInterface(THIS, REFIID riid, LPVOID FAR * ppvObj);
172ULONG __stdcall SurfAddRef(THIS);
173ULONG __stdcall SurfRelease(THIS);
174HRESULT __stdcall SurfAddAttachedSurface(THIS, LPDIRECTDRAWSURFACE2);
175HRESULT __stdcall SurfAddAttachedSurface4(THIS, LPDIRECTDRAWSURFACE4);
176HRESULT __stdcall SurfAddOverlayDirtyRect(THIS, LPRECT);
177HRESULT __stdcall SurfBlt(THIS, LPRECT,LPDIRECTDRAWSURFACE2, LPRECT,DWORD, LPDDBLTFX);
178HRESULT __stdcall SurfBlt4(THIS, LPRECT,LPDIRECTDRAWSURFACE4, LPRECT,DWORD, LPDDBLTFX);
179HRESULT __stdcall SurfBltBatch(THIS, LPDDBLTBATCH, DWORD, DWORD );
180HRESULT __stdcall SurfBltFast(THIS, DWORD,DWORD,LPDIRECTDRAWSURFACE2, LPRECT,DWORD);
181HRESULT __stdcall SurfBltFast4(THIS, DWORD,DWORD,LPDIRECTDRAWSURFACE4, LPRECT,DWORD);
182HRESULT __stdcall SurfDeleteAttachedSurface(THIS, DWORD,LPDIRECTDRAWSURFACE2);
183HRESULT __stdcall SurfDeleteAttachedSurface4(THIS, DWORD,LPDIRECTDRAWSURFACE4);
184HRESULT __stdcall SurfEnumAttachedSurfaces(THIS, LPVOID,LPDDENUMSURFACESCALLBACK);
185HRESULT __stdcall SurfEnumAttachedSurfaces4(THIS, LPVOID,LPDDENUMSURFACESCALLBACK2);
186HRESULT __stdcall SurfEnumOverlayZOrders(THIS, DWORD,LPVOID,LPDDENUMSURFACESCALLBACK);
187HRESULT __stdcall SurfEnumOverlayZOrders4(THIS, DWORD,LPVOID,LPDDENUMSURFACESCALLBACK2);
188HRESULT __stdcall SurfFlip(THIS, LPDIRECTDRAWSURFACE2 , DWORD);
189HRESULT __stdcall SurfFlip4(THIS, LPDIRECTDRAWSURFACE4 , DWORD);
190HRESULT __stdcall SurfGetAttachedSurface(THIS, LPDDSCAPS, LPDIRECTDRAWSURFACE2 FAR *);
191HRESULT __stdcall SurfGetAttachedSurface4(THIS, LPDDSCAPS2, LPDIRECTDRAWSURFACE4 FAR *);
192HRESULT __stdcall SurfGetBltStatus(THIS, DWORD);
193HRESULT __stdcall SurfGetCaps4(THIS, LPDDSCAPS2);
194HRESULT __stdcall SurfGetCaps(THIS, LPDDSCAPS);
195HRESULT __stdcall SurfGetClipper(THIS, LPDIRECTDRAWCLIPPER FAR*);
196HRESULT __stdcall SurfGetColorKey(THIS, DWORD, LPDDCOLORKEY);
197HRESULT __stdcall SurfGetDC(THIS, HDC FAR *);
198HRESULT __stdcall SurfGetFlipStatus(THIS, DWORD);
199HRESULT __stdcall SurfGetOverlayPosition(THIS, LPLONG, LPLONG );
200HRESULT __stdcall SurfGetPalette(THIS, LPDIRECTDRAWPALETTE FAR*);
201HRESULT __stdcall SurfGetPixelFormat(THIS, LPDDPIXELFORMAT);
202HRESULT __stdcall SurfGetSurfaceDesc(THIS, LPDDSURFACEDESC);
203HRESULT __stdcall SurfGetSurfaceDesc4(THIS, LPDDSURFACEDESC2);
204HRESULT __stdcall SurfInitialize(THIS, LPDIRECTDRAW, LPDDSURFACEDESC);
205HRESULT __stdcall SurfInitialize4(THIS, LPDIRECTDRAW, LPDDSURFACEDESC2);
206HRESULT __stdcall SurfIsLost(THIS);
207HRESULT __stdcall SurfLock(THIS, LPRECT,LPDDSURFACEDESC,DWORD,HANDLE);
208HRESULT __stdcall SurfLock4(THIS, LPRECT,LPDDSURFACEDESC2,DWORD,HANDLE);
209HRESULT __stdcall SurfReleaseDC(THIS, HDC);
210HRESULT __stdcall SurfRestore(THIS);
211HRESULT __stdcall SurfSetClipper(THIS, LPDIRECTDRAWCLIPPER);
212HRESULT __stdcall SurfSetColorKey(THIS, DWORD, LPDDCOLORKEY);
213HRESULT __stdcall SurfSetOverlayPosition(THIS, LONG, LONG );
214HRESULT __stdcall SurfSetPalette(THIS, LPDIRECTDRAWPALETTE);
215HRESULT __stdcall SurfUnlock(THIS, LPRECT);
216HRESULT __stdcall SurfUpdateOverlay(THIS, LPRECT, LPDIRECTDRAWSURFACE2,LPRECT,DWORD, LPDDOVERLAYFX);
217HRESULT __stdcall SurfUpdateOverlay4(THIS, LPRECT, LPDIRECTDRAWSURFACE4,LPRECT,DWORD, LPDDOVERLAYFX);
218HRESULT __stdcall SurfUpdateOverlayDisplay(THIS, DWORD);
219HRESULT __stdcall SurfUpdateOverlayZOrder(THIS, DWORD, LPDIRECTDRAWSURFACE2);
220HRESULT __stdcall SurfUpdateOverlayZOrder4(THIS, DWORD, LPDIRECTDRAWSURFACE4);
221HRESULT __stdcall SurfGetDDInterface(THIS, LPVOID FAR *);
222HRESULT __stdcall SurfPageLock(THIS, DWORD);
223HRESULT __stdcall SurfPageUnlock(THIS, DWORD);
224HRESULT __stdcall SurfSetSurfaceDesc(THIS, LPDDSURFACEDESC, DWORD);
225HRESULT __stdcall SurfSetSurfaceDesc4(THIS, LPDDSURFACEDESC2, DWORD);
226HRESULT __stdcall SurfSetPrivateData(THIS, REFGUID, LPVOID, DWORD, DWORD);
227HRESULT __stdcall SurfGetPrivateData(THIS, REFGUID, LPVOID, LPDWORD);
228HRESULT __stdcall SurfFreePrivateData(THIS, REFGUID);
229HRESULT __stdcall SurfGetUniquenessValue(THIS, LPDWORD);
230HRESULT __stdcall SurfChangeUniquenessValue(THIS);
231
232void __cdecl MoveRects(char* pBuffer, LPRECT lpDestRect, LPRECT lpSrcRect, int bbp, LONG lPitch);
233void __cdecl TransSRCBlit8(LPDDSURFACEDESC2 pDestDesc, LPDDSURFACEDESC2 pSrcDesc, char *pAlpha, LPRECT lpSrcRect);
234void __cdecl TransSRCBlit16(LPDDSURFACEDESC2 pDestDesc, LPDDSURFACEDESC2 pSrcDesc, char *pAlpha, LPRECT lpSrcRect);
235void __cdecl TransSRCBlit24(LPDDSURFACEDESC2 pDestDesc, LPDDSURFACEDESC2 pSrcDesc, char *pAlpha, LPRECT lpSrcRect);
236void __cdecl TransSRCBlit32(LPDDSURFACEDESC2 pDestDesc, LPDDSURFACEDESC2 pSrcDesc, char *pAlpha, LPRECT lpSrcRect);
237
238
239#endif
Note: See TracBrowser for help on using the repository browser.