|
|
/*==========================================================================
* * Copyright (C) 1997 Microsoft Corporation. All Rights Reserved. * * File: ddfactry.h * Content: DirectDraw factory class header * includes defns for CDDFactory, CDirectDrawEx, * and CDDSurface * History: * Date By Reason * ==== == ====== * 24-feb-97 ralphl initial implementation * 25-feb-97 craige minor tweaks for dx checkin; integrated IBitmapSurface * stuff * 03-mar-97 craige added IRGBColorTable support * 06-mar-97 craige IDirectDrawSurface3 support * 14-mar-97 jeffort SetBits changed to reflect DX5 as SetSurfaceDesc * 01-apr-97 jeffort Following changes checked in: * D3D Interface support * Linked list of surfaces real/internal interfaces kept * Complex surface/Attach list handleing * Handle for palettes added * Add/GetAttachedSurface, Flip, and Blit are aggregated * * 04-apr-97 jeffort TRIDENT ifdef's removed. * IDirectDraw3 Class implementation * 09-apr-97 jeffort Added #defines for version and member function for OWNDC stuff * 28-apr-97 jeffort Palette wrapping added/DX5 support * 02-may-97 jeffort Removed commented code, added GetDDInterface function wrapping * 06-may-97 jeffort DeleteAttachedSurface wrapping added * 20-may-97 jeffort Added fields in surface object for NT4.0 gold * 02-jul-97 jeffort Added m_bSaveDC boolean if a DX5 surface with OWNDC set * we need to not NULL out the DC when ReleaseDC is called * so that a call to GetSurfaceFromDC will work * 07-jul-97 jeffort Added GetSurfaceDesc internal function for wrapping * 10-jul-97 jeffort Added m_hBMOld to store old bitmap handle to reset at destruction * 18-jul-97 jeffort Added D3D MMX Device support * 22-jul-97 jeffort Removed IBitmapSurface and associated interfaces * 02-aug-97 jeffort New structure added to surface object to store attached * surfaces created with a different ddrawex object * 20-feb-98 stevela Added Chrome rasterizers ***************************************************************************/ #undef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include "crtfree.h"
#include "ddraw.h"
#include "d3d.h"
#include "ddrawex.h"
#include "ddraw3i.h"
#include "comdll.h"
#ifdef INITGUID
#include <initguid.h>
#endif
/*
* reminder */ #define QUOTE(x) #x
#define QQUOTE(y) QUOTE(y)
#define REMIND(str) __FILE__ "(" QQUOTE(__LINE__) "):" str
#ifndef ARRAYSIZE
#define ARRAYSIZE(x) (sizeof(x) / sizeof((x)[0]))
#endif
class CDirectDrawEx; class CDDSurface; class CDDPalette;
#ifndef CINTERFACE
#define IDirectDrawVtbl void
#define IDirectDraw2Vtbl void
#define IDirectDraw4Vtbl void
#define IDirectDrawSurfaceVtbl void
#define IDirectDrawSurface2Vtbl void
#define IDirectDrawSurface3Vtbl void
#define IDirectDrawPaletteVtbl void
#define IDirectDrawSurface4Vtbl void
#endif
#ifndef DIRECTDRAW_VERSION
//these are not included in DX3 include files, define them here
DEFINE_GUID( IID_IDirect3DRampDevice, 0xF2086B20,0x259F,0x11CF,0xA3,0x1A,0x00,0xAA,0x00,0xB9,0x33,0x56 ); DEFINE_GUID( IID_IDirect3DRGBDevice, 0xA4665C60,0x2673,0x11CF,0xA3,0x1A,0x00,0xAA,0x00,0xB9,0x33,0x56 ); DEFINE_GUID( IID_IDirect3DHALDevice, 0x84E63dE0,0x46AA,0x11CF,0x81,0x6F,0x00,0x00,0xC0,0x20,0x15,0x6E ); DEFINE_GUID( IID_IDirect3DMMXDevice, 0x881949a1,0xd6f3,0x11d0,0x89,0xab,0x00,0xa0,0xc9,0x05,0x41,0x29 ); DEFINE_GUID( IID_IDirect3DChrmDevice, 0x2f4d2045,0x9764,0x11d1,0x91,0xf2,0x0,0x0,0xf8,0x75,0x8e,0x66 ); #endif
#ifndef IID_IDirect3DChrmDevice
DEFINE_GUID( IID_IDirect3DChrmDevice, 0x2f4d2045,0x9764,0x11d1,0x91,0xf2,0x0,0x0,0xf8,0x75,0x8e,0x66 ); #endif
#define SURFACE_DATAEXCHANGE 0x00000001
//defines for our version information
#define WIN95_DX2 0x00000001
#define WIN95_DX3 0x00000002
#define WIN95_DX5 0x00000003
#define WINNT_DX2 0x00000004
#define WINNT_DX3 0x00000005
#define WINNT_DX5 0x00000006
extern "C" { void WINAPI AcquireDDThreadLock(void); void WINAPI ReleaseDDThreadLock(void); };
#define ENTER_DDEX() AcquireDDThreadLock();
#define LEAVE_DDEX() ReleaseDDThreadLock();
/*
* ddraw's internal interface structure */ typedef struct _REALDDINTSTRUC { void *lpVtbl; void *pDDInternal1; void *pDDInternal2; void *pDDInternal3; } REALDDINTSTRUC;
/*
* Our version of the IDirectDraw interface internal structure */ typedef struct _DDINTSTRUC { IDirectDrawVtbl *lpVtbl; void *pDDInternal1; void *pDDInternal2; void *pDDInternal3; // ONLY ADD STUFF AFTER THESE 4 ENTRIES!!!
CDirectDrawEx *m_pDirectDrawEx; IDirectDraw *m_pRealInterface; } INTSTRUC_IDirectDraw;
/*
* Our version of the IDirectDraw2 interface internal structure */ typedef struct _DD2INTSTRUC { IDirectDraw2Vtbl *lpVtbl; void *pDDInternal1; void *pDDInternal2; void *pDDInternal3; // ONLY ADD STUFF AFTER THESE 4 ENTRIES!!!
CDirectDrawEx *m_pDirectDrawEx; IDirectDraw2 *m_pRealInterface; } INTSTRUC_IDirectDraw2;
typedef struct _DD4INTSTRUC { IDirectDraw4Vtbl *lpVtbl; void *pDDInternal1; void *pDDInternal2; void *pDDInternal3; // ONLY ADD STUFF AFTER THESE 4 ENTRIES!!!
CDirectDrawEx *m_pDirectDrawEx; IDirectDraw4 *m_pRealInterface; } INTSTRUC_IDirectDraw4;
/*
* Our version of the IDirectDrawSurface interface internal structure */ typedef struct _DDSURFINTSTRUC { IDirectDrawSurfaceVtbl *lpVtbl; void *pDDInternal1; void *pDDInternal2; void *pDDInternal3; // ONLY ADD STUFF AFTER THESE 4 ENTRIES!!!
CDDSurface *m_pSimpleSurface; IDirectDrawSurface *m_pRealInterface; } INTSTRUC_IDirectDrawSurface;
/*
* Our version of the IDirectDrawSurface2 interface internal structure */ typedef struct _DDSURF2INTSTRUC { IDirectDrawSurface2Vtbl *lpVtbl; void *pDDInternal1; void *pDDInternal2; void *pDDInternal3; // ONLY ADD STUFF AFTER THESE 4 ENTRIES!!!
CDDSurface *m_pSimpleSurface; IDirectDrawSurface2 *m_pRealInterface; } INTSTRUC_IDirectDrawSurface2;
/*
* Our version of the IDirectDrawSurface3 interface internal structure */ typedef struct _DDSURF3INTSTRUC { IDirectDrawSurface3Vtbl *lpVtbl; void *pDDInternal1; void *pDDInternal2; void *pDDInternal3; // ONLY ADD STUFF AFTER THESE 4 ENTRIES!!!
CDDSurface *m_pSimpleSurface; IDirectDrawSurface3 *m_pRealInterface; } INTSTRUC_IDirectDrawSurface3;
typedef struct _DDSURF4INTSTRUC { IDirectDrawSurface4Vtbl *lpVtbl; void *pDDInternal1; void *pDDInternal2; void *pDDInternal3; // ONLY ADD STUFF AFTER THESE 4 ENTRIES!!!
CDDSurface *m_pSimpleSurface; IDirectDrawSurface4 *m_pRealInterface; } INTSTRUC_IDirectDrawSurface4;
/*
* Our version of IDirectDrawPalette interface internal structure */
typedef struct _DDPALINTSTRUC { IDirectDrawPaletteVtbl *lpVtbl; void *pDDInternal1; void *pDDInternal2; void *pDDInternal3; CDDPalette *m_pSimplePalette; IDirectDrawPalette *m_pRealInterface; } INTSTRUC_IDirectDrawPalette;
typedef struct tagDDAttachSurface { CDDSurface * pSurface; struct tagDDAttachSurface * pNext; }DDAttachSurface;
/*
* Non Delegating IUnknown interface */ interface INonDelegatingUnknown { virtual STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void **ppv) = 0; virtual STDMETHODIMP_(ULONG) NonDelegatingAddRef(void) = 0; virtual STDMETHODIMP_(ULONG) NonDelegatingRelease(void) = 0; };
#pragma warning (disable:4355)
#define CAST_TO_IUNKNOWN(object) (reinterpret_cast<IUnknown *>(static_cast<INonDelegatingUnknown *>(object)))
typedef HRESULT (WINAPI *LPDIRECTDRAWCREATE)( GUID FAR *lpGUID, LPDIRECTDRAW FAR *lplpDD, IUnknown FAR *pUnkOuter ); typedef HRESULT (WINAPI *LPDIRECTDRAWENUMW)( LPDDENUMCALLBACKW lpCallback, LPVOID lpContext ); typedef HRESULT (WINAPI *LPDIRECTDRAWENUMA)( LPDDENUMCALLBACKA lpCallback, LPVOID lpContext );
/*
* DDFactor class definition */ class CDDFactory : public INonDelegatingUnknown, public IDirectDrawFactory { public: // Non-Delegating versions of IUnknown
STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void **ppv); STDMETHODIMP_(ULONG) NonDelegatingAddRef(void); STDMETHODIMP_(ULONG) NonDelegatingRelease(void);
// IUnknown
STDMETHODIMP QueryInterface(REFIID riid, void **ppv); STDMETHODIMP_(ULONG) AddRef(void); STDMETHODIMP_(ULONG) Release(void);
// IDirectDrawFactory
STDMETHODIMP CreateDirectDraw(GUID * pGUID, HWND hWnd, DWORD dwCoopLevelFlags, DWORD dwReserved, IUnknown *pUnkOuter, IDirectDraw **ppDirectDraw); STDMETHODIMP DirectDrawEnumerate(LPDDENUMCALLBACK lpCallback, LPVOID lpContext);
CDDFactory(IUnknown *pUnkOuter); public: LONG m_cRef; IUnknown *m_pUnkOuter; HANDLE m_hDDrawDLL; DWORD m_dwDDVerMS; LPDIRECTDRAWCREATE m_pDirectDrawCreate; LPDIRECTDRAWENUMW m_pDirectDrawEnumerateW; LPDIRECTDRAWENUMA m_pDirectDrawEnumerateA; };
/*
* DirectDrawEx class definition */ class CDirectDrawEx : public INonDelegatingUnknown, public IDirectDraw3 { public: // Non-Delegating versions of IUnknown
STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void **ppv); STDMETHODIMP_(ULONG) NonDelegatingAddRef(void); STDMETHODIMP_(ULONG) NonDelegatingRelease(void);
// IUnknown
STDMETHODIMP QueryInterface(REFIID riid, void **ppv); STDMETHODIMP_(ULONG) AddRef(void); STDMETHODIMP_(ULONG) Release(void);
// IDirectDraw3
STDMETHODIMP Compact(); STDMETHODIMP CreateClipper(DWORD, LPDIRECTDRAWCLIPPER FAR*, IUnknown FAR * ); STDMETHODIMP DuplicateSurface(LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE FAR * ); STDMETHODIMP EnumDisplayModes(DWORD, LPDDSURFACEDESC, LPVOID, LPDDENUMMODESCALLBACK ); STDMETHODIMP EnumSurfaces(DWORD, LPDDSURFACEDESC, LPVOID,LPDDENUMSURFACESCALLBACK ); STDMETHODIMP FlipToGDISurface(); STDMETHODIMP GetCaps(LPDDCAPS, LPDDCAPS); STDMETHODIMP GetDisplayMode(LPDDSURFACEDESC); STDMETHODIMP GetFourCCCodes(LPDWORD, LPDWORD ); STDMETHODIMP GetGDISurface(LPDIRECTDRAWSURFACE FAR *); STDMETHODIMP GetMonitorFrequency(LPDWORD); STDMETHODIMP GetScanLine(LPDWORD); STDMETHODIMP GetVerticalBlankStatus(LPBOOL ); STDMETHODIMP Initialize(GUID FAR *); STDMETHODIMP RestoreDisplayMode(); STDMETHODIMP SetDisplayMode(DWORD, DWORD,DWORD, DWORD, DWORD); STDMETHODIMP WaitForVerticalBlank(DWORD, HANDLE ); STDMETHODIMP GetAvailableVidMem(LPDDSCAPS, LPDWORD, LPDWORD); STDMETHODIMP GetSurfaceFromDC(HDC, IDirectDrawSurface **);
// Internal goop
CDirectDrawEx(IUnknown *pUnkOuter); ~CDirectDrawEx(); HRESULT Init(GUID * pGUID, HWND hWnd, DWORD dwCoopLevelFlags, DWORD dwReserved, LPDIRECTDRAWCREATE pDirectDrawCreate ); STDMETHODIMP CreateSurface(LPDDSURFACEDESC pSurfaceDesc, IDirectDrawSurface **ppNewSurface, IUnknown *pUnkOuter); STDMETHODIMP CreateSurface(LPDDSURFACEDESC2 pSurfaceDesc, IDirectDrawSurface4 **ppNewSurface4, IUnknown *pUnkOuter); STDMETHODIMP CreatePalette(DWORD dwFlags, LPPALETTEENTRY pEntries, LPDIRECTDRAWPALETTE FAR * ppPal, IUnknown FAR * pUnkOuter); STDMETHODIMP SetCooperativeLevel(HWND hwnd, DWORD dwFlags);
void AddSurfaceToList(CDDSurface *pSurface); void RemoveSurfaceFromList(CDDSurface *pSurface); void AddSurfaceToPrimaryList(CDDSurface *pSurface); void RemoveSurfaceFromPrimaryList(CDDSurface *pSurface); void AddPaletteToList(CDDPalette *pPalette); void RemovePaletteFromList(CDDPalette *pPalette); HRESULT HandleAttachList(LPDDSURFACEDESC pSurfaceDesc, IUnknown *pUnkOuter,IDirectDrawSurface **ppNewSurface, IDirectDrawSurface * pOrigSurf, DWORD dwFlags); HRESULT CreateSimpleSurface(LPDDSURFACEDESC pSurfaceDesc, IUnknown *pUnkOuter, IDirectDrawSurface * pSurface, IDirectDrawSurface **ppNewSurface, DWORD dwFlags); public: INTSTRUC_IDirectDraw m_DDInt; INTSTRUC_IDirectDraw2 m_DD2Int; INTSTRUC_IDirectDraw4 m_DD4Int;
LONG m_cRef; IUnknown *m_pUnkOuter; CDDSurface *m_pFirstSurface; // list of surfaces (NOT ADDREF'd!)
CDDSurface *m_pPrimaryPaletteList; CDDPalette *m_pFirstPalette; BOOL m_bExclusive; DWORD m_dwDDVer; };
/*
* DirectDraw simple surface class definition */ class CDDSurface : public INonDelegatingUnknown { friend CDirectDrawEx;
public: CDDSurface *m_pPrev; // Used by DirectDrawEx to insert in list
CDDSurface *m_pNext; CDDSurface *m_pPrevPalette; CDDSurface *m_pNextPalette; CDDSurface *m_pDestroyList; CDDPalette *m_pCurrentPalette; IUnknown *m_pUnkOuter; //this member will be a linked list of explicitly attached surfaces
//that were not created with the same ddrawex object that this surface
//was created with
DDAttachSurface *m_pAttach; LONG m_cRef; CDirectDrawEx *m_pDirectDrawEx; INTSTRUC_IDirectDrawSurface m_DDSInt; INTSTRUC_IDirectDrawSurface2 m_DDS2Int; INTSTRUC_IDirectDrawSurface3 m_DDS3Int; INTSTRUC_IDirectDrawSurface4 m_DDS4Int; IDirect3DDevice * m_D3DDeviceRAMPInt; IDirect3DDevice * m_D3DDeviceHALInt; IDirect3DDevice * m_D3DDeviceRGBInt; IDirect3DDevice * m_D3DDeviceChrmInt; IDirect3DDevice * m_D3DDeviceMMXInt; IDirect3DTexture * m_D3DTextureInt; HDC m_HDC; DWORD m_dwCaps; HDC m_hDCDib; HBITMAP m_hBMDib; HBITMAP m_hBMOld; LPVOID m_pBitsDib; IDirectDrawPalette *m_pDDPal; IDirectDrawPalette *m_pDDPalOurs; WORD m_dwPalSize; WORD m_dwPalEntries; BOOL m_bOwnDC; //boolean set if we are spoofing ddraw to support owndc
BOOL m_bSaveDC;//boolean to store if DX5 and OWNDC set
BOOL m_bPrimaryPalette; BOOL m_bIsPrimary; ULONG_PTR m_pSaveBits; DWORD m_pSaveHDC; #ifdef DEBUG
DWORD m_DebugCheckDC; #endif
DWORD m_pSaveHBM;
public: CDDSurface( DDSURFACEDESC *pSurfaceDesc, IDirectDrawSurface *pDDSurface, IDirectDrawSurface2 *pDDSurface2, IDirectDrawSurface3 *pDDSurface3, IDirectDrawSurface4 *pDDSurface4, IUnknown *pUnkOuter, CDirectDrawEx *pDirectDrawEx); ~CDDSurface(); HRESULT Init(); HRESULT MakeDIBSection(); HRESULT MakeDibInfo( LPDDSURFACEDESC pddsd, LPBITMAPINFO pbmi ); HRESULT SupportOwnDC(); static HRESULT CreateSimpleSurface( LPDDSURFACEDESC pSurfaceDesc, IDirectDrawSurface *pSurface, IDirectDrawSurface2 *pSurface2, IDirectDrawSurface3 *pSurface3, IDirectDrawSurface4 *pSurface4, IUnknown *pUnkOuter, CDirectDrawEx *pDirectDrawEx, IDirectDrawSurface **ppNewDDSurf, DWORD dwFlags); HRESULT InternalGetDC(HDC *); HRESULT InternalReleaseDC(HDC); HRESULT InternalLock(LPRECT lpDestRect, LPDDSURFACEDESC lpDDSurfaceDesc, DWORD dwFlags, HANDLE hEvent); HRESULT InternalUnlock(LPVOID lpSurfaceData); HRESULT InternalSetSurfaceDesc(LPDDSURFACEDESC pddsd, DWORD dwFlags); HRESULT InternalGetAttachedSurface(LPDDSCAPS lpDDSCaps, LPDIRECTDRAWSURFACE FAR * lpDDS, DWORD dwSurfaceType); HRESULT InternalGetAttachedSurface4(LPDDSCAPS2 lpDDSCaps, LPDIRECTDRAWSURFACE FAR * lpDDS); HRESULT InternalAddAttachedSurface(LPDIRECTDRAWSURFACE lpDDS, DWORD dwSurfaceType); HRESULT InternalDeleteAttachedSurface(DWORD dwFlags, LPDIRECTDRAWSURFACE lpDDS, DWORD dwSurfaceType); HRESULT InternalFlip(LPDIRECTDRAWSURFACE lpDDS, DWORD dw, DWORD dwSurfaceType); HRESULT InternalBlt(LPRECT lpRect1,LPDIRECTDRAWSURFACE lpDDS, LPRECT lpRect2,DWORD dw, LPDDBLTFX lpfx, DWORD dwSurfaceType); HRESULT InternalGetPalette(LPDIRECTDRAWPALETTE FAR * ppPal, DWORD dwSurfaceType); HRESULT InternalSetPalette(LPDIRECTDRAWPALETTE pPal, DWORD dwSurfaceType); HRESULT InternalGetDDInterface(LPVOID FAR * ppInt); HRESULT InternalGetSurfaceDesc(LPDDSURFACEDESC pDesc, DWORD dwSurfaceType); HRESULT InternalGetSurfaceDesc4(LPDDSURFACEDESC2 pDesc); HRESULT CheckDDPalette(); void DeleteAttachment(IDirectDrawSurface * pOrigSurf, CDDSurface * pFirst); void CleanUpSurface(); void ReleaseRealInterfaces(); void AddSurfaceToDestroyList(CDDSurface *pSurface); void DeleteAttachNode(CDDSurface * Surface);
// Non-Delegating versions of IUnknown
STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void **ppv); STDMETHODIMP_(ULONG) NonDelegatingAddRef(void); STDMETHODIMP_(ULONG) NonDelegatingRelease(void);
// IUnknown
STDMETHODIMP QueryInterface(REFIID riid, void **ppv); STDMETHODIMP_(ULONG) AddRef(void); STDMETHODIMP_(ULONG) Release(void);
};
class CDDPalette : public INonDelegatingUnknown { friend CDirectDrawEx; friend CDDSurface;
public: CDDPalette *m_pPrev; // Used by DirectDrawEx to insert in list
CDDPalette *m_pNext; CDDSurface *m_pFirstSurface; IUnknown *m_pUnkOuter; INTSTRUC_IDirectDrawPalette m_DDPInt; LONG m_cRef; CDirectDrawEx *m_pDirectDrawEx; BOOL m_bIsPrimary;
CDDPalette( IDirectDrawPalette * pDDPalette,IUnknown *pUnkOuter,CDirectDrawEx *pDirectDrawEx); ~CDDPalette(); static HRESULT CreateSimplePalette(LPPALETTEENTRY pEntries, IDirectDrawPalette *pDDPalette, LPDIRECTDRAWPALETTE FAR * ppPal, IUnknown FAR * pUnkOuter, CDirectDrawEx *pDirectDrawEx); HRESULT SetColorTable (CDDSurface * pSurface, LPPALETTEENTRY pEntries, DWORD dwNumEntries, DWORD dwBase); void AddSurfaceToList(CDDSurface *pSurface); void RemoveSurfaceFromList(CDDSurface *pSurface); STDMETHODIMP InternalSetEntries(DWORD dwFlags, DWORD dwBase, DWORD dwNumEntries, LPPALETTEENTRY lpe); // Non-Delegating versions of IUnknown
STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void **ppv); STDMETHODIMP_(ULONG) NonDelegatingAddRef(void); STDMETHODIMP_(ULONG) NonDelegatingRelease(void);
// IUnknown
STDMETHODIMP QueryInterface(REFIID riid, void **ppv); STDMETHODIMP_(ULONG) AddRef(void); STDMETHODIMP_(ULONG) Release(void); };
/*
* File name of the Direct3D DLL. */ #define D3D_DLLNAME "D3DIM.DLL"
/*
* Entry points exported by the Direct3D DLL. */ #define D3DCREATE_PROCNAME "Direct3DCreate"
#define D3DCREATEDEVICE_PROCNAME "Direct3DCreateDevice"
#define D3DCREATETEXTURE_PROCNAME "Direct3DCreateTexture"
#ifdef USE_D3D_CSECT
typedef HRESULT (WINAPI * D3DCreateProc)(LPUNKNOWN* lplpD3D, IUnknown* pUnkOuter); #else /* USE_D3D_CSECT */
typedef HRESULT (WINAPI * D3DCreateProc)(LPCRITICAL_SECTION lpDDCSect, LPUNKNOWN* lplpD3D, IUnknown* pUnkOuter); #endif /* USE_D3D_CSECT */
typedef HRESULT (WINAPI * D3DCreateTextProc)(REFIID riid, LPDIRECTDRAWSURFACE lpDDS, LPUNKNOWN* lplpD3DText, IUnknown* pUnkOuter); typedef HRESULT (WINAPI * D3DCreateDeviceProc)(REFIID riid, LPUNKNOWN lpDirect3D, LPDIRECTDRAWSURFACE lpDDS, LPUNKNOWN* lplpD3DDevice, IUnknown* pUnkOuter);
/*
* some helper functions... */
void __stdcall InitDirectDrawInterfaces(IDirectDraw *pDD, INTSTRUC_IDirectDraw *pDDInt, IDirectDraw2 *pDD2, INTSTRUC_IDirectDraw2 *pDD2Int, IDirectDraw4 *pDD4, INTSTRUC_IDirectDraw4 *pDD4Int); void __stdcall InitSurfaceInterfaces(IDirectDrawSurface *pDDSurface, INTSTRUC_IDirectDrawSurface *pDDSInt, IDirectDrawSurface2 *pDDSurface2, INTSTRUC_IDirectDrawSurface2 *pDDS2Int, IDirectDrawSurface3 *pDDSurface3, INTSTRUC_IDirectDrawSurface3 *pDDS3Int, IDirectDrawSurface4 *pDDSurface4, INTSTRUC_IDirectDrawSurface4 *pDDS4Int ); void __stdcall InitDirectDrawPaletteInterfaces(IDirectDrawPalette *pDDPalette, INTSTRUC_IDirectDrawPalette *pDDInt);
|