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

📄 d3drmstu.h

📁 WinCE 3.0 BSP, 包含Inter SA1110, Intel_815E, Advantech_PCM9574 等
💻 H
字号:
/*==========================================================================;
 *
 *  Copyright (C) 1995 Microsoft Corporation.  All Rights Reserved.
 *
 *  File:	d3drmstuf.h
 *  Content:	Direct3DRM include file
 *@@BEGIN_MSINTERNAL
 * 
 *  History:
 *   Date	By	Reason
 *   ====	==	======
 *   27/02/96   stevela Moved from RL to D3DRM.
 *   20-jan-97	v-paulf New DPF code implemented
 *
 *@@END_MSINTERNAL
 *
 ***************************************************************************/

#ifndef __D3DRMSTUF_H__
#define __D3DRMSTUF_H__

#define RLNEWAPI
#include "rl.h"
#ifdef WINNT
#include "d3prm.h"
#else
#include "d3drm.h"
#endif

/*
 * Critical section code.
 * Coarse locking.  All actions require this section.
 * Defined in irlstuff.c
 */
extern LPCRITICAL_SECTION	lpRLCSect;

/* for internal use only */
EXTERN_C const GUID CDECL FAR CLSID_CDirect3DRMVisual;
EXTERN_C const GUID CDECL FAR CLSID_CDirect3DRMPicked;
EXTERN_C const GUID CDECL FAR CLSID_CDirect3DRMPicked2;
EXTERN_C const GUID CDECL FAR CLSID_CDirect3DRMObject;

#ifdef APITRACK
#define APIENTER(x) DPF(1, "RMAPI: Entering API %s", x);
#define APILEAVE(x) DPF(1, "RMAPI: Leaving API %s", x);
#else
#define APIENTER(x)
#define APILEAVE(x)
#endif


#ifdef DEBUG
    extern int iRLCSCnt;
    #define INCRLCSCNT() iRLCSCnt++;
    #define INITRLCSCNT() iRLCSCnt = 0;
    #define DECRLCSCNT() iRLCSCnt--;
#else
    #define INCRLCSCNT()
    #define INITRLCSCNT()
    #define DECRLCSCNT()
#endif

#define INIT_RL_CSECT() \
	InitializeCriticalSection( lpRLCSect ); \
	INITRLCSCNT();

#define FINI_RL_CSECT() \
	DeleteCriticalSection( lpRLCSect );

#ifdef NEW_DPF
#define ENTER_RL() \
	DPF( 6, A, TEXT("***** ENTER_RL: CNT = %ld,") TREMIND( TEXT("") ), iRLCSCnt ); \
	EnterCriticalSection( lpRLCSect ); \
	INCRLCSCNT(); \
	DPF( 6, L, TEXT("***** GOT RL CSECT: CNT = %ld,") TREMIND(TEXT("")), iRLCSCnt );

#define LEAVE_RL() \
	DECRLCSCNT() \
	DPF( 6, A, TEXT("***** LEAVE_RL: CNT = %ld,") TREMIND( TEXT("") ), iRLCSCnt ); \
	LeaveCriticalSection( lpRLCSect );
#else
#define ENTER_RL() \
	DPF( 6, TEXT("***** ENTER_RL: CNT = %ld,") TREMIND( TEXT("") ), iRLCSCnt ); \
	EnterCriticalSection( lpRLCSect ); \
	INCRLCSCNT(); \
	DPF( 6, TEXT("***** GOT RL CSECT: CNT = %ld,") TREMIND(TEXT("")), iRLCSCnt );

#define LEAVE_RL() \
	DECRLCSCNT() \
	DPF( 6, TEXT("***** LEAVE_RL: CNT = %ld,") TREMIND( TEXT("") ), iRLCSCnt ); \
	LeaveCriticalSection( lpRLCSect );
#endif

#define TRY		_try
#define EXCEPT(a)	_except(a)

#define MATCHID(id1, id2) IsEqualIID(id1, id2)

#define WRAP_ARRAY(num, obj, type) \
    (interface I##type##Array *) MakeArrayWrapper(num, (RLObject *) obj, &CLSID_C##type)

#define VTable(class) extern struct class##Vtbl class##Methods

#define IUNKNOWN_BASE_METHODS(type) \
    (HRESULT (STDMETHODCALLTYPE *)(type FAR *, REFIID riid, LPVOID *)) IDirect3DRMObjectQueryInterface, \
    (ULONG (STDMETHODCALLTYPE *)(type FAR *)) IDirect3DRMObjectAddRef, \
    (ULONG (STDMETHODCALLTYPE *)(type FAR *)) IDirect3DRMObjectRelease

#define IDIRECT3DRMOBJECT_BASE_METHODS(type) \
    IUNKNOWN_BASE_METHODS(type), \
    (HRESULT (STDMETHODCALLTYPE *)(type FAR *, LPUNKNOWN pUnkOuter, REFIID riid, void **)) IDirect3DRMObjectClone, \
    (HRESULT (STDMETHODCALLTYPE *)(type FAR *, D3DRMOBJECTCALLBACK, void *)) IDirect3DRMObjectAddDestroyCallback, \
    (HRESULT (STDMETHODCALLTYPE *)(type FAR *, D3DRMOBJECTCALLBACK, void *)) IDirect3DRMObjectRemoveDestroyCallback, \
    (HRESULT (STDMETHODCALLTYPE *)(type FAR *, ULONG)) IDirect3DRMObjectSetAppData, \
    (DWORD   (STDMETHODCALLTYPE *)(type FAR *)) IDirect3DRMObjectGetAppData, \
    (HRESULT (STDMETHODCALLTYPE *)(type FAR *, LPCTSTR)) IDirect3DRMObjectSetName, \
    (HRESULT (STDMETHODCALLTYPE *)(type FAR *, LPDWORD, LPTSTR)) IDirect3DRMObjectGetName, \
    (HRESULT (STDMETHODCALLTYPE *)(type FAR *, LPDWORD, LPTSTR)) IDirect3DRMObjectGetClassName

#define COM_OBJ(x) ((x)? ((RLObjInterface *)(x))->object : NULL)

#define GETOBJ(x) ((x)? ((RLObjInterface *)(x))->object->rlobj : NULL)

/* #define RLTOHRESULT(exp) (rloops = (exp), MAKE_HRESULT((rloops != RLNoError), IDirect3DFACILITY, rloops)) */
/* static RLError rloops = RLNoError; */

#define RLTOHRESULT(exp) (exp)


/*
 * macros for validation of pointers
 */

#ifndef DEBUG
#define FAST_CHECKING
#endif

#ifndef FAST_CHECKING

#define VALID_PTR_PTR(a)	(!IsBadWritePtr((void*)a, sizeof(void*)))

#else

#define VALID_PTR_PTR(a)	1

#endif


#define VALIDEX_PTR( ptr, size ) \
	(!IsBadReadPtr( ptr, size) )

#define VALIDEX_IID_PTR( ptr ) \
	(!IsBadReadPtr( ptr, sizeof( IID )) )

#define VALIDEX_PTR_PTR( ptr ) \
	(!IsBadWritePtr( ptr, sizeof( LPVOID )) )

/* Expanded in C, this declares the vtable for all the array types */
/*
#undef INTERFACE
#define INTERFACE IDirect3DRMObjectArray
DECLARE_INTERFACE_(IDirect3DRMObjectArray, IUnknown)
{
    STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID *ppvObj) PURE;
    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
    STDMETHOD_(ULONG, Release)(THIS) PURE;
    STDMETHOD_(DWORD, GetSize)(THIS) PURE;
    STDMETHOD(GetElement)(THIS_ ULONG index, IDirect3DRMObject **) PURE;
};
*/

#ifdef __cplusplus
#define IUnknownVtbl VOID
#define IDirect3DRMObjectArrayVtbl VOID
#endif

typedef struct
{   const IID *riid;
    IUnknownVtbl *lpVtbl;
} ClassData;

extern ClassData interfaceTable[];

extern const IID *classTable[];

typedef struct _RLComCallback
{   RLObjectCallback fn;
    void *arg;
    struct _RLComCallback *next;
} RLComCallback;

struct RLComObj;

typedef struct RLObjInterface
{   IUnknownVtbl *lpVtbl;
    const GUID *riid;
    struct RLComObj *object;
    struct RLObjInterface *next;
} RLObjInterface;

/* internal format of IDirect3DRMObject */
typedef struct RLComObj
{   CLSID *rclsid;
    LPUNKNOWN pUnkOuter;
    RLObjInterface *interfaces;
    RLObject rlobj;
    RLComCallback* destroy;
    RLComCallback* callbacks;
    RLUserVisualCallback uvis_callback;
    LPDIRECT3DRM pD3DRM;		// Used for uninitialized objects
    unsigned appdata;
} RLComObj;

/* internal format of IDirect3DRMObjectArray */

typedef struct {
    IDirect3DRMObjectArrayVtbl *vtab;
    ULONG refCount;
    CLSID *kindOf;
    ULONG size;
    void *array;
    LPUNKNOWN controller; /* if some other object owns the data */
} RLComArray;

/* declarations for IDirect3DRM class VTables defined in irlobj.c */
/*VTable(IDirect3DRMVisual);*/
VTable(IDirect3DRMDevice);
VTable(IDirect3DRMDevice2);
VTable(IDirect3DRMViewport);
VTable(IDirect3DRMViewport2);
VTable(IDirect3DRMFrame);
VTable(IDirect3DRMFrame2);
VTable(IDirect3DRMFrame3);
VTable(IDirect3DRMMesh);
VTable(IDirect3DRMMeshBuilder);
VTable(IDirect3DRMMeshBuilder2);
VTable(IDirect3DRMMeshBuilder3);
VTable(IDirect3DRMFace);
VTable(IDirect3DRMLight);
VTable(IDirect3DRMTexture);
VTable(IDirect3DRMTexture2);
VTable(IDirect3DRMTexture3);
VTable(IDirect3DRMWrap);
VTable(IDirect3DRMMaterial);
VTable(IDirect3DRMMaterial2);
VTable(IDirect3DRMAnimation);
VTable(IDirect3DRMAnimation2);
VTable(IDirect3DRMAnimationSet);
VTable(IDirect3DRMAnimationSet2);
VTable(IDirect3DRMUserVisual);
VTable(IDirect3DRMShadow);
VTable(IDirect3DRMInterpolator);
VTable(IDirect3DRMProgressiveMesh);

VTable(IDirect3DRM);
VTable(IDirect3DRMPicked);

/* create the IDirect3DRM base API */
HRESULT CreateRL(LPDIRECT3DRM FAR *lplpDirect3DRM);

/* add an interface to an RLComObj */
IUnknown *AddInterface(RLComObj *comobj, REFIID riid, IUnknownVtbl *lpVtbl);

/* Initialize a COM object */
HRESULT InitCOMObject(RLComObj *comobj, RLObject obj);

/* build an IDirect3DRMObject around an RLObject */
IUnknown *MakeCOMWrapper(RLObject obj, REFCLSID rclsid, LPUNKNOWN pUnkOuter, REFIID riid);

/* build an IDirect3DRMObjectArray around an array or RLObjects */
RLComArray *MakeArrayWrapper(ULONG size, RLObject *, REFCLSID rclsid);

int UserVisualCallbackWrapper(RLUserVisual, void*, RLUserVisualReason, RLDevice, RLViewport);

/* generic IDirect3DObject method functions */
HRESULT STDMETHODCALLTYPE IDirect3DRMObjectQueryInterface(IDirect3DRMObject FAR *, REFIID riid, LPVOID* ppvObj);
ULONG STDMETHODCALLTYPE IDirect3DRMObjectAddRef(IDirect3DRMObject FAR *);
ULONG STDMETHODCALLTYPE IDirect3DRMObjectRelease(IDirect3DRMObject FAR *);
HRESULT STDMETHODCALLTYPE IDirect3DRMObjectClone(IDirect3DRMObject FAR *, LPUNKNOWN pUnkOuter, REFIID riid, LPVOID *);
HRESULT STDMETHODCALLTYPE IDirect3DRMObjectAddDestroyCallback(IDirect3DRMObject FAR *, RLObjectCallback, void *argument);
HRESULT STDMETHODCALLTYPE IDirect3DRMObjectRemoveDestroyCallback(IDirect3DRMObject FAR *, RLObjectCallback, void *argument);
HRESULT STDMETHODCALLTYPE IDirect3DRMObjectSetAppData(IDirect3DRMObject FAR *, ULONG data);
DWORD   STDMETHODCALLTYPE IDirect3DRMObjectGetAppData(IDirect3DRMObject FAR *);
HRESULT STDMETHODCALLTYPE IDirect3DRMObjectSetName(IDirect3DRMObject FAR *, LPCTSTR);
HRESULT STDMETHODCALLTYPE IDirect3DRMObjectGetName(IDirect3DRMObject FAR *, LPDWORD, LPTSTR);
HRESULT STDMETHODCALLTYPE IDirect3DRMObjectGetClassName(IDirect3DRMObject FAR *, LPDWORD, LPTSTR);

/* These two aren't in a vtable */
HRESULT STDMETHODCALLTYPE InternalRLTextureSetValidationCallback(RLComObj *, RLValidationCallback arg0, void *arg1);
HRESULT STDMETHODCALLTYPE InternalRLTextureSetDownsampleCallback(RLComObj *, RLDownsampleCallback arg0, void *arg1);
HRESULT STDMETHODCALLTYPE InternalRLFrameAddMoveCallback(RLComObj *, RLFrameMoveCallback arg0, void *arg1);
HRESULT STDMETHODCALLTYPE InternalRLFrame2AddMoveCallback(RLComObj *, RLFrameMoveCallback arg0, void *arg1, DWORD preorder);
HRESULT STDMETHODCALLTYPE InternalRLFrameRemoveMoveCallback(RLComObj *, RLFrameMoveCallback arg0 , void *arg1);
HRESULT STDMETHODCALLTYPE InternalRLDeviceAddUpdateCallback(RLComObj *, RLUpdateCallback, void *argument);
HRESULT STDMETHODCALLTYPE InternalRLDeviceRemoveUpdateCallback(RLComObj *, RLUpdateCallback, void *argument);
HRESULT STDMETHODCALLTYPE InternalRLAnimationSetLoad(IDirect3DRMAnimationSet FAR *, LPVOID arg0, LPVOID arg1, D3DRMLOADOPTIONS arg2, RLLoadTextureCallback arg3, void *arg4, RLFrame arg5);
HRESULT STDMETHODCALLTYPE InternalRLAnimationSet2Load(IDirect3DRMAnimationSet2 FAR *self, LPVOID arg0, LPVOID arg1, D3DRMLOADOPTIONS arg2, RLLoadTextureCallback arg3, void *arg4, RLFrame arg5);
HRESULT STDMETHODCALLTYPE InternalRLFrameLoad(RLComObj *, LPVOID arg0, LPVOID arg1, D3DRMLOADOPTIONS arg2, RLLoadTextureCallback arg3, void *arg4);
HRESULT STDMETHODCALLTYPE InternalRLProgressiveMeshLoad(IDirect3DRMProgressiveMesh FAR *self, LPVOID arg0, LPVOID arg1, D3DRMLOADOPTIONS arg2, RLLoadTextureCallback arg3, void *arg4);

HRESULT STDMETHODCALLTYPE InternalRLMeshBuilderLoad(IDirect3DRMMeshBuilder FAR *self, LPVOID arg0, LPVOID arg1, D3DRMLOADOPTIONS arg2, RLLoadTextureCallback arg3, void *arg4);
HRESULT STDMETHODCALLTYPE InternalRLMeshBuilder2Load(IDirect3DRMMeshBuilder2 FAR *self, LPVOID arg0, LPVOID arg1, D3DRMLOADOPTIONS arg2, RLLoadTextureCallback arg3, void *arg4);
HRESULT STDMETHODCALLTYPE InternalRLUserVisualInit(IDirect3DRMUserVisual FAR *self, D3DRMUSERVISUALCALLBACK arg0, void *arg1);

/*
 * Ready for AnimationSet2, Frame3 and MeshBuilder3
 */
HRESULT STDMETHODCALLTYPE InternalRLFrame3Load(RLComObj *, LPVOID arg0, LPVOID arg1, D3DRMLOADOPTIONS arg2, RLLoadTextureCallback arg3, void *arg4);
HRESULT STDMETHODCALLTYPE InternalRLMeshBuilder3Load(IDirect3DRMMeshBuilder3 FAR *self, LPVOID arg0, LPVOID arg1, D3DRMLOADOPTIONS arg2, RLLoadTextureCallback arg3, void *arg4);

#define WRAP_OBJ(obj, id) \
    ((interface I##id *) MakeCOMWrapper(obj, &CLSID_C##id, 0, &IID_I##id))

#define WRAP_OBJ2(obj, cls, id) \
    ((interface I##id *) MakeCOMWrapper(obj, &CLSID_C##cls, 0, &IID_I##id))


#ifndef DEBUG
#define FAST_CHECKING
#endif

#ifndef FAST_CHECKING
#define VALID_D3DRMPMESHLOADSTATUS_PTR( ptr ) \
	(!IsBadWritePtr( ptr, sizeof( D3DRMPMESHLOADSTATUS ) ) && \
	 (ptr->dwSize == sizeof( D3DRMPMESHLOADSTATUS ) ))

#define VALID_D3DRMMATRIX4D( _mat ) \
    (!IsBadWritePtr( _mat, sizeof( D3DRMMATRIX4D ) ))

#define VALID_DWORDPTR( ptr ) \
    (!IsBadWritePtr( ptr, sizeof( DWORD ) ))

#else /* !FAST_CHECKING */
#define VALID_D3DRMMATRIX4D( _mat ) 1
#define VALID_D3DRMPMESHLOADSTATUS_PTR( ptr ) \
	 (ptr->dwSize == sizeof( D3DRMPMESHLOADSTATUS ))
#define VALID_DWORDPTR( ptr ) 1

#endif /* !FAST_CHECKING */

#endif

⌨️ 快捷键说明

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