⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dxtrans.idl

📁 C语言编程的不错工具
💻 IDL
📖 第 1 页 / 共 5 页
字号:
      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 ---------------------------------------------------
    [
        uuid(6A950B2B-A971-11d1-81C8-0000F87557DB),
        helpstring("IDXTransformFactory Interface"),
        pointer_default(unique)
    ]
    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;

    [
        uuid(30A5FB78-E11F-11d1-9064-00C04FD9189D),
        helpstring("IDXTransform Interface"),
        pointer_default(unique)
    ]
    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 );
    };


    [
        uuid(30A5FB79-E11F-11d1-9064-00C04FD9189D),
        helpstring("IDXSurfacePick Interface"),
        pointer_default(unique)
    ]
    interface IDXSurfacePick : IUnknown
    {
        HRESULT PointPick([in]const DXVEC *pPoint,
                          [out]ULONG * pulInputSurfaceIndex,
                          [out]DXVEC *pInputPoint);
    }


    //--- IDXTBindHost ---------------------------------------------------
    //  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
    //
    [
        uuid(D26BCE55-E9DC-11d1-9066-00C04FD9189D),
        helpstring("IDXTBindHost Interface"),
        pointer_default(unique),
        local
    ]
    interface IDXTBindHost : IUnknown
    {
        HRESULT SetBindHost([in] IBindHost * pBindHost);
    }

    //--- IDXTaskManager ---------------------------------------------------
    // This interface is used to implement a task managment service provider
    // to optimize thread usage.

    // Function type prototypes
    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")

    [
        local,
        uuid(254DBBC1-F922-11d0-883A-3C8B00C10000),
        helpstring("IDXTaskManager Interface"),
        pointer_default(unique)
    ]
    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 );
    };

    //--- IDXSurfaceFactory ---------------------------------------------------
    //
    //  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); }")

    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")

    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;



    [
        uuid(144946F5-C4D4-11d1-81D1-0000F87557DB),
        helpstring("IDXSurfaceFactory Interface"),
        pointer_default(unique)
    ]
    interface IDXSurfaceFactory : IUnknown
    {
        [local] 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);

        [local] HRESULT LoadIm

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -