📄 d3drmstu.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 + -