//------------------------------------------------------------------------------ // // Copyright Microsoft Corporation 1997-2000 // All rights reserved. // // File: dxtrans.idl // // Overview: // This is the IDL file for DirectX installable transform coclass, // interface, and type definitions. // //------------------------------------------------------------------------------ cpp_quote("#include ") cpp_quote("#include ") cpp_quote("#include ") cpp_quote("#include ") cpp_quote("#include ") //--- Import base idl import "oaidl.idl"; import "ocidl.idl"; import "servprov.idl"; import "comcat.idl"; // // Since direct draw does not have an IDL, we'll define DDSURFACEDESC to // be a void, but include ddraw.h in the header file. This makes MIDL happy. // #ifndef DDSURFACEDESC cpp_quote("#if 0") cpp_quote("// Bogus definition used to make MIDL compiler happy") typedef void DDSURFACEDESC; typedef void D3DRMBOX; typedef void D3DVECTOR; typedef void D3DRMMATRIX4D; typedef void* LPSECURITY_ATTRIBUTES; cpp_quote("#endif") #endif //--- Additional includes //--- Export cpp_quote( "#ifdef _DXTRANSIMPL") cpp_quote( " #define _DXTRANS_IMPL_EXT _declspec(dllexport)") cpp_quote( "#else") cpp_quote( " #define _DXTRANS_IMPL_EXT _declspec(dllimport)") cpp_quote( "#endif") //=== Forward References ==================================================== interface IDXTransformFactory; interface IDXTransform; interface IDXTaskManager; interface IDXSurfaceFactory; interface IDXSurface; interface IDXARGBSurfaceInit; interface IDXRawSurface; interface IDXARGBReadPtr; interface IDXARGBReadWritePtr; interface IDXDCLock; interface IDXTScale; interface IDXLookupTable; interface IDXTBindHost; interface IBindHost; interface IDXTScaleOutput; interface IDXGradient; //=== Constants ============================================================= cpp_quote("//") cpp_quote("// All GUIDs for DXTransform are declared in DXTGUID.C in the SDK include directory") cpp_quote("//") cpp_quote("EXTERN_C const GUID DDPF_RGB1;") cpp_quote("EXTERN_C const GUID DDPF_RGB2;") cpp_quote("EXTERN_C const GUID DDPF_RGB4;") cpp_quote("EXTERN_C const GUID DDPF_RGB8;") cpp_quote("EXTERN_C const GUID DDPF_RGB332;") cpp_quote("EXTERN_C const GUID DDPF_ARGB4444;") cpp_quote("EXTERN_C const GUID DDPF_RGB565;") cpp_quote("EXTERN_C const GUID DDPF_BGR565;") cpp_quote("EXTERN_C const GUID DDPF_RGB555;") cpp_quote("EXTERN_C const GUID DDPF_ARGB1555;") cpp_quote("EXTERN_C const GUID DDPF_RGB24;") cpp_quote("EXTERN_C const GUID DDPF_BGR24;") cpp_quote("EXTERN_C const GUID DDPF_RGB32;") cpp_quote("EXTERN_C const GUID DDPF_BGR32;") cpp_quote("EXTERN_C const GUID DDPF_ABGR32;") cpp_quote("EXTERN_C const GUID DDPF_ARGB32;") cpp_quote("EXTERN_C const GUID DDPF_PMARGB32;") cpp_quote("EXTERN_C const GUID DDPF_A1;") cpp_quote("EXTERN_C const GUID DDPF_A2;") cpp_quote("EXTERN_C const GUID DDPF_A4;") cpp_quote("EXTERN_C const GUID DDPF_A8;") cpp_quote("EXTERN_C const GUID DDPF_Z8;") cpp_quote("EXTERN_C const GUID DDPF_Z16;") cpp_quote("EXTERN_C const GUID DDPF_Z24;") cpp_quote("EXTERN_C const GUID DDPF_Z32;") cpp_quote("//") cpp_quote("// Component categories") cpp_quote("//") cpp_quote("EXTERN_C const GUID CATID_DXImageTransform;") cpp_quote("EXTERN_C const GUID CATID_DX3DTransform;") cpp_quote("EXTERN_C const GUID CATID_DXAuthoringTransform;") cpp_quote("EXTERN_C const GUID CATID_DXSurface;") cpp_quote("//") cpp_quote("// Service IDs") cpp_quote("//") cpp_quote("EXTERN_C const GUID SID_SDirectDraw;") cpp_quote("EXTERN_C const GUID SID_SDirect3DRM;") cpp_quote("#define SID_SDXTaskManager CLSID_DXTaskManager") cpp_quote("#define SID_SDXSurfaceFactory IID_IDXSurfaceFactory") cpp_quote("#define SID_SDXTransformFactory IID_IDXTransformFactory") cpp_quote("//") cpp_quote("// DXTransforms Core Type Library Version Info") cpp_quote("//") cpp_quote("#define DXTRANS_TLB_MAJOR_VER 1") cpp_quote("#define DXTRANS_TLB_MINOR_VER 1") //=== Struct & Enum definitions ============================================= //=== Interface definitions ================================================= //+----------------------------------------------------------------------------- // // IDXBaseObject // //------------------------------------------------------------------------------ [ object, uuid(17B59B2B-9CC8-11d1-9053-00C04FD9189D), helpstring("IDXBaseObject Interface"), pointer_default(unique), local ] interface IDXBaseObject : IUnknown { HRESULT GetGenerationId( [out]ULONG *pID); HRESULT IncrementGenerationId([in] BOOL bRefresh); HRESULT GetObjectSize( [out] ULONG *pcbSize); }; //+----------------------------------------------------------------------------- // // Bounding rectangle and vector structures. // //------------------------------------------------------------------------------ //--- Dimension identifiers typedef enum DXBNDID { DXB_X = 0, DXB_Y = 1, DXB_Z = 2, DXB_T = 3 } DXBNDID; //--- Bound types typedef enum DXBNDTYPE { DXBT_DISCRETE, DXBT_DISCRETE64, DXBT_CONTINUOUS, DXBT_CONTINUOUS64 } DXBNDTYPE; //--- Discrete bounds (image & sound) typedef struct DXDBND { long Min; long Max; } DXDBND; typedef DXDBND DXDBNDS[4]; typedef struct DXDBND64 { LONGLONG Min; LONGLONG Max; } DXDBND64; typedef DXDBND64 DXDBNDS64[4]; //--- Continuous bounds (geometry) typedef struct DXCBND { float Min; float Max; } DXCBND; typedef DXCBND DXCBNDS[4]; typedef struct DXCBND64 { double Min; double Max; } DXCBND64; typedef DXCBND64 DXCBNDS64[4]; //--- Combined space typedef union DXBNDS switch( DXBNDTYPE eType ) u { case DXBT_DISCRETE: DXDBND D[4]; case DXBT_DISCRETE64: DXDBND64 LD[4]; case DXBT_CONTINUOUS: DXCBND C[4]; case DXBT_CONTINUOUS64: DXCBND64 LC[4]; } DXBNDS; //--- Discrete 4D vector typedef long DXDVEC[4]; typedef LONGLONG DXDVEC64[4]; //--- Continous 4D vector typedef float DXCVEC[4]; typedef double DXCVEC64[4]; //--- Combined space vector typedef union DXVEC switch( DXBNDTYPE eType ) u { case DXBT_DISCRETE: long D[4]; case DXBT_DISCRETE64: LONGLONG LD[4]; case DXBT_CONTINUOUS: float C[4]; case DXBT_CONTINUOUS64: double LC[4]; } DXVEC; //+----------------------------------------------------------------------------- // // IDXTransformFactory // //------------------------------------------------------------------------------ [ object, uuid(6A950B2B-A971-11d1-81C8-0000F87557DB), helpstring("IDXTransformFactory Interface"), pointer_default(unique), local ] interface IDXTransformFactory : IServiceProvider { HRESULT SetService( [in]REFGUID guidService, [in]IUnknown *pUnkService, [in]BOOL bWeakReference); HRESULT CreateTransform( [in, size_is(ulNumInputs)]IUnknown** punkInputs, [in]ULONG ulNumInputs, [in, size_is(ulNumOutputs)]IUnknown** punkOutputs, [in]ULONG ulNumOutputs, [in]IPropertyBag* pInitProps, [in]IErrorLog* pErrLog, [in]REFCLSID TransCLSID, [in]REFIID TransIID, [out, iid_is(TransIID)]void** ppTransform ); HRESULT InitializeTransform( [in]IDXTransform* pTransform, [in, size_is(ulNumInputs)]IUnknown** punkInputs, [in]ULONG ulNumInputs, [in, size_is(ulNumOutputs)]IUnknown** punkOutputs, [in]ULONG ulNumOutputs, [in]IPropertyBag* pInitProps, [in]IErrorLog* pErrLog ); }; //+----------------------------------------------------------------------------- // // IDXTransform // //------------------------------------------------------------------------------ typedef enum DXTMISCFLAGS { DXTMF_BLEND_WITH_OUTPUT = ( 1L << 0 ), DXTMF_DITHER_OUTPUT = ( 1L << 1 ), DXTMF_OPTION_MASK = (0x0000FFFF), // Low word is settable options DXTMF_VALID_OPTIONS = (DXTMF_BLEND_WITH_OUTPUT | DXTMF_DITHER_OUTPUT), // // Status flags can not be changed by call to SetMiscFlags // DXTMF_BLEND_SUPPORTED = ( 1L << 16 ), DXTMF_DITHER_SUPPORTED = ( 1L << 17 ), DXTMF_INPLACE_OPERATION = ( 1L << 24 ), DXTMF_BOUNDS_SUPPORTED = ( 1L << 25 ), DXTMF_PLACEMENT_SUPPORTED = ( 1L << 26 ), DXTMF_QUALITY_SUPPORTED = ( 1L << 27 ), DXTMF_OPAQUE_RESULT = ( 1L << 28 ) } DXTMISCFLAGS; typedef enum DXINOUTINFOFLAGS { DXINOUTF_OPTIONAL = ( 1L << 0) } DXINOUTINFOFLAGS; [ object, uuid(30A5FB78-E11F-11d1-9064-00C04FD9189D), helpstring("IDXTransform Interface"), pointer_default(unique), local ] interface IDXTransform : IDXBaseObject { HRESULT Setup( [in, size_is(ulNumInputs)] IUnknown * const * punkInputs, [in]ULONG ulNumInputs, [in, size_is(ulNumOutputs)] IUnknown * const * punkOutputs, [in]ULONG ulNumOutputs, [in]DWORD dwFlags ); HRESULT Execute( [in]const GUID* pRequestID, [in]const DXBNDS *pClipBnds, [in]const DXVEC *pPlacement ); HRESULT MapBoundsIn2Out( [in] const DXBNDS *pInBounds, [in]ULONG ulNumInBnds, [in]ULONG ulOutIndex, [out]DXBNDS *pOutBounds ); HRESULT MapBoundsOut2In( [in] ULONG ulOutIndex, [in] const DXBNDS *pOutBounds, [in] ULONG ulInIndex, [out]DXBNDS *pInBounds ); HRESULT SetMiscFlags( [in] DWORD dwMiscFlags); HRESULT GetMiscFlags( [out]DWORD * pdwMiscFlags ); HRESULT GetInOutInfo( [in]BOOL bIsOutput, [in]ULONG ulIndex, [out]DWORD *pdwFlags, [out, size_is(*pcIDs)] GUID *pIDs, [in, out] ULONG *pcIDs, [out] IUnknown **ppUnkCurrentObject); HRESULT SetQuality( [in] float fQuality ); HRESULT GetQuality( [out] float * fQuality ); }; //+----------------------------------------------------------------------------- // // IDXSurfacePick // //------------------------------------------------------------------------------ [ object, uuid(30A5FB79-E11F-11d1-9064-00C04FD9189D), helpstring("IDXSurfacePick Interface"), pointer_default(unique), local ] interface IDXSurfacePick : IUnknown { HRESULT PointPick([in]const DXVEC *pPoint, [out]ULONG * pulInputSurfaceIndex, [out]DXVEC *pInputPoint); }; //+----------------------------------------------------------------------------- // // IDXTBindHost // // Overview: // This interface is used to set a site-specific bind host for a transform. // Only transforms that need access to a bind host need to implement this // interface. // // For some reason, MIDL does not like IBindHost, so we've declared this // interface local. // //------------------------------------------------------------------------------ [ object, uuid(D26BCE55-E9DC-11d1-9066-00C04FD9189D), helpstring("IDXTBindHost Interface"), pointer_default(unique), local ] interface IDXTBindHost : IUnknown { HRESULT SetBindHost([in] IBindHost * pBindHost); }; //+----------------------------------------------------------------------------- // // IDXTaskManager // // Overview: // This interface is used to implement a task managment service provider to // optimize thread usage. // //------------------------------------------------------------------------------ typedef void (__stdcall DXTASKPROC)(void *pTaskData, BOOL* pbContinueProcessing ); typedef DXTASKPROC *PFNDXTASKPROC; typedef void (__stdcall DXAPCPROC)(DWORD dwData); typedef DXAPCPROC *PFNDXAPCPROC; cpp_quote("#ifdef __cplusplus") cpp_quote("typedef struct DXTMTASKINFO" ) cpp_quote("{") cpp_quote(" PFNDXTASKPROC pfnTaskProc; // Pointer to function to execute") cpp_quote(" PVOID pTaskData; // Pointer to argument data") cpp_quote(" PFNDXAPCPROC pfnCompletionAPC; // Pointer to completion APC proc") cpp_quote(" DWORD dwCompletionData; // Pointer to APC proc data") cpp_quote(" const GUID* pRequestID; // Used to identify groups of tasks") cpp_quote("} DXTMTASKINFO;") cpp_quote("#else") typedef struct DXTMTASKINFO { PVOID pfnTaskProc; // Pointer to function to execute PVOID pTaskData; // Pointer to argument data PVOID pfnCompletionAPC; // Pointer to completion APC proc DWORD dwCompletionData; // Pointer to APC proc data const GUID* pRequestID; // Used to identify groups of tasks } DXTMTASKINFO; cpp_quote("#endif") [ object, uuid(254DBBC1-F922-11d0-883A-3C8B00C10000), helpstring("IDXTaskManager Interface"), pointer_default(unique), local ] interface IDXTaskManager : IUnknown { HRESULT QueryNumProcessors( [out]ULONG* pulNumProc ); HRESULT SetThreadPoolSize( [in]ULONG ulNumThreads ); HRESULT GetThreadPoolSize( [out]ULONG* pulNumThreads ); HRESULT SetConcurrencyLimit( [in]ULONG ulNumThreads ); HRESULT GetConcurrencyLimit( [out]ULONG* pulNumThreads ); HRESULT ScheduleTasks( [in]DXTMTASKINFO TaskInfo[], [in]HANDLE Events[], [out]DWORD TaskIDs[], [in]ULONG ulNumTasks, [in]ULONG ulWaitPeriod ); HRESULT TerminateTasks( [in]DWORD TaskIDs[], [in]ULONG ulCount, [in]ULONG ulTimeOut ); HRESULT TerminateRequest( [in]REFIID RequestID, [in]ULONG ulTimeOut ); }; //+----------------------------------------------------------------------------- // // Sample structures (C++) // // Overview: // We want an operator so that we can cast from a DXSAMPLE to a DWORD, so // for C++ we will define the structure a special way. // //------------------------------------------------------------------------------ cpp_quote("#ifdef __cplusplus") cpp_quote("/////////////////////////////////////////////////////") cpp_quote("") cpp_quote("class DXBASESAMPLE;") cpp_quote("class DXSAMPLE;") cpp_quote("class DXPMSAMPLE;") cpp_quote("") cpp_quote("/////////////////////////////////////////////////////") cpp_quote("") cpp_quote("class DXBASESAMPLE") cpp_quote("{") cpp_quote("public:") cpp_quote(" BYTE Blue;") cpp_quote(" BYTE Green;") cpp_quote(" BYTE Red;") cpp_quote(" BYTE Alpha;") cpp_quote(" DXBASESAMPLE() {}") cpp_quote(" DXBASESAMPLE(const BYTE alpha, const BYTE red, const BYTE green, const BYTE blue) :") cpp_quote(" Alpha(alpha),") cpp_quote(" Red(red),") cpp_quote(" Green(green),") cpp_quote(" Blue(blue) {}") cpp_quote(" DXBASESAMPLE(const DWORD val) { *this = (*(DXBASESAMPLE *)&val); }") cpp_quote(" operator DWORD () const {return *((DWORD *)this); }") cpp_quote(" DWORD operator=(const DWORD val) { return *this = *((DXBASESAMPLE *)&val); }") cpp_quote("}; // DXBASESAMPLE") cpp_quote("") cpp_quote("/////////////////////////////////////////////////////") cpp_quote("") cpp_quote("class DXSAMPLE : public DXBASESAMPLE") cpp_quote("{") cpp_quote("public:") cpp_quote(" DXSAMPLE() {}") cpp_quote(" DXSAMPLE(const BYTE alpha, const BYTE red, const BYTE green, const BYTE blue) :") cpp_quote(" DXBASESAMPLE(alpha, red, green, blue) {}") cpp_quote(" DXSAMPLE(const DWORD val) { *this = (*(DXSAMPLE *)&val); }") cpp_quote(" operator DWORD () const {return *((DWORD *)this); }") cpp_quote(" DWORD operator=(const DWORD val) { return *this = *((DXSAMPLE *)&val); }") cpp_quote(" operator DXPMSAMPLE() const;") cpp_quote("}; // DXSAMPLE") cpp_quote("") cpp_quote("/////////////////////////////////////////////////////") cpp_quote("") cpp_quote("class DXPMSAMPLE : public DXBASESAMPLE") cpp_quote("{") cpp_quote("public:") cpp_quote(" DXPMSAMPLE() {}") cpp_quote(" DXPMSAMPLE(const BYTE alpha, const BYTE red, const BYTE green, const BYTE blue) :") cpp_quote(" DXBASESAMPLE(alpha, red, green, blue) {}") cpp_quote(" DXPMSAMPLE(const DWORD val) { *this = (*(DXPMSAMPLE *)&val); }") cpp_quote(" operator DWORD () const {return *((DWORD *)this); }") cpp_quote(" DWORD operator=(const DWORD val) { return *this = *((DXPMSAMPLE *)&val); }") cpp_quote(" operator DXSAMPLE() const;") cpp_quote("}; // DXPMSAMPLE") cpp_quote("") cpp_quote("//") cpp_quote("// The following cast operators are to prevent a direct assignment of a DXSAMPLE to a DXPMSAMPLE") cpp_quote("//") cpp_quote("inline DXSAMPLE::operator DXPMSAMPLE() const { return *((DXPMSAMPLE *)this); }") cpp_quote("inline DXPMSAMPLE::operator DXSAMPLE() const { return *((DXSAMPLE *)this); }") //+----------------------------------------------------------------------------- // // Sample structures (IDL, C) // //------------------------------------------------------------------------------ cpp_quote("#else // !__cplusplus") typedef struct DXBASESAMPLE { BYTE Blue; BYTE Green; BYTE Red; BYTE Alpha; } DXBASESAMPLE; typedef struct DXSAMPLE { BYTE Blue; BYTE Green; BYTE Red; BYTE Alpha; } DXSAMPLE; typedef struct DXPMSAMPLE { BYTE Blue; BYTE Green; BYTE Red; BYTE Alpha; } DXPMSAMPLE; cpp_quote("#endif // !__cplusplus") //+----------------------------------------------------------------------------- // // DXRUNINFO structures. // //------------------------------------------------------------------------------ typedef enum DXRUNTYPE { DXRUNTYPE_CLEAR = 0, // The run is zero Alpha DXRUNTYPE_OPAQUE = 1, // The run is full Alpha (i.e. 255) DXRUNTYPE_TRANS = 2, // The run is non-zero Alpha DXRUNTYPE_UNKNOWN= 3 // The run type is unknown. Caller must inspect. } DXRUNTYPE; const ULONG DX_MAX_RUN_INFO_COUNT = 128; // Defines the maximum number of RUNINFOs in a single row cpp_quote("// Ignore the definition used by MIDL for TLB generation") cpp_quote("#if 0") typedef struct DXRUNINFO { ULONG Bitfields; } DXRUNINFO; cpp_quote("#endif // 0") // Emit the C definition to the H file directly, as bit fields are not // supported by MIDL. cpp_quote("typedef struct DXRUNINFO") cpp_quote("{") cpp_quote(" ULONG Type : 2; // Type") cpp_quote(" ULONG Count : 30; // Number of samples in run") cpp_quote("} DXRUNINFO;") typedef enum DXSFCREATE { DXSF_FORMAT_IS_CLSID = ( 1L << 0 ), DXSF_NO_LAZY_DDRAW_LOCK = ( 1L << 1 ) } DXSFCREATE; typedef enum DXBLTOPTIONS { DXBOF_DO_OVER = (1L << 0), DXBOF_DITHER = (1L << 1) } DXBLTOPTIONS; //+----------------------------------------------------------------------------- // // IDXSurfaceModifier // //------------------------------------------------------------------------------ [ object, uuid(144946F5-C4D4-11d1-81D1-0000F87557DB), helpstring("IDXSurfaceFactory Interface"), pointer_default(unique), local ] interface IDXSurfaceFactory : IUnknown { HRESULT CreateSurface([in] IUnknown *pDirectDraw, [in] const DDSURFACEDESC * pDDSurfaceDesc, [in] const GUID * pFormatID, [in] const DXBNDS *pBounds, [in] DWORD dwFlags, [in] IUnknown *punkOuter, [in] REFIID riid, [out, iid_is( riid )] void ** ppDXSurface); HRESULT CreateFromDDSurface([in] IUnknown *pDDrawSurface, [in] const GUID *pFormatID, [in] DWORD dwFlags, [in] IUnknown *punkOuter, [in] REFIID riid, [out, iid_is( riid )] void ** ppDXSurface); HRESULT LoadImage( [in] const LPWSTR pszFileName, [in] IUnknown *pDirectDraw, [in] const DDSURFACEDESC * pDDSurfaceDesc, [in] const GUID *pFormatID, [in] REFIID riid, [out, iid_is( riid )] void ** ppDXSurface); HRESULT LoadImageFromStream([in] IStream *pStream, [in] IUnknown *pDirectDraw, [in] const DDSURFACEDESC * pDDSurfaceDesc, [in] const GUID *pFormatID, [in] REFIID riid, [out, iid_is( riid )] void ** ppDXSurface); HRESULT CopySurfaceToNewFormat( [in]IDXSurface* pSrc, [in] IUnknown *pDirectDraw, [in] const DDSURFACEDESC * pDDSurfaceDesc, [in] const GUID *pDestFormatID, [out] IDXSurface** ppNewSurface ); HRESULT CreateD3DRMTexture([in] IDXSurface *pSrc, [in] IUnknown *pDirectDraw, [in] IUnknown *pD3DRM3, [in] REFIID riid, [out, iid_is(riid)] void **ppTexture3); HRESULT BitBlt([in] IDXSurface *pDest, [in] const DXVEC *pPlacement, [in] IDXSurface *pSrc, [in] const DXBNDS *pClipBounds, [in] DWORD dwFlags); }; //+----------------------------------------------------------------------------- // // IDXSurfaceModifier // //------------------------------------------------------------------------------ typedef enum DXSURFMODCOMPOP { DXSURFMOD_COMP_OVER = 0, DXSURFMOD_COMP_ALPHA_MASK = 1, DXSURFMOD_COMP_MAX_VALID = 1 } DXSURFMODCOMPOP; [ object, uuid(9EA3B637-C37D-11d1-905E-00C04FD9189D), helpstring("IDXSurfaceModifier Interface"), pointer_default(unique), local ] interface IDXSurfaceModifier : IUnknown { HRESULT SetFillColor([in] DXSAMPLE Color); HRESULT GetFillColor([out] DXSAMPLE *pColor); HRESULT SetBounds([in] const DXBNDS *pBounds ); // Get supported though IDXSurface interface HRESULT SetBackground([in] IDXSurface *pSurface); HRESULT GetBackground([out] IDXSurface **ppSurface); HRESULT SetCompositeOperation([in] DXSURFMODCOMPOP CompOp); HRESULT GetCompositeOperation([out] DXSURFMODCOMPOP *pCompOp); // // The following methods only apply to the FOREGROUND surface // HRESULT SetForeground([in] IDXSurface *pSurface, [in] BOOL bTile, [in] const POINT * pOrigin); HRESULT GetForeground([out] IDXSurface **ppSurface, [out] BOOL *pbTile, [out] POINT * pOrigin); HRESULT SetOpacity([in] float Opacity); HRESULT GetOpacity([out] float *pOpacity); HRESULT SetLookup( [in]IDXLookupTable * pLookupTable ); HRESULT GetLookup( [out]IDXLookupTable ** ppLookupTable ); }; //+----------------------------------------------------------------------------- // // IDXSurface // //------------------------------------------------------------------------------ typedef enum DXSAMPLEFORMATENUM { DXPF_FLAGSMASK = (0xFFFF0000), // Top word is flags, low word is enum DXPF_NONPREMULT = (0x00010000), // Flags to be OR'd with pixel formats DXPF_TRANSPARENCY = (0x00020000), // Color key or one-bit alpha (alpha only 0 or 0xFF) DXPF_TRANSLUCENCY = (0x00040000), // Alpha can be any value from 0->0xFF // // This 3-bit field is used to determine what type of dithering to be used // DXPF_2BITERROR = (0x00200000), // 2 bits of error term DXPF_3BITERROR = (0x00300000), // 3 bits of error term for color (16-bit color) DXPF_4BITERROR = (0x00400000), // 4 bits of error term (ARGB 4444) DXPF_5BITERROR = (0x00500000), // 5 bits of error term for color (8-bit color) DXPF_ERRORMASK = (0x00700000), // Mask of bits used for dithering DXPF_NONSTANDARD = (0), // To be used for any surface that is not one of the following formats // This can be combined with DXPFNONPREMULT if the surface can work // better in non-premultiplied space. DXPF_PMARGB32 = (1 | DXPF_TRANSPARENCY | DXPF_TRANSLUCENCY), DXPF_ARGB32 = (2 | DXPF_NONPREMULT | DXPF_TRANSPARENCY | DXPF_TRANSLUCENCY), DXPF_ARGB4444 = (3 | DXPF_NONPREMULT | DXPF_TRANSPARENCY | DXPF_TRANSLUCENCY | DXPF_4BITERROR), DXPF_A8 = (4 | DXPF_TRANSPARENCY | DXPF_TRANSLUCENCY), DXPF_RGB32 = (5), DXPF_RGB24 = (6), DXPF_RGB565 = (7 | DXPF_3BITERROR), DXPF_RGB555 = (8 | DXPF_3BITERROR), DXPF_RGB8 = (9 | DXPF_5BITERROR), DXPF_ARGB1555 = (10 | DXPF_TRANSPARENCY | DXPF_3BITERROR), DXPF_RGB32_CK = (DXPF_RGB32 | DXPF_TRANSPARENCY), DXPF_RGB24_CK = (DXPF_RGB24 | DXPF_TRANSPARENCY), DXPF_RGB555_CK = (DXPF_RGB555 | DXPF_TRANSPARENCY), DXPF_RGB565_CK = (DXPF_RGB565 | DXPF_TRANSPARENCY), DXPF_RGB8_CK = (DXPF_RGB8 | DXPF_TRANSPARENCY) } DXSAMPLEFORMATENUM; typedef enum DXLOCKSURF { DXLOCKF_READ = 0, DXLOCKF_READWRITE = (1 << 0), DXLOCKF_EXISTINGINFOONLY = (1 << 1), // If used in conjunction with WANTRUNINFO will prevent creation of a runmap if one does not exist DXLOCKF_WANTRUNINFO = (1 << 2), // // The flags in the high word should be specific to the type of pointer that // is requested. These flags define ARGB flags. These flags are advisory and // are not required to be set for ARGB locks. // DXLOCKF_NONPREMULT = (1 << 16), // Caller will request non-premultiplied data DXLOCKF_VALIDFLAGS = (DXLOCKF_READWRITE | DXLOCKF_EXISTINGINFOONLY | DXLOCKF_WANTRUNINFO | DXLOCKF_NONPREMULT) } DXLOCKSURF; typedef enum DXSURFSTATUS { DXSURF_TRANSIENT = (1 << 0), // Data in this surface changes often. DXSURF_READONLY = (1 << 1), // Surface is read-only DXSURF_VALIDFLAGS = (DXSURF_TRANSIENT | DXSURF_READONLY) } DXSURFSTATUS; [ object, uuid(B39FD73F-E139-11d1-9065-00C04FD9189D), helpstring("IDXSurface Interface"), pointer_default(unique), local ] interface IDXSurface : IDXBaseObject { HRESULT GetPixelFormat([out] GUID * pFormatID, [out] DXSAMPLEFORMATENUM *pSampleFormatEnum); HRESULT GetBounds( [out]DXBNDS *pBounds ); HRESULT GetStatusFlags([out] DWORD * pdwStatusFlags); HRESULT SetStatusFlags([in] DWORD dwStatusFlags); HRESULT LockSurface( [in]const DXBNDS *pBounds, [in]ULONG ulTimeOut, [in]DWORD dwFlags, [in]REFIID riid, [out, iid_is(riid)] void **ppPointer, [out]ULONG* pulGenerationId ); HRESULT GetDirectDrawSurface( [in] REFIID riid, [out, iid_is(riid)] void ** ppSurface); HRESULT GetColorKey(DXSAMPLE * pColorKey); // Can return E_NOTIMPL HRESULT SetColorKey(DXSAMPLE ColorKey); // Set color of 0 to get rid of color key, can return E_NOTIMPL HRESULT LockSurfaceDC( [in] const DXBNDS *pBounds, [in]ULONG ulTimeOut, [in] DWORD dwFlags, [out] IDXDCLock **ppDCLock); HRESULT SetAppData(DWORD_PTR dwAppData); HRESULT GetAppData(DWORD_PTR *pdwAppData); }; //+----------------------------------------------------------------------------- // // IDXSurfaceInit // //------------------------------------------------------------------------------ [ object, uuid(9EA3B639-C37D-11d1-905E-00C04FD9189D), helpstring("IDXSurfaceInit Interface"), pointer_default(unique), local ] interface IDXSurfaceInit : IUnknown { HRESULT InitSurface([in] IUnknown *pDirectDraw, [in] const DDSURFACEDESC *pDDSurfaceDesc, [in] const GUID * pFormatID, [in] const DXBNDS *pBounds, [in] DWORD dwFlags); }; //+----------------------------------------------------------------------------- // // IDXARGBSurfaceInit // //------------------------------------------------------------------------------ [ object, uuid(9EA3B63A-C37D-11d1-905E-00C04FD9189D), helpstring("IDXARGBSurfaceInit Interface"), pointer_default(unique), local ] interface IDXARGBSurfaceInit : IDXSurfaceInit { HRESULT InitFromDDSurface( [in] IUnknown *pDDrawSurface, [in] const GUID * pFormatID, [in] DWORD dwFlags); HRESULT InitFromRawSurface([in] IDXRawSurface *pRawSurface); }; //+----------------------------------------------------------------------------- // // IDXARGBReadPtr // //------------------------------------------------------------------------------ typedef struct tagDXNATIVETYPEINFO { BYTE * pCurrentData; BYTE * pFirstByte; long lPitch; DWORD dwColorKey; } DXNATIVETYPEINFO; typedef struct tagDXPACKEDRECTDESC { DXBASESAMPLE *pSamples; BOOL bPremult; RECT rect; long lRowPadding; } DXPACKEDRECTDESC; typedef struct tagDXOVERSAMPLEDESC { POINT p; DXPMSAMPLE Color; } DXOVERSAMPLEDESC; [ object, uuid(EAAAC2D6-C290-11d1-905D-00C04FD9189D), helpstring("IDXARGBReadPtr Interface"), pointer_default(unique), local ] interface IDXARGBReadPtr : IUnknown { HRESULT GetSurface( [in]REFIID riid, [out, iid_is( riid )]void ** ppSurface); DXSAMPLEFORMATENUM GetNativeType( [out]DXNATIVETYPEINFO *pInfo ); void Move( [in]long cSamples ); void MoveToRow( [in]ULONG y ); void MoveToXY( [in]ULONG x, [in]ULONG y); ULONG MoveAndGetRunInfo( [in]ULONG Row, [out] const DXRUNINFO** ppInfo ); // Returns count of runs DXSAMPLE * Unpack( [in]DXSAMPLE* pSamples, [in]ULONG cSamples, [in]BOOL bMove ); DXPMSAMPLE * UnpackPremult( [in]DXPMSAMPLE* pSamples, [in]ULONG cSamples, [in]BOOL bMove ); void UnpackRect([in] const DXPACKEDRECTDESC * pRectDesc); }; //+----------------------------------------------------------------------------- // // IDXARGBReadWritePtr // //------------------------------------------------------------------------------ [ object, uuid(EAAAC2D7-C290-11d1-905D-00C04FD9189D), helpstring("IDXARGBReadWritePtr Interface"), pointer_default(unique), local ] interface IDXARGBReadWritePtr : IDXARGBReadPtr { void PackAndMove( [in]const DXSAMPLE *pSamples, [in]ULONG cSamples ); void PackPremultAndMove( [in]const DXPMSAMPLE *pSamples, [in]ULONG cSamples ); void PackRect([in]const DXPACKEDRECTDESC *pRectDesc); void CopyAndMoveBoth( [in]DXBASESAMPLE *pScratchBuffer, [in]IDXARGBReadPtr *pSrc, [in]ULONG cSamples, [in]BOOL bIsOpaque ); void CopyRect( [in] DXBASESAMPLE *pScratchBuffer, [in] const RECT *pDestRect, [in]IDXARGBReadPtr *pSrc, [in] const POINT *pSrcOrigin, [in]BOOL bIsOpaque); void FillAndMove( [in]DXBASESAMPLE *pScratchBuffer, [in]DXPMSAMPLE SampVal, [in]ULONG cSamples, [in]BOOL bDoOver ); void FillRect( [in]const RECT *pRect, [in]DXPMSAMPLE SampVal, [in]BOOL bDoOver ); void OverSample( [in]const DXOVERSAMPLEDESC * pOverDesc); void OverArrayAndMove([in]DXBASESAMPLE *pScratchBuffer, [in] const DXPMSAMPLE *pSrc, [in] ULONG cSamples); }; //+----------------------------------------------------------------------------- // // IDXDCLock // //------------------------------------------------------------------------------ [ object, uuid(0F619456-CF39-11d1-905E-00C04FD9189D), helpstring("IDXDCLock Interface"), pointer_default(unique), local ] interface IDXDCLock : IUnknown { HDC GetDC(void); }; //+----------------------------------------------------------------------------- // // IDXTScaleOutput // // Overview: // Generic interface that any transform can support which allows caller to // specify the desired output bounds. //------------------------------------------------------------------------------ [ object, uuid(B2024B50-EE77-11d1-9066-00C04FD9189D), helpstring("IDXTScaleOutput Interface"), pointer_default(unique), local ] interface IDXTScaleOutput : IUnknown { HRESULT SetOutputSize([in] const SIZE OutSize, [in] BOOL bMaintainAspect); }; //+----------------------------------------------------------------------------- // // IDXGradient // //------------------------------------------------------------------------------ [ object, uuid(B2024B51-EE77-11d1-9066-00C04FD9189D), helpstring("IDXGradient Interface"), pointer_default(unique), local ] interface IDXGradient : IDXTScaleOutput { HRESULT SetGradient(DXSAMPLE StartColor, DXSAMPLE EndColor, BOOL bHorizontal); HRESULT GetOutputSize([out] SIZE *pOutSize); }; //+----------------------------------------------------------------------------- // // IDXTScale // // Overview: // This is the control interface for the simple scale transform. // //------------------------------------------------------------------------------ [ object, uuid(B39FD742-E139-11d1-9065-00C04FD9189D), helpstring("IDXTScale Interface"), pointer_default(unique), local ] interface IDXTScale : IUnknown { HRESULT SetScales( [in]float Scales[2] ); HRESULT GetScales( [out]float Scales[2] ); HRESULT ScaleFitToSize( [in,out]DXBNDS* pClipBounds, [in]SIZE FitToSize, [in]BOOL bMaintainAspect ); }; //+----------------------------------------------------------------------------- // // IDXEffect // // Overview: // This interface is used to generically control transforms that are // transition effects. // //------------------------------------------------------------------------------ typedef enum DISPIDDXEFFECT { DISPID_DXECAPABILITIES = 10000, // Start at 10000 to avoid conflicts with inhereted interfaces DISPID_DXEPROGRESS, DISPID_DXESTEP, DISPID_DXEDURATION, DISPID_DXE_NEXT_ID } DISPIDDXBOUNDEDEFFECT; typedef enum DXEFFECTTYPE { DXTET_PERIODIC = (1 << 0), // Result at 1 is same as result at 0 DXTET_MORPH = (1 << 1) // Transition between 2 inputs (input 0 to input 1) } DXEFFECTTYPE; [ object, uuid(E31FB81B-1335-11d1-8189-0000F87557DB), helpstring("IDXEffect Interface"), pointer_default(unique), dual ] interface IDXEffect : IDispatch { [propget, id(DISPID_DXECAPABILITIES)] HRESULT Capabilities([out, retval] long *pVal); [propget, id(DISPID_DXEPROGRESS)] HRESULT Progress([out, retval] float *pVal); [propput, id(DISPID_DXEPROGRESS)] HRESULT Progress([in] float newVal); [propget, id(DISPID_DXESTEP)] HRESULT StepResolution([out, retval] float *pVal); [propget, id(DISPID_DXEDURATION)] HRESULT Duration([out, retval] float *pVal); [propput, id(DISPID_DXEDURATION)] HRESULT Duration([in] float newVal); }; //+----------------------------------------------------------------------------- // // IDXLookupTable // //------------------------------------------------------------------------------ [ object, uuid(01BAFC7F-9E63-11d1-9053-00C04FD9189D), helpstring("IDXLookupTable Interface"), pointer_default(unique), local ] interface IDXLookupTable : IDXBaseObject { HRESULT GetTables( [out]BYTE RedLUT[256], [out]BYTE GreenLUT[256], [out]BYTE BlueLUT[256], [out]BYTE AlphaLUT[256] ); HRESULT IsChannelIdentity([out] DXBASESAMPLE * pSampleBools); HRESULT GetIndexValues([in] ULONG Index, [out] DXBASESAMPLE *pSample); HRESULT ApplyTables([in, out] DXSAMPLE *pSamples, [in] ULONG cSamples); }; //+----------------------------------------------------------------------------- // // IDXRawSurface // // Overview: // User created objects support IDXRawSurface // //------------------------------------------------------------------------------ typedef struct DXRAWSURFACEINFO { BYTE * pFirstByte; long lPitch; ULONG Width; ULONG Height; const GUID * pPixelFormat; HDC hdc; DWORD dwColorKey; // Note: High byte must == 0xFF for color keyed surface. Low 3 bytes are native data type. DXBASESAMPLE * pPalette; } DXRAWSURFACEINFO; [ object, uuid(09756C8A-D96A-11d1-9062-00C04FD9189D), helpstring("IDXRawSurface Interface"), pointer_default(unique), local ] interface IDXRawSurface : IUnknown { HRESULT GetSurfaceInfo(DXRAWSURFACEINFO * pSurfaceInfo); }; //+----------------------------------------------------------------------------- // // IHTMLDXTransform // //------------------------------------------------------------------------------ [ object, uuid(30E2AB7D-4FDD-4159-B7EA-DC722BF4ADE5), helpstring("IHTMLDXTransform Interface"), pointer_default(unique), local ] interface IHTMLDXTransform : IUnknown { HRESULT SetHostUrl(BSTR bstrHostUrl); }; //+----------------------------------------------------------------------------- // // ICSSFilterDispatch // //------------------------------------------------------------------------------ typedef enum DXTFILTER_STATUS { DXTFILTER_STATUS_Stopped = 0, DXTFILTER_STATUS_Applied, DXTFILTER_STATUS_Playing, DXTFILTER_STATUS_MAX } DXTFILTER_STATUS; typedef enum DXTFILTER_DISPID { DISPID_DXTFilter_Percent = 1, DISPID_DXTFilter_Duration, DISPID_DXTFilter_Enabled, DISPID_DXTFilter_Status, DISPID_DXTFilter_Apply, DISPID_DXTFilter_Play, DISPID_DXTFilter_Stop, DISPID_DXTFilter_MAX } DXTFILTER_DISPID; [ object, uuid(9519152B-9484-4A6C-B6A7-4F25E92D6C6B), helpstring("ICSSFilterDispatch Interface"), pointer_default(unique), dual ] interface ICSSFilterDispatch : IDispatch { [propget, id(DISPID_DXTFilter_Percent)] HRESULT Percent( [out, retval] float *pVal); [propput, id(DISPID_DXTFilter_Percent)] HRESULT Percent( [in] float newVal); [propget, id(DISPID_DXTFilter_Duration)] HRESULT Duration([out, retval] float *pVal); [propput, id(DISPID_DXTFilter_Duration)] HRESULT Duration([in] float newVal); [propget, id(DISPID_DXTFilter_Enabled)] HRESULT Enabled( [out, retval] VARIANT_BOOL *pfVal); [propput, id(DISPID_DXTFilter_Enabled)] HRESULT Enabled( [in] VARIANT_BOOL fVal); [propget, id(DISPID_DXTFilter_Status)] HRESULT Status( [out, retval] DXTFILTER_STATUS * peVal); [id(DISPID_DXTFilter_Apply)] HRESULT Apply(); [id(DISPID_DXTFilter_Play)] HRESULT Play([in, optional] VARIANT varDuration); [id(DISPID_DXTFilter_Stop)] HRESULT Stop(); }; //=== CoClass definitions ================================================= [ uuid(54314D1D-35FE-11d1-81A1-0000F87557DB), version(1.1), helpstring("Microsoft DirectX Transforms Core Type Library") ] library DXTRANSLib { importlib("stdole2.tlb"); /////////////////////////////// // DXTransformFactory CoClass /////////////////////////////// [ uuid(D1FE6762-FC48-11D0-883A-3C8B00C10000), helpstring("DXTransformFactory Class") ] coclass DXTransformFactory { [default] interface IDXTransformFactory; interface IDXSurfaceFactory; }; /////////////////////////////// // DXTaskManager CoClass /////////////////////////////// [ uuid(4CB26C03-FF93-11d0-817E-0000F87557DB), helpstring("DXTaskManager Class") ] coclass DXTaskManager { [default] interface IDXTaskManager; }; /////////////////////////////// // DXTScale CoClass /////////////////////////////// [ uuid(555278E2-05DB-11D1-883A-3C8B00C10000), helpstring("DXTScale Class") ] coclass DXTScale { [default] interface IDXTScale; }; /////////////////////////////// // DXSurface CoClass /////////////////////////////// [ uuid(0E890F83-5F79-11D1-9043-00C04FD9189D), helpstring("DXSurface Class") ] coclass DXSurface { [default] interface IDXSurface; }; /////////////////////////////// // DXSurfaceModifier CoClass /////////////////////////////// [ uuid(3E669F1D-9C23-11d1-9053-00C04FD9189D), helpstring("DXSurfaceModifier Class") ] coclass DXSurfaceModifier { [default] interface IDXSurfaceModifier; }; /////////////////////////////// // DXGradient CoClass /////////////////////////////// [ uuid(C6365470-F667-11d1-9067-00C04FD9189D), helpstring("DXGradient Class") ] coclass DXGradient { [default] interface IDXGradient; }; /////////////////////////////// // DXTFilter CoClass /////////////////////////////// [ uuid(385A91BC-1E8A-4e4a-A7A6-F4FC1E6CA1BD), helpstring("DXTFilter Class") ] coclass DXTFilter { [default] interface ICSSFilterDispatch; }; };