diff --git a/include/d3d.h b/include/d3d.h index 814e316cd56..6ebeb00d724 100644 --- a/include/d3d.h +++ b/include/d3d.h @@ -1,11 +1,14 @@ -#ifndef _WINE_D3D_H -#define _WINE_D3D_H +#ifndef __WINE_D3D_H +#define __WINE_D3D_H #include "ddraw.h" /* This is needed for GL_LIGHT */ #include "wine_gl.h" +/***************************************************************************** + * Predeclare the interfaces + */ DEFINE_GUID(IID_IDirect3D, 0x3BBA0080,0x2421,0x11CF,0xA3,0x1A,0x00,0xAA,0x00,0xB9,0x33,0x56 ); DEFINE_GUID(IID_IDirect3D2, 0x6aae1ec1,0x662a,0x11d0,0x88,0x9d,0x00,0xaa,0x00,0xbb,0xb7,0x6a); @@ -35,6 +38,7 @@ typedef struct IDirect3DMaterial2 IDirect3DMaterial, *LPDIRECT3DMATERIAL, ID typedef struct IDirect3DTexture2 IDirect3DTexture, *LPDIRECT3DTEXTURE, IDirect3DTexture2, *LPDIRECT3DTEXTURE2; typedef struct IDirect3DExecuteBuffer IDirect3DExecuteBuffer, *LPDIRECT3DEXECUTEBUFFER; + /* ******************************************************************** Error Codes ******************************************************************** */ @@ -1122,464 +1126,465 @@ typedef struct _D3DINSTRUCTION { } D3DINSTRUCTION, *LPD3DINSTRUCTION; -/* ******************************************************************** - Direct3D - ******************************************************************** */ -#define STDMETHOD(xfn) HRESULT (CALLBACK *fn##xfn) -#define STDMETHOD_(ret,xfn) ret (CALLBACK *fn##xfn) -#define PURE -#define FAR -#define THIS_ THIS , +/***************************************************************************** + * IDirect3D interface + */ +#define ICOM_INTERFACE IDirect3D +#define IDirect3D_METHODS \ + ICOM_METHOD1(HRESULT,Initialize, REFIID,riid) \ + ICOM_METHOD2(HRESULT,EnumDevices, LPD3DENUMDEVICESCALLBACK,lpEnumDevicesCallback, LPVOID,lpUserArg) \ + ICOM_METHOD2(HRESULT,CreateLight, LPDIRECT3DLIGHT*,lplpDirect3DLight, IUnknown*,pUnkOuter) \ + ICOM_METHOD2(HRESULT,CreateMaterial, LPDIRECT3DMATERIAL*,lplpDirect3DMaterial, IUnknown*,pUnkOuter) \ + ICOM_METHOD2(HRESULT,CreateViewport, LPDIRECT3DVIEWPORT*,lplpD3DViewport, IUnknown*,pUnkOuter) \ + ICOM_METHOD2(HRESULT,FindDevice, LPD3DFINDDEVICESEARCH,lpD3DDFS, LPD3DFINDDEVICERESULT,lplpD3DDevice) +#define IDirect3D_IMETHODS \ + IUnknown_IMETHODS \ + IDirect3D_METHODS +ICOM_DEFINE(IDirect3D,IUnknown) +#undef ICOM_INTERFACE -#define THIS LPDIRECT3D this -typedef struct IDirect3D_VTable { +#ifdef ICOM_CINTERFACE /*** IUnknown methods ***/ - STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID* ppvObj) PURE; - STDMETHOD_(ULONG, AddRef) (THIS) PURE; - STDMETHOD_(ULONG, Release) (THIS) PURE; +#define IDirect3D_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b) +#define IDirect3D_AddRef(p) ICOM_CALL (AddRef,p) +#define IDirect3D_Release(p) ICOM_CALL (Release,p) /*** IDirect3D methods ***/ - STDMETHOD(Initialize) (THIS_ REFIID) PURE; - STDMETHOD(EnumDevices)(THIS_ LPD3DENUMDEVICESCALLBACK, LPVOID) PURE; - STDMETHOD(CreateLight) (THIS_ LPDIRECT3DLIGHT*, IUnknown*) PURE; - STDMETHOD(CreateMaterial) (THIS_ LPDIRECT3DMATERIAL*, IUnknown*) PURE; - STDMETHOD(CreateViewport) (THIS_ LPDIRECT3DVIEWPORT*, IUnknown*) PURE; - STDMETHOD(FindDevice)(THIS_ LPD3DFINDDEVICESEARCH, LPD3DFINDDEVICERESULT) PURE; -} *LPDIRECT3D_VTABLE,IDirect3D_VTable; - -struct IDirect3D { - LPDIRECT3D_VTABLE lpvtbl; - DWORD ref; - LPDIRECTDRAW ddraw; -}; -#undef THIS - -/* ******************************************************************** - Direct3D2 - ******************************************************************** */ -#define THIS LPDIRECT3D2 this -typedef struct IDirect3D2_VTable { - /*** IUnknown methods ***/ - STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID* ppvObj) PURE; - STDMETHOD_(ULONG, AddRef) (THIS) PURE; - STDMETHOD_(ULONG, Release) (THIS) PURE; - /*** IDirect3D2 methods ***/ - STDMETHOD(EnumDevices)(THIS_ LPD3DENUMDEVICESCALLBACK, LPVOID) PURE; - STDMETHOD(CreateLight) (THIS_ LPDIRECT3DLIGHT*, IUnknown*) PURE; - STDMETHOD(CreateMaterial) (THIS_ LPDIRECT3DMATERIAL2*, IUnknown*) PURE; - STDMETHOD(CreateViewport) (THIS_ LPDIRECT3DVIEWPORT2*, IUnknown*) PURE; - STDMETHOD(FindDevice)(THIS_ LPD3DFINDDEVICESEARCH, LPD3DFINDDEVICERESULT) PURE; - STDMETHOD(CreateDevice)(THIS_ REFCLSID, LPDIRECTDRAWSURFACE, LPDIRECT3DDEVICE2 *) PURE; -} *LPDIRECT3D2_VTABLE,IDirect3D2_VTable; - -struct IDirect3D2 { - LPDIRECT3D2_VTABLE lpvtbl; - DWORD ref; - LPDIRECTDRAW ddraw; -}; -#undef THIS - -/* ******************************************************************** - Direct3DLight - ******************************************************************** */ -#define THIS LPDIRECT3DLIGHT this -typedef struct IDirect3DLight_VTable { - /*** IUnknown methods ***/ - STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID* ppvObj) PURE; - STDMETHOD_(ULONG, AddRef) (THIS) PURE; - STDMETHOD_(ULONG, Release) (THIS) PURE; - /*** IDirect3DLight methods ***/ - STDMETHOD(Initialize) (THIS_ LPDIRECT3D) PURE; - STDMETHOD(SetLight) (THIS_ LPD3DLIGHT) PURE; - STDMETHOD(GetLight) (THIS_ LPD3DLIGHT) PURE; -} IDirect3DLight_VTable,*LPDIRECT3DLIGHT_VTABLE; - -struct IDirect3DLight { - LPDIRECT3DLIGHT_VTABLE lpvtbl; - DWORD ref; - - union { - LPDIRECT3D d3d; - LPDIRECT3D2 d3d2; - } d3d; - int type; - - D3DLIGHT2 light; - - /* Chained list used for adding / removing from viewports */ - LPDIRECT3DLIGHT next, prev; - - /* Activation function */ - void (*activate)(THIS); - int is_active; - - /* Awful OpenGL code !!! */ -#ifdef HAVE_MESAGL - GLenum light_num; +#define IDirect3D_Initialize(p,a) ICOM_CALL2(Initialize,p,a) +#define IDirect3D_EnumDevices(p,a,b) ICOM_CALL2(EnumDevices,p,a,b) +#define IDirect3D_CreateLight(p,a,b) ICOM_CALL2(CreateLight,p,a,b) +#define IDirect3D_CreateMaterial(p,a,b) ICOM_CALL2(CreateMaterial,p,a,b) +#define IDirect3D_CreateViewport(p,a,b) ICOM_CALL2(CreateViewport,p,a,b) +#define IDirect3D_FindDevice(p,a,b) ICOM_CALL2(FindDevice,p,a,b) #endif -}; - -#undef THIS - -/* ******************************************************************** - Direct3DMaterial - ******************************************************************** */ -#define THIS LPDIRECT3DMATERIAL this -typedef struct IDirect3DMaterial_VTable { - /*** IUnknown methods ***/ - STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID* ppvObj) PURE; - STDMETHOD_(ULONG, AddRef) (THIS) PURE; - STDMETHOD_(ULONG, Release) (THIS) PURE; - /*** IDirect3DMaterial2 methods ***/ - STDMETHOD(Initialize) (THIS_ LPDIRECT3D) PURE; - STDMETHOD(SetMaterial) (THIS_ LPD3DMATERIAL) PURE; - STDMETHOD(GetMaterial) (THIS_ LPD3DMATERIAL) PURE; - STDMETHOD(GetHandle) (THIS_ LPDIRECT3DDEVICE2, LPD3DMATERIALHANDLE) PURE; - STDMETHOD_(HRESULT, Reserve) (THIS) PURE; - STDMETHOD_(HRESULT, Unreserve) (THIS) PURE; -} IDirect3DMaterial_VTable,*LPDIRECT3DMATERIAL_VTABLE; - -#undef THIS -/* ******************************************************************** - Direct3DMaterial2 - ******************************************************************** */ -#define THIS LPDIRECT3DMATERIAL2 this -typedef struct IDirect3DMaterial2_VTable { - /*** IUnknown methods ***/ - STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID* ppvObj) PURE; - STDMETHOD_(ULONG, AddRef) (THIS) PURE; - STDMETHOD_(ULONG, Release) (THIS) PURE; - /*** IDirect3DMaterial2 methods ***/ - STDMETHOD(SetMaterial) (THIS_ LPD3DMATERIAL) PURE; - STDMETHOD(GetMaterial) (THIS_ LPD3DMATERIAL) PURE; - STDMETHOD(GetHandle) (THIS_ LPDIRECT3DDEVICE2, LPD3DMATERIALHANDLE) PURE; -} IDirect3DMaterial2_VTable,*LPDIRECT3DMATERIAL2_VTABLE; - -struct IDirect3DMaterial2 { - LPDIRECT3DMATERIAL2_VTABLE lpvtbl; - DWORD ref; - - union { - LPDIRECT3D d3d1; - LPDIRECT3D2 d3d2; - } d3d; - union { - LPDIRECT3DDEVICE active_device1; - LPDIRECT3DDEVICE2 active_device2; - } device; - int use_d3d2; +/***************************************************************************** + * IDirect3D2 interface + */ +#define ICOM_INTERFACE IDirect3D2 +#define IDirect3D2_METHODS \ + ICOM_METHOD2(HRESULT,EnumDevices, LPD3DENUMDEVICESCALLBACK,lpEnumDevicesCallback, LPVOID,lpUserArg) \ + ICOM_METHOD2(HRESULT,CreateLight, LPDIRECT3DLIGHT*,lplpDirect3DLight, IUnknown*,pUnkOuter) \ + ICOM_METHOD2(HRESULT,CreateMaterial, LPDIRECT3DMATERIAL2*,lplpDirect3DMaterial2, IUnknown*,pUnkOuter) \ + ICOM_METHOD2(HRESULT,CreateViewport, LPDIRECT3DVIEWPORT2*,lplpD3DViewport2, IUnknown*,pUnkOuter) \ + ICOM_METHOD2(HRESULT,FindDevice, LPD3DFINDDEVICESEARCH,lpD3DDFS, LPD3DFINDDEVICERESULT,lpD3DFDR) \ + ICOM_METHOD3(HRESULT,CreateDevice, REFCLSID,rclsid, LPDIRECTDRAWSURFACE,lpDDS, LPDIRECT3DDEVICE2*,lplpD3DDevice2) +#define IDirect3D2_IMETHODS \ + IUnknown_IMETHODS \ + IDirect3D2_METHODS +ICOM_DEFINE(IDirect3D2,IUnknown) +#undef ICOM_INTERFACE - D3DMATERIAL mat; +#ifdef ICOM_CINTERFACE +/*** IUnknown methods ***/ +#define IDirect3D2_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b) +#define IDirect3D2_AddRef(p) ICOM_CALL (AddRef,p) +#define IDirect3D2_Release(p) ICOM_CALL (Release,p) +/*** IDirect3D2 methods ***/ +#define IDirect3D2_EnumDevices(p,a,b) ICOM_CALL2(EnumDevices,p,a,b) +#define IDirect3D2_CreateLight(p,a,b) ICOM_CALL2(CreateLight,p,a,b) +#define IDirect3D2_CreateMaterial(p,a,b) ICOM_CALL2(CreateMaterial,p,a,b) +#define IDirect3D2_CreateViewport(p,a,b) ICOM_CALL2(CreateViewport,p,a,b) +#define IDirect3D2_FindDevice(p,a,b) ICOM_CALL2(FindDevice,p,a,b) +#define IDirect3D2_CreateDevice(p,a,b,c) ICOM_CALL3(CreateDevice,p,a,b,c) +#endif + + +/***************************************************************************** + * IDirect3DLight interface + */ +#define ICOM_INTERFACE IDirect3DLight +#define IDirect3DLight_METHODS \ + ICOM_METHOD1(HRESULT,Initialize, LPDIRECT3D,lpDirect3D) \ + ICOM_METHOD1(HRESULT,SetLight, LPD3DLIGHT,lpLight) \ + ICOM_METHOD1(HRESULT,GetLight, LPD3DLIGHT,lpLight) +#define IDirect3DLight_IMETHODS \ + IUnknown_IMETHODS \ + IDirect3DLight_METHODS +ICOM_DEFINE(IDirect3DLight,IUnknown) +#undef ICOM_INTERFACE - void (*activate)(LPDIRECT3DMATERIAL2 this); -}; +#ifdef ICOM_CINTERFACE +/*** IUnknown methods ***/ +#define IDirect3DLight_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b) +#define IDirect3DLight_AddRef(p) ICOM_CALL (AddRef,p) +#define IDirect3DLight_Release(p) ICOM_CALL (Release,p) +/*** IDirect3DLight methods ***/ +#define IDirect3DLight_Initialize(p,a) ICOM_CALL1(Initialize,p,a) +#define IDirect3DLight_SetLight(p,a) ICOM_CALL1(SetLight,p,a) +#define IDirect3DLight_GetLight(p,a) ICOM_CALL1(GetLight,p,a) +#endif -#undef THIS -/* ******************************************************************** - Direct3DTexture - ******************************************************************** */ -#define THIS LPDIRECT3DTEXTURE this -typedef struct IDirect3DTexture_VTable { +/***************************************************************************** + * IDirect3DMaterial interface + */ +#define ICOM_INTERFACE IDirect3DMaterial +#define IDirect3DMaterial_METHODS \ + ICOM_METHOD1(HRESULT,Initialize, LPDIRECT3D,lpDirect3D) \ + ICOM_METHOD1(HRESULT,SetMaterial, LPD3DMATERIAL,lpMat) \ + ICOM_METHOD1(HRESULT,GetMaterial, LPD3DMATERIAL,lpMat) \ + ICOM_METHOD2(HRESULT,GetHandle, LPDIRECT3DDEVICE2,lpDirect3DDevice2, LPD3DMATERIALHANDLE,lpHandle) \ + ICOM_METHOD (HRESULT,Reserve) \ + ICOM_METHOD (HRESULT,Unreserve) +#define IDirect3DMaterial_IMETHODS \ + IUnknown_IMETHODS \ + IDirect3DMaterial_METHODS +ICOM_DEFINE(IDirect3DMaterial,IUnknown) +#undef ICOM_INTERFACE + +#ifdef ICOM_CINTERFACE /*** IUnknown methods ***/ - STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID* ppvObj) PURE; - STDMETHOD_(ULONG, AddRef) (THIS) PURE; - STDMETHOD_(ULONG, Release) (THIS) PURE; +#define IDirect3DMaterial_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b) +#define IDirect3DMaterial_AddRef(p) ICOM_CALL (AddRef,p) +#define IDirect3DMaterial_Release(p) ICOM_CALL (Release,p) +/*** IDirect3DMaterial methods ***/ +#define IDirect3DMaterial_Initialize(p,a) ICOM_CALL1(Initialize,p,a) +#define IDirect3DMaterial_SetMaterial(p,a) ICOM_CALL1(SetMaterial,p,a) +#define IDirect3DMaterial_GetMaterial(p,a) ICOM_CALL1(GetMaterial,p,a) +#define IDirect3DMaterial_GetHandle(p,a,b) ICOM_CALL2(GetHandle,p,a,b) +#define IDirect3DMaterial_Reserve(p) ICOM_CALL (Reserve,p) +#define IDirect3DMaterial_Unreserve(p) ICOM_CALL (Unreserve,p) +#endif + + +/***************************************************************************** + * IDirect3DMaterial2 interface + */ +#define ICOM_INTERFACE IDirect3DMaterial2 +#define IDirect3DMaterial2_METHODS \ + ICOM_METHOD1(HRESULT,SetMaterial, LPD3DMATERIAL,lpMat) \ + ICOM_METHOD1(HRESULT,GetMaterial, LPD3DMATERIAL,lpMat) \ + ICOM_METHOD2(HRESULT,GetHandle, LPDIRECT3DDEVICE2,lpDirect3DDevice2, LPD3DMATERIALHANDLE,lpHandle) +#define IDirect3DMaterial2_IMETHODS \ + IUnknown_IMETHODS \ + IDirect3DMaterial2_METHODS +ICOM_DEFINE(IDirect3DMaterial2,IUnknown) +#undef ICOM_INTERFACE + +#ifdef ICOM_CINTERFACE + /*** IUnknown methods ***/ +#define IDirect3DMaterial2_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b) +#define IDirect3DMaterial2_AddRef(p) ICOM_CALL (AddRef,p) +#define IDirect3DMaterial2_Release(p) ICOM_CALL (Release,p) + /*** IDirect3DMaterial2 methods ***/ +#define IDirect3DMaterial2_SetMaterial(p,a) ICOM_CALL1(SetMaterial,p,a) +#define IDirect3DMaterial2_GetMaterial(p,a) ICOM_CALL1(GetMaterial,p,a) +#define IDirect3DMaterial2_GetHandle(p,a,b) ICOM_CALL2(GetHandle,p,a,b) +#endif + + +/***************************************************************************** + * IDirect3DTexture interface + */ +#define ICOM_INTERFACE IDirect3DTexture +#define IDirect3DTexture_METHODS \ + ICOM_METHOD2(HRESULT,Initialize, LPDIRECT3DDEVICE,lpDirect3DDevice, LPDIRECTDRAWSURFACE,) \ + ICOM_METHOD2(HRESULT,GetHandle, LPDIRECT3DDEVICE,lpDirect3DDevice, LPD3DTEXTUREHANDLE,) \ + ICOM_METHOD2(HRESULT,PaletteChanged, DWORD,dwStart, DWORD,dwCount) \ + ICOM_METHOD1(HRESULT,Load, LPDIRECT3DTEXTURE,lpD3DTexture) \ + ICOM_METHOD (HRESULT,Unload) +#define IDirect3DTexture_IMETHODS \ + IUnknown_IMETHODS \ + IDirect3DTexture_METHODS +ICOM_DEFINE(IDirect3DTexture,IUnknown) +#undef ICOM_INTERFACE + +#ifdef ICOM_CINTERFACE + /*** IUnknown methods ***/ +#define IDirect3DTexture_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b) +#define IDirect3DTexture_AddRef(p) ICOM_CALL (AddRef,p) +#define IDirect3DTexture_Release(p) ICOM_CALL (Release,p) /*** IDirect3DTexture methods ***/ - STDMETHOD(Initialize) (THIS_ LPDIRECT3DDEVICE, LPDIRECTDRAWSURFACE) PURE; - STDMETHOD(GetHandle) (THIS_ LPDIRECT3DDEVICE, LPD3DTEXTUREHANDLE) PURE; - STDMETHOD(PaletteChanged) (THIS_ DWORD, DWORD) PURE; - STDMETHOD(Load) (THIS_ LPDIRECT3DTEXTURE) PURE; - STDMETHOD_(HRESULT, Unload) (THIS) PURE; -} IDirect3DTexture_VTable,*LPDIRECT3DTEXTURE_VTABLE; +#define IDirect3DTexture_Initialize(p,a,b,c) ICOM_CALL(Initialize,p,a,b,c) +#define IDirect3DTexture_GetHandle(p,a,b,c) ICOM_CALL(GetHandle,p,a,b,c) +#define IDirect3DTexture_PaletteChanged(p,a,b,c) ICOM_CALL(PaletteChanged,p,a,b,c) +#define IDirect3DTexture_Load(p,a,b,c) ICOM_CALL(Load,p,a,b,c) +#define IDirect3DTexture_Unload(p,a,b,c) ICOM_CALL(Unload,p,a,b,c) +#endif -/* The structure is the same as for Direct3DTexture2 */ -#undef THIS +/***************************************************************************** + * IDirect3DTexture2 interface + */ +#define ICOM_INTERFACE IDirect3DTexture2 +#define IDirect3DTexture2_METHODS \ + ICOM_METHOD2(HRESULT,GetHandle, LPDIRECT3DDEVICE2,lpDirect3DDevice2, LPD3DTEXTUREHANDLE,lpHandle) \ + ICOM_METHOD2(HRESULT,PaletteChanged, DWORD,dwStart, DWORD,dwCount) \ + ICOM_METHOD1(HRESULT,Load, LPDIRECT3DTEXTURE2,lpD3DTexture2) +#define IDirect3DTexture2_IMETHODS \ + IUnknown_IMETHODS \ + IDirect3DTexture2_METHODS +ICOM_DEFINE(IDirect3DTexture2,IUnknown) +#undef ICOM_INTERFACE -/* ******************************************************************** - Direct3DTexture2 - ******************************************************************** */ -#define THIS LPDIRECT3DTEXTURE2 this -typedef struct IDirect3DTexture2_VTable { +#ifdef ICOM_CINTERFACE /*** IUnknown methods ***/ - STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID* ppvObj) PURE; - STDMETHOD_(ULONG, AddRef) (THIS) PURE; - STDMETHOD_(ULONG, Release) (THIS) PURE; +#define IDirect3DTexture2_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b) +#define IDirect3DTexture2_AddRef(p) ICOM_CALL (AddRef,p) +#define IDirect3DTexture2_Release(p) ICOM_CALL (Release,p) /*** IDirect3DTexture2 methods ***/ - STDMETHOD(GetHandle) (THIS_ LPDIRECT3DDEVICE2, LPD3DTEXTUREHANDLE) PURE; - STDMETHOD(PaletteChanged) (THIS_ DWORD, DWORD) PURE; - STDMETHOD(Load) (THIS_ LPDIRECT3DTEXTURE2) PURE; -} IDirect3DTexture2_VTable,*LPDIRECT3DTEXTURE2_VTABLE; - -struct IDirect3DTexture2 { - LPDIRECT3DTEXTURE2_VTABLE lpvtbl; - DWORD ref; - - void *D3Ddevice; /* I put (void *) to use the same pointer for both - Direct3D and Direct3D2 */ -#ifdef HAVE_MESAGL - GLuint tex_name; +#define IDirect3DTexture2_GetHandle(p,a,b) ICOM_CALL2(GetHandle,p,a,b) +#define IDirect3DTexture2_PaletteChanged(p,a,b) ICOM_CALL2(PaletteChanged,p,a,b) +#define IDirect3DTexture2_Load(p,a) ICOM_CALL1(Load,p,a) #endif - LPDIRECTDRAWSURFACE4 surface; -}; - -#undef THIS -/* ******************************************************************** - Direct3DViewport - ******************************************************************** */ -#define THIS LPDIRECT3DVIEWPORT this -typedef struct IDirect3Viewport_VTable { +/***************************************************************************** + * IDirect3DViewport interface + */ +#define ICOM_INTERFACE IDirect3DViewport +#define IDirect3DViewport_METHODS \ + ICOM_METHOD1(HRESULT,Initialize, LPDIRECT3D,lpDirect3D) \ + ICOM_METHOD1(HRESULT,GetViewport, LPD3DVIEWPORT,lpData) \ + ICOM_METHOD1(HRESULT,SetViewport, LPD3DVIEWPORT,lpData) \ + ICOM_METHOD4(HRESULT,TransformVertices, DWORD,dwVertexCount, LPD3DTRANSFORMDATA,lpData, DWORD,dwFlags, LPDWORD,lpOffScreen) \ + ICOM_METHOD2(HRESULT,LightElements, DWORD,dwElementCount, LPD3DLIGHTDATA,lpData) \ + ICOM_METHOD1(HRESULT,SetBackground, D3DMATERIALHANDLE,hMat) \ + ICOM_METHOD2(HRESULT,GetBackground, LPD3DMATERIALHANDLE,, LPBOOL,) \ + ICOM_METHOD1(HRESULT,SetBackgroundDepth, LPDIRECTDRAWSURFACE,lpDDSurface) \ + ICOM_METHOD2(HRESULT,GetBackgroundDepth, LPDIRECTDRAWSURFACE*,lplpDDSurface, LPBOOL,lpValid) \ + ICOM_METHOD3(HRESULT,Clear, DWORD,dwCount, LPD3DRECT,lpRects, DWORD,dwFlags) \ + ICOM_METHOD1(HRESULT,AddLight, LPDIRECT3DLIGHT,lpDirect3DLight) \ + ICOM_METHOD1(HRESULT,DeleteLight, LPDIRECT3DLIGHT,lpDirect3DLight) \ + ICOM_METHOD3(HRESULT,NextLight, LPDIRECT3DLIGHT,lpDirect3DLight, LPDIRECT3DLIGHT*,lplpDirect3DLight, DWORD,dwFlags) +#define IDirect3DViewport_IMETHODS \ + IUnknown_IMETHODS \ + IDirect3DViewport_METHODS +ICOM_DEFINE(IDirect3DViewport,IUnknown) +#undef ICOM_INTERFACE + +#ifdef ICOM_CINTERFACE /*** IUnknown methods ***/ - STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID* ppvObj) PURE; - STDMETHOD_(ULONG, AddRef) (THIS) PURE; - STDMETHOD_(ULONG, Release) (THIS) PURE; +#define IDirect3DViewport_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b) +#define IDirect3DViewport_AddRef(p) ICOM_CALL (AddRef,p) +#define IDirect3DViewport_Release(p) ICOM_CALL (Release,p) /*** IDirect3DViewport methods ***/ - STDMETHOD(Initialize) (THIS_ LPDIRECT3D) PURE; - STDMETHOD(GetViewport) (THIS_ LPD3DVIEWPORT) PURE; - STDMETHOD(SetViewport) (THIS_ LPD3DVIEWPORT) PURE; - STDMETHOD(TransformVertices) (THIS_ DWORD, LPD3DTRANSFORMDATA, DWORD, LPDWORD) PURE; - STDMETHOD(LightElements) (THIS_ DWORD, LPD3DLIGHTDATA) PURE; - STDMETHOD(SetBackground) (THIS_ D3DMATERIALHANDLE) PURE; - STDMETHOD(GetBackground) (THIS_ LPD3DMATERIALHANDLE, LPBOOL) PURE; - STDMETHOD(SetBackgroundDepth) (THIS_ LPDIRECTDRAWSURFACE) PURE; - STDMETHOD(GetBackgroundDepth) (THIS_ LPDIRECTDRAWSURFACE*, LPBOOL) PURE; - STDMETHOD(Clear) (THIS_ DWORD, LPD3DRECT, DWORD) PURE; - STDMETHOD(AddLight) (THIS_ LPDIRECT3DLIGHT) PURE; - STDMETHOD(DeleteLight) (THIS_ LPDIRECT3DLIGHT) PURE; - STDMETHOD(NextLight) (THIS_ LPDIRECT3DLIGHT, LPDIRECT3DLIGHT*, DWORD) PURE; -} IDirect3DViewport_VTable,*LPDIRECT3DVIEWPORT_VTABLE; - -#undef THIS +#define IDirect3DViewport_Initialize(p,a) ICOM_CALL1(Initialize,p,a) +#define IDirect3DViewport_GetViewport(p,a) ICOM_CALL1(GetViewport,p,a) +#define IDirect3DViewport_SetViewport(p,a) ICOM_CALL1(SetViewport,p,a) +#define IDirect3DViewport_TransformVertices(p,a,b,c,d) ICOM_CALL4(TransformVertices,p,a,b,c,d) +#define IDirect3DViewport_LightElements(p,a,b) ICOM_CALL2(LightElements,p,a,b) +#define IDirect3DViewport_SetBackground(p,a) ICOM_CALL1(SetBackground,p,a) +#define IDirect3DViewport_GetBackground(p,a,b) ICOM_CALL2(GetBackground,p,a,b) +#define IDirect3DViewport_SetBackgroundDepth(p,a) ICOM_CALL1(SetBackgroundDepth,p,a) +#define IDirect3DViewport_GetBackgroundDepth(p,a,b) ICOM_CALL2(GetBackgroundDepth,p,a,b) +#define IDirect3DViewport_Clear(p,a,b,c) ICOM_CALL3(Clear,p,a,b,c) +#define IDirect3DViewport_AddLight(p,a) ICOM_CALL1(AddLight,p,a) +#define IDirect3DViewport_DeleteLight(p,a) ICOM_CALL1(DeleteLight,p,a) +#define IDirect3DViewport_NextLight(p,a,b,c) ICOM_CALL3(NextLight,p,a,b,c) +#endif -/* ******************************************************************** - Direct3DViewport2 - ******************************************************************** */ -#define THIS LPDIRECT3DVIEWPORT2 this -typedef struct IDirect3Viewport2_VTable { +/***************************************************************************** + * IDirect3DViewport2 interface + */ +#define ICOM_INTERFACE IDirect3DViewport2 +#define IDirect3DViewport2_METHODS \ + ICOM_METHOD1(HRESULT,GetViewport2, LPD3DVIEWPORT2,lpData) \ + ICOM_METHOD1(HRESULT,SetViewport2, LPD3DVIEWPORT2,lpData) +#define IDirect3DViewport2_IMETHODS \ + IDirect3DViewport_IMETHODS \ + IDirect3DViewport2_METHODS +ICOM_DEFINE(IDirect3DViewport2,IDirect3DViewport) +#undef ICOM_INTERFACE + +#ifdef ICOM_CINTERFACE /*** IUnknown methods ***/ - STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID* ppvObj) PURE; - STDMETHOD_(ULONG, AddRef) (THIS) PURE; - STDMETHOD_(ULONG, Release) (THIS) PURE; - /*** IDirect3DViewport methods ***/ - STDMETHOD(Initialize) (THIS_ LPDIRECT3D) PURE; - STDMETHOD(GetViewport) (THIS_ LPD3DVIEWPORT) PURE; - STDMETHOD(SetViewport) (THIS_ LPD3DVIEWPORT) PURE; - STDMETHOD(TransformVertices) (THIS_ DWORD, LPD3DTRANSFORMDATA, DWORD, LPDWORD) PURE; - STDMETHOD(LightElements) (THIS_ DWORD, LPD3DLIGHTDATA) PURE; - STDMETHOD(SetBackground) (THIS_ D3DMATERIALHANDLE) PURE; - STDMETHOD(GetBackground) (THIS_ LPD3DMATERIALHANDLE, LPBOOL) PURE; - STDMETHOD(SetBackgroundDepth) (THIS_ LPDIRECTDRAWSURFACE) PURE; - STDMETHOD(GetBackgroundDepth) (THIS_ LPDIRECTDRAWSURFACE*, LPBOOL) PURE; - STDMETHOD(Clear) (THIS_ DWORD, LPD3DRECT, DWORD) PURE; - STDMETHOD(AddLight) (THIS_ LPDIRECT3DLIGHT) PURE; - STDMETHOD(DeleteLight) (THIS_ LPDIRECT3DLIGHT) PURE; - STDMETHOD(NextLight) (THIS_ LPDIRECT3DLIGHT, LPDIRECT3DLIGHT*, DWORD) PURE; +#define IDirect3DViewport2_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b) +#define IDirect3DViewport2_AddRef(p) ICOM_CALL (AddRef,p) +#define IDirect3DViewport2_Release(p) ICOM_CALL (Release,p) +/*** IDirect3Viewport methods ***/ +#define IDirect3DViewport2_Initialize(p,a) ICOM_CALL1(Initialize,p,a) +#define IDirect3DViewport2_GetViewport(p,a) ICOM_CALL1(GetViewport,p,a) +#define IDirect3DViewport2_SetViewport(p,a) ICOM_CALL1(SetViewport,p,a) +#define IDirect3DViewport2_TransformVertices(p,a,b,c,d) ICOM_CALL4(TransformVertices,p,a,b,c,d) +#define IDirect3DViewport2_LightElements(p,a,b) ICOM_CALL2(LightElements,p,a,b) +#define IDirect3DViewport2_SetBackground(p,a) ICOM_CALL1(SetBackground,p,a) +#define IDirect3DViewport2_GetBackground(p,a,b) ICOM_CALL2(GetBackground,p,a,b) +#define IDirect3DViewport2_SetBackgroundDepth(p,a) ICOM_CALL1(SetBackgroundDepth,p,a) +#define IDirect3DViewport2_GetBackgroundDepth(p,a,b) ICOM_CALL2(GetBackgroundDepth,p,a,b) +#define IDirect3DViewport2_Clear(p,a,b,c) ICOM_CALL3(Clear,p,a,b,c) +#define IDirect3DViewport2_AddLight(p,a) ICOM_CALL1(AddLight,p,a) +#define IDirect3DViewport2_DeleteLight(p,a) ICOM_CALL1(DeleteLight,p,a) +#define IDirect3DViewport2_NextLight(p,a,b,c) ICOM_CALL3(NextLight,p,a,b,c) /*** IDirect3DViewport2 methods ***/ - STDMETHOD(GetViewport2) (THIS_ LPD3DVIEWPORT2) PURE; - STDMETHOD(SetViewport2) (THIS_ LPD3DVIEWPORT2) PURE; -} IDirect3DViewport2_VTable,*LPDIRECT3DVIEWPORT2_VTABLE; - -struct IDirect3DViewport2 { - LPDIRECT3DVIEWPORT2_VTABLE lpvtbl; - DWORD ref; - - union { - LPDIRECT3D d3d1; - LPDIRECT3D2 d3d2; - } d3d; - /* If this viewport is active for one device, put the device here */ - union { - LPDIRECT3DDEVICE active_device1; - LPDIRECT3DDEVICE2 active_device2; - } device; - int use_d3d2; - - union { - D3DVIEWPORT vp1; - D3DVIEWPORT2 vp2; - } viewport; - int use_vp2; - - /* Activation function */ - void (*activate)(THIS); - - /* Field used to chain viewports together */ - LPDIRECT3DVIEWPORT2 next; - - /* Lights list */ - LPDIRECT3DLIGHT lights; - - /* OpenGL code */ -#ifdef HAVE_MESAGL - GLenum nextlight; +#define IDirect3DViewport2_GetViewport2(p,a) ICOM_CALL1(GetViewport2,p,a) +#define IDirect3DViewport2_SetViewport2(p,a) ICOM_CALL1(SetViewport2,p,a) #endif -}; -#undef THIS -/* ******************************************************************** - Direct3DExecuteBuffer - ******************************************************************** */ -#define THIS LPDIRECT3DEXECUTEBUFFER this -typedef struct IDirect3DExecuteBuffer_VTable { +/***************************************************************************** + * IDirect3DExecuteBuffer interface + */ +#define ICOM_INTERFACE IDirect3DExecuteBuffer +#define IDirect3DExecuteBuffer_METHODS \ + ICOM_METHOD2(HRESULT,Initialize, LPDIRECT3DDEVICE,lpDirect3DDevice, LPD3DEXECUTEBUFFERDESC,lpDesc) \ + ICOM_METHOD1(HRESULT,Lock, LPD3DEXECUTEBUFFERDESC,lpDesc) \ + ICOM_METHOD (HRESULT,Unlock) \ + ICOM_METHOD1(HRESULT,SetExecuteData, LPD3DEXECUTEDATA,lpData) \ + ICOM_METHOD1(HRESULT,GetExecuteData, LPD3DEXECUTEDATA,lpData) \ + ICOM_METHOD4(HRESULT,Validate, LPDWORD,lpdwOffset, LPD3DVALIDATECALLBACK,lpFunc, LPVOID,lpUserArg, DWORD,dwReserved) \ + ICOM_METHOD1(HRESULT,Optimize, DWORD,) +#define IDirect3DExecuteBuffer_IMETHODS \ + IUnknown_IMETHODS \ + IDirect3DExecuteBuffer_METHODS +ICOM_DEFINE(IDirect3DExecuteBuffer,IUnknown) +#undef ICOM_INTERFACE + +#ifdef ICOM_CINTERFACE /*** IUnknown methods ***/ - STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID* ppvObj) PURE; - STDMETHOD_(ULONG, AddRef) (THIS) PURE; - STDMETHOD_(ULONG, Release) (THIS) PURE; +#define IDirect3DExecuteBuffer_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b) +#define IDirect3DExecuteBuffer_AddRef(p) ICOM_CALL (AddRef,p) +#define IDirect3DExecuteBuffer_Release(p) ICOM_CALL (Release,p) /*** IDirect3DExecuteBuffer methods ***/ - STDMETHOD(Initialize) (THIS_ LPDIRECT3DDEVICE, LPD3DEXECUTEBUFFERDESC) PURE; - STDMETHOD(Lock) (THIS_ LPD3DEXECUTEBUFFERDESC) PURE; - STDMETHOD_(HRESULT, Unlock) (THIS) PURE; - STDMETHOD(SetExecuteData) (THIS_ LPD3DEXECUTEDATA) PURE; - STDMETHOD(GetExecuteData) (THIS_ LPD3DEXECUTEDATA) PURE; - STDMETHOD(Validate) (THIS_ LPDWORD, LPD3DVALIDATECALLBACK, LPVOID, DWORD) PURE; - STDMETHOD(Optimize) (THIS_ DWORD) PURE; -} *LPDIRECT3DEXECUTEBUFFER_VTABLE,IDirect3DExecuteBuffer_VTable; - -struct IDirect3DExecuteBuffer { - LPDIRECT3DEXECUTEBUFFER_VTABLE lpvtbl; - DWORD ref; - - LPDIRECT3DDEVICE d3ddev; - - D3DEXECUTEBUFFERDESC desc; - D3DEXECUTEDATA data; - - /* This buffer will store the transformed vertices */ - void *vertex_data; - D3DVERTEXTYPE vertex_type; - - /* This flags is set to TRUE if we allocated ourselves the - data buffer */ - BOOL need_free; - - void (*execute)(LPDIRECT3DEXECUTEBUFFER this, - LPDIRECT3DDEVICE dev, - LPDIRECT3DVIEWPORT vp); -}; - -#undef THIS - -/* ******************************************************************** - Direct3DDevice - ******************************************************************** */ -#define THIS LPDIRECT3DDEVICE this -typedef struct IDirect3DDevice_VTable { - /*** IUnknown methods ***/ - STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID* ppvObj) PURE; - STDMETHOD_(ULONG, AddRef) (THIS) PURE; - STDMETHOD_(ULONG, Release) (THIS) PURE; - /*** IDirect3DDevice methods ***/ - STDMETHOD(Initialize) (THIS_ LPDIRECT3D, LPGUID, LPD3DDEVICEDESC) PURE; - STDMETHOD(GetCaps) (THIS_ LPD3DDEVICEDESC, LPD3DDEVICEDESC) PURE; - STDMETHOD(SwapTextureHandles) (THIS_ LPDIRECT3DTEXTURE, LPDIRECT3DTEXTURE) PURE; - STDMETHOD(CreateExecuteBuffer) (THIS_ LPD3DEXECUTEBUFFERDESC, LPDIRECT3DEXECUTEBUFFER*, IUnknown*) PURE; - STDMETHOD(GetStats) (THIS_ LPD3DSTATS) PURE; - STDMETHOD(Execute) (THIS_ LPDIRECT3DEXECUTEBUFFER, LPDIRECT3DVIEWPORT, DWORD) PURE; - STDMETHOD(AddViewport) (THIS_ LPDIRECT3DVIEWPORT) PURE; - STDMETHOD(DeleteViewport) (THIS_ LPDIRECT3DVIEWPORT) PURE; - STDMETHOD(NextViewport) (THIS_ LPDIRECT3DVIEWPORT, LPDIRECT3DVIEWPORT*, DWORD) PURE; - STDMETHOD(Pick) (THIS_ LPDIRECT3DEXECUTEBUFFER, LPDIRECT3DVIEWPORT, DWORD, LPD3DRECT) PURE; - STDMETHOD(GetPickRecords)(THIS_ LPDWORD, LPD3DPICKRECORD) PURE; - STDMETHOD(EnumTextureFormats) (THIS_ LPD3DENUMTEXTUREFORMATSCALLBACK, LPVOID) PURE; - STDMETHOD(CreateMatrix) (THIS_ LPD3DMATRIXHANDLE) PURE; - STDMETHOD(SetMatrix) (THIS_ D3DMATRIXHANDLE, const LPD3DMATRIX) PURE; - STDMETHOD(GetMatrix) (THIS_ D3DMATRIXHANDLE, LPD3DMATRIX) PURE; - STDMETHOD(DeleteMatrix) (THIS_ D3DMATRIXHANDLE) PURE; - STDMETHOD_(HRESULT, BeginScene) (THIS) PURE; - STDMETHOD_(HRESULT, EndScene) (THIS) PURE; - STDMETHOD(GetDirect3D) (THIS_ LPDIRECT3D*) PURE; -} *LPDIRECT3DDEVICE_VTABLE,IDirect3DDevice_VTable; - -struct IDirect3DDevice { - /* This are the fields common to all Direct3DDevice implementations */ - LPDIRECT3DDEVICE_VTABLE lpvtbl; - DWORD ref; - - LPDIRECT3D d3d; - LPDIRECTDRAWSURFACE surface; - - LPDIRECT3DVIEWPORT viewport_list; - LPDIRECT3DVIEWPORT current_viewport; - - void (*set_context)(THIS) ; -}; - -#undef THIS - -/* ******************************************************************** - Direct3DDevice2 - ******************************************************************** */ -#define THIS LPDIRECT3DDEVICE2 this -typedef struct IDirect3DDevice2_VTable { - /*** IUnknown methods ***/ - STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID* ppvObj) PURE; - STDMETHOD_(ULONG, AddRef) (THIS) PURE; - STDMETHOD_(ULONG, Release) (THIS) PURE; - /*** IDirect3DDevice2 methods ***/ - STDMETHOD(GetCaps) (THIS_ LPD3DDEVICEDESC, LPD3DDEVICEDESC) PURE; - STDMETHOD(SwapTextureHandles) (THIS_ LPDIRECT3DTEXTURE2, LPDIRECT3DTEXTURE2) PURE; - STDMETHOD(GetStats) (THIS_ LPD3DSTATS) PURE; - STDMETHOD(AddViewport) (THIS_ LPDIRECT3DVIEWPORT2) PURE; - STDMETHOD(DeleteViewport) (THIS_ LPDIRECT3DVIEWPORT2) PURE; - STDMETHOD(NextViewport) (THIS_ LPDIRECT3DVIEWPORT2, LPDIRECT3DVIEWPORT2*, DWORD) PURE; - STDMETHOD(EnumTextureFormats) (THIS_ LPD3DENUMTEXTUREFORMATSCALLBACK, LPVOID) PURE; - STDMETHOD_(HRESULT, BeginScene) (THIS) PURE; - STDMETHOD_(HRESULT, EndScene) (THIS) PURE; - STDMETHOD(GetDirect3D) (THIS_ LPDIRECT3D2*) PURE; - - /*** DrawPrimitive API ***/ - STDMETHOD(SetCurrentViewport) (THIS_ LPDIRECT3DVIEWPORT2) PURE; - STDMETHOD(GetCurrentViewport) (THIS_ LPDIRECT3DVIEWPORT2 *) PURE; - - STDMETHOD(SetRenderTarget) (THIS_ LPDIRECTDRAWSURFACE, DWORD) PURE; - STDMETHOD(GetRenderTarget) (THIS_ LPDIRECTDRAWSURFACE *) PURE; - - STDMETHOD(Begin) (THIS_ D3DPRIMITIVETYPE, D3DVERTEXTYPE, DWORD) PURE; - STDMETHOD(BeginIndexed) (THIS_ D3DPRIMITIVETYPE, D3DVERTEXTYPE, LPVOID, DWORD, DWORD) PURE; - STDMETHOD(Vertex) (THIS_ LPVOID) PURE; - STDMETHOD(Index) (THIS_ WORD) PURE; - STDMETHOD(End) (THIS_ DWORD) PURE; - - STDMETHOD(GetRenderState) (THIS_ D3DRENDERSTATETYPE, LPDWORD) PURE; - STDMETHOD(SetRenderState) (THIS_ D3DRENDERSTATETYPE, DWORD) PURE; - STDMETHOD(GetLightState) (THIS_ D3DLIGHTSTATETYPE, LPDWORD) PURE; - STDMETHOD(SetLightState) (THIS_ D3DLIGHTSTATETYPE, DWORD) PURE; - STDMETHOD(SetTransform) (THIS_ D3DTRANSFORMSTATETYPE, LPD3DMATRIX) PURE; - STDMETHOD(GetTransform) (THIS_ D3DTRANSFORMSTATETYPE, LPD3DMATRIX) PURE; - STDMETHOD(MultiplyTransform) (THIS_ D3DTRANSFORMSTATETYPE, LPD3DMATRIX) PURE; - - STDMETHOD(DrawPrimitive) (THIS_ D3DPRIMITIVETYPE, D3DVERTEXTYPE, LPVOID, DWORD, DWORD) PURE; - STDMETHOD(DrawIndexedPrimitive) (THIS_ D3DPRIMITIVETYPE, D3DVERTEXTYPE, LPVOID, DWORD, LPWORD, DWORD, DWORD) PURE; - - STDMETHOD(SetClipStatus) (THIS_ LPD3DCLIPSTATUS) PURE; - STDMETHOD(GetClipStatus) (THIS_ LPD3DCLIPSTATUS) PURE; -} *LPDIRECT3DDEVICE2_VTABLE,IDirect3DDevice2_VTable; - -struct IDirect3DDevice2 { - /* This are the fields common to all Direct3DDevice2 implementations */ - LPDIRECT3DDEVICE2_VTABLE lpvtbl; - DWORD ref; - - LPDIRECT3D2 d3d; - LPDIRECTDRAWSURFACE surface; - - LPDIRECT3DVIEWPORT2 viewport_list; - LPDIRECT3DVIEWPORT2 current_viewport; - - void (*set_context)(THIS) ; -}; -#undef THIS - - -#undef THIS_ -#undef STDMETHOD -#undef STDMETHOD_ -#undef PURE -#undef FAR +#define IDirect3DExecuteBuffer_Initialize(p,a,b) ICOM_CALL2(Initialize,p,a,b) +#define IDirect3DExecuteBuffer_Lock(p,a) ICOM_CALL1(Lock,p,a) +#define IDirect3DExecuteBuffer_Unlock(p) ICOM_CALL (Unlock,p) +#define IDirect3DExecuteBuffer_SetExecuteData(p,a) ICOM_CALL1(SetExecuteData,p,a) +#define IDirect3DExecuteBuffer_GetExecuteData(p,a) ICOM_CALL1(GetExecuteData,p,a) +#define IDirect3DExecuteBuffer_Validate(p,a,b,c,d) ICOM_CALL4(Validate,p,a,b,c,d) +#define IDirect3DExecuteBuffer_Optimize(p,a) ICOM_CALL1(Optimize,p,a) #endif + + +/***************************************************************************** + * IDirect3DDevice interface + */ +#define ICOM_INTERFACE IDirect3DDevice +#define IDirect3DDevice_METHODS \ + ICOM_METHOD3(HRESULT,Initialize, LPDIRECT3D,lpDirect3D, LPGUID,lpGUID, LPD3DDEVICEDESC,lpD3DDVDesc) \ + ICOM_METHOD2(HRESULT,GetCaps, LPD3DDEVICEDESC,lpD3DHWDevDesc, LPD3DDEVICEDESC,lpD3DHELDevDesc) \ + ICOM_METHOD2(HRESULT,SwapTextureHandles, LPDIRECT3DTEXTURE,lpD3Dtex1, LPDIRECT3DTEXTURE,lpD3DTex2) \ + ICOM_METHOD3(HRESULT,CreateExecuteBuffer, LPD3DEXECUTEBUFFERDESC,lpDesc, LPDIRECT3DEXECUTEBUFFER*,lplpDirect3DExecuteBuffer, IUnknown*,pUnkOuter) \ + ICOM_METHOD1(HRESULT,GetStats, LPD3DSTATS,lpD3DStats) \ + ICOM_METHOD3(HRESULT,Execute, LPDIRECT3DEXECUTEBUFFER,lpDirect3DExecuteBuffer, LPDIRECT3DVIEWPORT,lpDirect3DViewport, DWORD,dwFlags) \ + ICOM_METHOD1(HRESULT,AddViewport, LPDIRECT3DVIEWPORT,lpDirect3DViewport) \ + ICOM_METHOD1(HRESULT,DeleteViewport, LPDIRECT3DVIEWPORT,lpDirect3DViewport) \ + ICOM_METHOD3(HRESULT,NextViewport, LPDIRECT3DVIEWPORT,lpDirect3DViewport, LPDIRECT3DVIEWPORT*,lplpDirect3DViewport, DWORD,dwFlags) \ + ICOM_METHOD4(HRESULT,Pick, LPDIRECT3DEXECUTEBUFFER,lpDirect3DExecuteBuffer, LPDIRECT3DVIEWPORT,lpDirect3DViewport, DWORD,dwFlags, LPD3DRECT,lpRect) \ + ICOM_METHOD2(HRESULT,GetPickRecords, LPDWORD,lpCount, LPD3DPICKRECORD,lpD3DPickRec) \ + ICOM_METHOD2(HRESULT,EnumTextureFormats, LPD3DENUMTEXTUREFORMATSCALLBACK,lpD3DEnumTextureProc, LPVOID,lpArg) \ + ICOM_METHOD1(HRESULT,CreateMatrix, LPD3DMATRIXHANDLE,lpD3DMatHandle) \ + ICOM_METHOD2(HRESULT,SetMatrix, D3DMATRIXHANDLE,D3DMatHandle, LPD3DMATRIX,lpD3DMatrix) \ + ICOM_METHOD2(HRESULT,GetMatrix, D3DMATRIXHANDLE,D3DMatHandle, LPD3DMATRIX,lpD3DMatrix) \ + ICOM_METHOD1(HRESULT,DeleteMatrix, D3DMATRIXHANDLE,D3DMatHandle) \ + ICOM_METHOD (HRESULT,BeginScene) \ + ICOM_METHOD (HRESULT,EndScene) \ + ICOM_METHOD1(HRESULT,GetDirect3D, LPDIRECT3D*,lplpDirect3D) +#define IDirect3DDevice_IMETHODS \ + IUnknown_IMETHODS \ + IDirect3DDevice_METHODS +ICOM_DEFINE(IDirect3DDevice,IUnknown) +#undef ICOM_INTERFACE + +#ifdef ICOM_CINTERFACE + /*** IUnknown methods ***/ +#define IDirect3DDevice_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b) +#define IDirect3DDevice_AddRef(p) ICOM_CALL (AddRef,p) +#define IDirect3DDevice_Release(p) ICOM_CALL (Release,p) + /*** IDirect3DDevice methods ***/ +#define IDirect3DDevice_Initialize(p,a,b,c) ICOM_CALL3(Initialize,p,a,b,c) +#define IDirect3DDevice_GetCaps(p,a,b) ICOM_CALL2(GetCaps,p,a,b) +#define IDirect3DDevice_SwapTextureHandles(p,a,b) ICOM_CALL2(SwapTextureHandles,p,a,b) +#define IDirect3DDevice_CreateExecuteBuffer(p,a,b,c) ICOM_CALL3(CreateExecuteBuffer,p,a,b,c) +#define IDirect3DDevice_GetStats(p,a) ICOM_CALL1(GetStats,p,a) +#define IDirect3DDevice_Execute(p,a,b,c) ICOM_CALL3(Execute,p,a,b,c) +#define IDirect3DDevice_AddViewport(p,a) ICOM_CALL1(AddViewport,p,a) +#define IDirect3DDevice_DeleteViewport(p,a) ICOM_CALL1(DeleteViewport,p,a) +#define IDirect3DDevice_NextViewport(p,a,b,c) ICOM_CALL3(NextViewport,p,a,b,c) +#define IDirect3DDevice_Pick(p,a,b,c,d) ICOM_CALL4(Pick,p,a,b,c,d) +#define IDirect3DDevice_GetPickRecords(p,a,b) ICOM_CALL2(GetPickRecords,p,a,b) +#define IDirect3DDevice_EnumTextureFormats(p,a,b) ICOM_CALL2(EnumTextureFormats,p,a,b) +#define IDirect3DDevice_CreateMatrix(p,a) ICOM_CALL1(CreateMatrix,p,a) +#define IDirect3DDevice_SetMatrix(p,a,b) ICOM_CALL2(SetMatrix,p,a,b) +#define IDirect3DDevice_GetMatrix(p,a,b) ICOM_CALL2(GetMatrix,p,a,b) +#define IDirect3DDevice_DeleteMatrix(p,a) ICOM_CALL1(DeleteMatrix,p,a) +#define IDirect3DDevice_BeginScene(p) ICOM_CALL (BeginScene,p) +#define IDirect3DDevice_EndScene(p) ICOM_CALL (EndScene,p) +#define IDirect3DDevice_GetDirect3D(p,a) ICOM_CALL1(GetDirect3D,p,a) +#endif + + +/***************************************************************************** + * IDirect3DDevice2 interface + */ +#define ICOM_INTERFACE IDirect3DDevice2 +#define IDirect3DDevice2_METHODS \ + ICOM_METHOD2(HRESULT,GetCaps, LPD3DDEVICEDESC,lpD3DHWDevDesc, LPD3DDEVICEDESC,lpD3DHELDevDesc) \ + ICOM_METHOD2(HRESULT,SwapTextureHandles, LPDIRECT3DTEXTURE2,lpD3DTex1, LPDIRECT3DTEXTURE2,lpD3DTex2) \ + ICOM_METHOD1(HRESULT,GetStats, LPD3DSTATS,lpD3DStats) \ + ICOM_METHOD1(HRESULT,AddViewport, LPDIRECT3DVIEWPORT2,lpDirect3DViewport2) \ + ICOM_METHOD1(HRESULT,DeleteViewport, LPDIRECT3DVIEWPORT2,lpDirect3DViewport2) \ + ICOM_METHOD3(HRESULT,NextViewport, LPDIRECT3DVIEWPORT2,lpDirect3DViewport2, LPDIRECT3DVIEWPORT2*,lplpDirect3DViewport2, DWORD,dwFlags) \ + ICOM_METHOD2(HRESULT,EnumTextureFormats, LPD3DENUMTEXTUREFORMATSCALLBACK,lpD3DEnumTextureProc, LPVOID,lpArg) \ + ICOM_METHOD (HRESULT,BeginScene) \ + ICOM_METHOD (HRESULT,EndScene) \ + ICOM_METHOD1(HRESULT,GetDirect3D, LPDIRECT3D2*,lplpDirect3D2) \ + /*** DrawPrimitive API ***/ \ + ICOM_METHOD1(HRESULT,SetCurrentViewport, LPDIRECT3DVIEWPORT2,lpDirect3DViewport2) \ + ICOM_METHOD1(HRESULT,GetCurrentViewport, LPDIRECT3DVIEWPORT2*,lplpDirect3DViewport2) \ + ICOM_METHOD2(HRESULT,SetRenderTarget, LPDIRECTDRAWSURFACE,lpNewRenderTarget, DWORD,dwFlags) \ + ICOM_METHOD1(HRESULT,GetRenderTarget, LPDIRECTDRAWSURFACE*,lplpRenderTarget) \ + ICOM_METHOD3(HRESULT,Begin, D3DPRIMITIVETYPE,, D3DVERTEXTYPE,, DWORD,) \ + ICOM_METHOD5(HRESULT,BeginIndexed, D3DPRIMITIVETYPE,d3dptPrimitiveType, D3DVERTEXTYPE,d3dvtVertexType, LPVOID,lpvVertices, DWORD,dwNumVertices, DWORD,dwFlags) \ + ICOM_METHOD1(HRESULT,Vertex, LPVOID,lpVertexType) \ + ICOM_METHOD1(HRESULT,Index, WORD,wVertexIndex) \ + ICOM_METHOD1(HRESULT,End, DWORD,dwFlags) \ + ICOM_METHOD2(HRESULT,GetRenderState, D3DRENDERSTATETYPE,dwRenderStateType, LPDWORD,lpdwRenderState) \ + ICOM_METHOD2(HRESULT,SetRenderState, D3DRENDERSTATETYPE,dwRenderStateType, DWORD,dwRenderState) \ + ICOM_METHOD2(HRESULT,GetLightState, D3DLIGHTSTATETYPE,dwLightStateType, LPDWORD,lpdwLightState) \ + ICOM_METHOD2(HRESULT,SetLightState, D3DLIGHTSTATETYPE,dwLightStateType, DWORD,dwLightState) \ + ICOM_METHOD2(HRESULT,SetTransform, D3DTRANSFORMSTATETYPE,dtstTransformStateType, LPD3DMATRIX,lpD3DMatrix) \ + ICOM_METHOD2(HRESULT,GetTransform, D3DTRANSFORMSTATETYPE,dtstTransformStateType, LPD3DMATRIX,lpD3DMatrix) \ + ICOM_METHOD2(HRESULT,MultiplyTransform, D3DTRANSFORMSTATETYPE,dtstTransformStateType, LPD3DMATRIX,lpD3DMatrix) \ + ICOM_METHOD5(HRESULT,DrawPrimitive, D3DPRIMITIVETYPE,d3dptPrimitiveType, D3DVERTEXTYPE,d3dvtVertexType, LPVOID,lpvVertices, DWORD,dwVertexCount, DWORD,dwFlags) \ + ICOM_METHOD7(HRESULT,DrawIndexedPrimitive, D3DPRIMITIVETYPE,d3dptPrimitiveType, D3DVERTEXTYPE,d3dvtVertexType, LPVOID,lpvVertices, DWORD,dwVertexCount, LPWORD,dwIndices, DWORD,dwIndexCount, DWORD,dwFlags) \ + ICOM_METHOD1(HRESULT,SetClipStatus, LPD3DCLIPSTATUS,lpD3DClipStatus) \ + ICOM_METHOD1(HRESULT,GetClipStatus, LPD3DCLIPSTATUS,lpD3DClipStatus) +#define IDirect3DDevice2_IMETHODS \ + IUnknown_IMETHODS \ + IDirect3DDevice2_METHODS +ICOM_DEFINE(IDirect3DDevice2,IUnknown) +#undef ICOM_INTERFACE + +#ifdef ICOM_CINTERFACE + /*** IUnknown methods ***/ +#define IDirect3DDevice2_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b) +#define IDirect3DDevice2_AddRef(p) ICOM_CALL (AddRef,p) +#define IDirect3DDevice2_Release(p) ICOM_CALL (Release,p) + /*** IDirect3DDevice2 methods ***/ +#define IDirect3DDevice2_GetCaps(p,a,b) ICOM_CALL2(GetCaps,p,a,b) +#define IDirect3DDevice2_SwapTextureHandles(p,a,b) ICOM_CALL2(SwapTextureHandles,p,a,b) +#define IDirect3DDevice2_GetStats(p,a) ICOM_CALL1(GetStats,p,a) +#define IDirect3DDevice2_AddViewport(p,a) ICOM_CALL1(AddViewport,p,a) +#define IDirect3DDevice2_DeleteViewport(p,a) ICOM_CALL1(DeleteViewport,p,a) +#define IDirect3DDevice2_NextViewport(p,a,b,c) ICOM_CALL3(NextViewport,p,a,b,c) +#define IDirect3DDevice2_EnumTextureFormats(p,a,b) ICOM_CALL2(EnumTextureFormats,p,a,b) +#define IDirect3DDevice2_BeginScene(p) ICOM_CALL (BeginScene,p) +#define IDirect3DDevice2_EndScene(p) ICOM_CALL (EndScene,p) +#define IDirect3DDevice2_GetDirect3D(p,a) ICOM_CALL1(GetDirect3D,p,a) +#define IDirect3DDevice2_SetCurrentViewport(p,a) ICOM_CALL1(SetCurrentViewport,p,a) +#define IDirect3DDevice2_GetCurrentViewport(p,a) ICOM_CALL1(GetCurrentViewport,p,a) +#define IDirect3DDevice2_SetRenderTarget(p,a,b) ICOM_CALL2(SetRenderTarget,p,a,b) +#define IDirect3DDevice2_GetRenderTarget(p,a) ICOM_CALL1(GetRenderTarget,p,a) +#define IDirect3DDevice2_Begin(p,a,b,c) ICOM_CALL3(Begin,p,a,b,c) +#define IDirect3DDevice2_BeginIndexed(p,a,b,c,d,e) ICOM_CALL5(BeginIndexed,p,a,b,c,d,e) +#define IDirect3DDevice2_Vertex(p,a) ICOM_CALL1(Vertex,p,a) +#define IDirect3DDevice2_Index(p,a) ICOM_CALL1(Index,p,a) +#define IDirect3DDevice2_End(p,a) ICOM_CALL1(End,p,a) +#define IDirect3DDevice2_GetRenderState(p,a,b) ICOM_CALL2(GetRenderState,p,a,b) +#define IDirect3DDevice2_SetRenderState(p,a,b) ICOM_CALL2(SetRenderState,p,a,b) +#define IDirect3DDevice2_GetLightState(p,a,b) ICOM_CALL2(GetLightState,p,a,b) +#define IDirect3DDevice2_SetLightState(p,a,b) ICOM_CALL2(SetLightState,p,a,b) +#define IDirect3DDevice2_SetTransform(p,a,b) ICOM_CALL2(SetTransform,p,a,b) +#define IDirect3DDevice2_GetTransform(p,a,b) ICOM_CALL2(GetTransform,p,a,b) +#define IDirect3DDevice2_MultiplyTransform(p,a,b) ICOM_CALL2(MultiplyTransform,p,a,b) +#define IDirect3DDevice2_DrawPrimitive(p,a,b,c,d,e) ICOM_CALL5(DrawPrimitive,p,a,b,c,d,e) +#define IDirect3DDevice2_DrawIndexedPrimitive(p,a,b,c,d,e,f,g) ICOM_CALL7(DrawIndexedPrimitive,p,a,b,c,d,e,f,g) +#define IDirect3DDevice2_SetClipStatus(p,a) ICOM_CALL1(SetClipStatus,p,a) +#define IDirect3DDevice2_GetClipStatus(p,a) ICOM_CALL1(GetClipStatus,p,a) +#endif + + +#endif /* __WINE_D3D_H */ diff --git a/include/ddraw.h b/include/ddraw.h index 5b22d7a6530..fbf558263ed 100644 --- a/include/ddraw.h +++ b/include/ddraw.h @@ -14,6 +14,9 @@ #define DIRECTDRAW_VERSION 0x0500 #endif /* DIRECTDRAW_VERSION */ +/***************************************************************************** + * Predeclare the interfaces + */ DEFINE_GUID( CLSID_DirectDraw, 0xD7B70EE0,0x4340,0x11CF,0xB0,0x63,0x00,0x20,0xAF,0xC2,0xCD,0x35 ); DEFINE_GUID( CLSID_DirectDrawClipper, 0x593817A0,0x7DB3,0x11CF,0xA2,0xDE,0x00,0xAA,0x00,0xb9,0x33,0x56 ); DEFINE_GUID( IID_IDirectDraw, 0x6C14DB80,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60 ); @@ -38,6 +41,7 @@ typedef struct IDirectDrawSurface3 IDirectDrawSurface3,*LPDIRECTDRAWSURFACE3; typedef struct IDirectDrawSurface4 IDirectDrawSurface4,*LPDIRECTDRAWSURFACE4; typedef struct IDirectDrawColorControl IDirectDrawColorControl,*LPDIRECTDRAWCOLORCONTROL; + #define DDENUMRET_CANCEL 0 #define DDENUMRET_OK 1 @@ -826,135 +830,126 @@ typedef struct tagDDDEVICEIDENTIFIER { GUID guidDeviceIdentifier; } DDDEVICEIDENTIFIER, * LPDDDEVICEIDENTIFIER; -#define STDMETHOD(xfn) HRESULT (CALLBACK *fn##xfn) -#define STDMETHOD_(ret,xfn) ret (CALLBACK *fn##xfn) -#define PURE -#define FAR -#define THIS_ THIS , -#define THIS LPDIRECTDRAWPALETTE this +/***************************************************************************** + * IDirectDrawPalette interface + */ +#define ICOM_INTERFACE IDirectDrawPalette +#define IDirectDrawPalette_METHODS \ + ICOM_METHOD1(HRESULT,GetCaps, LPDWORD,lpdwCaps) \ + ICOM_METHOD4(HRESULT,GetEntries, DWORD,dwFlags, DWORD,dwBase, DWORD,dwNumEntries, LPPALETTEENTRY,lpEntries) \ + ICOM_METHOD3(HRESULT,Initialize, LPDIRECTDRAW,lpDD, DWORD,dwFlags, LPPALETTEENTRY,lpDDColorTable) \ + ICOM_METHOD4(HRESULT,SetEntries, DWORD,dwFlags, DWORD,dwStartingEntry, DWORD,dwCount, LPPALETTEENTRY,lpEntries) +#define IDirectDrawPalette_IMETHODS \ + IUnknown_IMETHODS \ + IDirectDrawPalette_METHODS +ICOM_DEFINE(IDirectDrawPalette,IUnknown) +#undef ICOM_INTERFACE -typedef struct IDirectDrawPalette_VTable { +#ifdef ICOM_CINTERFACE /*** IUnknown methods ***/ - STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; +#define IDirectDrawPalette_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b) +#define IDirectDrawPalette_AddRef(p) ICOM_CALL (AddRef,p) +#define IDirectDrawPalette_Release(p) ICOM_CALL (Release,p) /*** IDirectDrawPalette methods ***/ - STDMETHOD(GetCaps)(THIS_ LPDWORD) PURE; - STDMETHOD(GetEntries)(THIS_ DWORD,DWORD,DWORD,LPPALETTEENTRY) PURE; - STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, DWORD, LPPALETTEENTRY) PURE; - STDMETHOD(SetEntries)(THIS_ DWORD,DWORD,DWORD,LPPALETTEENTRY) PURE; -} *LPDIRECTDRAWPALETTE_VTABLE,IDirectDrawPalette_VTable; +#define IDirectDrawPalette_GetCaps(p,a) ICOM_CALL1(GetCaps,p,a) +#define IDirectDrawPalette_GetEntries(p,a,b,c,d) ICOM_CALL4(GetEntries,p,a,b,c,d) +#define IDirectDrawPalette_Initialize(p,a,b,c) ICOM_CALL3(Initialize,p,a,b,c) +#define IDirectDrawPalette_SetEntries(p,a,b,c,d) ICOM_CALL4(SetEntries,p,a,b,c,d) +#endif -struct IDirectDrawPalette { - LPDIRECTDRAWPALETTE_VTABLE lpvtbl; - DWORD ref; - LPDIRECTDRAW ddraw; - Colormap cm; - PALETTEENTRY palents[256]; - int installed; - /* This is to store the palette in 'screen format' */ - int screen_palents[256]; -}; -#undef THIS +/***************************************************************************** + * IDirectDrawClipper interface + */ +#define ICOM_INTERFACE IDirectDrawClipper +#define IDirectDrawClipper_METHODS \ + ICOM_METHOD3(HRESULT,GetClipList, LPRECT,lpRect, LPRGNDATA,lpClipList, LPDWORD,lpdwSize) \ + ICOM_METHOD1(HRESULT,GetHWnd, HWND*,lphWnd) \ + ICOM_METHOD2(HRESULT,Initialize, LPDIRECTDRAW,lpDD, DWORD,dwFlags) \ + ICOM_METHOD1(HRESULT,IsClipListChanged, BOOL*,lpbChanged) \ + ICOM_METHOD2(HRESULT,SetClipList, LPRGNDATA,lpClipList, DWORD,dwFlags) \ + ICOM_METHOD2(HRESULT,SetHWnd, DWORD,dwFlags, HWND,hWnd) +#define IDirectDrawClipper_IMETHODS \ + IUnknown_IMETHODS \ + IDirectDrawClipper_METHODS +ICOM_DEFINE(IDirectDrawClipper,IUnknown) +#undef ICOM_INTERFACE -#define THIS LPDIRECTDRAWCLIPPER this -typedef struct IDirectDrawClipper_VTable { +#ifdef ICOM_CINTERFACE /*** IUnknown methods ***/ - STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; +#define IDirectDrawClipper_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b) +#define IDirectDrawClipper_AddRef(p) ICOM_CALL (AddRef,p) +#define IDirectDrawClipper_Release(p) ICOM_CALL (Release,p) /*** IDirectDrawClipper methods ***/ - STDMETHOD(GetClipList)(THIS_ LPRECT, LPRGNDATA, LPDWORD) PURE; - STDMETHOD(GetHWnd)(THIS_ HWND FAR *) PURE; - STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, DWORD) PURE; - STDMETHOD(IsClipListChanged)(THIS_ BOOL FAR *) PURE; - STDMETHOD(SetClipList)(THIS_ LPRGNDATA,DWORD) PURE; - STDMETHOD(SetHWnd)(THIS_ DWORD, HWND ) PURE; -} *LPDIRECTDRAWCLIPPER_VTABLE,IDirectDrawClipper_VTable; +#define IDirectDrawClipper_GetClipList(p,a,b,c) ICOM_CALL3(GetClipList,p,a,b,c) +#define IDirectDrawClipper_GetHWnd(p,a) ICOM_CALL1(GetHWnd,p,a) +#define IDirectDrawClipper_Initialize(p,a,b) ICOM_CALL2(Initialize,p,a,b) +#define IDirectDrawClipper_IsClipListChanged(p,a) ICOM_CALL1(IsClipListChanged,p,a) +#define IDirectDrawClipper_SetClipList(p,a,b) ICOM_CALL2(SetClipList,p,a,b) +#define IDirectDrawClipper_SetHWnd(p,a,b) ICOM_CALL2(SetHWnd,p,a,b) +#endif -struct IDirectDrawClipper { - LPDIRECTDRAWCLIPPER_VTABLE lpvtbl; - DWORD ref; -}; -#undef THIS -#define THIS LPDIRECTDRAW this -typedef struct IDirectDraw_VTable { +/***************************************************************************** + * IDirectDraw interface + */ +#define ICOM_INTERFACE IDirectDraw +#define IDirectDraw_METHODS \ + ICOM_METHOD (HRESULT,Compact) \ + ICOM_METHOD3(HRESULT,CreateClipper, DWORD,dwFlags, LPDIRECTDRAWCLIPPER*,lplpDDClipper, IUnknown*,pUnkOuter) \ + ICOM_METHOD4(HRESULT,CreatePalette, DWORD,dwFlags, LPPALETTEENTRY,lpColorTable, LPDIRECTDRAWPALETTE*,lplpDDPalette, IUnknown*,pUnkOuter) \ + ICOM_METHOD3(HRESULT,CreateSurface, LPDDSURFACEDESC,lpDDSurfaceDesc, LPDIRECTDRAWSURFACE*,lplpDDSurface, IUnknown*,pUnkOuter) \ + ICOM_METHOD2(HRESULT,DuplicateSurface, LPDIRECTDRAWSURFACE,lpDDSurface, LPDIRECTDRAWSURFACE*,lplpDupDDSurface) \ + ICOM_METHOD4(HRESULT,EnumDisplayModes, DWORD,dwFlags, LPDDSURFACEDESC,lpDDSurfaceDesc, LPVOID,lpContext, LPDDENUMMODESCALLBACK,lpEnumModesCallback) \ + ICOM_METHOD4(HRESULT,EnumSurfaces, DWORD,dwFlags, LPDDSURFACEDESC,lpDDSD, LPVOID,lpContext, LPDDENUMSURFACESCALLBACK,lpEnumSurfacesCallback) \ + ICOM_METHOD (HRESULT,FlipToGDISurface) \ + ICOM_METHOD2(HRESULT,GetCaps, LPDDCAPS,lpDDDriverCaps, LPDDCAPS,lpDDHELCaps) \ + ICOM_METHOD1(HRESULT,GetDisplayMode, LPDDSURFACEDESC,lpDDSurfaceDesc) \ + ICOM_METHOD2(HRESULT,GetFourCCCodes, LPDWORD,lpNumCodes, LPDWORD,lpCodes) \ + ICOM_METHOD1(HRESULT,GetGDISurface, LPDIRECTDRAWSURFACE*,lplpGDIDDSurface) \ + ICOM_METHOD1(HRESULT,GetMonitorFrequency, LPDWORD,lpdwFrequency) \ + ICOM_METHOD1(HRESULT,GetScanLine, LPDWORD,lpdwScanLine) \ + ICOM_METHOD1(HRESULT,GetVerticalBlankStatus, BOOL*,lpbIsInVB) \ + ICOM_METHOD1(HRESULT,Initialize, GUID*,lpGUID) \ + ICOM_METHOD (HRESULT,RestoreDisplayMode) \ + ICOM_METHOD2(HRESULT,SetCooperativeLevel, HWND,hWnd, DWORD,dwFlags) \ + ICOM_METHOD3(HRESULT,SetDisplayMode, DWORD,, DWORD,, DWORD,) \ + ICOM_METHOD2(HRESULT,WaitForVerticalBlank, DWORD,dwFlags, HANDLE,hEvent) +#define IDirectDraw_IMETHODS \ + IUnknown_IMETHODS \ + IDirectDraw_METHODS +ICOM_DEFINE(IDirectDraw,IUnknown) +#undef ICOM_INTERFACE + +#ifdef ICOM_CINTERFACE /*** IUnknown methods ***/ - STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; +#define IDirectDraw_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b) +#define IDirectDraw_AddRef(p) ICOM_CALL (AddRef,p) +#define IDirectDraw_Release(p) ICOM_CALL (Release,p) /*** IDirectDraw methods ***/ - STDMETHOD(Compact)(THIS) PURE; - STDMETHOD(CreateClipper)(THIS_ DWORD, LPDIRECTDRAWCLIPPER FAR*, IUnknown FAR * ) PURE; - STDMETHOD(CreatePalette)(THIS_ DWORD, LPPALETTEENTRY, LPDIRECTDRAWPALETTE FAR*, IUnknown FAR * ) PURE; - STDMETHOD(CreateSurface)(THIS_ LPDDSURFACEDESC, LPDIRECTDRAWSURFACE FAR *, -IUnknown FAR *) PURE; - STDMETHOD(DuplicateSurface)( THIS_ LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE -FAR * ) PURE; - STDMETHOD(EnumDisplayModes)( THIS_ DWORD, LPDDSURFACEDESC, LPVOID, LPDDENUMMODESCALLBACK ) PURE; - STDMETHOD(EnumSurfaces)(THIS_ DWORD, LPDDSURFACEDESC, LPVOID,LPDDENUMSURFACESCALLBACK ) PURE; - STDMETHOD(FlipToGDISurface)(THIS) PURE; - STDMETHOD(GetCaps)( THIS_ LPDDCAPS, LPDDCAPS) PURE; - STDMETHOD(GetDisplayMode)( THIS_ LPDDSURFACEDESC) PURE; - STDMETHOD(GetFourCCCodes)(THIS_ LPDWORD, LPDWORD ) PURE; - STDMETHOD(GetGDISurface)(THIS_ LPDIRECTDRAWSURFACE FAR *) PURE; - STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD) PURE; - STDMETHOD(GetScanLine)(THIS_ LPDWORD) PURE; - STDMETHOD(GetVerticalBlankStatus)(THIS_ BOOL* ) PURE; - STDMETHOD(Initialize)(THIS_ GUID FAR *) PURE; - STDMETHOD(RestoreDisplayMode)(THIS) PURE; - STDMETHOD(SetCooperativeLevel)(THIS_ HWND, DWORD) PURE; - STDMETHOD(SetDisplayMode)(THIS_ DWORD , DWORD ,DWORD ) PURE; - STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD, HANDLE ) PURE; -} *LPDIRECTDRAW_VTABLE,IDirectDraw_VTable; +#define IDirectDraw_Compact(p) ICOM_CALL (Compact,p) +#define IDirectDraw_CreateClipper(p,a,b,c) ICOM_CALL3(CreateClipper,p,a,b,c) +#define IDirectDraw_CreatePalette(p,a,b,c,d) ICOM_CALL4(CreatePalette,p,a,b,c,d) +#define IDirectDraw_CreateSurface(p,a,b,c) ICOM_CALL3(CreateSurface,p,a,b,c) +#define IDirectDraw_DuplicateSurface(p,a,b) ICOM_CALL2(DuplicateSurface,p,a,b) +#define IDirectDraw_EnumDisplayModes(p,a,b,c,d) ICOM_CALL4(EnumDisplayModes,p,a,b,c,d) +#define IDirectDraw_EnumSurfaces(p,a,b,c,d) ICOM_CALL4(EnumSurfaces,p,a,b,c,d) +#define IDirectDraw_FlipToGDISurface(p) ICOM_CALL (FlipToGDISurface,p) +#define IDirectDraw_GetCaps(p,a,b) ICOM_CALL2(GetCaps,p,a,b) +#define IDirectDraw_GetDisplayMode(p,a) ICOM_CALL1(GetDisplayMode,p,a) +#define IDirectDraw_GetFourCCCodes(p,a,b) ICOM_CALL2(GetFourCCCodes,p,a,b) +#define IDirectDraw_GetGDISurface(p,a) ICOM_CALL1(GetGDISurface,p,a) +#define IDirectDraw_GetMonitorFrequency(p,a) ICOM_CALL1(GetMonitorFrequency,p,a) +#define IDirectDraw_GetScanLine(p,a) ICOM_CALL1(GetScanLine,p,a) +#define IDirectDraw_GetVerticalBlankStatus(p,a) ICOM_CALL1(GetVerticalBlankStatus,p,a) +#define IDirectDraw_Initialize(p,a) ICOM_CALL1(Initialize,p,a) +#define IDirectDraw_RestoreDisplayMode(p) ICOM_CALL (RestoreDisplayMode,p) +#define IDirectDraw_SetCooperativeLevel(p,a,b) ICOM_CALL2(SetCooperativeLevel,p,a,b) +#define IDirectDraw_SetDisplayMode(p,a,b,c) ICOM_CALL3(SetDisplayMode,p,a,b,c) +#define IDirectDraw_WaitForVerticalBlank(p,a,b) ICOM_CALL2(WaitForVerticalBlank,p,a,b) +#endif -struct _common_directdrawdata { - DDPIXELFORMAT directdraw_pixelformat; - DDPIXELFORMAT screen_pixelformat; - int pixmap_depth; - void (*pixel_convert)(void *src, void *dst, DWORD width, DWORD height, LONG pitch, LPDIRECTDRAWPALETTE palette); - void (*palette_convert)(LPPALETTEENTRY palent, void *screen_palette, DWORD start, DWORD count); - DWORD height,width; /* SetDisplayMode */ - HWND mainWindow; /* SetCooperativeLevel */ - - /* This is for Wine's fake mainWindow. - We need it also in DGA mode to make some games (for example Monkey Island III work) */ - ATOM winclass; - HWND window; - Window drawable; - PAINTSTRUCT ps; - int paintable; -}; - -struct _dga_directdrawdata { - DWORD fb_width,fb_height,fb_banksize,fb_memsize; - void *fb_addr; - unsigned int vpmask; -}; - -struct _xlib_directdrawdata { -#ifdef HAVE_LIBXXSHM - int xshm_active; -#endif /* defined(HAVE_LIBXXSHM) */ - - /* are these needed for anything? (draw_surf is the active surface) - IDirectDrawSurface *surfs; - DWORD num_surfs, alloc_surfs, draw_surf; */ -}; - -struct IDirectDraw { - LPDIRECTDRAW_VTABLE lpvtbl; - DWORD ref; - struct _common_directdrawdata d; - union { - struct _xlib_directdrawdata xlib; - struct _dga_directdrawdata dga; - } e; -}; -#undef THIS /* flags for Lock() */ #define DDLOCK_SURFACEMEMORYPTR 0x00000000 @@ -965,390 +960,553 @@ struct IDirectDraw { #define DDLOCK_NOSYSLOCK 0x00000800 -#define THIS LPDIRECTDRAW2 this -typedef struct IDirectDraw2_VTable -{ +/***************************************************************************** + * IDirectDraw2 interface + */ +/* Note: IDirectDraw2 cannot derive from IDirectDraw because the number of + * arguments of SetDisplayMode has changed ! + */ +#define ICOM_INTERFACE IDirectDraw2 +#define IDirectDraw2_METHODS \ + ICOM_METHOD (HRESULT,Compact) \ + ICOM_METHOD3(HRESULT,CreateClipper, DWORD,dwFlags, LPDIRECTDRAWCLIPPER*,lplpDDClipper, IUnknown*,pUnkOuter) \ + ICOM_METHOD4(HRESULT,CreatePalette, DWORD,dwFlags, LPPALETTEENTRY,lpColorTable, LPDIRECTDRAWPALETTE*,lplpDDPalette, IUnknown*,pUnkOuter) \ + ICOM_METHOD3(HRESULT,CreateSurface, LPDDSURFACEDESC,lpDDSurfaceDesc, LPDIRECTDRAWSURFACE*,lplpDDSurface, IUnknown*,pUnkOuter) \ + ICOM_METHOD2(HRESULT,DuplicateSurface, LPDIRECTDRAWSURFACE,lpDDSurface, LPDIRECTDRAWSURFACE*,lplpDupDDSurface) \ + ICOM_METHOD4(HRESULT,EnumDisplayModes, DWORD,dwFlags, LPDDSURFACEDESC,lpDDSurfaceDesc, LPVOID,lpContext, LPDDENUMMODESCALLBACK,lpEnumModesCallback) \ + ICOM_METHOD4(HRESULT,EnumSurfaces, DWORD,dwFlags, LPDDSURFACEDESC,lpDDSD, LPVOID,lpContext, LPDDENUMSURFACESCALLBACK,lpEnumSurfacesCallback) \ + ICOM_METHOD (HRESULT,FlipToGDISurface) \ + ICOM_METHOD2(HRESULT,GetCaps, LPDDCAPS,lpDDDriverCaps, LPDDCAPS,lpDDHELCaps) \ + ICOM_METHOD1(HRESULT,GetDisplayMode, LPDDSURFACEDESC,lpDDSurfaceDesc) \ + ICOM_METHOD2(HRESULT,GetFourCCCodes, LPDWORD,lpNumCodes, LPDWORD,lpCodes) \ + ICOM_METHOD1(HRESULT,GetGDISurface, LPDIRECTDRAWSURFACE*,lplpGDIDDSurface) \ + ICOM_METHOD1(HRESULT,GetMonitorFrequency, LPDWORD,lpdwFrequency) \ + ICOM_METHOD1(HRESULT,GetScanLine, LPDWORD,lpdwScanLine) \ + ICOM_METHOD1(HRESULT,GetVerticalBlankStatus, BOOL*,lpbIsInVB) \ + ICOM_METHOD1(HRESULT,Initialize, GUID*,lpGUID) \ + ICOM_METHOD (HRESULT,RestoreDisplayMode) \ + ICOM_METHOD2(HRESULT,SetCooperativeLevel, HWND,hWnd, DWORD,dwFlags) \ + ICOM_METHOD5(HRESULT,SetDisplayMode, DWORD,dwWidth, DWORD,dwHeight, DWORD,dwBPP, DWORD,dwRefreshRate, DWORD,dwFlags) \ + ICOM_METHOD2(HRESULT,WaitForVerticalBlank, DWORD,dwFlags, HANDLE,hEvent) \ + /* added in v2 */ \ + ICOM_METHOD3(HRESULT,GetAvailableVidMem, LPDDSCAPS,lpDDCaps, LPDWORD,lpdwTotal, LPDWORD,lpdwFree) +#define IDirectDraw2_IMETHODS \ + IUnknown_IMETHODS \ + IDirectDraw2_METHODS +ICOM_DEFINE(IDirectDraw2,IUnknown) +#undef ICOM_INTERFACE + +#ifdef ICOM_CINTERFACE /*** IUnknown methods ***/ -/*00*/ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE; -/*04*/ STDMETHOD_(ULONG,AddRef) (THIS) PURE; -/*08*/ STDMETHOD_(ULONG,Release) (THIS) PURE; +#define IDirectDraw2_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b) +#define IDirectDraw2_AddRef(p) ICOM_CALL (AddRef,p) +#define IDirectDraw2_Release(p) ICOM_CALL (Release,p) /*** IDirectDraw methods ***/ -/*0C*/ STDMETHOD(Compact)(THIS) PURE; -/*10*/ STDMETHOD(CreateClipper)(THIS_ DWORD, LPDIRECTDRAWCLIPPER FAR*, IUnknown FAR * ) PURE; -/*14*/ STDMETHOD(CreatePalette)(THIS_ DWORD,LPPALETTEENTRY, - LPDIRECTDRAWPALETTE FAR*, IUnknown FAR *) PURE; -/*18*/ STDMETHOD(CreateSurface)(THIS_ LPDDSURFACEDESC,LPDIRECTDRAWSURFACE - FAR *, IUnknown FAR *) PURE; -/*1C*/ STDMETHOD(DuplicateSurface)(THIS_ LPDIRECTDRAWSURFACE, - LPDIRECTDRAWSURFACE FAR * ) PURE; -/*20*/ STDMETHOD(EnumDisplayModes)(THIS_ DWORD, LPDDSURFACEDESC, LPVOID, - LPDDENUMMODESCALLBACK ) PURE; -/*24*/ STDMETHOD(EnumSurfaces)(THIS_ DWORD, LPDDSURFACEDESC, LPVOID, - LPDDENUMSURFACESCALLBACK ) PURE; -/*28*/ STDMETHOD(FlipToGDISurface)(THIS) PURE; -/*2C*/ STDMETHOD(GetCaps)( THIS_ LPDDCAPS, LPDDCAPS) PURE; -/*30*/ STDMETHOD(GetDisplayMode)( THIS_ LPDDSURFACEDESC) PURE; -/*34*/ STDMETHOD(GetFourCCCodes)(THIS_ LPDWORD, LPDWORD ) PURE; -/*38*/ STDMETHOD(GetGDISurface)(THIS_ LPDIRECTDRAWSURFACE FAR *) PURE; -/*3C*/ STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD) PURE; -/*40*/ STDMETHOD(GetScanLine)(THIS_ LPDWORD) PURE; -/*44*/ STDMETHOD(GetVerticalBlankStatus)(THIS_ BOOL* ) PURE; -/*48*/ STDMETHOD(Initialize)(THIS_ GUID FAR *) PURE; -/*4C*/ STDMETHOD(RestoreDisplayMode)(THIS) PURE; -/*50*/ STDMETHOD(SetCooperativeLevel)(THIS_ HWND, DWORD) PURE; -/*54*/ STDMETHOD(SetDisplayMode)(THIS_ DWORD, DWORD, DWORD, DWORD, DWORD) PURE; -/*58*/ STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD, HANDLE ) PURE; - /*** Added in the v2 interface ***/ -/*5C*/ STDMETHOD(GetAvailableVidMem)(THIS_ LPDDSCAPS, LPDWORD, LPDWORD) PURE; -} IDirectDraw2_VTable,*LPDIRECTDRAW2_VTABLE; -/* MUST HAVE THE SAME LAYOUT AS struct IDirectDraw */ - -struct IDirectDraw2 { - LPDIRECTDRAW2_VTABLE lpvtbl; - DWORD ref; - struct _common_directdrawdata d; - union { - struct _xlib_directdrawdata xlib; - struct _dga_directdrawdata dga; - } e; -}; -#undef THIS - -#define THIS LPDIRECTDRAW4 this -typedef struct IDirectDraw4_VTable -{ - /*** IUnknown methods ***/ -/*00*/ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE; -/*04*/ STDMETHOD_(ULONG,AddRef) (THIS) PURE; -/*08*/ STDMETHOD_(ULONG,Release) (THIS) PURE; - /*** IDirectDraw methods ***/ -/*0C*/ STDMETHOD(Compact)(THIS) PURE; -/*10*/ STDMETHOD(CreateClipper)(THIS_ DWORD, LPDIRECTDRAWCLIPPER FAR*, IUnknown FAR * ) PURE; -/*14*/ STDMETHOD(CreatePalette)(THIS_ DWORD,LPPALETTEENTRY, - LPDIRECTDRAWPALETTE FAR*, IUnknown FAR *) PURE; -/*18*/ STDMETHOD(CreateSurface)(THIS_ LPDDSURFACEDESC,LPDIRECTDRAWSURFACE - FAR *, IUnknown FAR *) PURE; -/*1C*/ STDMETHOD(DuplicateSurface)(THIS_ LPDIRECTDRAWSURFACE, - LPDIRECTDRAWSURFACE FAR * ) PURE; -/*20*/ STDMETHOD(EnumDisplayModes)(THIS_ DWORD, LPDDSURFACEDESC, LPVOID, - LPDDENUMMODESCALLBACK ) PURE; -/*24*/ STDMETHOD(EnumSurfaces)(THIS_ DWORD, LPDDSURFACEDESC, LPVOID, - LPDDENUMSURFACESCALLBACK ) PURE; -/*28*/ STDMETHOD(FlipToGDISurface)(THIS) PURE; -/*2C*/ STDMETHOD(GetCaps)( THIS_ LPDDCAPS, LPDDCAPS) PURE; -/*30*/ STDMETHOD(GetDisplayMode)( THIS_ LPDDSURFACEDESC) PURE; -/*34*/ STDMETHOD(GetFourCCCodes)(THIS_ LPDWORD, LPDWORD ) PURE; -/*38*/ STDMETHOD(GetGDISurface)(THIS_ LPDIRECTDRAWSURFACE FAR *) PURE; -/*3C*/ STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD) PURE; -/*40*/ STDMETHOD(GetScanLine)(THIS_ LPDWORD) PURE; -/*44*/ STDMETHOD(GetVerticalBlankStatus)(THIS_ BOOL* ) PURE; -/*48*/ STDMETHOD(Initialize)(THIS_ GUID FAR *) PURE; -/*4C*/ STDMETHOD(RestoreDisplayMode)(THIS) PURE; -/*50*/ STDMETHOD(SetCooperativeLevel)(THIS_ HWND, DWORD) PURE; -/*54*/ STDMETHOD(SetDisplayMode)(THIS_ DWORD, DWORD, DWORD, DWORD, DWORD) PURE; -/*58*/ STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD, HANDLE ) PURE; - /*** Added in the v2 interface ***/ -/*5C*/ STDMETHOD(GetAvailableVidMem)(THIS_ LPDDSCAPS, LPDWORD, LPDWORD) PURE; - /*** Added in the V4 Interface ***/ -/*60*/ STDMETHOD(GetSurfaceFromDC) (THIS_ HDC, LPDIRECTDRAWSURFACE *) PURE; -/*64*/ STDMETHOD(RestoreAllSurfaces)(THIS) PURE; -/*68*/ STDMETHOD(TestCooperativeLevel)(THIS) PURE; -/*6C*/ STDMETHOD(GetDeviceIdentifier)(THIS_ LPDDDEVICEIDENTIFIER, DWORD ) PURE; -} IDirectDraw4_VTable,*LPDIRECTDRAW4_VTABLE; -/* MUST HAVE THE SAME LAYOUT AS struct IDirectDraw */ - -struct IDirectDraw4 { - LPDIRECTDRAW4_VTABLE lpvtbl; - DWORD ref; - struct _common_directdrawdata d; - union { - struct _xlib_directdrawdata xlib; - struct _dga_directdrawdata dga; - } e; -}; -#undef THIS - -#define THIS LPDIRECTDRAWSURFACE this -struct _common_directdrawsurface { - LPDIRECTDRAWPALETTE palette; - LPDIRECTDRAW2 ddraw; - LPDIRECTDRAWSURFACE4 backbuffer; - - DDSURFACEDESC surface_desc; -}; - -struct _dga_directdrawsurface { - DWORD fb_height; -}; - -struct _xlib_directdrawsurface { - XImage *image; -#ifdef HAVE_LIBXXSHM - XShmSegmentInfo shminfo; +#define IDirectDraw2_Compact(p) ICOM_CALL (Compact,p) +#define IDirectDraw2_CreateClipper(p,a,b,c) ICOM_CALL3(CreateClipper,p,a,b,c) +#define IDirectDraw2_CreatePalette(p,a,b,c,d) ICOM_CALL4(CreatePalette,p,a,b,c,d) +#define IDirectDraw2_CreateSurface(p,a,b,c) ICOM_CALL3(CreateSurface,p,a,b,c) +#define IDirectDraw2_DuplicateSurface(p,a,b) ICOM_CALL2(DuplicateSurface,p,a,b) +#define IDirectDraw2_EnumDisplayModes(p,a,b,c,d) ICOM_CALL4(EnumDisplayModes,p,a,b,c,d) +#define IDirectDraw2_EnumSurfaces(p,a,b,c,d) ICOM_CALL4(EnumSurfaces,p,a,b,c,d) +#define IDirectDraw2_FlipToGDISurface(p) ICOM_CALL (FlipToGDISurface,p) +#define IDirectDraw2_GetCaps(p,a,b) ICOM_CALL2(GetCaps,p,a,b) +#define IDirectDraw2_GetDisplayMode(p,a) ICOM_CALL1(GetDisplayMode,p,a) +#define IDirectDraw2_GetFourCCCodes(p,a,b) ICOM_CALL2(GetFourCCCodes,p,a,b) +#define IDirectDraw2_GetGDISurface(p,a) ICOM_CALL1(GetGDISurface,p,a) +#define IDirectDraw2_GetMonitorFrequency(p,a) ICOM_CALL1(GetMonitorFrequency,p,a) +#define IDirectDraw2_GetScanLine(p,a) ICOM_CALL1(GetScanLine,p,a) +#define IDirectDraw2_GetVerticalBlankStatus(p,a) ICOM_CALL1(GetVerticalBlankStatus,p,a) +#define IDirectDraw2_Initialize(p,a) ICOM_CALL1(Initialize,p,a) +#define IDirectDraw2_RestoreDisplayMode(p) ICOM_CALL (RestoreDisplayMode,p) +#define IDirectDraw2_SetCooperativeLevel(p,a,b) ICOM_CALL2(SetCooperativeLevel,p,a,b) +#define IDirectDraw2_SetDisplayMode(p,a,b,c,d,e) ICOM_CALL5(SetDisplayMode,p,a,b,c,d,e) +#define IDirectDraw2_WaitForVerticalBlank(p,a,b) ICOM_CALL2(WaitForVerticalBlank,p,a,b) +/*** IDirectDraw2 methods ***/ +#define IDirectDraw2_GetAvailableVidMem(p,a,b,c) ICOM_CALL3(GetAvailableVidMem,p,a,b,c) #endif -}; -typedef struct IDirectDrawSurface_VTable { + +/***************************************************************************** + * IDirectDraw4 interface + */ +#define ICOM_INTERFACE IDirectDraw4 +#define IDirectDraw4_METHODS \ + ICOM_METHOD2(HRESULT,GetSurfaceFromDC, HDC,, LPDIRECTDRAWSURFACE*,) \ + ICOM_METHOD (HRESULT,RestoreAllSurfaces) \ + ICOM_METHOD (HRESULT,TestCooperativeLevel) \ + ICOM_METHOD2(HRESULT,GetDeviceIdentifier, LPDDDEVICEIDENTIFIER,, DWORD,) +#define IDirectDraw4_IMETHODS \ + IDirectDraw2_IMETHODS \ + IDirectDraw4_METHODS +ICOM_DEFINE(IDirectDraw4,IDirectDraw2) +#undef ICOM_INTERFACE + +#ifdef ICOM_CINTERFACE /*** IUnknown methods ***/ - STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - /*** IDirectDrawSurface methods ***/ - STDMETHOD(AddAttachedSurface)(THIS_ LPDIRECTDRAWSURFACE) PURE; - STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT) PURE; - STDMETHOD(Blt)(THIS_ LPRECT,LPDIRECTDRAWSURFACE, LPRECT,DWORD, LPDDBLTFX) PURE; - STDMETHOD(BltBatch)(THIS_ LPDDBLTBATCH, DWORD, DWORD ) PURE; - STDMETHOD(BltFast)(THIS_ DWORD,DWORD,LPDIRECTDRAWSURFACE, LPRECT,DWORD) PURE; - STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD,LPDIRECTDRAWSURFACE) PURE; - STDMETHOD(EnumAttachedSurfaces)(THIS_ LPVOID,LPDDENUMSURFACESCALLBACK) PURE; - STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD,LPVOID,LPDDENUMSURFACESCALLBACK) PURE; - STDMETHOD(Flip)(THIS_ LPDIRECTDRAWSURFACE, DWORD) PURE; - STDMETHOD(GetAttachedSurface)(THIS_ LPDDSCAPS, LPDIRECTDRAWSURFACE FAR *) PURE; - STDMETHOD(GetBltStatus)(THIS_ DWORD) PURE; - STDMETHOD(GetCaps)(THIS_ LPDDSCAPS) PURE; - STDMETHOD(GetClipper)(THIS_ LPDIRECTDRAWCLIPPER FAR*) PURE; - STDMETHOD(GetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE; - STDMETHOD(GetDC)(THIS_ HDC FAR *) PURE; - STDMETHOD(GetFlipStatus)(THIS_ DWORD) PURE; - STDMETHOD(GetOverlayPosition)(THIS_ LPLONG, LPLONG ) PURE; - STDMETHOD(GetPalette)(THIS_ LPDIRECTDRAWPALETTE FAR*) PURE; - STDMETHOD(GetPixelFormat)(THIS_ LPDDPIXELFORMAT) PURE; - STDMETHOD(GetSurfaceDesc)(THIS_ LPDDSURFACEDESC) PURE; - STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, LPDDSURFACEDESC) PURE; - STDMETHOD(IsLost)(THIS) PURE; - STDMETHOD(Lock)(THIS_ LPRECT,LPDDSURFACEDESC,DWORD flags,HANDLE) PURE; - STDMETHOD(ReleaseDC)(THIS_ HDC) PURE; - STDMETHOD(Restore)(THIS) PURE; - STDMETHOD(SetClipper)(THIS_ LPDIRECTDRAWCLIPPER) PURE; - STDMETHOD(SetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE; - STDMETHOD(SetOverlayPosition)(THIS_ LONG, LONG ) PURE; - STDMETHOD(SetPalette)(THIS_ LPDIRECTDRAWPALETTE) PURE; - STDMETHOD(Unlock)(THIS_ LPVOID) PURE; - STDMETHOD(UpdateOverlay)(THIS_ LPRECT, LPDIRECTDRAWSURFACE,LPRECT,DWORD, LPDDOVERLAYFX) PURE; - STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD) PURE; - STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD, LPDIRECTDRAWSURFACE) PURE; -} *LPDIRECTDRAWSURFACE_VTABLE,IDirectDrawSurface_VTable; +#define IDirectDraw4_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b) +#define IDirectDraw4_AddRef(p) ICOM_CALL (AddRef,p) +#define IDirectDraw4_Release(p) ICOM_CALL (Release,p) + /*** IDirectDraw methods ***/ +#define IDirectDraw4_Compact(p) ICOM_CALL (Compact,p) +#define IDirectDraw4_CreateClipper(p,a,b,c) ICOM_CALL3(CreateClipper,p,a,b,c) +#define IDirectDraw4_CreatePalette(p,a,b,c,d) ICOM_CALL4(CreatePalette,p,a,b,c,d) +#define IDirectDraw4_CreateSurface(p,a,b,c) ICOM_CALL3(CreateSurface,p,a,b,c) +#define IDirectDraw4_DuplicateSurface(p,a,b) ICOM_CALL2(DuplicateSurface,p,a,b) +#define IDirectDraw4_EnumDisplayModes(p,a,b,c,d) ICOM_CALL4(EnumDisplayModes,p,a,b,c,d) +#define IDirectDraw4_EnumSurfaces(p,a,b,c,d) ICOM_CALL4(EnumSurfaces,p,a,b,c,d) +#define IDirectDraw4_FlipToGDISurface(p) ICOM_CALL (FlipToGDISurface,p) +#define IDirectDraw4_GetCaps(p,a,b) ICOM_CALL2(GetCaps,p,a,b) +#define IDirectDraw4_GetDisplayMode(p,a) ICOM_CALL1(GetDisplayMode,p,a) +#define IDirectDraw4_GetFourCCCodes(p,a,b) ICOM_CALL2(GetFourCCCodes,p,a,b) +#define IDirectDraw4_GetGDISurface(p,a) ICOM_CALL1(GetGDISurface,p,a) +#define IDirectDraw4_GetMonitorFrequency(p,a) ICOM_CALL1(GetMonitorFrequency,p,a) +#define IDirectDraw4_GetScanLine(p,a) ICOM_CALL1(GetScanLine,p,a) +#define IDirectDraw4_GetVerticalBlankStatus(p,a) ICOM_CALL1(GetVerticalBlankStatus,p,a) +#define IDirectDraw4_Initialize(p,a) ICOM_CALL1(Initialize,p,a) +#define IDirectDraw4_RestoreDisplayMode(p) ICOM_CALL (RestoreDisplayMode,p) +#define IDirectDraw4_SetCooperativeLevel(p,a,b) ICOM_CALL2(SetCooperativeLevel,p,a,b) +#define IDirectDraw4_SetDisplayMode(p,a,b,c) ICOM_CALL3(SetDisplayMode,p,a,b,c) +#define IDirectDraw4_WaitForVerticalBlank(p,a,b) ICOM_CALL2(WaitForVerticalBlank,p,a,b) +/*** IDirectDraw2 methods ***/ +#define IDirectDraw4_GetAvailableVidMem(p,a,b,c) ICOM_CALL3(GetAvailableVidMem,p,a,b,c) +/*** IDirectDraw4 methods ***/ +#define IDirectDraw4_GetSurfaceFromDC(p,a,b) ICOM_CALL2(GetSurfaceFromDC,p,a,b,c) +#define IDirectDraw4_RestoreAllSurfaces(pc) ICOM_CALL (RestoreAllSurfaces,p) +#define IDirectDraw4_TestCooperativeLevel(p) ICOM_CALL (TestCooperativeLevel,p) +#define IDirectDraw4_GetDeviceIdentifier(p,a,b) ICOM_CALL2(GetDeviceIdentifier,p,a,b) +#endif -struct IDirectDrawSurface { - LPDIRECTDRAWSURFACE_VTABLE lpvtbl; - DWORD ref; - struct _common_directdrawsurface s; - union { - struct _dga_directdrawsurface dga; - struct _xlib_directdrawsurface xlib; - } t; -}; -#undef THIS -#define THIS LPDIRECTDRAWSURFACE2 this -typedef struct IDirectDrawSurface2_VTable { +/***************************************************************************** + * IDirectDrawSurface interface + */ +#define ICOM_INTERFACE IDirectDrawSurface +#define IDirectDrawSurface_METHODS \ + ICOM_METHOD1(HRESULT,AddAttachedSurface, LPDIRECTDRAWSURFACE,lpDDSAttachedSurface) \ + ICOM_METHOD1(HRESULT,AddOverlayDirtyRect, LPRECT,lpRect) \ + ICOM_METHOD5(HRESULT,Blt, LPRECT,lpDestRect, LPDIRECTDRAWSURFACE,lpDDSrcSurface, LPRECT,lpSrcRect, DWORD,dwFlags, LPDDBLTFX,lpDDBltFx) \ + ICOM_METHOD3(HRESULT,BltBatch, LPDDBLTBATCH,lpDDBltBatch, DWORD,dwCount, DWORD,dwFlags) \ + ICOM_METHOD5(HRESULT,BltFast, DWORD,dwX, DWORD,dwY, LPDIRECTDRAWSURFACE,lpDDSrcSurface, LPRECT,lpSrcRect, DWORD,dwTrans) \ + ICOM_METHOD2(HRESULT,DeleteAttachedSurface, DWORD,dwFlags, LPDIRECTDRAWSURFACE,lpDDSAttachedSurface) \ + ICOM_METHOD2(HRESULT,EnumAttachedSurfaces, LPVOID,lpContext, LPDDENUMSURFACESCALLBACK,lpEnumSurfacesCallback) \ + ICOM_METHOD3(HRESULT,EnumOverlayZOrders, DWORD,dwFlags, LPVOID,lpContext, LPDDENUMSURFACESCALLBACK,lpfnCallback) \ + ICOM_METHOD2(HRESULT,Flip, LPDIRECTDRAWSURFACE,lpDDSurfaceTargetOverride, DWORD,dwFlags) \ + ICOM_METHOD2(HRESULT,GetAttachedSurface, LPDDSCAPS,lpDDSCaps, LPDIRECTDRAWSURFACE*,lplpDDAttachedSurface) \ + ICOM_METHOD1(HRESULT,GetBltStatus, DWORD,dwFlags) \ + ICOM_METHOD1(HRESULT,GetCaps, LPDDSCAPS,lpDDSCaps) \ + ICOM_METHOD1(HRESULT,GetClipper, LPDIRECTDRAWCLIPPER*,lplpDDClipper) \ + ICOM_METHOD2(HRESULT,GetColorKey, DWORD,dwFlags, LPDDCOLORKEY,lpDDColorKey) \ + ICOM_METHOD1(HRESULT,GetDC, HDC*,lphDC) \ + ICOM_METHOD1(HRESULT,GetFlipStatus, DWORD,dwFlags) \ + ICOM_METHOD2(HRESULT,GetOverlayPosition, LPLONG,lplX, LPLONG,lplY) \ + ICOM_METHOD1(HRESULT,GetPalette, LPDIRECTDRAWPALETTE*,lplpDDPalette) \ + ICOM_METHOD1(HRESULT,GetPixelFormat, LPDDPIXELFORMAT,lpDDPixelFormat) \ + ICOM_METHOD1(HRESULT,GetSurfaceDesc, LPDDSURFACEDESC,lpDDSurfaceDesc) \ + ICOM_METHOD2(HRESULT,Initialize, LPDIRECTDRAW,lpDD, LPDDSURFACEDESC,lpDDSurfaceDesc) \ + ICOM_METHOD (HRESULT,IsLost) \ + ICOM_METHOD4(HRESULT,Lock, LPRECT,lpDestRect, LPDDSURFACEDESC,lpDDSurfaceDesc, DWORD,dwFlags, HANDLE,hEvent) \ + ICOM_METHOD1(HRESULT,ReleaseDC, HDC,hDC) \ + ICOM_METHOD (HRESULT,Restore) \ + ICOM_METHOD1(HRESULT,SetClipper, LPDIRECTDRAWCLIPPER,lpDDClipper) \ + ICOM_METHOD2(HRESULT,SetColorKey, DWORD,dwFlags, LPDDCOLORKEY,lpDDColorKey) \ + ICOM_METHOD2(HRESULT,SetOverlayPosition, LONG,lX, LONG,lY) \ + ICOM_METHOD1(HRESULT,SetPalette, LPDIRECTDRAWPALETTE,lpDDPalette) \ + ICOM_METHOD1(HRESULT,Unlock, LPVOID,lpSurfaceData) \ + ICOM_METHOD5(HRESULT,UpdateOverlay, LPRECT,lpSrcRect, LPDIRECTDRAWSURFACE,lpDDDestSurface, LPRECT,lpDestRect, DWORD,dwFlags, LPDDOVERLAYFX,lpDDOverlayFx) \ + ICOM_METHOD1(HRESULT,UpdateOverlayDisplay, DWORD,dwFlags) \ + ICOM_METHOD2(HRESULT,UpdateOverlayZOrder, DWORD,dwFlags, LPDIRECTDRAWSURFACE,lpDDSReference) +#define IDirectDrawSurface_IMETHODS \ + IUnknown_IMETHODS \ + IDirectDrawSurface_METHODS +ICOM_DEFINE(IDirectDrawSurface,IUnknown) +#undef ICOM_INTERFACE + +#ifdef ICOM_CINTERFACE /*** IUnknown methods ***/ - STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; +#define IDirectDrawSurface_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b) +#define IDirectDrawSurface_AddRef(p) ICOM_CALL (AddRef,p) +#define IDirectDrawSurface_Release(p) ICOM_CALL (Release,p) /*** IDirectDrawSurface methods ***/ - STDMETHOD(AddAttachedSurface)(THIS_ LPDIRECTDRAWSURFACE2) PURE; - STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT) PURE; - STDMETHOD(Blt)(THIS_ LPRECT,LPDIRECTDRAWSURFACE2, LPRECT,DWORD, LPDDBLTFX) PURE; - STDMETHOD(BltBatch)(THIS_ LPDDBLTBATCH, DWORD, DWORD ) PURE; - STDMETHOD(BltFast)(THIS_ DWORD,DWORD,LPDIRECTDRAWSURFACE2, LPRECT,DWORD) PURE; - STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD,LPDIRECTDRAWSURFACE2) PURE; - STDMETHOD(EnumAttachedSurfaces)(THIS_ LPVOID,LPDDENUMSURFACESCALLBACK) PURE; - STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD,LPVOID,LPDDENUMSURFACESCALLBACK) PURE; - STDMETHOD(Flip)(THIS_ LPDIRECTDRAWSURFACE2, DWORD) PURE; - STDMETHOD(GetAttachedSurface)(THIS_ LPDDSCAPS, LPDIRECTDRAWSURFACE2 FAR *) PURE; - STDMETHOD(GetBltStatus)(THIS_ DWORD) PURE; - STDMETHOD(GetCaps)(THIS_ LPDDSCAPS) PURE; - STDMETHOD(GetClipper)(THIS_ LPDIRECTDRAWCLIPPER FAR*) PURE; - STDMETHOD(GetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE; - STDMETHOD(GetDC)(THIS_ HDC FAR *) PURE; - STDMETHOD(GetFlipStatus)(THIS_ DWORD) PURE; - STDMETHOD(GetOverlayPosition)(THIS_ LPLONG, LPLONG ) PURE; - STDMETHOD(GetPalette)(THIS_ LPDIRECTDRAWPALETTE FAR*) PURE; - STDMETHOD(GetPixelFormat)(THIS_ LPDDPIXELFORMAT) PURE; - STDMETHOD(GetSurfaceDesc)(THIS_ LPDDSURFACEDESC) PURE; - STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, LPDDSURFACEDESC) PURE; - STDMETHOD(IsLost)(THIS) PURE; - STDMETHOD(Lock)(THIS_ LPRECT,LPDDSURFACEDESC,DWORD,HANDLE) PURE; - STDMETHOD(ReleaseDC)(THIS_ HDC) PURE; - STDMETHOD(Restore)(THIS) PURE; - STDMETHOD(SetClipper)(THIS_ LPDIRECTDRAWCLIPPER) PURE; - STDMETHOD(SetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE; - STDMETHOD(SetOverlayPosition)(THIS_ LONG, LONG ) PURE; - STDMETHOD(SetPalette)(THIS_ LPDIRECTDRAWPALETTE) PURE; - STDMETHOD(Unlock)(THIS_ LPVOID) PURE; - STDMETHOD(UpdateOverlay)(THIS_ LPRECT, LPDIRECTDRAWSURFACE2,LPRECT,DWORD, LPDDOVERLAYFX) PURE; - STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD) PURE; - STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD, LPDIRECTDRAWSURFACE2) PURE; - /*** Added in the v2 interface ***/ - STDMETHOD(GetDDInterface)(THIS_ LPVOID FAR *) PURE; - STDMETHOD(PageLock)(THIS_ DWORD) PURE; - STDMETHOD(PageUnlock)(THIS_ DWORD) PURE; -} *LPDIRECTDRAWSURFACE2_VTABLE,IDirectDrawSurface2_VTable; +#define IDirectDrawSurface_AddAttachedSurface(p,a) ICOM_CALL1(AddAttachedSurface,p,a) +#define IDirectDrawSurface_AddOverlayDirtyRect(p,a) ICOM_CALL1(AddOverlayDirtyRect,p,a) +#define IDirectDrawSurface_Blt(p,a,b,c,d,e) ICOM_CALL5(Blt,p,a,b,c,d,e) +#define IDirectDrawSurface_BltBatch(p,a,b,c) ICOM_CALL3(BltBatch,p,a,b,c) +#define IDirectDrawSurface_BltFast(p,a,b,c,d,e) ICOM_CALL5(BltFast,p,a,b,c,d,e) +#define IDirectDrawSurface_DeleteAttachedSurface(p,a,b) ICOM_CALL2(DeleteAttachedSurface,p,a,b) +#define IDirectDrawSurface_EnumAttachedSurfaces(p,a,b) ICOM_CALL2(EnumAttachedSurfaces,p,a,b) +#define IDirectDrawSurface_EnumOverlayZOrders(p,a,b,c) ICOM_CALL3(EnumOverlayZOrders,p,a,b,c) +#define IDirectDrawSurface_Flip(p,a,b) ICOM_CALL2(Flip,p,a,b) +#define IDirectDrawSurface_GetAttachedSurface(p,a,b) ICOM_CALL2(GetAttachedSurface,p,a,b) +#define IDirectDrawSurface_GetBltStatus(p,a) ICOM_CALL1(GetBltStatus,p,a) +#define IDirectDrawSurface_GetCaps(p,a) ICOM_CALL1(GetCaps,p,a) +#define IDirectDrawSurface_GetClipper(p,a) ICOM_CALL1(GetClipper,p,a) +#define IDirectDrawSurface_GetColorKey(p,a,b) ICOM_CALL2(GetColorKey,p,a,b) +#define IDirectDrawSurface_GetDC(p,a) ICOM_CALL1(GetDC,p,a) +#define IDirectDrawSurface_GetFlipStatus(p,a) ICOM_CALL1(GetFlipStatus,p,a) +#define IDirectDrawSurface_GetOverlayPosition(p,a,b) ICOM_CALL2(GetOverlayPosition,p,a,b) +#define IDirectDrawSurface_GetPalette(p,a) ICOM_CALL1(GetPalette,p,a) +#define IDirectDrawSurface_GetPixelFormat(p,a) ICOM_CALL1(GetPixelFormat,p,a) +#define IDirectDrawSurface_GetSurfaceDesc(p,a) ICOM_CALL1(GetSurfaceDesc,p,a) +#define IDirectDrawSurface_Initialize(p,a,b) ICOM_CALL2(Initialize,p,a,b) +#define IDirectDrawSurface_IsLost(p) ICOM_CALL (IsLost,p) +#define IDirectDrawSurface_Lock(p,a,b,c,d) ICOM_CALL4(Lock,p,a,b,c,d) +#define IDirectDrawSurface_ReleaseDC(p,a) ICOM_CALL1(ReleaseDC,p,a) +#define IDirectDrawSurface_Restore(p,a,b) ICOM_CALL (Restore,p,a,b) +#define IDirectDrawSurface_SetClipper(p,a,b) ICOM_CALL1(SetClipper,p,a,b) +#define IDirectDrawSurface_SetColorKey(p,a,b) ICOM_CALL2(SetColorKey,p,a,b) +#define IDirectDrawSurface_SetOverlayPosition(p,a,b) ICOM_CALL2(SetOverlayPosition,p,a,b) +#define IDirectDrawSurface_SetPalette(p,a) ICOM_CALL1(SetPalette,p,a) +#define IDirectDrawSurface_Unlock(p,a) ICOM_CALL1(Unlock,p,a) +#define IDirectDrawSurface_UpdateOverlay(p,a,b,c,d,e) ICOM_CALL5(UpdateOverlay,p,a,b,c,d,e) +#define IDirectDrawSurface_UpdateOverlayDisplay(p,a) ICOM_CALL1(UpdateOverlayDisplay,p,a) +#define IDirectDrawSurface_UpdateOverlayZOrder(p,a,b) ICOM_CALL2(UpdateOverlayZOrder,p,a,b) +#endif -struct IDirectDrawSurface2 { - LPDIRECTDRAWSURFACE2_VTABLE lpvtbl; - DWORD ref; - struct _common_directdrawsurface s; - union { - struct _dga_directdrawsurface dga; - struct _xlib_directdrawsurface xlib; - } t; -}; -#undef THIS -#define THIS LPDIRECTDRAWSURFACE3 this -typedef struct IDirectDrawSurface3_VTable { +/***************************************************************************** + * IDirectDrawSurface2 interface + */ +/* Cannot inherit from IDirectDrawSurface because the LPDIRECTDRAWSURFACE parameters + * have been converted to LPDIRECTDRAWSURFACE2. + */ +#define ICOM_INTERFACE IDirectDrawSurface2 +#define IDirectDrawSurface2_METHODS \ + ICOM_METHOD1(HRESULT,AddAttachedSurface, LPDIRECTDRAWSURFACE2,lpDDSAttachedSurface) \ + ICOM_METHOD1(HRESULT,AddOverlayDirtyRect, LPRECT,lpRect) \ + ICOM_METHOD5(HRESULT,Blt, LPRECT,lpDestRect, LPDIRECTDRAWSURFACE2,lpDDSrcSurface, LPRECT,lpSrcRect, DWORD,dwFlags, LPDDBLTFX,lpDDBltFx) \ + ICOM_METHOD3(HRESULT,BltBatch, LPDDBLTBATCH,lpDDBltBatch, DWORD,dwCount, DWORD,dwFlags) \ + ICOM_METHOD5(HRESULT,BltFast, DWORD,dwX, DWORD,dwY, LPDIRECTDRAWSURFACE2,lpDDSrcSurface, LPRECT,lpSrcRect, DWORD,dwTrans) \ + ICOM_METHOD2(HRESULT,DeleteAttachedSurface, DWORD,dwFlags, LPDIRECTDRAWSURFACE2,lpDDSAttachedSurface) \ + ICOM_METHOD2(HRESULT,EnumAttachedSurfaces, LPVOID,lpContext, LPDDENUMSURFACESCALLBACK,lpEnumSurfacesCallback) \ + ICOM_METHOD3(HRESULT,EnumOverlayZOrders, DWORD,dwFlags, LPVOID,lpContext, LPDDENUMSURFACESCALLBACK,lpfnCallback) \ + ICOM_METHOD2(HRESULT,Flip, LPDIRECTDRAWSURFACE2,lpDDSurfaceTargetOverride, DWORD,dwFlags) \ + ICOM_METHOD2(HRESULT,GetAttachedSurface, LPDDSCAPS,lpDDSCaps, LPDIRECTDRAWSURFACE2*,lplpDDAttachedSurface) \ + ICOM_METHOD1(HRESULT,GetBltStatus, DWORD,dwFlags) \ + ICOM_METHOD1(HRESULT,GetCaps, LPDDSCAPS,lpDDSCaps) \ + ICOM_METHOD1(HRESULT,GetClipper, LPDIRECTDRAWCLIPPER*,lplpDDClipper) \ + ICOM_METHOD2(HRESULT,GetColorKey, DWORD,dwFlags, LPDDCOLORKEY,lpDDColorKey) \ + ICOM_METHOD1(HRESULT,GetDC, HDC*,lphDC) \ + ICOM_METHOD1(HRESULT,GetFlipStatus, DWORD,dwFlags) \ + ICOM_METHOD2(HRESULT,GetOverlayPosition, LPLONG,lplX, LPLONG,lplY) \ + ICOM_METHOD1(HRESULT,GetPalette, LPDIRECTDRAWPALETTE*,lplpDDPalette) \ + ICOM_METHOD1(HRESULT,GetPixelFormat, LPDDPIXELFORMAT,lpDDPixelFormat) \ + ICOM_METHOD1(HRESULT,GetSurfaceDesc, LPDDSURFACEDESC,lpDDSurfaceDesc) \ + ICOM_METHOD2(HRESULT,Initialize, LPDIRECTDRAW,lpDD, LPDDSURFACEDESC,lpDDSurfaceDesc) \ + ICOM_METHOD (HRESULT,IsLost) \ + ICOM_METHOD4(HRESULT,Lock, LPRECT,lpDestRect, LPDDSURFACEDESC,lpDDSurfaceDesc, DWORD,dwFlags, HANDLE,hEvent) \ + ICOM_METHOD1(HRESULT,ReleaseDC, HDC,hDC) \ + ICOM_METHOD (HRESULT,Restore) \ + ICOM_METHOD1(HRESULT,SetClipper, LPDIRECTDRAWCLIPPER,lpDDClipper) \ + ICOM_METHOD2(HRESULT,SetColorKey, DWORD,dwFlags, LPDDCOLORKEY,lpDDColorKey) \ + ICOM_METHOD2(HRESULT,SetOverlayPosition, LONG,lX, LONG,lY) \ + ICOM_METHOD1(HRESULT,SetPalette, LPDIRECTDRAWPALETTE,lpDDPalette) \ + ICOM_METHOD1(HRESULT,Unlock, LPVOID,lpSurfaceData) \ + ICOM_METHOD5(HRESULT,UpdateOverlay, LPRECT,lpSrcRect, LPDIRECTDRAWSURFACE2,lpDDDestSurface, LPRECT,lpDestRect, DWORD,dwFlags, LPDDOVERLAYFX,lpDDOverlayFx) \ + ICOM_METHOD1(HRESULT,UpdateOverlayDisplay, DWORD,dwFlags) \ + ICOM_METHOD2(HRESULT,UpdateOverlayZOrder, DWORD,dwFlags, LPDIRECTDRAWSURFACE2,lpDDSReference) \ + /* added in v2 */ \ + ICOM_METHOD1(HRESULT,GetDDInterface, LPVOID*,lplpDD) \ + ICOM_METHOD1(HRESULT,PageLock, DWORD,dwFlags) \ + ICOM_METHOD1(HRESULT,PageUnlock, DWORD,dwFlags) +#define IDirectDrawSurface2_IMETHODS \ + IUnknown_IMETHODS \ + IDirectDrawSurface2_METHODS +ICOM_DEFINE(IDirectDrawSurface2,IUnknown) +#undef ICOM_INTERFACE + +#ifdef ICOM_CINTERFACE /*** IUnknown methods ***/ -/*00*/STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE; -/*04*/STDMETHOD_(ULONG,AddRef) (THIS) PURE; -/*08*/STDMETHOD_(ULONG,Release) (THIS) PURE; - /*** IDirectDrawSurface methods ***/ -/*0c*/STDMETHOD(AddAttachedSurface)(THIS_ LPDIRECTDRAWSURFACE3) PURE; -/*10*/STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT) PURE; -/*14*/STDMETHOD(Blt)(THIS_ LPRECT,LPDIRECTDRAWSURFACE3, LPRECT,DWORD, LPDDBLTFX) PURE; -/*18*/STDMETHOD(BltBatch)(THIS_ LPDDBLTBATCH, DWORD, DWORD ) PURE; -/*1c*/STDMETHOD(BltFast)(THIS_ DWORD,DWORD,LPDIRECTDRAWSURFACE3, LPRECT,DWORD) PURE; -/*20*/STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD,LPDIRECTDRAWSURFACE3) PURE; -/*24*/STDMETHOD(EnumAttachedSurfaces)(THIS_ LPVOID,LPDDENUMSURFACESCALLBACK) PURE; -/*28*/STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD,LPVOID,LPDDENUMSURFACESCALLBACK) PURE; -/*2c*/STDMETHOD(Flip)(THIS_ LPDIRECTDRAWSURFACE3, DWORD) PURE; -/*30*/STDMETHOD(GetAttachedSurface)(THIS_ LPDDSCAPS, LPDIRECTDRAWSURFACE3 FAR *) PURE; -/*34*/STDMETHOD(GetBltStatus)(THIS_ DWORD) PURE; -/*38*/STDMETHOD(GetCaps)(THIS_ LPDDSCAPS) PURE; -/*3c*/STDMETHOD(GetClipper)(THIS_ LPDIRECTDRAWCLIPPER FAR*) PURE; -/*40*/STDMETHOD(GetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE; -/*44*/STDMETHOD(GetDC)(THIS_ HDC FAR *) PURE; -/*48*/STDMETHOD(GetFlipStatus)(THIS_ DWORD) PURE; -/*4c*/STDMETHOD(GetOverlayPosition)(THIS_ LPLONG, LPLONG ) PURE; -/*50*/STDMETHOD(GetPalette)(THIS_ LPDIRECTDRAWPALETTE FAR*) PURE; -/*54*/STDMETHOD(GetPixelFormat)(THIS_ LPDDPIXELFORMAT) PURE; -/*58*/STDMETHOD(GetSurfaceDesc)(THIS_ LPDDSURFACEDESC) PURE; -/*5c*/STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, LPDDSURFACEDESC) PURE; -/*60*/STDMETHOD(IsLost)(THIS) PURE; -/*64*/STDMETHOD(Lock)(THIS_ LPRECT,LPDDSURFACEDESC,DWORD,HANDLE) PURE; -/*68*/STDMETHOD(ReleaseDC)(THIS_ HDC) PURE; -/*6c*/STDMETHOD(Restore)(THIS) PURE; -/*70*/STDMETHOD(SetClipper)(THIS_ LPDIRECTDRAWCLIPPER) PURE; -/*74*/STDMETHOD(SetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE; -/*78*/STDMETHOD(SetOverlayPosition)(THIS_ LONG, LONG ) PURE; -/*7c*/STDMETHOD(SetPalette)(THIS_ LPDIRECTDRAWPALETTE) PURE; -/*80*/STDMETHOD(Unlock)(THIS_ LPVOID) PURE; -/*84*/STDMETHOD(UpdateOverlay)(THIS_ LPRECT, LPDIRECTDRAWSURFACE3,LPRECT,DWORD, LPDDOVERLAYFX) PURE; -/*88*/STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD) PURE; -/*8c*/STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD, LPDIRECTDRAWSURFACE3) PURE; - /*** Added in the v2 interface ***/ -/*90*/STDMETHOD(GetDDInterface)(THIS_ LPVOID FAR *) PURE; -/*94*/STDMETHOD(PageLock)(THIS_ DWORD) PURE; -/*98*/STDMETHOD(PageUnlock)(THIS_ DWORD) PURE; - /*** Added in the V3 interface ***/ -/*9c*/STDMETHOD(SetSurfaceDesc)(THIS_ LPDDSURFACEDESC, DWORD) PURE; -} *LPDIRECTDRAWSURFACE3_VTABLE,IDirectDrawSurface3_VTable; +#define IDirectDrawSurface2_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b) +#define IDirectDrawSurface2_AddRef(p) ICOM_CALL (AddRef,p) +#define IDirectDrawSurface2_Release(p) ICOM_CALL (Release,p) +/*** IDirectDrawSurface methods (almost) ***/ +#define IDirectDrawSurface2_AddAttachedSurface(p,a) ICOM_CALL1(AddAttachedSurface,p,a) +#define IDirectDrawSurface2_AddOverlayDirtyRect(p,a) ICOM_CALL1(AddOverlayDirtyRect,p,a) +#define IDirectDrawSurface2_Blt(p,a,b,c,d,e) ICOM_CALL5(Blt,p,a,b,c,d,e) +#define IDirectDrawSurface2_BltBatch(p,a,b,c) ICOM_CALL3(BltBatch,p,a,b,c) +#define IDirectDrawSurface2_BltFast(p,a,b,c,d,e) ICOM_CALL5(BltFast,p,a,b,c,d,e) +#define IDirectDrawSurface2_DeleteAttachedSurface(p,a,b) ICOM_CALL2(DeleteAttachedSurface,p,a,b) +#define IDirectDrawSurface2_EnumAttachedSurfaces(p,a,b) ICOM_CALL2(EnumAttachedSurfaces,p,a,b) +#define IDirectDrawSurface2_EnumOverlayZOrders(p,a,b,c) ICOM_CALL3(EnumOverlayZOrders,p,a,b,c) +#define IDirectDrawSurface2_Flip(p,a,b) ICOM_CALL2(Flip,p,a,b) +#define IDirectDrawSurface2_GetAttachedSurface(p,a,b) ICOM_CALL2(GetAttachedSurface,p,a,b) +#define IDirectDrawSurface2_GetBltStatus(p,a) ICOM_CALL1(GetBltStatus,p,a) +#define IDirectDrawSurface2_GetCaps(p,a) ICOM_CALL1(GetCaps,p,a) +#define IDirectDrawSurface2_GetClipper(p,a) ICOM_CALL1(GetClipper,p,a) +#define IDirectDrawSurface2_GetColorKey(p,a,b) ICOM_CALL2(GetColorKey,p,a,b) +#define IDirectDrawSurface2_GetDC(p,a) ICOM_CALL1(GetDC,p,a) +#define IDirectDrawSurface2_GetFlipStatus(p,a) ICOM_CALL1(GetFlipStatus,p,a) +#define IDirectDrawSurface2_GetOverlayPosition(p,a,b) ICOM_CALL2(GetOverlayPosition,p,a,b) +#define IDirectDrawSurface2_GetPalette(p,a) ICOM_CALL1(GetPalette,p,a) +#define IDirectDrawSurface2_GetPixelFormat(p,a) ICOM_CALL1(GetPixelFormat,p,a) +#define IDirectDrawSurface2_GetSurfaceDesc(p,a) ICOM_CALL1(GetSurfaceDesc,p,a) +#define IDirectDrawSurface2_Initialize(p,a,b) ICOM_CALL2(Initialize,p,a,b) +#define IDirectDrawSurface2_IsLost(p) ICOM_CALL (IsLost,p) +#define IDirectDrawSurface2_Lock(p,a,b,c,d) ICOM_CALL4(Lock,p,a,b,c,d) +#define IDirectDrawSurface2_ReleaseDC(p,a) ICOM_CALL1(ReleaseDC,p,a) +#define IDirectDrawSurface2_Restore(p,a,b) ICOM_CALL (Restore,p,a,b) +#define IDirectDrawSurface2_SetClipper(p,a,b) ICOM_CALL1(SetClipper,p,a,b) +#define IDirectDrawSurface2_SetColorKey(p,a,b) ICOM_CALL2(SetColorKey,p,a,b) +#define IDirectDrawSurface2_SetOverlayPosition(p,a,b) ICOM_CALL2(SetOverlayPosition,p,a,b) +#define IDirectDrawSurface2_SetPalette(p,a) ICOM_CALL1(SetPalette,p,a) +#define IDirectDrawSurface2_Unlock(p,a) ICOM_CALL1(Unlock,p,a) +#define IDirectDrawSurface2_UpdateOverlay(p,a,b,c,d,e) ICOM_CALL5(UpdateOverlay,p,a,b,c,d,e) +#define IDirectDrawSurface2_UpdateOverlayDisplay(p,a) ICOM_CALL1(UpdateOverlayDisplay,p,a) +#define IDirectDrawSurface2_UpdateOverlayZOrder(p,a,b) ICOM_CALL2(UpdateOverlayZOrder,p,a,b) +/*** IDirectDrawSurface2 methods ***/ +#define IDirectDrawSurface2_GetDDInterface(p,a) ICOM_CALL1(GetDDInterface,p,a) +#define IDirectDrawSurface2_PageLock(p,a) ICOM_CALL1(PageLock,p,a) +#define IDirectDrawSurface2_PageUnlock(p,a) ICOM_CALL1(PageUnlock,p,a) +#endif -struct IDirectDrawSurface3 { - LPDIRECTDRAWSURFACE3_VTABLE lpvtbl; - DWORD ref; - struct _common_directdrawsurface s; - union { - struct _dga_directdrawsurface dga; - struct _xlib_directdrawsurface xlib; - } t; -}; -#undef THIS -#define THIS LPDIRECTDRAWSURFACE4 this +/***************************************************************************** + * IDirectDrawSurface3 interface + */ +/* Cannot inherit from IDirectDrawSurface2 because the LPDIRECTDRAWSURFACE2 parameters + * have been converted to LPDIRECTDRAWSURFACE3. + */ +#define ICOM_INTERFACE IDirectDrawSurface3 +#define IDirectDrawSurface3_METHODS \ + ICOM_METHOD1(HRESULT,AddAttachedSurface, LPDIRECTDRAWSURFACE3,lpDDSAttachedSurface) \ + ICOM_METHOD1(HRESULT,AddOverlayDirtyRect, LPRECT,lpRect) \ + ICOM_METHOD5(HRESULT,Blt, LPRECT,lpDestRect, LPDIRECTDRAWSURFACE3,lpDDSrcSurface, LPRECT,lpSrcRect, DWORD,dwFlags, LPDDBLTFX,lpDDBltFx) \ + ICOM_METHOD3(HRESULT,BltBatch, LPDDBLTBATCH,lpDDBltBatch, DWORD,dwCount, DWORD,dwFlags) \ + ICOM_METHOD5(HRESULT,BltFast, DWORD,dwX, DWORD,dwY, LPDIRECTDRAWSURFACE3,lpDDSrcSurface, LPRECT,lpSrcRect, DWORD,dwTrans) \ + ICOM_METHOD2(HRESULT,DeleteAttachedSurface, DWORD,dwFlags, LPDIRECTDRAWSURFACE3,lpDDSAttachedSurface) \ + ICOM_METHOD2(HRESULT,EnumAttachedSurfaces, LPVOID,lpContext, LPDDENUMSURFACESCALLBACK,lpEnumSurfacesCallback) \ + ICOM_METHOD3(HRESULT,EnumOverlayZOrders, DWORD,dwFlags, LPVOID,lpContext, LPDDENUMSURFACESCALLBACK,lpfnCallback) \ + ICOM_METHOD2(HRESULT,Flip, LPDIRECTDRAWSURFACE3,lpDDSurfaceTargetOverride, DWORD,dwFlags) \ + ICOM_METHOD2(HRESULT,GetAttachedSurface, LPDDSCAPS,lpDDSCaps, LPDIRECTDRAWSURFACE3*,lplpDDAttachedSurface) \ + ICOM_METHOD1(HRESULT,GetBltStatus, DWORD,dwFlags) \ + ICOM_METHOD1(HRESULT,GetCaps, LPDDSCAPS,lpDDSCaps) \ + ICOM_METHOD1(HRESULT,GetClipper, LPDIRECTDRAWCLIPPER*,lplpDDClipper) \ + ICOM_METHOD2(HRESULT,GetColorKey, DWORD,dwFlags, LPDDCOLORKEY,lpDDColorKey) \ + ICOM_METHOD1(HRESULT,GetDC, HDC*,lphDC) \ + ICOM_METHOD1(HRESULT,GetFlipStatus, DWORD,dwFlags) \ + ICOM_METHOD2(HRESULT,GetOverlayPosition, LPLONG,lplX, LPLONG,lplY) \ + ICOM_METHOD1(HRESULT,GetPalette, LPDIRECTDRAWPALETTE*,lplpDDPalette) \ + ICOM_METHOD1(HRESULT,GetPixelFormat, LPDDPIXELFORMAT,lpDDPixelFormat) \ + ICOM_METHOD1(HRESULT,GetSurfaceDesc, LPDDSURFACEDESC,lpDDSurfaceDesc) \ + ICOM_METHOD2(HRESULT,Initialize, LPDIRECTDRAW,lpDD, LPDDSURFACEDESC,lpDDSurfaceDesc) \ + ICOM_METHOD (HRESULT,IsLost) \ + ICOM_METHOD4(HRESULT,Lock, LPRECT,lpDestRect, LPDDSURFACEDESC,lpDDSurfaceDesc, DWORD,dwFlags, HANDLE,hEvent) \ + ICOM_METHOD1(HRESULT,ReleaseDC, HDC,hDC) \ + ICOM_METHOD (HRESULT,Restore) \ + ICOM_METHOD1(HRESULT,SetClipper, LPDIRECTDRAWCLIPPER,lpDDClipper) \ + ICOM_METHOD2(HRESULT,SetColorKey, DWORD,dwFlags, LPDDCOLORKEY,lpDDColorKey) \ + ICOM_METHOD2(HRESULT,SetOverlayPosition, LONG,lX, LONG,lY) \ + ICOM_METHOD1(HRESULT,SetPalette, LPDIRECTDRAWPALETTE,lpDDPalette) \ + ICOM_METHOD1(HRESULT,Unlock, LPVOID,lpSurfaceData) \ + ICOM_METHOD5(HRESULT,UpdateOverlay, LPRECT,lpSrcRect, LPDIRECTDRAWSURFACE3,lpDDDestSurface, LPRECT,lpDestRect, DWORD,dwFlags, LPDDOVERLAYFX,lpDDOverlayFx) \ + ICOM_METHOD1(HRESULT,UpdateOverlayDisplay, DWORD,dwFlags) \ + ICOM_METHOD2(HRESULT,UpdateOverlayZOrder, DWORD,dwFlags, LPDIRECTDRAWSURFACE3,lpDDSReference) \ + /* added in v2 */ \ + ICOM_METHOD1(HRESULT,GetDDInterface, LPVOID*,lplpDD) \ + ICOM_METHOD1(HRESULT,PageLock, DWORD,dwFlags) \ + ICOM_METHOD1(HRESULT,PageUnlock, DWORD,dwFlags) \ + /* added in v3 */ \ + ICOM_METHOD2(HRESULT,SetSurfaceDesc, LPDDSURFACEDESC,lpDDSD, DWORD,dwFlags) +#define IDirectDrawSurface3_IMETHODS \ + IUnknown_IMETHODS \ + IDirectDrawSurface3_METHODS +ICOM_DEFINE(IDirectDrawSurface3,IUnknown) +#undef ICOM_INTERFACE -typedef struct IDirectDrawSurface4_VTable { +#ifdef ICOM_CINTERFACE /*** IUnknown methods ***/ -/*00*/STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE; -/*04*/STDMETHOD_(ULONG,AddRef) (THIS) PURE; -/*08*/STDMETHOD_(ULONG,Release) (THIS) PURE; - /*** IDirectDrawSurface methods ***/ -/*0c*/STDMETHOD(AddAttachedSurface)(THIS_ LPDIRECTDRAWSURFACE4) PURE; -/*10*/STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT) PURE; -/*14*/STDMETHOD(Blt)(THIS_ LPRECT,LPDIRECTDRAWSURFACE4, LPRECT,DWORD, LPDDBLTFX) PURE; -/*18*/STDMETHOD(BltBatch)(THIS_ LPDDBLTBATCH, DWORD, DWORD ) PURE; -/*1c*/STDMETHOD(BltFast)(THIS_ DWORD,DWORD,LPDIRECTDRAWSURFACE4, LPRECT,DWORD) PURE; -/*20*/STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD,LPDIRECTDRAWSURFACE4) PURE; -/*24*/STDMETHOD(EnumAttachedSurfaces)(THIS_ LPVOID,LPDDENUMSURFACESCALLBACK) PURE; -/*28*/STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD,LPVOID,LPDDENUMSURFACESCALLBACK) PURE; -/*2c*/STDMETHOD(Flip)(THIS_ LPDIRECTDRAWSURFACE4, DWORD) PURE; -/*30*/STDMETHOD(GetAttachedSurface)(THIS_ LPDDSCAPS, LPDIRECTDRAWSURFACE4 FAR *) PURE; -/*34*/STDMETHOD(GetBltStatus)(THIS_ DWORD) PURE; -/*38*/STDMETHOD(GetCaps)(THIS_ LPDDSCAPS) PURE; -/*3c*/STDMETHOD(GetClipper)(THIS_ LPDIRECTDRAWCLIPPER FAR*) PURE; -/*40*/STDMETHOD(GetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE; -/*44*/STDMETHOD(GetDC)(THIS_ HDC FAR *) PURE; -/*48*/STDMETHOD(GetFlipStatus)(THIS_ DWORD) PURE; -/*4c*/STDMETHOD(GetOverlayPosition)(THIS_ LPLONG, LPLONG ) PURE; -/*50*/STDMETHOD(GetPalette)(THIS_ LPDIRECTDRAWPALETTE FAR*) PURE; -/*54*/STDMETHOD(GetPixelFormat)(THIS_ LPDDPIXELFORMAT) PURE; -/*58*/STDMETHOD(GetSurfaceDesc)(THIS_ LPDDSURFACEDESC) PURE; -/*5c*/STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, LPDDSURFACEDESC) PURE; -/*60*/STDMETHOD(IsLost)(THIS) PURE; -/*64*/STDMETHOD(Lock)(THIS_ LPRECT,LPDDSURFACEDESC,DWORD,HANDLE) PURE; -/*68*/STDMETHOD(ReleaseDC)(THIS_ HDC) PURE; -/*6c*/STDMETHOD(Restore)(THIS) PURE; -/*70*/STDMETHOD(SetClipper)(THIS_ LPDIRECTDRAWCLIPPER) PURE; -/*74*/STDMETHOD(SetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE; -/*78*/STDMETHOD(SetOverlayPosition)(THIS_ LONG, LONG ) PURE; -/*7c*/STDMETHOD(SetPalette)(THIS_ LPDIRECTDRAWPALETTE) PURE; -/*80*/STDMETHOD(Unlock)(THIS_ LPVOID) PURE; -/*84*/STDMETHOD(UpdateOverlay)(THIS_ LPRECT, LPDIRECTDRAWSURFACE4,LPRECT,DWORD, LPDDOVERLAYFX) PURE; -/*88*/STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD) PURE; -/*8c*/STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD, LPDIRECTDRAWSURFACE4) PURE; - /*** Added in the v2 interface ***/ -/*90*/STDMETHOD(GetDDInterface)(THIS_ LPVOID FAR *) PURE; -/*94*/STDMETHOD(PageLock)(THIS_ DWORD) PURE; -/*98*/STDMETHOD(PageUnlock)(THIS_ DWORD) PURE; - /*** Added in the V3 interface ***/ -/*9c*/STDMETHOD(SetSurfaceDesc)(THIS_ LPDDSURFACEDESC, DWORD) PURE; - /*** Added in the v4 interface ***/ -/*a0*/STDMETHOD(SetPrivateData)(THIS_ REFGUID, LPVOID, DWORD, DWORD) PURE; -/*a4*/STDMETHOD(GetPrivateData)(THIS_ REFGUID, LPVOID, LPDWORD) PURE; -/*a8*/STDMETHOD(FreePrivateData)(THIS_ REFGUID) PURE; -/*ac*/STDMETHOD(GetUniquenessValue)(THIS_ LPDWORD) PURE; -/*b0*/STDMETHOD(ChangeUniquenessValue)(THIS) PURE; -} *LPDIRECTDRAWSURFACE4_VTABLE,IDirectDrawSurface4_VTable; - -struct IDirectDrawSurface4 { - LPDIRECTDRAWSURFACE4_VTABLE lpvtbl; - DWORD ref; - struct _common_directdrawsurface s; - union { - struct _dga_directdrawsurface dga; - struct _xlib_directdrawsurface xlib; - } t; -}; -#undef THIS +#define IDirectDrawSurface3_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b) +#define IDirectDrawSurface3_AddRef(p) ICOM_CALL (AddRef,p) +#define IDirectDrawSurface3_Release(p) ICOM_CALL (Release,p) +/*** IDirectDrawSurface methods (almost) ***/ +#define IDirectDrawSurface3_AddAttachedSurface(p,a) ICOM_CALL1(AddAttachedSurface,p,a) +#define IDirectDrawSurface3_AddOverlayDirtyRect(p,a) ICOM_CALL1(AddOverlayDirtyRect,p,a) +#define IDirectDrawSurface3_Blt(p,a,b,c,d,e) ICOM_CALL5(Blt,p,a,b,c,d,e) +#define IDirectDrawSurface3_BltBatch(p,a,b,c) ICOM_CALL3(BltBatch,p,a,b,c) +#define IDirectDrawSurface3_BltFast(p,a,b,c,d,e) ICOM_CALL5(BltFast,p,a,b,c,d,e) +#define IDirectDrawSurface3_DeleteAttachedSurface(p,a,b) ICOM_CALL2(DeleteAttachedSurface,p,a,b) +#define IDirectDrawSurface3_EnumAttachedSurfaces(p,a,b) ICOM_CALL2(EnumAttachedSurfaces,p,a,b) +#define IDirectDrawSurface3_EnumOverlayZOrders(p,a,b,c) ICOM_CALL3(EnumOverlayZOrders,p,a,b,c) +#define IDirectDrawSurface3_Flip(p,a,b) ICOM_CALL2(Flip,p,a,b) +#define IDirectDrawSurface3_GetAttachedSurface(p,a,b) ICOM_CALL2(GetAttachedSurface,p,a,b) +#define IDirectDrawSurface3_GetBltStatus(p,a) ICOM_CALL1(GetBltStatus,p,a) +#define IDirectDrawSurface3_GetCaps(p,a) ICOM_CALL1(GetCaps,p,a) +#define IDirectDrawSurface3_GetClipper(p,a) ICOM_CALL1(GetClipper,p,a) +#define IDirectDrawSurface3_GetColorKey(p,a,b) ICOM_CALL2(GetColorKey,p,a,b) +#define IDirectDrawSurface3_GetDC(p,a) ICOM_CALL1(GetDC,p,a) +#define IDirectDrawSurface3_GetFlipStatus(p,a) ICOM_CALL1(GetFlipStatus,p,a) +#define IDirectDrawSurface3_GetOverlayPosition(p,a,b) ICOM_CALL2(GetOverlayPosition,p,a,b) +#define IDirectDrawSurface3_GetPalette(p,a) ICOM_CALL1(GetPalette,p,a) +#define IDirectDrawSurface3_GetPixelFormat(p,a) ICOM_CALL1(GetPixelFormat,p,a) +#define IDirectDrawSurface3_GetSurfaceDesc(p,a) ICOM_CALL1(GetSurfaceDesc,p,a) +#define IDirectDrawSurface3_Initialize(p,a,b) ICOM_CALL2(Initialize,p,a,b) +#define IDirectDrawSurface3_IsLost(p) ICOM_CALL (IsLost,p) +#define IDirectDrawSurface3_Lock(p,a,b,c,d) ICOM_CALL4(Lock,p,a,b,c,d) +#define IDirectDrawSurface3_ReleaseDC(p,a) ICOM_CALL1(ReleaseDC,p,a) +#define IDirectDrawSurface3_Restore(p,a,b) ICOM_CALL (Restore,p,a,b) +#define IDirectDrawSurface3_SetClipper(p,a,b) ICOM_CALL1(SetClipper,p,a,b) +#define IDirectDrawSurface3_SetColorKey(p,a,b) ICOM_CALL2(SetColorKey,p,a,b) +#define IDirectDrawSurface3_SetOverlayPosition(p,a,b) ICOM_CALL2(SetOverlayPosition,p,a,b) +#define IDirectDrawSurface3_SetPalette(p,a) ICOM_CALL1(SetPalette,p,a) +#define IDirectDrawSurface3_Unlock(p,a) ICOM_CALL1(Unlock,p,a) +#define IDirectDrawSurface3_UpdateOverlay(p,a,b,c,d,e) ICOM_CALL5(UpdateOverlay,p,a,b,c,d,e) +#define IDirectDrawSurface3_UpdateOverlayDisplay(p,a) ICOM_CALL1(UpdateOverlayDisplay,p,a) +#define IDirectDrawSurface3_UpdateOverlayZOrder(p,a,b) ICOM_CALL2(UpdateOverlayZOrder,p,a,b) +/*** IDirectDrawSurface2 methods ***/ +#define IDirectDrawSurface3_GetDDInterface(p,a) ICOM_CALL1(GetDDInterface,p,a) +#define IDirectDrawSurface3_PageLock(p,a) ICOM_CALL1(PageLock,p,a) +#define IDirectDrawSurface3_PageUnlock(p,a) ICOM_CALL1(PageUnlock,p,a) +/*** IDirectDrawSurface3 methods ***/ +#define IDirectDrawSurface3_SetSurfaceDesc(p,a,b) ICOM_CALL2(SetSurfaceDesc,p,a,b) +#endif -#define THIS LPDIRECTDRAWCOLORCONTROL this -typedef struct IDirectDrawColorControl_VTable { +/***************************************************************************** + * IDirectDrawSurface4 interface + */ +/* Cannot inherit from IDirectDrawSurface2 because the LPDIRECTDRAWSURFACE2 parameters + * have been converted to LPDIRECTDRAWSURFACE3. + */ +/* FIXME: I assumed IDirectDrawSurface4 does not inherit from IDirectDrawSurface3 but I + * have actually not proof of that. Can someone check and remove this comment or patch + * accordingly ? + */ +#define ICOM_INTERFACE IDirectDrawSurface4 +#define IDirectDrawSurface4_METHODS \ + ICOM_METHOD1(HRESULT,AddAttachedSurface, LPDIRECTDRAWSURFACE4,lpDDSAttachedSurface) \ + ICOM_METHOD1(HRESULT,AddOverlayDirtyRect, LPRECT,lpRect) \ + ICOM_METHOD5(HRESULT,Blt, LPRECT,lpDestRect, LPDIRECTDRAWSURFACE4,lpDDSrcSurface, LPRECT,lpSrcRect, DWORD,dwFlags, LPDDBLTFX,lpDDBltFx) \ + ICOM_METHOD3(HRESULT,BltBatch, LPDDBLTBATCH,lpDDBltBatch, DWORD,dwCount, DWORD,dwFlags) \ + ICOM_METHOD5(HRESULT,BltFast, DWORD,dwX, DWORD,dwY, LPDIRECTDRAWSURFACE4,lpDDSrcSurface, LPRECT,lpSrcRect, DWORD,dwTrans) \ + ICOM_METHOD2(HRESULT,DeleteAttachedSurface, DWORD,dwFlags, LPDIRECTDRAWSURFACE4,lpDDSAttachedSurface) \ + ICOM_METHOD2(HRESULT,EnumAttachedSurfaces, LPVOID,lpContext, LPDDENUMSURFACESCALLBACK,lpEnumSurfacesCallback) \ + ICOM_METHOD3(HRESULT,EnumOverlayZOrders, DWORD,dwFlags, LPVOID,lpContext, LPDDENUMSURFACESCALLBACK,lpfnCallback) \ + ICOM_METHOD2(HRESULT,Flip, LPDIRECTDRAWSURFACE4,lpDDSurfaceTargetOverride, DWORD,dwFlags) \ + ICOM_METHOD2(HRESULT,GetAttachedSurface, LPDDSCAPS,lpDDSCaps, LPDIRECTDRAWSURFACE4*,lplpDDAttachedSurface) \ + ICOM_METHOD1(HRESULT,GetBltStatus, DWORD,dwFlags) \ + ICOM_METHOD1(HRESULT,GetCaps, LPDDSCAPS,lpDDSCaps) \ + ICOM_METHOD1(HRESULT,GetClipper, LPDIRECTDRAWCLIPPER*,lplpDDClipper) \ + ICOM_METHOD2(HRESULT,GetColorKey, DWORD,dwFlags, LPDDCOLORKEY,lpDDColorKey) \ + ICOM_METHOD1(HRESULT,GetDC, HDC*,lphDC) \ + ICOM_METHOD1(HRESULT,GetFlipStatus, DWORD,dwFlags) \ + ICOM_METHOD2(HRESULT,GetOverlayPosition, LPLONG,lplX, LPLONG,lplY) \ + ICOM_METHOD1(HRESULT,GetPalette, LPDIRECTDRAWPALETTE*,lplpDDPalette) \ + ICOM_METHOD1(HRESULT,GetPixelFormat, LPDDPIXELFORMAT,lpDDPixelFormat) \ + ICOM_METHOD1(HRESULT,GetSurfaceDesc, LPDDSURFACEDESC,lpDDSurfaceDesc) \ + ICOM_METHOD2(HRESULT,Initialize, LPDIRECTDRAW,lpDD, LPDDSURFACEDESC,lpDDSurfaceDesc) \ + ICOM_METHOD (HRESULT,IsLost) \ + ICOM_METHOD4(HRESULT,Lock, LPRECT,lpDestRect, LPDDSURFACEDESC,lpDDSurfaceDesc, DWORD,dwFlags, HANDLE,hEvent) \ + ICOM_METHOD1(HRESULT,ReleaseDC, HDC,hDC) \ + ICOM_METHOD (HRESULT,Restore) \ + ICOM_METHOD1(HRESULT,SetClipper, LPDIRECTDRAWCLIPPER,lpDDClipper) \ + ICOM_METHOD2(HRESULT,SetColorKey, DWORD,dwFlags, LPDDCOLORKEY,lpDDColorKey) \ + ICOM_METHOD2(HRESULT,SetOverlayPosition, LONG,lX, LONG,lY) \ + ICOM_METHOD1(HRESULT,SetPalette, LPDIRECTDRAWPALETTE,lpDDPalette) \ + ICOM_METHOD1(HRESULT,Unlock, LPVOID,lpSurfaceData) \ + ICOM_METHOD5(HRESULT,UpdateOverlay, LPRECT,lpSrcRect, LPDIRECTDRAWSURFACE4,lpDDDestSurface, LPRECT,lpDestRect, DWORD,dwFlags, LPDDOVERLAYFX,lpDDOverlayFx) \ + ICOM_METHOD1(HRESULT,UpdateOverlayDisplay, DWORD,dwFlags) \ + ICOM_METHOD2(HRESULT,UpdateOverlayZOrder, DWORD,dwFlags, LPDIRECTDRAWSURFACE4,lpDDSReference) \ + /* added in v2 */ \ + ICOM_METHOD1(HRESULT,GetDDInterface, LPVOID*,lplpDD) \ + ICOM_METHOD1(HRESULT,PageLock, DWORD,dwFlags) \ + ICOM_METHOD1(HRESULT,PageUnlock, DWORD,dwFlags) \ + /* added in v3 */ \ + ICOM_METHOD2(HRESULT,SetSurfaceDesc, LPDDSURFACEDESC,lpDDSD, DWORD,dwFlags) \ + /* added in v4 */ \ + ICOM_METHOD4(HRESULT,SetPrivateData, REFGUID,, LPVOID,, DWORD,, DWORD,) \ + ICOM_METHOD3(HRESULT,GetPrivateData, REFGUID,, LPVOID,, LPDWORD,) \ + ICOM_METHOD1(HRESULT,FreePrivateData, REFGUID,) \ + ICOM_METHOD1(HRESULT,GetUniquenessValue, LPDWORD,) \ + ICOM_METHOD (HRESULT,ChangeUniquenessValue) +#define IDirectDrawSurface4_IMETHODS \ + IUnknown_IMETHODS \ + IDirectDrawSurface4_METHODS +ICOM_DEFINE(IDirectDrawSurface4,IUnknown) +#undef ICOM_INTERFACE + +#ifdef ICOM_CINTERFACE + /*** IUnknown methods ***/ +#define IDirectDrawSurface4_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b) +#define IDirectDrawSurface4_AddRef(p) ICOM_CALL (AddRef,p) +#define IDirectDrawSurface4_Release(p) ICOM_CALL (Release,p) +/*** IDirectDrawSurface (almost) methods ***/ +#define IDirectDrawSurface4_AddAttachedSurface(p,a) ICOM_CALL1(AddAttachedSurface,p,a) +#define IDirectDrawSurface4_AddOverlayDirtyRect(p,a) ICOM_CALL1(AddOverlayDirtyRect,p,a) +#define IDirectDrawSurface4_Blt(p,a,b,c,d,e) ICOM_CALL5(Blt,p,a,b,c,d,e) +#define IDirectDrawSurface4_BltBatch(p,a,b,c) ICOM_CALL3(BltBatch,p,a,b,c) +#define IDirectDrawSurface4_BltFast(p,a,b,c,d,e) ICOM_CALL5(BltFast,p,a,b,c,d,e) +#define IDirectDrawSurface4_DeleteAttachedSurface(p,a,b) ICOM_CALL2(DeleteAttachedSurface,p,a,b) +#define IDirectDrawSurface4_EnumAttachedSurfaces(p,a,b) ICOM_CALL2(EnumAttachedSurfaces,p,a,b) +#define IDirectDrawSurface4_EnumOverlayZOrders(p,a,b,c) ICOM_CALL3(EnumOverlayZOrders,p,a,b,c) +#define IDirectDrawSurface4_Flip(p,a,b) ICOM_CALL2(Flip,p,a,b) +#define IDirectDrawSurface4_GetAttachedSurface(p,a,b) ICOM_CALL2(GetAttachedSurface,p,a,b) +#define IDirectDrawSurface4_GetBltStatus(p,a) ICOM_CALL1(GetBltStatus,p,a) +#define IDirectDrawSurface4_GetCaps(p,a) ICOM_CALL1(GetCaps,p,a) +#define IDirectDrawSurface4_GetClipper(p,a) ICOM_CALL1(GetClipper,p,a) +#define IDirectDrawSurface4_GetColorKey(p,a,b) ICOM_CALL2(GetColorKey,p,a,b) +#define IDirectDrawSurface4_GetDC(p,a) ICOM_CALL1(GetDC,p,a) +#define IDirectDrawSurface4_GetFlipStatus(p,a) ICOM_CALL1(GetFlipStatus,p,a) +#define IDirectDrawSurface4_GetOverlayPosition(p,a,b) ICOM_CALL2(GetOverlayPosition,p,a,b) +#define IDirectDrawSurface4_GetPalette(p,a) ICOM_CALL1(GetPalette,p,a) +#define IDirectDrawSurface4_GetPixelFormat(p,a) ICOM_CALL1(GetPixelFormat,p,a) +#define IDirectDrawSurface4_GetSurfaceDesc(p,a) ICOM_CALL1(GetSurfaceDesc,p,a) +#define IDirectDrawSurface4_Initialize(p,a,b) ICOM_CALL2(Initialize,p,a,b) +#define IDirectDrawSurface4_IsLost(p) ICOM_CALL (IsLost,p) +#define IDirectDrawSurface4_Lock(p,a,b,c,d) ICOM_CALL4(Lock,p,a,b,c,d) +#define IDirectDrawSurface4_ReleaseDC(p,a) ICOM_CALL1(ReleaseDC,p,a) +#define IDirectDrawSurface4_Restore(p,a,b) ICOM_CALL (Restore,p,a,b) +#define IDirectDrawSurface4_SetClipper(p,a,b) ICOM_CALL1(SetClipper,p,a,b) +#define IDirectDrawSurface4_SetColorKey(p,a,b) ICOM_CALL2(SetColorKey,p,a,b) +#define IDirectDrawSurface4_SetOverlayPosition(p,a,b) ICOM_CALL2(SetOverlayPosition,p,a,b) +#define IDirectDrawSurface4_SetPalette(p,a) ICOM_CALL1(SetPalette,p,a) +#define IDirectDrawSurface4_Unlock(p,a) ICOM_CALL1(Unlock,p,a) +#define IDirectDrawSurface4_UpdateOverlay(p,a,b,c,d,e) ICOM_CALL5(UpdateOverlay,p,a,b,c,d,e) +#define IDirectDrawSurface4_UpdateOverlayDisplay(p,a) ICOM_CALL1(UpdateOverlayDisplay,p,a) +#define IDirectDrawSurface4_UpdateOverlayZOrder(p,a,b) ICOM_CALL2(UpdateOverlayZOrder,p,a,b) +/*** IDirectDrawSurface2 methods ***/ +#define IDirectDrawSurface4_GetDDInterface(p,a) ICOM_CALL1(GetDDInterface,p,a) +#define IDirectDrawSurface4_PageLock(p,a) ICOM_CALL1(PageLock,p,a) +#define IDirectDrawSurface4_PageUnlock(p,a) ICOM_CALL1(PageUnlock,p,a) +/*** IDirectDrawSurface3 methods ***/ +#define IDirectDrawSurface4_SetSurfaceDesc(p,a) ICOM_CALL(SetSurfaceDesc,p,a) +/*** IDirectDrawSurface4 methods ***/ +#define IDirectDrawSurface4_SetPrivateData(p,a,b,c,d) ICOM_CALL4(SetPrivateData,p,a,b,c,d) +#define IDirectDrawSurface4_GetPrivateData(p,a,b,c) ICOM_CALL3(GetPrivateData,p,a,b,c) +#define IDirectDrawSurface4_FreePrivateData(p,a) ICOM_CALL1(FreePrivateData,p,a) +#define IDirectDrawSurface4_GetUniquenessValue(p,a) ICOM_CALL1(GetUniquenessValue,p,a) +#define IDirectDrawSurface4_ChangeUniquenessValue(p) ICOM_CALL (ChangeUniquenessValue,p) +#endif + + +/***************************************************************************** + * IDirectDrawColorControl interface + */ +#define ICOM_INTERFACE IDirectDrawColorControl +#define IDirectDrawColorControl_METHODS \ + ICOM_METHOD1(HRESULT,GetColorControls, LPDDCOLORCONTROL,lpColorControl) \ + ICOM_METHOD1(HRESULT,SetColorControls, LPDDCOLORCONTROL,lpColorControl) +#define IDirectDrawColorControl_IMETHODS \ + IUnknown_IMETHODS \ + IDirectDrawColorControl_METHODS +ICOM_DEFINE(IDirectDrawColorControl,IUnknown) +#undef ICOM_INTERFACE + +#ifdef ICOM_CINTERFACE /*** IUnknown methods ***/ - STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; +#define IDirectDrawColorControl_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b) +#define IDirectDrawColorControl_AddRef(p) ICOM_CALL (AddRef,p) +#define IDirectDrawColorControl_Release(p) ICOM_CALL (Release,p) /*** IDirectDrawColorControl methods ***/ - STDMETHOD(GetColorControls)(THIS_ LPDDCOLORCONTROL) PURE; - STDMETHOD(SetColorControls)(THIS_ LPDDCOLORCONTROL) PURE; -} IDirectDrawColorControl_VTable,*LPDIRECTDRAWCOLORCONTROL_VTABLE; +#define IDirectDrawColorControl_GetColorControls(p,a) ICOM_CALL(GetColorControls,p,a) +#define IDirectDrawColorControl_SetColorControls(p,a) ICOM_CALL(SetColorControls,p,a) +#endif -struct IDirectDrawColorControl { - LPDIRECTDRAWCOLORCONTROL_VTABLE lpvtbl; - DWORD ref; -}; -#undef THIS - -#undef THIS_ -#undef PURE -#undef FAR -#undef STDMETHOD -#undef STDMETHOD_ HRESULT WINAPI DirectDrawCreate(LPGUID,LPDIRECTDRAW*,LPUNKNOWN); HRESULT WINAPI DirectDrawEnumerateA(LPDDENUMCALLBACKA,LPVOID); HRESULT WINAPI DirectDrawEnumerateW(LPDDENUMCALLBACKW,LPVOID); -HRESULT WINAPI DirectDrawCreateClipper(DWORD,LPDIRECTDRAWCLIPPER*,LPUNKNOWN); #define DirectDrawEnumerate WINELIB_NAME_AW(DirectDrawEnumerate) -#endif +HRESULT WINAPI DirectDrawCreateClipper(DWORD,LPDIRECTDRAWCLIPPER*,LPUNKNOWN); + +#endif /* __WINE_DDRAW_H */