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