home *** CD-ROM | disk | FTP | other *** search
/ Beginning Direct3D Game Programming / Direct3D.iso / directx / dxf / include / dshowidl / dxtrans.idl < prev    next >
Text File  |  2000-09-21  |  37KB  |  1,060 lines

  1. /*****************************************************************************
  2. * DXTrans.idl *
  3. *-------------*
  4. *
  5. *   Description:
  6. *       This is the IDL file for DirectX installable transform coclass,
  7. *   interface, and type definitions.
  8. *
  9. *   History:
  10. *   09/02/1999  a-matcal    Added IDXTFilterBehavior, IDXTFilter interfaces.
  11. *                           Added CDXTFilterFactory, CDXTFilterBehavior,
  12. *                                 CDXTFilter coclasses.
  13. *
  14. *-----------------------------------------------------------------------------
  15. *   Creation: EWC 07/07/97
  16. *   Copyright Microsoft Corporation 1997-1999
  17. *   All rights reserved.
  18. *
  19. *****************************************************************************/
  20. cpp_quote("#include <servprov.h>")
  21. cpp_quote("#include <ddraw.h>")
  22. cpp_quote("#include <d3d.h>")
  23. cpp_quote("#include <d3drm.h>")
  24. cpp_quote("#include <urlmon.h>")
  25.  
  26. //--- Import base idl
  27. import "oaidl.idl";
  28. import "ocidl.idl";
  29. import "servprov.idl";
  30. import "comcat.idl";
  31.  
  32. //
  33. //  Since direct draw does not have an IDL, we'll define DDSURFACEDESC to
  34. //  be a void, but include ddraw.h in the header file.  This makes MIDL happy.
  35. //
  36. #ifndef DDSURFACEDESC
  37. cpp_quote("#if 0")
  38. cpp_quote("// Bogus definition used to make MIDL compiler happy")
  39. typedef void DDSURFACEDESC;
  40. typedef void D3DRMBOX;
  41. typedef void D3DVECTOR;
  42. typedef void D3DRMMATRIX4D;
  43. typedef void* LPSECURITY_ATTRIBUTES;
  44. cpp_quote("#endif")
  45. #endif
  46. //--- Additional includes
  47.  
  48. //--- Export
  49. cpp_quote( "#ifdef _DXTRANSIMPL")
  50. cpp_quote( "    #define _DXTRANS_IMPL_EXT _declspec(dllexport)")
  51. cpp_quote( "#else")
  52. cpp_quote( "    #define _DXTRANS_IMPL_EXT _declspec(dllimport)")
  53. cpp_quote( "#endif")
  54.  
  55. //=== Forward References ====================================================
  56. interface IDXTransformFactory;
  57. interface IDXTransform;
  58. interface IDXTaskManager;
  59. interface IDXSurfaceFactory;
  60. interface IDXSurface;
  61. interface IDXARGBSurfaceInit;
  62. interface IDXRawSurface;
  63. interface IDXARGBReadPtr;
  64. interface IDXARGBReadWritePtr;
  65. interface IDXDCLock;
  66. interface IDXTScale;
  67. interface IDXLookupTable;
  68. interface IDXTBindHost;
  69. interface IBindHost;
  70. interface IDXTScaleOutput;
  71. interface IDXGradient;
  72.  
  73. //=== Constants =============================================================
  74.  
  75. cpp_quote("//")
  76. cpp_quote("//   All GUIDs for DXTransform are declared in DXTGUID.C in the SDK include directory")
  77. cpp_quote("//")
  78. cpp_quote("EXTERN_C const GUID DDPF_RGB1;") 
  79. cpp_quote("EXTERN_C const GUID DDPF_RGB2;") 
  80. cpp_quote("EXTERN_C const GUID DDPF_RGB4;") 
  81. cpp_quote("EXTERN_C const GUID DDPF_RGB8;") 
  82. cpp_quote("EXTERN_C const GUID DDPF_RGB332;") 
  83. cpp_quote("EXTERN_C const GUID DDPF_ARGB4444;") 
  84. cpp_quote("EXTERN_C const GUID DDPF_RGB565;") 
  85. cpp_quote("EXTERN_C const GUID DDPF_BGR565;") 
  86. cpp_quote("EXTERN_C const GUID DDPF_RGB555;") 
  87. cpp_quote("EXTERN_C const GUID DDPF_ARGB1555;") 
  88. cpp_quote("EXTERN_C const GUID DDPF_RGB24;") 
  89. cpp_quote("EXTERN_C const GUID DDPF_BGR24;") 
  90. cpp_quote("EXTERN_C const GUID DDPF_RGB32;") 
  91. cpp_quote("EXTERN_C const GUID DDPF_BGR32;") 
  92. cpp_quote("EXTERN_C const GUID DDPF_ABGR32;") 
  93. cpp_quote("EXTERN_C const GUID DDPF_ARGB32;") 
  94. cpp_quote("EXTERN_C const GUID DDPF_PMARGB32;") 
  95. cpp_quote("EXTERN_C const GUID DDPF_A1;") 
  96. cpp_quote("EXTERN_C const GUID DDPF_A2;") 
  97. cpp_quote("EXTERN_C const GUID DDPF_A4;") 
  98. cpp_quote("EXTERN_C const GUID DDPF_A8;") 
  99. cpp_quote("EXTERN_C const GUID DDPF_Z8;") 
  100. cpp_quote("EXTERN_C const GUID DDPF_Z16;") 
  101. cpp_quote("EXTERN_C const GUID DDPF_Z24;") 
  102. cpp_quote("EXTERN_C const GUID DDPF_Z32;") 
  103. cpp_quote("//")
  104. cpp_quote("//   Component categories")
  105. cpp_quote("//")
  106. cpp_quote("EXTERN_C const GUID CATID_DXImageTransform;")
  107. cpp_quote("EXTERN_C const GUID CATID_DX3DTransform;")
  108. cpp_quote("EXTERN_C const GUID CATID_DXAuthoringTransform;")
  109. cpp_quote("EXTERN_C const GUID CATID_DXSurface;")
  110. cpp_quote("//")
  111. cpp_quote("//   Service IDs")
  112. cpp_quote("//")
  113. cpp_quote("EXTERN_C const GUID SID_SDirectDraw;")
  114. cpp_quote("EXTERN_C const GUID SID_SDirect3DRM;")
  115. cpp_quote("#define SID_SDXTaskManager CLSID_DXTaskManager")
  116. cpp_quote("#define SID_SDXSurfaceFactory IID_IDXSurfaceFactory")
  117. cpp_quote("#define SID_SDXTransformFactory IID_IDXTransformFactory")
  118.  
  119. //=== Struct & Enum definitions =============================================
  120.  
  121. //=== Interface definitions =================================================
  122.  
  123.  
  124. [
  125.     uuid(17B59B2B-9CC8-11d1-9053-00C04FD9189D),
  126.     helpstring("IDXBaseObject Interface"),
  127.     pointer_default(unique)
  128. ]
  129. interface IDXBaseObject : IUnknown
  130. {
  131.     HRESULT GetGenerationId( [out]ULONG *pID);
  132.     HRESULT IncrementGenerationId([in] BOOL bRefresh);
  133.     HRESULT GetObjectSize( [out] ULONG *pcbSize);
  134. }
  135.  
  136. //--- Dimension identifiers
  137. typedef enum DXBNDID
  138. {
  139.     DXB_X = 0,
  140.     DXB_Y = 1,
  141.     DXB_Z = 2,
  142.     DXB_T = 3
  143. } DXBNDID;
  144.  
  145. //--- Bound types
  146. typedef enum DXBNDTYPE
  147. {
  148.     DXBT_DISCRETE,
  149.     DXBT_DISCRETE64,
  150.     DXBT_CONTINUOUS,
  151.     DXBT_CONTINUOUS64
  152. } DXBNDTYPE;
  153.  
  154. //--- Discrete bounds (image & sound)
  155. typedef struct DXDBND
  156. {
  157.     long  Min;    
  158.     long  Max;
  159. } DXDBND;
  160. typedef DXDBND DXDBNDS[4];
  161.  
  162. typedef struct DXDBND64
  163. {
  164.     LONGLONG Min;    
  165.     LONGLONG Max;
  166. } DXDBND64;
  167. typedef DXDBND64 DXDBNDS64[4];
  168.  
  169. //--- Continuous bounds (geometry)
  170. typedef struct DXCBND
  171. {
  172.     float Min;    
  173.     float Max;
  174. } DXCBND;
  175. typedef DXCBND DXCBNDS[4];
  176.  
  177. typedef struct DXCBND64
  178. {
  179.     double Min;    
  180.     double Max;
  181. } DXCBND64;
  182. typedef DXCBND64 DXCBNDS64[4];
  183.  
  184. //--- Combined space
  185. typedef union DXBNDS switch( DXBNDTYPE eType ) u
  186. {
  187.   case DXBT_DISCRETE:
  188.     DXDBND D[4];
  189.   case DXBT_DISCRETE64:
  190.     DXDBND64 LD[4];
  191.   case DXBT_CONTINUOUS:
  192.     DXCBND C[4];
  193.   case DXBT_CONTINUOUS64:
  194.     DXCBND64 LC[4];
  195. } DXBNDS;
  196.  
  197. //--- Discrete 4D vector
  198. typedef long DXDVEC[4];
  199. typedef LONGLONG DXDVEC64[4];
  200.  
  201. //--- Continous 4D vector
  202. typedef float DXCVEC[4];
  203. typedef double DXCVEC64[4];
  204.  
  205. //--- Combined space vector
  206. typedef union DXVEC switch( DXBNDTYPE eType ) u
  207. {
  208.   case DXBT_DISCRETE:
  209.     long D[4];
  210.   case DXBT_DISCRETE64:
  211.     LONGLONG LD[4];
  212.   case DXBT_CONTINUOUS:
  213.     float C[4];
  214.   case DXBT_CONTINUOUS64:
  215.     double LC[4];
  216. } DXVEC;
  217.  
  218. //--- IDXTransformFactory ---------------------------------------------------
  219. [
  220.     uuid(6A950B2B-A971-11d1-81C8-0000F87557DB),
  221.     helpstring("IDXTransformFactory Interface"),
  222.     pointer_default(unique)
  223. ]
  224. interface IDXTransformFactory : IServiceProvider
  225. {
  226.     HRESULT SetService( [in]REFGUID guidService, 
  227.                         [in]IUnknown *pUnkService,
  228.                         [in]BOOL bWeakReference);
  229.  
  230.     HRESULT CreateTransform( [in, size_is(ulNumInputs)]IUnknown** punkInputs,
  231.                              [in]ULONG ulNumInputs,
  232.                              [in, size_is(ulNumOutputs)]IUnknown** punkOutputs,
  233.                              [in]ULONG ulNumOutputs,
  234.                              [in]IPropertyBag* pInitProps, [in]IErrorLog* pErrLog,
  235.                              [in]REFCLSID TransCLSID, [in]REFIID TransIID,
  236.                              [out, iid_is(TransIID)]void** ppTransform );
  237.  
  238.     HRESULT InitializeTransform( [in]IDXTransform* pTransform,
  239.                                  [in, size_is(ulNumInputs)]IUnknown** punkInputs,
  240.                                  [in]ULONG ulNumInputs,
  241.                                  [in, size_is(ulNumOutputs)]IUnknown** punkOutputs,
  242.                                  [in]ULONG ulNumOutputs,
  243.                                  [in]IPropertyBag* pInitProps, [in]IErrorLog* pErrLog );
  244. };
  245.  
  246. //--- IDXTransform -------------------------------------------------
  247.  
  248. typedef enum DXTMISCFLAGS
  249. {
  250.     DXTMF_BLEND_WITH_OUTPUT   = ( 1L << 0 ),
  251.     DXTMF_DITHER_OUTPUT       = ( 1L << 1 ),
  252.     DXTMF_OPTION_MASK         = (0x0000FFFF),   // Low word is settable options
  253.     DXTMF_VALID_OPTIONS       = (DXTMF_BLEND_WITH_OUTPUT | DXTMF_DITHER_OUTPUT),
  254.     //
  255.     //  Status flags can not be changed by call to SetMiscFlags
  256.     //
  257.     DXTMF_BLEND_SUPPORTED     = ( 1L << 16 ),
  258.     DXTMF_DITHER_SUPPORTED    = ( 1L << 17 ),
  259.     DXTMF_INPLACE_OPERATION   = ( 1L << 24 ),
  260.     DXTMF_BOUNDS_SUPPORTED    = ( 1L << 25 ),
  261.     DXTMF_PLACEMENT_SUPPORTED = ( 1L << 26 ),
  262.     DXTMF_QUALITY_SUPPORTED   = ( 1L << 27 ),
  263.     DXTMF_OPAQUE_RESULT       = ( 1L << 28 )
  264. } DXTMISCFLAGS;
  265.  
  266.  
  267. typedef enum DXINOUTINFOFLAGS
  268. {
  269.     DXINOUTF_OPTIONAL = ( 1L << 0)
  270. } DXINOUTINFOFLAGS;
  271.  
  272. [
  273.     uuid(30A5FB78-E11F-11d1-9064-00C04FD9189D),
  274.     helpstring("IDXTransform Interface"),
  275.     pointer_default(unique)
  276. ]
  277. interface IDXTransform : IDXBaseObject
  278. {
  279.     HRESULT Setup( [in, size_is(ulNumInputs)] IUnknown * const * punkInputs,
  280.                    [in]ULONG ulNumInputs,
  281.                    [in, size_is(ulNumOutputs)] IUnknown * const * punkOutputs,
  282.                    [in]ULONG ulNumOutputs,
  283.                    [in]DWORD dwFlags );
  284.     HRESULT Execute( [in]const GUID* pRequestID, [in]const DXBNDS *pClipBnds,
  285.                      [in]const DXVEC *pPlacement );
  286.     HRESULT MapBoundsIn2Out( [in] const DXBNDS *pInBounds,
  287.                              [in]ULONG ulNumInBnds,
  288.                              [in]ULONG ulOutIndex,
  289.                              [out]DXBNDS *pOutBounds );
  290.     HRESULT MapBoundsOut2In( [in] ULONG ulOutIndex,
  291.                              [in] const DXBNDS *pOutBounds,
  292.                              [in] ULONG ulInIndex,
  293.                              [out]DXBNDS *pInBounds );
  294.     HRESULT SetMiscFlags( [in] DWORD dwMiscFlags);
  295.     HRESULT GetMiscFlags( [out]DWORD * pdwMiscFlags );
  296.     HRESULT GetInOutInfo( [in]BOOL bIsOutput, [in]ULONG ulIndex,
  297.                           [out]DWORD *pdwFlags, [out, size_is(*pcIDs)] GUID *pIDs,
  298.                           [in, out] ULONG *pcIDs,
  299.                           [out] IUnknown **ppUnkCurrentObject);
  300.     HRESULT SetQuality( [in] float fQuality );
  301.     HRESULT GetQuality( [out] float * fQuality );
  302. };
  303.  
  304.  
  305. [
  306.     uuid(30A5FB79-E11F-11d1-9064-00C04FD9189D),
  307.     helpstring("IDXSurfacePick Interface"),
  308.     pointer_default(unique)
  309. ]
  310. interface IDXSurfacePick : IUnknown
  311. {
  312.     HRESULT PointPick([in]const DXVEC *pPoint,
  313.                       [out]ULONG * pulInputSurfaceIndex,
  314.                       [out]DXVEC *pInputPoint);
  315. }
  316.  
  317.  
  318. //--- IDXTBindHost ---------------------------------------------------
  319. //  This interface is used to set a site-specific bind host for a transform.
  320. //  Only transforms that need access to a bind host need to implement this interface.
  321.  
  322. //
  323. //  For some reason, MIDL does not like IBindHost, so we've declared this interface local
  324. //
  325. [
  326.     uuid(D26BCE55-E9DC-11d1-9066-00C04FD9189D),
  327.     helpstring("IDXTBindHost Interface"),
  328.     pointer_default(unique),
  329.     local
  330. ]
  331. interface IDXTBindHost : IUnknown
  332. {
  333.     HRESULT SetBindHost([in] IBindHost * pBindHost);
  334. }
  335.  
  336. //--- IDXTaskManager ---------------------------------------------------
  337. // This interface is used to implement a task managment service provider
  338. // to optimize thread usage.
  339.  
  340. // Function type prototypes
  341. typedef void (__stdcall DXTASKPROC)(void *pTaskData, BOOL* pbContinueProcessing );
  342. typedef DXTASKPROC *PFNDXTASKPROC;
  343.  
  344. typedef void (__stdcall DXAPCPROC)(DWORD dwData);
  345. typedef DXAPCPROC *PFNDXAPCPROC;
  346.  
  347. cpp_quote("#ifdef __cplusplus")
  348. cpp_quote("typedef struct DXTMTASKINFO" )
  349. cpp_quote("{")
  350. cpp_quote("    PFNDXTASKPROC pfnTaskProc;       // Pointer to function to execute")
  351. cpp_quote("    PVOID         pTaskData;         // Pointer to argument data")
  352. cpp_quote("    PFNDXAPCPROC  pfnCompletionAPC;  // Pointer to completion APC proc")
  353. cpp_quote("    DWORD         dwCompletionData;  // Pointer to APC proc data")
  354. cpp_quote("    const GUID*   pRequestID;        // Used to identify groups of tasks")
  355. cpp_quote("} DXTMTASKINFO;")
  356. cpp_quote("#else")
  357.     typedef struct DXTMTASKINFO
  358.     {
  359.         PVOID       pfnTaskProc;       // Pointer to function to execute
  360.         PVOID       pTaskData;         // Pointer to argument data
  361.         PVOID       pfnCompletionAPC;  // Pointer to completion APC proc
  362.         DWORD       dwCompletionData;  // Pointer to APC proc data
  363.         const GUID* pRequestID;        // Used to identify groups of tasks
  364.     } DXTMTASKINFO;
  365. cpp_quote("#endif")
  366.  
  367. [
  368.     local,
  369.     uuid(254DBBC1-F922-11d0-883A-3C8B00C10000),
  370.     helpstring("IDXTaskManager Interface"),
  371.     pointer_default(unique)
  372. ]
  373. interface IDXTaskManager : IUnknown
  374. {
  375.     HRESULT QueryNumProcessors( [out]ULONG* pulNumProc );
  376.     HRESULT SetThreadPoolSize( [in]ULONG ulNumThreads );
  377.     HRESULT GetThreadPoolSize( [out]ULONG* pulNumThreads );
  378.     HRESULT SetConcurrencyLimit( [in]ULONG ulNumThreads );
  379.     HRESULT GetConcurrencyLimit( [out]ULONG* pulNumThreads );
  380.     HRESULT ScheduleTasks( [in]DXTMTASKINFO TaskInfo[],
  381.                            [in]HANDLE Events[],
  382.                            [out]DWORD TaskIDs[],
  383.                            [in]ULONG ulNumTasks, [in]ULONG ulWaitPeriod );
  384.     HRESULT TerminateTasks( [in]DWORD TaskIDs[], [in]ULONG ulCount,
  385.                             [in]ULONG ulTimeOut );
  386.     HRESULT TerminateRequest( [in]REFIID RequestID, [in]ULONG ulTimeOut );
  387. };
  388.  
  389. //--- IDXSurfaceFactory ---------------------------------------------------
  390. //
  391. //  We want an operator so that we can cast from a DXSAMPLE to a DWORD, so for C++ we will
  392. //  define the structure a special way.
  393. //
  394.  
  395. cpp_quote("#ifdef __cplusplus")
  396. cpp_quote("/////////////////////////////////////////////////////")
  397. cpp_quote("")
  398. cpp_quote("class DXBASESAMPLE;")
  399. cpp_quote("class DXSAMPLE;")
  400. cpp_quote("class DXPMSAMPLE;")
  401. cpp_quote("")
  402. cpp_quote("/////////////////////////////////////////////////////")
  403. cpp_quote("")
  404. cpp_quote("class DXBASESAMPLE")
  405. cpp_quote("{")
  406. cpp_quote("public:")
  407. cpp_quote("    BYTE Blue;")
  408. cpp_quote("    BYTE Green;")
  409. cpp_quote("    BYTE Red;")
  410. cpp_quote("    BYTE Alpha;")
  411. cpp_quote("    DXBASESAMPLE() {}")
  412. cpp_quote("    DXBASESAMPLE(const BYTE alpha, const BYTE red, const BYTE green, const BYTE blue) :")
  413. cpp_quote("        Alpha(alpha),")
  414. cpp_quote("        Red(red),")
  415. cpp_quote("        Green(green),")
  416. cpp_quote("        Blue(blue) {}")
  417. cpp_quote("    DXBASESAMPLE(const DWORD val) { *this = (*(DXBASESAMPLE *)&val); }")
  418. cpp_quote("    operator DWORD () const {return *((DWORD *)this); }")
  419. cpp_quote("    DWORD operator=(const DWORD val) { return *this = *((DXBASESAMPLE *)&val); }")
  420. cpp_quote("}; // DXBASESAMPLE")
  421. cpp_quote("")
  422. cpp_quote("/////////////////////////////////////////////////////")
  423. cpp_quote("")
  424. cpp_quote("class DXSAMPLE : public DXBASESAMPLE")
  425. cpp_quote("{")
  426. cpp_quote("public:")
  427. cpp_quote("    DXSAMPLE() {}")
  428. cpp_quote("    DXSAMPLE(const BYTE alpha, const BYTE red, const BYTE green, const BYTE blue) :")
  429. cpp_quote("         DXBASESAMPLE(alpha, red, green, blue) {}")
  430. cpp_quote("    DXSAMPLE(const DWORD val) { *this = (*(DXSAMPLE *)&val); }")
  431. cpp_quote("    operator DWORD () const {return *((DWORD *)this); }")
  432. cpp_quote("    DWORD operator=(const DWORD val) { return *this = *((DXSAMPLE *)&val); }")
  433. cpp_quote("    operator DXPMSAMPLE() const;")
  434. cpp_quote("}; // DXSAMPLE")
  435. cpp_quote("")
  436. cpp_quote("/////////////////////////////////////////////////////")
  437. cpp_quote("")
  438. cpp_quote("class DXPMSAMPLE : public DXBASESAMPLE")
  439. cpp_quote("{")
  440. cpp_quote("public:")
  441. cpp_quote("    DXPMSAMPLE() {}")
  442. cpp_quote("    DXPMSAMPLE(const BYTE alpha, const BYTE red, const BYTE green, const BYTE blue) :")
  443. cpp_quote("         DXBASESAMPLE(alpha, red, green, blue) {}")
  444. cpp_quote("    DXPMSAMPLE(const DWORD val) { *this = (*(DXPMSAMPLE *)&val); }")
  445. cpp_quote("    operator DWORD () const {return *((DWORD *)this); }")
  446. cpp_quote("    DWORD operator=(const DWORD val) { return *this = *((DXPMSAMPLE *)&val); }")
  447. cpp_quote("    operator DXSAMPLE() const;")
  448. cpp_quote("}; // DXPMSAMPLE")
  449. cpp_quote("")
  450. cpp_quote("//")
  451. cpp_quote("// The following cast operators are to prevent a direct assignment of a DXSAMPLE to a DXPMSAMPLE")
  452. cpp_quote("//")
  453. cpp_quote("inline DXSAMPLE::operator DXPMSAMPLE() const { return *((DXPMSAMPLE *)this); }")
  454. cpp_quote("inline DXPMSAMPLE::operator DXSAMPLE() const { return *((DXSAMPLE *)this); }")
  455.  
  456. cpp_quote("#else // !__cplusplus")
  457. typedef struct DXBASESAMPLE
  458. {
  459.     BYTE Blue;
  460.     BYTE Green;
  461.     BYTE Red; 
  462.     BYTE Alpha;
  463. } DXBASESAMPLE;
  464.  
  465. typedef struct DXSAMPLE
  466. {
  467.     BYTE Blue;
  468.     BYTE Green;
  469.     BYTE Red; 
  470.     BYTE Alpha;
  471. } DXSAMPLE;
  472.  
  473. typedef struct DXPMSAMPLE
  474. {
  475.     BYTE Blue;
  476.     BYTE Green;
  477.     BYTE Red; 
  478.     BYTE Alpha;
  479. } DXPMSAMPLE;
  480. cpp_quote("#endif // !__cplusplus")
  481.  
  482. typedef enum DXRUNTYPE
  483. {
  484.     DXRUNTYPE_CLEAR  = 0,        // The run is zero Alpha
  485.     DXRUNTYPE_OPAQUE = 1,        // The run is full Alpha (i.e. 255)
  486.     DXRUNTYPE_TRANS  = 2,        // The run is non-zero Alpha
  487.     DXRUNTYPE_UNKNOWN= 3         // The run type is unknown.  Caller must inspect.
  488. } DXRUNTYPE;
  489.  
  490. const ULONG DX_MAX_RUN_INFO_COUNT = 128; // Defines the maximum number of RUNINFOs in a single row
  491.  
  492.  
  493. cpp_quote("// Ignore the definition used by MIDL for TLB generation")
  494. cpp_quote("#if 0")
  495.  
  496. typedef struct DXRUNINFO
  497. {
  498.     ULONG Bitfields;
  499. } DXRUNINFO;
  500.  
  501. cpp_quote("#endif // 0")
  502.  
  503. // Emit the C definition to the H file directly, as bit fields are not
  504. // supported by MIDL.
  505.  
  506. cpp_quote("typedef struct DXRUNINFO")
  507. cpp_quote("{")
  508. cpp_quote("    ULONG   Type  : 2;   // Type")
  509. cpp_quote("    ULONG   Count : 30;  // Number of samples in run")
  510. cpp_quote("} DXRUNINFO;")
  511.  
  512.  
  513. typedef enum DXSFCREATE
  514. {
  515.     DXSF_FORMAT_IS_CLSID    = ( 1L << 0 ),
  516.     DXSF_NO_LAZY_DDRAW_LOCK = ( 1L << 1 )
  517. } DXSFCREATE;
  518.  
  519. typedef enum DXBLTOPTIONS
  520. {
  521.     DXBOF_DO_OVER          = (1L << 0),
  522.     DXBOF_DITHER           = (1L << 1)
  523. } DXBLTOPTIONS;
  524.  
  525.  
  526.  
  527. [
  528.     uuid(144946F5-C4D4-11d1-81D1-0000F87557DB),
  529.     helpstring("IDXSurfaceFactory Interface"),
  530.     pointer_default(unique)
  531. ]
  532. interface IDXSurfaceFactory : IUnknown
  533. {
  534.     [local] HRESULT CreateSurface([in] IUnknown *pDirectDraw,
  535.                           [in] const DDSURFACEDESC * pDDSurfaceDesc,
  536.                           [in] const GUID * pFormatID,
  537.                           [in] const DXBNDS *pBounds, 
  538.                           [in] DWORD dwFlags,
  539.                           [in] IUnknown *punkOuter,
  540.                           [in] REFIID riid, 
  541.                           [out, iid_is( riid )] void ** ppDXSurface);
  542.  
  543.     HRESULT CreateFromDDSurface([in] IUnknown *pDDrawSurface,
  544.                           [in] const GUID *pFormatID,
  545.                           [in] DWORD dwFlags,
  546.                           [in] IUnknown *punkOuter,
  547.                           [in] REFIID riid, 
  548.                           [out, iid_is( riid )] void ** ppDXSurface);
  549.  
  550.     [local] HRESULT LoadImage(
  551.                       [in] const LPWSTR pszFileName,
  552.                       [in] IUnknown *pDirectDraw,
  553.                       [in] const DDSURFACEDESC * pDDSurfaceDesc,
  554.                       [in] const GUID *pFormatID,
  555.                       [in] REFIID riid, 
  556.                       [out, iid_is( riid )] void ** ppDXSurface);
  557.  
  558.     [local] HRESULT LoadImageFromStream([in] IStream *pStream,
  559.                                 [in] IUnknown *pDirectDraw,
  560.                                 [in] const DDSURFACEDESC * pDDSurfaceDesc,
  561.                                 [in] const GUID *pFormatID,
  562.                                 [in] REFIID riid, 
  563.                                 [out, iid_is( riid )] void ** ppDXSurface);
  564.  
  565.     [local] HRESULT CopySurfaceToNewFormat( [in]IDXSurface* pSrc,
  566.                                             [in] IUnknown *pDirectDraw,
  567.                                             [in] const DDSURFACEDESC * pDDSurfaceDesc,
  568.                                             [in] const GUID *pDestFormatID,
  569.                                             [out] IDXSurface** ppNewSurface );
  570.  
  571.     [local] HRESULT CreateD3DRMTexture([in] IDXSurface *pSrc,
  572.                                        [in] IUnknown *pDirectDraw,
  573.                                        [in] IUnknown *pD3DRM3,
  574.                                        [in] REFIID riid,
  575.                                        [out, iid_is(riid)] void **ppTexture3);
  576.  
  577.     HRESULT BitBlt([in] IDXSurface *pDest,
  578.                    [in] const DXVEC *pPlacement,
  579.                    [in] IDXSurface *pSrc,
  580.                    [in] const DXBNDS *pClipBounds,
  581.                    [in] DWORD dwFlags);
  582. }
  583.  
  584.  
  585. typedef enum DXSURFMODCOMPOP
  586. {
  587.     DXSURFMOD_COMP_OVER         = 0,
  588.     DXSURFMOD_COMP_ALPHA_MASK   = 1,
  589.     DXSURFMOD_COMP_MAX_VALID    = 1
  590. } DXSURFMODCOMPOP;
  591.  
  592.     
  593. [
  594.     uuid(9EA3B637-C37D-11d1-905E-00C04FD9189D),
  595.     helpstring("IDXSurfaceModifier Interface"),
  596.     pointer_default(unique)
  597. ]
  598. interface IDXSurfaceModifier : IUnknown
  599. {
  600.     HRESULT SetFillColor([in] DXSAMPLE Color);
  601.     HRESULT GetFillColor([out] DXSAMPLE *pColor);
  602.     HRESULT SetBounds([in] const DXBNDS *pBounds ); // Get supported though IDXSurface interface
  603.     HRESULT SetBackground([in] IDXSurface *pSurface);
  604.     HRESULT GetBackground([out] IDXSurface **ppSurface);
  605.     HRESULT SetCompositeOperation([in] DXSURFMODCOMPOP CompOp);
  606.     HRESULT GetCompositeOperation([out] DXSURFMODCOMPOP *pCompOp);
  607.     //
  608.     //  The following methods only apply to the FOREGROUND surface
  609.     //
  610.     HRESULT SetForeground([in] IDXSurface *pSurface, [in] BOOL bTile, [in] const POINT * pOrigin);
  611.     HRESULT GetForeground([out] IDXSurface **ppSurface, [out] BOOL *pbTile, [out] POINT * pOrigin);
  612.     HRESULT SetOpacity([in] float Opacity);
  613.     HRESULT GetOpacity([out] float *pOpacity);    
  614.     HRESULT SetLookup( [in]IDXLookupTable * pLookupTable );
  615.     HRESULT GetLookup( [out]IDXLookupTable ** ppLookupTable );
  616. }
  617.  
  618.  
  619.  
  620. //--- IDXSurface ---------------------------------------------------
  621. typedef enum DXSAMPLEFORMATENUM
  622. {
  623.     DXPF_FLAGSMASK      = (0xFFFF0000), // Top word is flags, low word is enum  
  624.     DXPF_NONPREMULT     = (0x00010000), // Flags to be OR'd with pixel formats
  625.     DXPF_TRANSPARENCY   = (0x00020000), // Color key or one-bit alpha (alpha only 0 or 0xFF)
  626.     DXPF_TRANSLUCENCY   = (0x00040000), // Alpha can be any value from 0->0xFF
  627.     //
  628.     //  This 3-bit field is used to determine what type of dithering to be used
  629.     //  
  630.     DXPF_2BITERROR      = (0x00200000), // 2 bits of error term 
  631.     DXPF_3BITERROR      = (0x00300000), // 3 bits of error term for color (16-bit color)
  632.     DXPF_4BITERROR      = (0x00400000), // 4 bits of error term (ARGB 4444)
  633.     DXPF_5BITERROR      = (0x00500000), // 5 bits of error term for color (8-bit color)
  634.     DXPF_ERRORMASK      = (0x00700000), // Mask of bits used for dithering
  635.  
  636.     DXPF_NONSTANDARD    = (0),  // To be used for any surface that is not one of the following formats
  637.                                 // This can be combined with DXPFNONPREMULT if the surface can work
  638.                                 // better in non-premultiplied space.
  639.     DXPF_PMARGB32       = (1 | DXPF_TRANSPARENCY | DXPF_TRANSLUCENCY),
  640.     DXPF_ARGB32         = (2 | DXPF_NONPREMULT | DXPF_TRANSPARENCY | DXPF_TRANSLUCENCY),
  641.     DXPF_ARGB4444       = (3 | DXPF_NONPREMULT | DXPF_TRANSPARENCY | DXPF_TRANSLUCENCY | DXPF_4BITERROR),
  642.     DXPF_A8             = (4 | DXPF_TRANSPARENCY | DXPF_TRANSLUCENCY),
  643.     DXPF_RGB32          = (5),
  644.     DXPF_RGB24          = (6),
  645.     DXPF_RGB565         = (7 | DXPF_3BITERROR),
  646.     DXPF_RGB555         = (8 | DXPF_3BITERROR),
  647.     DXPF_RGB8           = (9 | DXPF_5BITERROR),
  648.     DXPF_ARGB1555       = (10 | DXPF_TRANSPARENCY | DXPF_3BITERROR),
  649.     DXPF_RGB32_CK       = (DXPF_RGB32 | DXPF_TRANSPARENCY),
  650.     DXPF_RGB24_CK       = (DXPF_RGB24 | DXPF_TRANSPARENCY),
  651.     DXPF_RGB555_CK      = (DXPF_RGB555 | DXPF_TRANSPARENCY),
  652.     DXPF_RGB565_CK      = (DXPF_RGB565 | DXPF_TRANSPARENCY),
  653.     DXPF_RGB8_CK        = (DXPF_RGB8 | DXPF_TRANSPARENCY)
  654. } DXSAMPLEFORMATENUM;
  655.  
  656.  
  657.  
  658. typedef enum DXLOCKSURF
  659. {
  660.     DXLOCKF_READ        =       0,
  661.     DXLOCKF_READWRITE   =       (1 << 0),
  662.     DXLOCKF_EXISTINGINFOONLY =  (1 << 1),   // If used in conjunction with WANTRUNINFO will prevent creation of a runmap if one does not exist
  663.     DXLOCKF_WANTRUNINFO =       (1 << 2),
  664.     //
  665.     // The flags in the high word should be specific to the type of pointer that
  666.     // is requested.  These flags define ARGB flags.  These flags are advisory and
  667.     // are not required to be set for ARGB locks.
  668.     //
  669.     DXLOCKF_NONPREMULT  =   (1 << 16),    // Caller will request non-premultiplied data
  670.     DXLOCKF_VALIDFLAGS  =   (DXLOCKF_READWRITE | DXLOCKF_EXISTINGINFOONLY | DXLOCKF_WANTRUNINFO | DXLOCKF_NONPREMULT)
  671. } DXLOCKSURF;
  672.  
  673. typedef enum DXSURFSTATUS
  674. {
  675.     DXSURF_TRANSIENT    =   (1 << 0),   // Data in this surface changes often.    
  676.     DXSURF_READONLY     =   (1 << 1),   // Surface is read-only
  677.     DXSURF_VALIDFLAGS   =   (DXSURF_TRANSIENT | DXSURF_READONLY)    
  678. } DXSURFSTATUS;
  679.  
  680. [
  681.     uuid(B39FD73F-E139-11d1-9065-00C04FD9189D),
  682.     helpstring("IDXSurface Interface"),
  683.     pointer_default(unique)
  684. ]
  685. interface IDXSurface : IDXBaseObject
  686. {
  687.     HRESULT GetPixelFormat([out] GUID * pFormatID, [out] DXSAMPLEFORMATENUM *pSampleFormatEnum); 
  688.     HRESULT GetBounds( [out]DXBNDS *pBounds );
  689.     HRESULT GetStatusFlags([out] DWORD * pdwStatusFlags);
  690.     HRESULT SetStatusFlags([in] DWORD dwStatusFlags);
  691.     HRESULT LockSurface( [in]const DXBNDS *pBounds, [in]ULONG ulTimeOut, [in]DWORD dwFlags, 
  692.                          [in]REFIID riid, [out, iid_is(riid)] void **ppPointer,
  693.                          [out]ULONG* pulGenerationId );
  694.     HRESULT GetDirectDrawSurface( [in] REFIID riid,
  695.                                   [out, iid_is(riid)] void ** ppSurface);
  696.     HRESULT GetColorKey(DXSAMPLE * pColorKey);  // Can return E_NOTIMPL
  697.     HRESULT SetColorKey(DXSAMPLE ColorKey);     // Set color of 0 to get rid of color key, can return E_NOTIMPL
  698.     HRESULT LockSurfaceDC( [in] const DXBNDS *pBounds, [in]ULONG ulTimeOut, [in] DWORD dwFlags,
  699.                            [out] IDXDCLock **ppDCLock);
  700.     HRESULT SetAppData(DWORD_PTR dwAppData);
  701.     HRESULT GetAppData(DWORD_PTR *pdwAppData);
  702. }
  703.  
  704. //--- IDXSurfaceInit ---------------------------------------------------
  705. [
  706.     uuid(9EA3B639-C37D-11d1-905E-00C04FD9189D),
  707.     helpstring("IDXSurfaceInit Interface"),
  708.     pointer_default(unique),
  709.     local
  710. ]
  711. interface IDXSurfaceInit : IUnknown
  712. {
  713.     HRESULT InitSurface([in] IUnknown *pDirectDraw,
  714.                         [in] const DDSURFACEDESC *pDDSurfaceDesc,
  715.                         [in] const GUID * pFormatID,
  716.                         [in] const DXBNDS *pBounds,
  717.                         [in] DWORD dwFlags);
  718. };
  719.  
  720.  
  721. //--- IDXARGBSurfaceInit ---------------------------------------------------
  722. [
  723.     uuid(9EA3B63A-C37D-11d1-905E-00C04FD9189D),
  724.     helpstring("IDXARGBSurfaceInit Interface"),
  725.     pointer_default(unique),
  726.     local
  727. ]
  728. interface IDXARGBSurfaceInit : IDXSurfaceInit
  729. {
  730.     HRESULT InitFromDDSurface( [in] IUnknown *pDDrawSurface,
  731.                                [in] const GUID * pFormatID,
  732.                                [in] DWORD dwFlags);
  733.     HRESULT InitFromRawSurface([in] IDXRawSurface *pRawSurface);
  734. };
  735.  
  736. //--- IDXARGBReadPtr ---------------------------------------------------
  737. typedef struct tagDXNATIVETYPEINFO
  738. {
  739.     BYTE *          pCurrentData;
  740.     BYTE *          pFirstByte;
  741.     long            lPitch;
  742.     DWORD           dwColorKey;
  743. } DXNATIVETYPEINFO;
  744.  
  745. typedef struct tagDXPACKEDRECTDESC
  746. {
  747.     DXBASESAMPLE    *pSamples;
  748.     BOOL            bPremult;
  749.     RECT            rect;
  750.     long            lRowPadding;
  751. } DXPACKEDRECTDESC;
  752.  
  753. typedef struct tagDXOVERSAMPLEDESC
  754. {
  755.     POINT       p;
  756.     DXPMSAMPLE  Color;
  757. } DXOVERSAMPLEDESC;
  758.         
  759.  
  760. [
  761.     uuid(EAAAC2D6-C290-11d1-905D-00C04FD9189D),
  762.     helpstring("IDXARGBReadPtr Interface"),
  763.     pointer_default(unique),
  764.     local
  765. ]
  766. interface IDXARGBReadPtr : IUnknown
  767. {
  768.     HRESULT GetSurface( [in]REFIID riid, [out, iid_is( riid )]void ** ppSurface);
  769.     DXSAMPLEFORMATENUM GetNativeType( [out]DXNATIVETYPEINFO *pInfo );
  770.     void Move( [in]long cSamples );
  771.     void MoveToRow( [in]ULONG y );
  772.     void MoveToXY( [in]ULONG x, [in]ULONG y);
  773.     ULONG MoveAndGetRunInfo( [in]ULONG Row, [out] const DXRUNINFO** ppInfo );  // Returns count of runs
  774.     DXSAMPLE   * Unpack( [in]DXSAMPLE* pSamples, [in]ULONG cSamples, [in]BOOL bMove );
  775.     DXPMSAMPLE * UnpackPremult( [in]DXPMSAMPLE* pSamples, [in]ULONG cSamples, [in]BOOL bMove );
  776.     void UnpackRect([in] const DXPACKEDRECTDESC * pRectDesc);
  777. };
  778.  
  779.  
  780. //--- IDXARGBReadWritePtr ---------------------------------------------------
  781. [
  782.     uuid(EAAAC2D7-C290-11d1-905D-00C04FD9189D),
  783.     helpstring("IDXARGBReadWritePtr Interface"),
  784.     pointer_default(unique),
  785.     local
  786. ]
  787. interface IDXARGBReadWritePtr : IDXARGBReadPtr
  788. {
  789.     void PackAndMove( [in]const DXSAMPLE *pSamples, [in]ULONG cSamples );
  790.     void PackPremultAndMove( [in]const DXPMSAMPLE *pSamples, [in]ULONG cSamples );
  791.     void PackRect([in]const DXPACKEDRECTDESC *pRectDesc);
  792.     void CopyAndMoveBoth( [in]DXBASESAMPLE *pScratchBuffer, [in]IDXARGBReadPtr *pSrc,
  793.                           [in]ULONG cSamples, [in]BOOL bIsOpaque );
  794.     void CopyRect( [in] DXBASESAMPLE *pScratchBuffer, 
  795.                    [in] const RECT *pDestRect, [in]IDXARGBReadPtr *pSrc,
  796.                    [in] const POINT *pSrcOrigin, [in]BOOL bIsOpaque);
  797.     void FillAndMove( [in]DXBASESAMPLE *pScratchBuffer, [in]DXPMSAMPLE SampVal,
  798.                       [in]ULONG cSamples, [in]BOOL bDoOver );
  799.     void FillRect( [in]const RECT *pRect, [in]DXPMSAMPLE SampVal, [in]BOOL bDoOver );
  800.     void OverSample( [in]const DXOVERSAMPLEDESC * pOverDesc);
  801.     void OverArrayAndMove([in]DXBASESAMPLE *pScratchBuffer, 
  802.                           [in] const DXPMSAMPLE *pSrc,
  803.                           [in] ULONG cSamples);
  804. };
  805.  
  806.  
  807. [
  808.     uuid(0F619456-CF39-11d1-905E-00C04FD9189D),
  809.     helpstring("IDXDCLock Interface"),
  810.     pointer_default(unique),
  811.     local
  812. ]
  813. interface IDXDCLock : IUnknown
  814. {
  815.     HDC GetDC(void);
  816. }
  817.  
  818. //
  819. //  Generic interface that any transform can support which allows caller to specify the
  820. //  desired output bounds.
  821. //
  822. [
  823.     uuid(B2024B50-EE77-11d1-9066-00C04FD9189D),
  824.     helpstring("IDXTScaleOutput Interface"),
  825.     pointer_default(unique)
  826. ]
  827. interface IDXTScaleOutput : IUnknown
  828. {
  829.     HRESULT SetOutputSize([in] const SIZE OutSize, [in] BOOL bMaintainAspect);
  830. };
  831.  
  832.  
  833. //
  834. //  Simple gradient
  835. //
  836. [
  837.     uuid(B2024B51-EE77-11d1-9066-00C04FD9189D),
  838.     helpstring("IDXGradient Interface"),
  839.     pointer_default(unique)
  840. ]
  841. interface IDXGradient : IDXTScaleOutput
  842. {
  843.     HRESULT SetGradient(DXSAMPLE StartColor, DXSAMPLE EndColor, BOOL bHorizontal);
  844.     HRESULT GetOutputSize([out] SIZE *pOutSize);
  845. };
  846.  
  847. //--- IDXTScale --------------------------------------------------------
  848. // This is the control interface for the simple scale transform
  849. //
  850. [
  851.     uuid(B39FD742-E139-11d1-9065-00C04FD9189D),
  852.     helpstring("IDXTScale Interface"),
  853.     pointer_default(unique)
  854. ]
  855. interface IDXTScale : IUnknown
  856. {
  857.     HRESULT SetScales( [in]float Scales[2] );
  858.     HRESULT GetScales( [out]float Scales[2] );
  859.     HRESULT ScaleFitToSize( [in,out]DXBNDS* pClipBounds,
  860.                             [in]SIZE FitToSize, [in]BOOL bMaintainAspect );
  861. };
  862.  
  863.  
  864.  
  865. //--- IDXEffect -------------------------------------------------
  866. //  This interface is used to generically control transforms that
  867. //  are transition effects.
  868. typedef enum DISPIDDXEFFECT
  869. {
  870.     DISPID_DXECAPABILITIES = 10000, // Start at 10000 to avoid conflicts with inhereted interfaces
  871.     DISPID_DXEPROGRESS,
  872.     DISPID_DXESTEP,
  873.     DISPID_DXEDURATION,
  874.     DISPID_DXE_NEXT_ID
  875. } DISPIDDXBOUNDEDEFFECT;
  876.  
  877. typedef enum DXEFFECTTYPE
  878. {
  879.     DXTET_PERIODIC = (1 << 0),  // Result at 1 is same as result at 0
  880.     DXTET_MORPH = (1 << 1)      // Transition between 2 inputs (input 0 to input 1)
  881. } DXEFFECTTYPE;
  882.  
  883.  
  884.  
  885.  
  886. [
  887.     object,
  888.     uuid(E31FB81B-1335-11d1-8189-0000F87557DB),
  889.     dual,
  890.     helpstring("IDXEffect Interface"),
  891.     pointer_default(unique)
  892. ]
  893. interface IDXEffect : IDispatch
  894. {
  895.     [propget, id(DISPID_DXECAPABILITIES)]
  896.         HRESULT Capabilities([out, retval] long *pVal);
  897.     [propget, id(DISPID_DXEPROGRESS)]
  898.         HRESULT Progress([out, retval] float *pVal);
  899.     [propput, id(DISPID_DXEPROGRESS)]
  900.         HRESULT Progress([in] float newVal);
  901.     [propget, id(DISPID_DXESTEP)]
  902.         HRESULT StepResolution([out, retval] float *pVal);
  903.     [propget, id(DISPID_DXEDURATION)]
  904.         HRESULT Duration([out, retval] float *pVal);
  905.     [propput, id(DISPID_DXEDURATION)]
  906.         HRESULT Duration([in] float newVal);
  907. };
  908.  
  909. //--- IDXLookupTable ---------------------------------------------
  910. [
  911.     uuid(01BAFC7F-9E63-11d1-9053-00C04FD9189D),
  912.     helpstring("IDXLookupTable Interface"),
  913.     pointer_default(unique)
  914. ]
  915. interface IDXLookupTable : IDXBaseObject
  916. {
  917.     HRESULT GetTables( [out]BYTE RedLUT[256],
  918.                        [out]BYTE GreenLUT[256],
  919.                        [out]BYTE BlueLUT[256],
  920.                        [out]BYTE AlphaLUT[256] );
  921.  
  922.     HRESULT IsChannelIdentity([out] DXBASESAMPLE * pSampleBools);
  923.     HRESULT GetIndexValues([in] ULONG Index, [out] DXBASESAMPLE *pSample);
  924.     HRESULT ApplyTables([in, out] DXSAMPLE *pSamples, [in] ULONG cSamples);
  925. };
  926.  
  927.  
  928.  
  929. typedef struct DXRAWSURFACEINFO
  930. {
  931.     BYTE        * pFirstByte;
  932.     long        lPitch;
  933.     ULONG       Width;
  934.     ULONG       Height;
  935.     const GUID  * pPixelFormat;
  936.     HDC         hdc;
  937.     DWORD       dwColorKey;     // Note:  High byte must == 0xFF for color keyed surface.  Low 3 bytes are native data type.
  938.     DXBASESAMPLE * pPalette;
  939. } DXRAWSURFACEINFO;
  940.  
  941. //
  942. //  User created objects support IDXRawSurface
  943. //
  944.  
  945. [
  946.     uuid(09756C8A-D96A-11d1-9062-00C04FD9189D),
  947.     helpstring("IDXRawSurface Interface"),
  948.     pointer_default(unique),
  949.     local
  950. ]
  951. interface IDXRawSurface : IUnknown
  952. {
  953.     HRESULT GetSurfaceInfo(DXRAWSURFACEINFO * pSurfaceInfo);
  954. }
  955.  
  956.  
  957. //+-----------------------------------------------------------------------------
  958. //
  959. //  IHTMLDXTransform
  960. //
  961. //------------------------------------------------------------------------------
  962.  
  963. [
  964.     uuid(30E2AB7D-4FDD-4159-B7EA-DC722BF4ADE5),
  965.     helpstring("IHTMLDXTransform Interface"),
  966.     pointer_default(unique),
  967.     local
  968. ]
  969. interface IHTMLDXTransform : IUnknown
  970. {
  971.     HRESULT SetHostUrl(BSTR bstrHostUrl);
  972. }
  973.  
  974.  
  975. //=== CoClass definitions =================================================
  976.  
  977. [
  978.     uuid(54314D1D-35FE-11d1-81A1-0000F87557DB),
  979.     version(1.0),
  980.     helpstring("Microsoft DirectX Transform 1.0 Type Library")
  981. ]
  982. library DXTRANSLib
  983. {
  984.     importlib("stdole32.tlb");
  985.     importlib("stdole2.tlb");
  986.  
  987.     ///////////////////////////////
  988.     // DXTransformFactory CoClass
  989.     ///////////////////////////////
  990.     [
  991.         uuid(D1FE6762-FC48-11D0-883A-3C8B00C10000),
  992.         helpstring("DXTransformFactory Class")
  993.     ]
  994.     coclass DXTransformFactory
  995.     {
  996.         [default] interface IDXTransformFactory;
  997.         interface IDXSurfaceFactory;
  998.     };
  999.  
  1000.     ///////////////////////////////
  1001.     // DXTaskManager CoClass
  1002.     ///////////////////////////////
  1003.     [
  1004.         uuid(4CB26C03-FF93-11d0-817E-0000F87557DB),
  1005.         helpstring("DXTaskManager Class")
  1006.     ]
  1007.     coclass DXTaskManager
  1008.     {
  1009.         [default] interface IDXTaskManager;
  1010.     };
  1011.  
  1012.     ///////////////////////////////
  1013.     // DXTScale CoClass
  1014.     ///////////////////////////////
  1015.     [
  1016.         uuid(555278E2-05DB-11D1-883A-3C8B00C10000),
  1017.         helpstring("DXTScale Class")
  1018.     ]
  1019.     coclass DXTScale
  1020.     {
  1021.         [default] interface IDXTScale;
  1022.     };
  1023.  
  1024.     ///////////////////////////////
  1025.     // DXSurface CoClass
  1026.     ///////////////////////////////
  1027.     [
  1028.     uuid(0E890F83-5F79-11D1-9043-00C04FD9189D),
  1029.     helpstring("DXSurface Class")
  1030.     ]
  1031.     coclass DXSurface
  1032.     {
  1033.     [default] interface IDXSurface;
  1034.     };
  1035.  
  1036.     ///////////////////////////////
  1037.     // DXSurfaceModifier CoClass
  1038.     ///////////////////////////////
  1039.     [
  1040.     uuid(3E669F1D-9C23-11d1-9053-00C04FD9189D),
  1041.     helpstring("DXSurfaceModifier Class")
  1042.     ]
  1043.     coclass DXSurfaceModifier
  1044.     {
  1045.     [default] interface IDXSurfaceModifier;
  1046.     };
  1047.  
  1048.     ///////////////////////////////
  1049.     // DXGradient CoClass
  1050.     ///////////////////////////////
  1051.     [
  1052.     uuid(C6365470-F667-11d1-9067-00C04FD9189D),
  1053.     helpstring("DXGradient Class")
  1054.     ]
  1055.     coclass DXGradient
  1056.     {
  1057.         [default] interface IDXGradient;
  1058.     };
  1059. };
  1060.