📄 dxtrans.idl
字号:
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 + -