home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / vc98 / include / d3drmobj.h < prev    next >
C/C++ Source or Header  |  1998-04-25  |  50KB  |  1,101 lines

  1. /*==========================================================================;
  2.  *
  3.  *  Copyright (C) 1995-1997 Microsoft Corporation.  All Rights Reserved.
  4.  *
  5.  *  File:    d3drm.h
  6.  *  Content:    Direct3DRM include file
  7.  *
  8.  ***************************************************************************/
  9.  
  10. #ifndef _D3DRMOBJ_H_
  11. #define _D3DRMOBJ_H_
  12.  
  13. #include <objbase.h> /* Use Windows header files */
  14. #define VIRTUAL
  15.  
  16. #include "d3drmdef.h"
  17. #include "d3d.h"
  18.  
  19. #ifdef __cplusplus
  20. extern "C" {
  21. #endif
  22.  
  23. /*
  24.  * The methods for IUnknown
  25.  */
  26. #define IUNKNOWN_METHODS(kind) \
  27.     STDMETHOD(QueryInterface)           (THIS_ REFIID riid, LPVOID *ppvObj) kind; \
  28.     STDMETHOD_(ULONG, AddRef)           (THIS) kind; \
  29.     STDMETHOD_(ULONG, Release)           (THIS) kind
  30.  
  31. /*
  32.  * The methods for IDirect3DRMObject
  33.  */
  34. #define IDIRECT3DRMOBJECT_METHODS(kind) \
  35.     STDMETHOD(Clone)            (THIS_ LPUNKNOWN pUnkOuter, REFIID riid, LPVOID *ppvObj) kind; \
  36.     STDMETHOD(AddDestroyCallback)      (THIS_ D3DRMOBJECTCALLBACK, LPVOID argument) kind; \
  37.     STDMETHOD(DeleteDestroyCallback)    (THIS_ D3DRMOBJECTCALLBACK, LPVOID argument) kind; \
  38.     STDMETHOD(SetAppData)           (THIS_ DWORD data) kind; \
  39.     STDMETHOD_(DWORD, GetAppData)      (THIS) kind; \
  40.     STDMETHOD(SetName)               (THIS_ LPCSTR) kind; \
  41.     STDMETHOD(GetName)            (THIS_ LPDWORD lpdwSize, LPSTR lpName) kind; \
  42.     STDMETHOD(GetClassName)        (THIS_ LPDWORD lpdwSize, LPSTR lpName) kind
  43.  
  44.  
  45. #define WIN_TYPES(itype, ptype) \
  46.     typedef interface itype FAR *LP##ptype, FAR **LPLP##ptype
  47.  
  48. WIN_TYPES(IDirect3DRMObject, DIRECT3DRMOBJECT);
  49. WIN_TYPES(IDirect3DRMDevice, DIRECT3DRMDEVICE);
  50. WIN_TYPES(IDirect3DRMDevice2, DIRECT3DRMDEVICE2);
  51. WIN_TYPES(IDirect3DRMViewport, DIRECT3DRMVIEWPORT);
  52. WIN_TYPES(IDirect3DRMFrame, DIRECT3DRMFRAME);
  53. WIN_TYPES(IDirect3DRMFrame2, DIRECT3DRMFRAME2);
  54. WIN_TYPES(IDirect3DRMVisual, DIRECT3DRMVISUAL);
  55. WIN_TYPES(IDirect3DRMMesh, DIRECT3DRMMESH);
  56. WIN_TYPES(IDirect3DRMMeshBuilder, DIRECT3DRMMESHBUILDER);
  57. WIN_TYPES(IDirect3DRMMeshBuilder2, DIRECT3DRMMESHBUILDER2);
  58. WIN_TYPES(IDirect3DRMFace, DIRECT3DRMFACE);
  59. WIN_TYPES(IDirect3DRMLight, DIRECT3DRMLIGHT);
  60. WIN_TYPES(IDirect3DRMTexture, DIRECT3DRMTEXTURE);
  61. WIN_TYPES(IDirect3DRMTexture2, DIRECT3DRMTEXTURE2);
  62. WIN_TYPES(IDirect3DRMWrap, DIRECT3DRMWRAP);
  63. WIN_TYPES(IDirect3DRMMaterial, DIRECT3DRMMATERIAL);
  64. WIN_TYPES(IDirect3DRMInterpolator, DIRECT3DRMINTERPOLATOR);
  65. WIN_TYPES(IDirect3DRMAnimation, DIRECT3DRMANIMATION);
  66. WIN_TYPES(IDirect3DRMAnimationSet, DIRECT3DRMANIMATIONSET);
  67. WIN_TYPES(IDirect3DRMUserVisual, DIRECT3DRMUSERVISUAL);
  68. WIN_TYPES(IDirect3DRMShadow, DIRECT3DRMSHADOW);
  69. WIN_TYPES(IDirect3DRMArray, DIRECT3DRMARRAY);
  70. WIN_TYPES(IDirect3DRMObjectArray, DIRECT3DRMOBJECTARRAY);
  71. WIN_TYPES(IDirect3DRMDeviceArray, DIRECT3DRMDEVICEARRAY);
  72. WIN_TYPES(IDirect3DRMFaceArray, DIRECT3DRMFACEARRAY);
  73. WIN_TYPES(IDirect3DRMViewportArray, DIRECT3DRMVIEWPORTARRAY);
  74. WIN_TYPES(IDirect3DRMFrameArray, DIRECT3DRMFRAMEARRAY);
  75. WIN_TYPES(IDirect3DRMVisualArray, DIRECT3DRMVISUALARRAY);
  76. WIN_TYPES(IDirect3DRMPickedArray, DIRECT3DRMPICKEDARRAY);
  77. WIN_TYPES(IDirect3DRMPicked2Array, DIRECT3DRMPICKED2ARRAY);
  78. WIN_TYPES(IDirect3DRMLightArray, DIRECT3DRMLIGHTARRAY);
  79. WIN_TYPES(IDirect3DRMProgressiveMesh, DIRECT3DRMPROGRESSIVEMESH);
  80.  
  81. /*
  82.  * Direct3DRM Object classes
  83.  */
  84. DEFINE_GUID(CLSID_CDirect3DRMDevice,        0x4fa3568e, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
  85. DEFINE_GUID(CLSID_CDirect3DRMViewport,        0x4fa3568f, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
  86. DEFINE_GUID(CLSID_CDirect3DRMFrame,        0x4fa35690, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
  87. DEFINE_GUID(CLSID_CDirect3DRMMesh,        0x4fa35691, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
  88. DEFINE_GUID(CLSID_CDirect3DRMMeshBuilder,   0x4fa35692, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
  89. DEFINE_GUID(CLSID_CDirect3DRMFace,        0x4fa35693, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
  90. DEFINE_GUID(CLSID_CDirect3DRMLight,        0x4fa35694, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
  91. DEFINE_GUID(CLSID_CDirect3DRMTexture,        0x4fa35695, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
  92. DEFINE_GUID(CLSID_CDirect3DRMWrap,        0x4fa35696, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
  93. DEFINE_GUID(CLSID_CDirect3DRMMaterial,        0x4fa35697, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
  94. DEFINE_GUID(CLSID_CDirect3DRMAnimation,        0x4fa35698, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
  95. DEFINE_GUID(CLSID_CDirect3DRMAnimationSet,  0x4fa35699, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
  96. DEFINE_GUID(CLSID_CDirect3DRMUserVisual,    0x4fa3569a, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
  97. DEFINE_GUID(CLSID_CDirect3DRMShadow,        0x4fa3569b, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
  98. DEFINE_GUID(CLSID_CDirect3DRMViewportInterpolator, 
  99. 0xde9eaa1, 0x3b84, 0x11d0, 0x9b, 0x6d, 0x0, 0x0, 0xc0, 0x78, 0x1b, 0xc3);
  100. DEFINE_GUID(CLSID_CDirect3DRMFrameInterpolator, 
  101. 0xde9eaa2, 0x3b84, 0x11d0, 0x9b, 0x6d, 0x0, 0x0, 0xc0, 0x78, 0x1b, 0xc3);
  102. DEFINE_GUID(CLSID_CDirect3DRMMeshInterpolator, 
  103. 0xde9eaa3, 0x3b84, 0x11d0, 0x9b, 0x6d, 0x0, 0x0, 0xc0, 0x78, 0x1b, 0xc3);
  104. DEFINE_GUID(CLSID_CDirect3DRMLightInterpolator, 
  105. 0xde9eaa6, 0x3b84, 0x11d0, 0x9b, 0x6d, 0x0, 0x0, 0xc0, 0x78, 0x1b, 0xc3);
  106. DEFINE_GUID(CLSID_CDirect3DRMMaterialInterpolator, 
  107. 0xde9eaa7, 0x3b84, 0x11d0, 0x9b, 0x6d, 0x0, 0x0, 0xc0, 0x78, 0x1b, 0xc3);
  108. DEFINE_GUID(CLSID_CDirect3DRMTextureInterpolator, 
  109. 0xde9eaa8, 0x3b84, 0x11d0, 0x9b, 0x6d, 0x0, 0x0, 0xc0, 0x78, 0x1b, 0xc3);
  110. DEFINE_GUID(CLSID_CDirect3DRMProgressiveMesh, 0x4516ec40, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3);
  111.  
  112.  
  113. /*
  114.  * Direct3DRM Object interfaces
  115.  */
  116. DEFINE_GUID(IID_IDirect3DRMObject,         0xeb16cb00, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
  117. DEFINE_GUID(IID_IDirect3DRMDevice,         0xe9e19280, 0x6e05, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
  118. DEFINE_GUID(IID_IDirect3DRMDevice2,        0x4516ec78, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3);
  119. DEFINE_GUID(IID_IDirect3DRMViewport,         0xeb16cb02, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
  120. DEFINE_GUID(IID_IDirect3DRMFrame,         0xeb16cb03, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
  121. DEFINE_GUID(IID_IDirect3DRMFrame2,        0xc3dfbd60, 0x3988, 0x11d0, 0x9e, 0xc2, 0x0, 0x0, 0xc0, 0x29, 0x1a, 0xc3);
  122. DEFINE_GUID(IID_IDirect3DRMVisual,         0xeb16cb04, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
  123. DEFINE_GUID(IID_IDirect3DRMMesh,         0xa3a80d01, 0x6e12, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
  124. DEFINE_GUID(IID_IDirect3DRMMeshBuilder,        0xa3a80d02, 0x6e12, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
  125. DEFINE_GUID(IID_IDirect3DRMMeshBuilder2,    0x4516ec77, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x0, 0x0, 0xc0, 0x78, 0x1b, 0xc3);
  126. DEFINE_GUID(IID_IDirect3DRMFace,         0xeb16cb07, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
  127. DEFINE_GUID(IID_IDirect3DRMLight,         0xeb16cb08, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
  128. DEFINE_GUID(IID_IDirect3DRMTexture,         0xeb16cb09, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
  129. DEFINE_GUID(IID_IDirect3DRMTexture2,        0x120f30c0, 0x1629, 0x11d0, 0x94, 0x1c, 0x0, 0x80, 0xc8, 0xc, 0xfa, 0x7b);
  130. DEFINE_GUID(IID_IDirect3DRMWrap,         0xeb16cb0a, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
  131. DEFINE_GUID(IID_IDirect3DRMMaterial,         0xeb16cb0b, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
  132. DEFINE_GUID(IID_IDirect3DRMAnimation,         0xeb16cb0d, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
  133. DEFINE_GUID(IID_IDirect3DRMAnimationSet,    0xeb16cb0e, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
  134. DEFINE_GUID(IID_IDirect3DRMObjectArray,        0x242f6bc2, 0x3849, 0x11d0, 0x9b, 0x6d, 0x0, 0x0, 0xc0, 0x78, 0x1b, 0xc3);
  135. DEFINE_GUID(IID_IDirect3DRMDeviceArray,        0xeb16cb10, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
  136. DEFINE_GUID(IID_IDirect3DRMViewportArray,   0xeb16cb11, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
  137. DEFINE_GUID(IID_IDirect3DRMFrameArray,         0xeb16cb12, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
  138. DEFINE_GUID(IID_IDirect3DRMVisualArray,        0xeb16cb13, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
  139. DEFINE_GUID(IID_IDirect3DRMLightArray,         0xeb16cb14, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
  140. DEFINE_GUID(IID_IDirect3DRMPickedArray,        0xeb16cb16, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
  141. DEFINE_GUID(IID_IDirect3DRMFaceArray,        0xeb16cb17, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
  142. DEFINE_GUID(IID_IDirect3DRMUserVisual,        0x59163de0, 0x6d43, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
  143. DEFINE_GUID(IID_IDirect3DRMShadow,        0xaf359780, 0x6ba3, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
  144. DEFINE_GUID(IID_IDirect3DRMInterpolator,    0x242f6bc1, 0x3849, 0x11d0, 0x9b, 0x6d, 0x0, 0x0, 0xc0, 0x78, 0x1b, 0xc3);
  145. DEFINE_GUID(IID_IDirect3DRMProgressiveMesh, 0x4516ec79, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3);
  146. DEFINE_GUID(IID_IDirect3DRMPicked2Array,    0x4516ec7b, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3);
  147.  
  148.  
  149. typedef void (CDECL *D3DRMOBJECTCALLBACK)(LPDIRECT3DRMOBJECT obj, LPVOID arg);
  150. typedef void (CDECL *D3DRMFRAMEMOVECALLBACK)(LPDIRECT3DRMFRAME obj, LPVOID arg, D3DVALUE delta);
  151. typedef void (CDECL *D3DRMUPDATECALLBACK)(LPDIRECT3DRMDEVICE obj, LPVOID arg, int, LPD3DRECT);
  152. typedef int (CDECL *D3DRMUSERVISUALCALLBACK)
  153.     (   LPDIRECT3DRMUSERVISUAL obj, LPVOID arg,    D3DRMUSERVISUALREASON reason,
  154.         LPDIRECT3DRMDEVICE dev, LPDIRECT3DRMVIEWPORT view
  155.     );
  156. typedef HRESULT (CDECL *D3DRMLOADTEXTURECALLBACK)
  157.     (char *tex_name, void *arg, LPDIRECT3DRMTEXTURE *);
  158. typedef void (CDECL *D3DRMLOADCALLBACK)
  159.     (LPDIRECT3DRMOBJECT object, REFIID objectguid, LPVOID arg);
  160.  
  161.  
  162. typedef struct _D3DRMPICKDESC
  163. {
  164.     ULONG    ulFaceIdx;
  165.     LONG    lGroupIdx;
  166.     D3DVECTOR    vPosition;
  167.  
  168. } D3DRMPICKDESC, *LPD3DRMPICKDESC;
  169.  
  170. typedef struct _D3DRMPICKDESC2
  171. {
  172.     ULONG    ulFaceIdx;
  173.     LONG    lGroupIdx;
  174.     D3DVECTOR    dvPosition;
  175.     D3DVALUE    tu;
  176.     D3DVALUE    tv;
  177.     D3DVECTOR    dvNormal;
  178.     D3DCOLOR    dcColor;
  179.  
  180. } D3DRMPICKDESC2, *LPD3DRMPICKDESC2;
  181.  
  182. #undef INTERFACE
  183. #define INTERFACE IDirect3DRMObject
  184.  
  185. /*
  186.  * Base class
  187.  */
  188. DECLARE_INTERFACE_(IDirect3DRMObject, IUnknown)
  189. {
  190.     IUNKNOWN_METHODS(PURE);
  191.     IDIRECT3DRMOBJECT_METHODS(PURE);
  192. };
  193.  
  194. #undef INTERFACE
  195. #define INTERFACE IDirect3DRMVisual
  196.  
  197. DECLARE_INTERFACE_(IDirect3DRMVisual, IDirect3DRMObject)
  198. {
  199.     IUNKNOWN_METHODS(PURE);
  200.     IDIRECT3DRMOBJECT_METHODS(PURE);
  201. };
  202.  
  203. #undef INTERFACE
  204. #define INTERFACE IDirect3DRMDevice
  205.  
  206. DECLARE_INTERFACE_(IDirect3DRMDevice, IDirect3DRMObject)
  207. {
  208.     IUNKNOWN_METHODS(PURE);
  209.     IDIRECT3DRMOBJECT_METHODS(PURE);
  210.  
  211.     /*
  212.      * IDirect3DRMDevice methods
  213.      */
  214.     STDMETHOD(Init)(THIS_ ULONG width, ULONG height) PURE;
  215.     STDMETHOD(InitFromD3D)(THIS_ LPDIRECT3D lpD3D, LPDIRECT3DDEVICE lpD3DDev) PURE;
  216.     STDMETHOD(InitFromClipper)(THIS_ LPDIRECTDRAWCLIPPER lpDDClipper, LPGUID lpGUID, int width, int height) PURE;
  217.  
  218.     STDMETHOD(Update)(THIS) PURE;
  219.     STDMETHOD(AddUpdateCallback)(THIS_ D3DRMUPDATECALLBACK, LPVOID arg) PURE;
  220.     STDMETHOD(DeleteUpdateCallback)(THIS_ D3DRMUPDATECALLBACK, LPVOID arg) PURE;
  221.     STDMETHOD(SetBufferCount)(THIS_ DWORD) PURE;
  222.     STDMETHOD_(DWORD, GetBufferCount)(THIS) PURE;
  223.  
  224.     STDMETHOD(SetDither)(THIS_ BOOL) PURE;
  225.     STDMETHOD(SetShades)(THIS_ DWORD) PURE;
  226.     STDMETHOD(SetQuality)(THIS_ D3DRMRENDERQUALITY) PURE;
  227.     STDMETHOD(SetTextureQuality)(THIS_ D3DRMTEXTUREQUALITY) PURE;
  228.  
  229.     STDMETHOD(GetViewports)(THIS_ LPDIRECT3DRMVIEWPORTARRAY *return_views) PURE;
  230.  
  231.     STDMETHOD_(BOOL, GetDither)(THIS) PURE;
  232.     STDMETHOD_(DWORD, GetShades)(THIS) PURE;
  233.     STDMETHOD_(DWORD, GetHeight)(THIS) PURE;
  234.     STDMETHOD_(DWORD, GetWidth)(THIS) PURE;
  235.     STDMETHOD_(DWORD, GetTrianglesDrawn)(THIS) PURE;
  236.     STDMETHOD_(DWORD, GetWireframeOptions)(THIS) PURE;
  237.     STDMETHOD_(D3DRMRENDERQUALITY, GetQuality)(THIS) PURE;
  238.     STDMETHOD_(D3DCOLORMODEL, GetColorModel)(THIS) PURE;
  239.     STDMETHOD_(D3DRMTEXTUREQUALITY, GetTextureQuality)(THIS) PURE;
  240.     STDMETHOD(GetDirect3DDevice)(THIS_ LPDIRECT3DDEVICE *) PURE;
  241. };
  242.  
  243. #undef INTERFACE
  244. #define INTERFACE IDirect3DRMDevice2
  245.  
  246. DECLARE_INTERFACE_(IDirect3DRMDevice2, IDirect3DRMDevice)
  247. {
  248.     IUNKNOWN_METHODS(PURE);
  249.     IDIRECT3DRMOBJECT_METHODS(PURE);
  250.  
  251.     /*
  252.      * IDirect3DRMDevice methods
  253.      */
  254.     STDMETHOD(Init)(THIS_ ULONG width, ULONG height) PURE;
  255.     STDMETHOD(InitFromD3D)(THIS_ LPDIRECT3D lpD3D, LPDIRECT3DDEVICE lpD3DDev) PURE;
  256.     STDMETHOD(InitFromClipper)(THIS_ LPDIRECTDRAWCLIPPER lpDDClipper, LPGUID lpGUID, int width, int height) PURE;
  257.  
  258.     STDMETHOD(Update)(THIS) PURE;
  259.     STDMETHOD(AddUpdateCallback)(THIS_ D3DRMUPDATECALLBACK, LPVOID arg) PURE;
  260.     STDMETHOD(DeleteUpdateCallback)(THIS_ D3DRMUPDATECALLBACK, LPVOID arg) PURE;
  261.     STDMETHOD(SetBufferCount)(THIS_ DWORD) PURE;
  262.     STDMETHOD_(DWORD, GetBufferCount)(THIS) PURE;
  263.  
  264.     STDMETHOD(SetDither)(THIS_ BOOL) PURE;
  265.     STDMETHOD(SetShades)(THIS_ DWORD) PURE;
  266.     STDMETHOD(SetQuality)(THIS_ D3DRMRENDERQUALITY) PURE;
  267.     STDMETHOD(SetTextureQuality)(THIS_ D3DRMTEXTUREQUALITY) PURE;
  268.  
  269.     STDMETHOD(GetViewports)(THIS_ LPDIRECT3DRMVIEWPORTARRAY *return_views) PURE;
  270.  
  271.     STDMETHOD_(BOOL, GetDither)(THIS) PURE;
  272.     STDMETHOD_(DWORD, GetShades)(THIS) PURE;
  273.     STDMETHOD_(DWORD, GetHeight)(THIS) PURE;
  274.     STDMETHOD_(DWORD, GetWidth)(THIS) PURE;
  275.     STDMETHOD_(DWORD, GetTrianglesDrawn)(THIS) PURE;
  276.     STDMETHOD_(DWORD, GetWireframeOptions)(THIS) PURE;
  277.     STDMETHOD_(D3DRMRENDERQUALITY, GetQuality)(THIS) PURE;
  278.     STDMETHOD_(D3DCOLORMODEL, GetColorModel)(THIS) PURE;
  279.     STDMETHOD_(D3DRMTEXTUREQUALITY, GetTextureQuality)(THIS) PURE;
  280.     STDMETHOD(GetDirect3DDevice)(THIS_ LPDIRECT3DDEVICE *) PURE;
  281.  
  282.     /*
  283.      * IDirect3DRMDevice2 methods
  284.      */
  285.     STDMETHOD(InitFromD3D2)(THIS_ LPDIRECT3D2 lpD3D, LPDIRECT3DDEVICE2 lpD3DDev) PURE;
  286.     STDMETHOD(InitFromSurface)(THIS_ LPGUID lpGUID, LPDIRECTDRAW lpDD, LPDIRECTDRAWSURFACE lpDDSBack) PURE;
  287.     STDMETHOD(SetRenderMode)(THIS_ DWORD dwFlags) PURE;
  288.     STDMETHOD_(DWORD, GetRenderMode)(THIS) PURE;
  289.     STDMETHOD(GetDirect3DDevice2)(THIS_ LPDIRECT3DDEVICE2 *) PURE;
  290. };
  291.  
  292. #undef INTERFACE
  293. #define INTERFACE IDirect3DRMViewport
  294.  
  295. DECLARE_INTERFACE_(IDirect3DRMViewport, IDirect3DRMObject)
  296. {
  297.     IUNKNOWN_METHODS(PURE);
  298.     IDIRECT3DRMOBJECT_METHODS(PURE);
  299.  
  300.     /*
  301.      * IDirect3DRMViewport methods
  302.      */
  303.     STDMETHOD(Init)
  304.     (    THIS_ LPDIRECT3DRMDEVICE dev, LPDIRECT3DRMFRAME camera,
  305.     DWORD xpos, DWORD ypos, DWORD width, DWORD height
  306.     ) PURE;
  307.     STDMETHOD(Clear)(THIS) PURE;
  308.     STDMETHOD(Render)(THIS_ LPDIRECT3DRMFRAME) PURE;
  309.  
  310.     STDMETHOD(SetFront)(THIS_ D3DVALUE) PURE;
  311.     STDMETHOD(SetBack)(THIS_ D3DVALUE) PURE;
  312.     STDMETHOD(SetField)(THIS_ D3DVALUE) PURE;
  313.     STDMETHOD(SetUniformScaling)(THIS_ BOOL) PURE;
  314.     STDMETHOD(SetCamera)(THIS_ LPDIRECT3DRMFRAME) PURE;
  315.     STDMETHOD(SetProjection)(THIS_ D3DRMPROJECTIONTYPE) PURE;
  316.     STDMETHOD(Transform)(THIS_ D3DRMVECTOR4D *d, D3DVECTOR *s) PURE;
  317.     STDMETHOD(InverseTransform)(THIS_ D3DVECTOR *d, D3DRMVECTOR4D *s) PURE;
  318.     STDMETHOD(Configure)(THIS_ LONG x, LONG y, DWORD width, DWORD height) PURE;
  319.     STDMETHOD(ForceUpdate)(THIS_ DWORD x1, DWORD y1, DWORD x2, DWORD y2) PURE;
  320.     STDMETHOD(SetPlane)(THIS_ D3DVALUE left, D3DVALUE right, D3DVALUE bottom, D3DVALUE top) PURE;
  321.  
  322.     STDMETHOD(GetCamera)(THIS_ LPDIRECT3DRMFRAME *) PURE;
  323.     STDMETHOD(GetDevice)(THIS_ LPDIRECT3DRMDEVICE *) PURE;
  324.     STDMETHOD(GetPlane)(THIS_ D3DVALUE *left, D3DVALUE *right, D3DVALUE *bottom, D3DVALUE *top) PURE;
  325.     STDMETHOD(Pick)(THIS_ LONG x, LONG y, LPDIRECT3DRMPICKEDARRAY *return_visuals) PURE;
  326.  
  327.     STDMETHOD_(BOOL, GetUniformScaling)(THIS) PURE;
  328.     STDMETHOD_(LONG, GetX)(THIS) PURE;
  329.     STDMETHOD_(LONG, GetY)(THIS) PURE;
  330.     STDMETHOD_(DWORD, GetWidth)(THIS) PURE;
  331.     STDMETHOD_(DWORD, GetHeight)(THIS) PURE;
  332.     STDMETHOD_(D3DVALUE, GetField)(THIS) PURE;
  333.     STDMETHOD_(D3DVALUE, GetBack)(THIS) PURE;
  334.     STDMETHOD_(D3DVALUE, GetFront)(THIS) PURE;
  335.     STDMETHOD_(D3DRMPROJECTIONTYPE, GetProjection)(THIS) PURE;
  336.     STDMETHOD(GetDirect3DViewport)(THIS_ LPDIRECT3DVIEWPORT *) PURE;
  337. };
  338.  
  339. #undef INTERFACE
  340. #define INTERFACE IDirect3DRMFrame
  341.  
  342. DECLARE_INTERFACE_(IDirect3DRMFrame, IDirect3DRMVisual)
  343. {
  344.     IUNKNOWN_METHODS(PURE);
  345.     IDIRECT3DRMOBJECT_METHODS(PURE);
  346.  
  347.     /*
  348.      * IDirect3DRMFrame methods
  349.      */
  350.     STDMETHOD(AddChild)(THIS_ LPDIRECT3DRMFRAME child) PURE;
  351.     STDMETHOD(AddLight)(THIS_ LPDIRECT3DRMLIGHT) PURE;
  352.     STDMETHOD(AddMoveCallback)(THIS_ D3DRMFRAMEMOVECALLBACK, VOID *arg) PURE;
  353.     STDMETHOD(AddTransform)(THIS_ D3DRMCOMBINETYPE, D3DRMMATRIX4D) PURE;
  354.     STDMETHOD(AddTranslation)(THIS_ D3DRMCOMBINETYPE, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
  355.     STDMETHOD(AddScale)(THIS_ D3DRMCOMBINETYPE, D3DVALUE sx, D3DVALUE sy, D3DVALUE sz) PURE;
  356.     STDMETHOD(AddRotation)(THIS_ D3DRMCOMBINETYPE, D3DVALUE x, D3DVALUE y, D3DVALUE z, D3DVALUE theta) PURE;
  357.     STDMETHOD(AddVisual)(THIS_ LPDIRECT3DRMVISUAL) PURE;
  358.     STDMETHOD(GetChildren)(THIS_ LPDIRECT3DRMFRAMEARRAY *children) PURE;
  359.     STDMETHOD_(D3DCOLOR, GetColor)(THIS) PURE;
  360.     STDMETHOD(GetLights)(THIS_ LPDIRECT3DRMLIGHTARRAY *lights) PURE;
  361.     STDMETHOD_(D3DRMMATERIALMODE, GetMaterialMode)(THIS) PURE;
  362.     STDMETHOD(GetParent)(THIS_ LPDIRECT3DRMFRAME *) PURE;
  363.     STDMETHOD(GetPosition)(THIS_ LPDIRECT3DRMFRAME reference, LPD3DVECTOR return_position) PURE;
  364.     STDMETHOD(GetRotation)(THIS_ LPDIRECT3DRMFRAME reference, LPD3DVECTOR axis, LPD3DVALUE return_theta) PURE;
  365.     STDMETHOD(GetScene)(THIS_ LPDIRECT3DRMFRAME *) PURE;
  366.     STDMETHOD_(D3DRMSORTMODE, GetSortMode)(THIS) PURE;
  367.     STDMETHOD(GetTexture)(THIS_ LPDIRECT3DRMTEXTURE *) PURE;
  368.     STDMETHOD(GetTransform)(THIS_ D3DRMMATRIX4D return_matrix) PURE;
  369.     STDMETHOD(GetVelocity)(THIS_ LPDIRECT3DRMFRAME reference, LPD3DVECTOR return_velocity, BOOL with_rotation) PURE;
  370.     STDMETHOD(GetOrientation)(THIS_ LPDIRECT3DRMFRAME reference, LPD3DVECTOR dir, LPD3DVECTOR up) PURE;
  371.     STDMETHOD(GetVisuals)(THIS_ LPDIRECT3DRMVISUALARRAY *visuals) PURE;
  372.     STDMETHOD(GetTextureTopology)(THIS_ BOOL *wrap_u, BOOL *wrap_v) PURE;
  373.     STDMETHOD(InverseTransform)(THIS_ D3DVECTOR *d, D3DVECTOR *s) PURE;
  374.     STDMETHOD(Load)(THIS_ LPVOID filename, LPVOID name, D3DRMLOADOPTIONS loadflags, D3DRMLOADTEXTURECALLBACK, LPVOID lpArg)PURE;
  375.     STDMETHOD(LookAt)(THIS_ LPDIRECT3DRMFRAME target, LPDIRECT3DRMFRAME reference, D3DRMFRAMECONSTRAINT) PURE;
  376.     STDMETHOD(Move)(THIS_ D3DVALUE delta) PURE;
  377.     STDMETHOD(DeleteChild)(THIS_ LPDIRECT3DRMFRAME) PURE;
  378.     STDMETHOD(DeleteLight)(THIS_ LPDIRECT3DRMLIGHT) PURE;
  379.     STDMETHOD(DeleteMoveCallback)(THIS_ D3DRMFRAMEMOVECALLBACK, VOID *arg) PURE;
  380.     STDMETHOD(DeleteVisual)(THIS_ LPDIRECT3DRMVISUAL) PURE;
  381.     STDMETHOD_(D3DCOLOR, GetSceneBackground)(THIS) PURE;
  382.     STDMETHOD(GetSceneBackgroundDepth)(THIS_ LPDIRECTDRAWSURFACE *) PURE;
  383.     STDMETHOD_(D3DCOLOR, GetSceneFogColor)(THIS) PURE;
  384.     STDMETHOD_(BOOL, GetSceneFogEnable)(THIS) PURE;
  385.     STDMETHOD_(D3DRMFOGMODE, GetSceneFogMode)(THIS) PURE;
  386.     STDMETHOD(GetSceneFogParams)(THIS_ D3DVALUE *return_start, D3DVALUE *return_end, D3DVALUE *return_density) PURE;
  387.     STDMETHOD(SetSceneBackground)(THIS_ D3DCOLOR) PURE;
  388.     STDMETHOD(SetSceneBackgroundRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;
  389.     STDMETHOD(SetSceneBackgroundDepth)(THIS_ LPDIRECTDRAWSURFACE) PURE;
  390.     STDMETHOD(SetSceneBackgroundImage)(THIS_ LPDIRECT3DRMTEXTURE) PURE;
  391.     STDMETHOD(SetSceneFogEnable)(THIS_ BOOL) PURE;
  392.     STDMETHOD(SetSceneFogColor)(THIS_ D3DCOLOR) PURE;
  393.     STDMETHOD(SetSceneFogMode)(THIS_ D3DRMFOGMODE) PURE;
  394.     STDMETHOD(SetSceneFogParams)(THIS_ D3DVALUE start, D3DVALUE end, D3DVALUE density) PURE;
  395.     STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE;
  396.     STDMETHOD(SetColorRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;
  397.     STDMETHOD_(D3DRMZBUFFERMODE, GetZbufferMode)(THIS) PURE;
  398.     STDMETHOD(SetMaterialMode)(THIS_ D3DRMMATERIALMODE) PURE;
  399.     STDMETHOD(SetOrientation)
  400.     (    THIS_ LPDIRECT3DRMFRAME reference,
  401.     D3DVALUE dx, D3DVALUE dy, D3DVALUE dz,
  402.     D3DVALUE ux, D3DVALUE uy, D3DVALUE uz
  403.     ) PURE;
  404.     STDMETHOD(SetPosition)(THIS_ LPDIRECT3DRMFRAME reference, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
  405.     STDMETHOD(SetRotation)(THIS_ LPDIRECT3DRMFRAME reference, D3DVALUE x, D3DVALUE y, D3DVALUE z, D3DVALUE theta) PURE;
  406.     STDMETHOD(SetSortMode)(THIS_ D3DRMSORTMODE) PURE;
  407.     STDMETHOD(SetTexture)(THIS_ LPDIRECT3DRMTEXTURE) PURE;
  408.     STDMETHOD(SetTextureTopology)(THIS_ BOOL wrap_u, BOOL wrap_v) PURE;
  409.     STDMETHOD(SetVelocity)(THIS_ LPDIRECT3DRMFRAME reference, D3DVALUE x, D3DVALUE y, D3DVALUE z, BOOL with_rotation) PURE;
  410.     STDMETHOD(SetZbufferMode)(THIS_ D3DRMZBUFFERMODE) PURE;
  411.     STDMETHOD(Transform)(THIS_ D3DVECTOR *d, D3DVECTOR *s) PURE;
  412. };
  413.  
  414. #undef INTERFACE
  415. #define INTERFACE IDirect3DRMFrame2
  416.  
  417. DECLARE_INTERFACE_(IDirect3DRMFrame2, IDirect3DRMFrame)
  418. {
  419.     IUNKNOWN_METHODS(PURE);
  420.     IDIRECT3DRMOBJECT_METHODS(PURE);
  421.  
  422.     /*
  423.      * IDirect3DRMFrame methods
  424.      */
  425.     STDMETHOD(AddChild)(THIS_ LPDIRECT3DRMFRAME child) PURE;
  426.     STDMETHOD(AddLight)(THIS_ LPDIRECT3DRMLIGHT) PURE;
  427.     STDMETHOD(AddMoveCallback)(THIS_ D3DRMFRAMEMOVECALLBACK, VOID *arg) PURE;
  428.     STDMETHOD(AddTransform)(THIS_ D3DRMCOMBINETYPE, D3DRMMATRIX4D) PURE;
  429.     STDMETHOD(AddTranslation)(THIS_ D3DRMCOMBINETYPE, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
  430.     STDMETHOD(AddScale)(THIS_ D3DRMCOMBINETYPE, D3DVALUE sx, D3DVALUE sy, D3DVALUE sz) PURE;
  431.     STDMETHOD(AddRotation)(THIS_ D3DRMCOMBINETYPE, D3DVALUE x, D3DVALUE y, D3DVALUE z, D3DVALUE theta) PURE;
  432.     STDMETHOD(AddVisual)(THIS_ LPDIRECT3DRMVISUAL) PURE;
  433.     STDMETHOD(GetChildren)(THIS_ LPDIRECT3DRMFRAMEARRAY *children) PURE;
  434.     STDMETHOD_(D3DCOLOR, GetColor)(THIS) PURE;
  435.     STDMETHOD(GetLights)(THIS_ LPDIRECT3DRMLIGHTARRAY *lights) PURE;
  436.     STDMETHOD_(D3DRMMATERIALMODE, GetMaterialMode)(THIS) PURE;
  437.     STDMETHOD(GetParent)(THIS_ LPDIRECT3DRMFRAME *) PURE;
  438.     STDMETHOD(GetPosition)(THIS_ LPDIRECT3DRMFRAME reference, LPD3DVECTOR return_position) PURE;
  439.     STDMETHOD(GetRotation)(THIS_ LPDIRECT3DRMFRAME reference, LPD3DVECTOR axis, LPD3DVALUE return_theta) PURE;
  440.     STDMETHOD(GetScene)(THIS_ LPDIRECT3DRMFRAME *) PURE;
  441.     STDMETHOD_(D3DRMSORTMODE, GetSortMode)(THIS) PURE;
  442.     STDMETHOD(GetTexture)(THIS_ LPDIRECT3DRMTEXTURE *) PURE;
  443.     STDMETHOD(GetTransform)(THIS_ D3DRMMATRIX4D return_matrix) PURE;
  444.     STDMETHOD(GetVelocity)(THIS_ LPDIRECT3DRMFRAME reference, LPD3DVECTOR return_velocity, BOOL with_rotation) PURE;
  445.     STDMETHOD(GetOrientation)(THIS_ LPDIRECT3DRMFRAME reference, LPD3DVECTOR dir, LPD3DVECTOR up) PURE;
  446.     STDMETHOD(GetVisuals)(THIS_ LPDIRECT3DRMVISUALARRAY *visuals) PURE;
  447.     STDMETHOD(GetTextureTopology)(THIS_ BOOL *wrap_u, BOOL *wrap_v) PURE;
  448.     STDMETHOD(InverseTransform)(THIS_ D3DVECTOR *d, D3DVECTOR *s) PURE;
  449.     STDMETHOD(Load)(THIS_ LPVOID filename, LPVOID name, D3DRMLOADOPTIONS loadflags, D3DRMLOADTEXTURECALLBACK, LPVOID lpArg)PURE;
  450.     STDMETHOD(LookAt)(THIS_ LPDIRECT3DRMFRAME target, LPDIRECT3DRMFRAME reference, D3DRMFRAMECONSTRAINT) PURE;
  451.     STDMETHOD(Move)(THIS_ D3DVALUE delta) PURE;
  452.     STDMETHOD(DeleteChild)(THIS_ LPDIRECT3DRMFRAME) PURE;
  453.     STDMETHOD(DeleteLight)(THIS_ LPDIRECT3DRMLIGHT) PURE;
  454.     STDMETHOD(DeleteMoveCallback)(THIS_ D3DRMFRAMEMOVECALLBACK, VOID *arg) PURE;
  455.     STDMETHOD(DeleteVisual)(THIS_ LPDIRECT3DRMVISUAL) PURE;
  456.     STDMETHOD_(D3DCOLOR, GetSceneBackground)(THIS) PURE;
  457.     STDMETHOD(GetSceneBackgroundDepth)(THIS_ LPDIRECTDRAWSURFACE *) PURE;
  458.     STDMETHOD_(D3DCOLOR, GetSceneFogColor)(THIS) PURE;
  459.     STDMETHOD_(BOOL, GetSceneFogEnable)(THIS) PURE;
  460.     STDMETHOD_(D3DRMFOGMODE, GetSceneFogMode)(THIS) PURE;
  461.     STDMETHOD(GetSceneFogParams)(THIS_ D3DVALUE *return_start, D3DVALUE *return_end, D3DVALUE *return_density) PURE;
  462.     STDMETHOD(SetSceneBackground)(THIS_ D3DCOLOR) PURE;
  463.     STDMETHOD(SetSceneBackgroundRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;
  464.     STDMETHOD(SetSceneBackgroundDepth)(THIS_ LPDIRECTDRAWSURFACE) PURE;
  465.     STDMETHOD(SetSceneBackgroundImage)(THIS_ LPDIRECT3DRMTEXTURE) PURE;
  466.     STDMETHOD(SetSceneFogEnable)(THIS_ BOOL) PURE;
  467.     STDMETHOD(SetSceneFogColor)(THIS_ D3DCOLOR) PURE;
  468.     STDMETHOD(SetSceneFogMode)(THIS_ D3DRMFOGMODE) PURE;
  469.     STDMETHOD(SetSceneFogParams)(THIS_ D3DVALUE start, D3DVALUE end, D3DVALUE density) PURE;
  470.     STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE;
  471.     STDMETHOD(SetColorRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;
  472.     STDMETHOD_(D3DRMZBUFFERMODE, GetZbufferMode)(THIS) PURE;
  473.     STDMETHOD(SetMaterialMode)(THIS_ D3DRMMATERIALMODE) PURE;
  474.     STDMETHOD(SetOrientation)
  475.     (    THIS_ LPDIRECT3DRMFRAME reference,
  476.     D3DVALUE dx, D3DVALUE dy, D3DVALUE dz,
  477.     D3DVALUE ux, D3DVALUE uy, D3DVALUE uz
  478.     ) PURE;
  479.     STDMETHOD(SetPosition)(THIS_ LPDIRECT3DRMFRAME reference, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
  480.     STDMETHOD(SetRotation)(THIS_ LPDIRECT3DRMFRAME reference, D3DVALUE x, D3DVALUE y, D3DVALUE z, D3DVALUE theta) PURE;
  481.     STDMETHOD(SetSortMode)(THIS_ D3DRMSORTMODE) PURE;
  482.     STDMETHOD(SetTexture)(THIS_ LPDIRECT3DRMTEXTURE) PURE;
  483.     STDMETHOD(SetTextureTopology)(THIS_ BOOL wrap_u, BOOL wrap_v) PURE;
  484.     STDMETHOD(SetVelocity)(THIS_ LPDIRECT3DRMFRAME reference, D3DVALUE x, D3DVALUE y, D3DVALUE z, BOOL with_rotation) PURE;
  485.     STDMETHOD(SetZbufferMode)(THIS_ D3DRMZBUFFERMODE) PURE;
  486.     STDMETHOD(Transform)(THIS_ D3DVECTOR *d, D3DVECTOR *s) PURE;
  487.  
  488.     /*
  489.      * IDirect3DRMFrame2 methods
  490.      */
  491.     STDMETHOD(AddMoveCallback2)(THIS_ D3DRMFRAMEMOVECALLBACK, VOID *arg, DWORD dwFlags) PURE;
  492.     STDMETHOD(GetBox)(THIS_ LPD3DRMBOX) PURE;
  493.     STDMETHOD_(BOOL, GetBoxEnable)(THIS) PURE;
  494.     STDMETHOD(GetAxes)(THIS_ LPD3DVECTOR dir, LPD3DVECTOR up);
  495.     STDMETHOD(GetMaterial)(THIS_ LPDIRECT3DRMMATERIAL *) PURE;
  496.     STDMETHOD_(BOOL, GetInheritAxes)(THIS);
  497.     STDMETHOD(GetHierarchyBox)(THIS_ LPD3DRMBOX) PURE;
  498.  
  499.     STDMETHOD(SetBox)(THIS_ LPD3DRMBOX) PURE;
  500.     STDMETHOD(SetBoxEnable)(THIS_ BOOL) PURE;
  501.     STDMETHOD(SetAxes)(THIS_ D3DVALUE dx, D3DVALUE dy, D3DVALUE dz,
  502.                D3DVALUE ux, D3DVALUE uy, D3DVALUE uz);
  503.     STDMETHOD(SetInheritAxes)(THIS_ BOOL inherit_from_parent);
  504.     STDMETHOD(SetMaterial)(THIS_ LPDIRECT3DRMMATERIAL) PURE;
  505.     STDMETHOD(SetQuaternion)(THIS_ LPDIRECT3DRMFRAME reference, D3DRMQUATERNION *q) PURE;
  506.  
  507.     STDMETHOD(RayPick)(THIS_ LPDIRECT3DRMFRAME reference, LPD3DRMRAY ray, DWORD dwFlags, LPDIRECT3DRMPICKED2ARRAY *return_visuals) PURE;
  508.     STDMETHOD(Save)(THIS_ LPCSTR filename, D3DRMXOFFORMAT d3dFormat, 
  509.             D3DRMSAVEOPTIONS d3dSaveFlags);
  510. };
  511.  
  512. #undef INTERFACE
  513. #define INTERFACE IDirect3DRMMesh
  514.  
  515. DECLARE_INTERFACE_(IDirect3DRMMesh, IDirect3DRMVisual)
  516. {
  517.     IUNKNOWN_METHODS(PURE);
  518.     IDIRECT3DRMOBJECT_METHODS(PURE);
  519.  
  520.     /*
  521.      * IDirect3DRMMesh methods
  522.      */
  523.     STDMETHOD(Scale)(THIS_ D3DVALUE sx, D3DVALUE sy, D3DVALUE sz) PURE;
  524.     STDMETHOD(Translate)(THIS_ D3DVALUE tx, D3DVALUE ty, D3DVALUE tz) PURE;
  525.     STDMETHOD(GetBox)(THIS_ D3DRMBOX *) PURE;
  526.     STDMETHOD(AddGroup)(THIS_ unsigned vCount, unsigned fCount, unsigned vPerFace, unsigned *fData, D3DRMGROUPINDEX *returnId) PURE;
  527.     STDMETHOD(SetVertices)(THIS_ D3DRMGROUPINDEX id, unsigned index, unsigned count, D3DRMVERTEX *values) PURE;
  528.     STDMETHOD(SetGroupColor)(THIS_ D3DRMGROUPINDEX id, D3DCOLOR value) PURE;
  529.     STDMETHOD(SetGroupColorRGB)(THIS_ D3DRMGROUPINDEX id, D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;
  530.     STDMETHOD(SetGroupMapping)(THIS_ D3DRMGROUPINDEX id, D3DRMMAPPING value) PURE;
  531.     STDMETHOD(SetGroupQuality)(THIS_ D3DRMGROUPINDEX id, D3DRMRENDERQUALITY value) PURE;
  532.     STDMETHOD(SetGroupMaterial)(THIS_ D3DRMGROUPINDEX id, LPDIRECT3DRMMATERIAL value) PURE;
  533.     STDMETHOD(SetGroupTexture)(THIS_ D3DRMGROUPINDEX id, LPDIRECT3DRMTEXTURE value) PURE;
  534.  
  535.     STDMETHOD_(unsigned, GetGroupCount)(THIS) PURE;
  536.     STDMETHOD(GetGroup)(THIS_ D3DRMGROUPINDEX id, unsigned *vCount, unsigned *fCount, unsigned *vPerFace, DWORD *fDataSize, unsigned *fData) PURE;
  537.     STDMETHOD(GetVertices)(THIS_ D3DRMGROUPINDEX id, DWORD index, DWORD count, D3DRMVERTEX *returnPtr) PURE;
  538.     STDMETHOD_(D3DCOLOR, GetGroupColor)(THIS_ D3DRMGROUPINDEX id) PURE;
  539.     STDMETHOD_(D3DRMMAPPING, GetGroupMapping)(THIS_ D3DRMGROUPINDEX id) PURE;
  540.     STDMETHOD_(D3DRMRENDERQUALITY, GetGroupQuality)(THIS_ D3DRMGROUPINDEX id) PURE;
  541.     STDMETHOD(GetGroupMaterial)(THIS_ D3DRMGROUPINDEX id, LPDIRECT3DRMMATERIAL *returnPtr) PURE;
  542.     STDMETHOD(GetGroupTexture)(THIS_ D3DRMGROUPINDEX id, LPDIRECT3DRMTEXTURE *returnPtr) PURE;
  543. };
  544.  
  545. #undef INTERFACE
  546. #define INTERFACE IDirect3DRMProgressiveMesh
  547.  
  548. DECLARE_INTERFACE_(IDirect3DRMProgressiveMesh, IDirect3DRMVisual)
  549. {
  550.     IUNKNOWN_METHODS(PURE);
  551.     IDIRECT3DRMOBJECT_METHODS(PURE);
  552.  
  553.     /*
  554.      * IDirect3DRMProgressiveMesh methods
  555.      */
  556.     STDMETHOD(Load) (THIS_ LPVOID lpObjLocation, LPVOID lpObjId, 
  557.              D3DRMLOADOPTIONS dloLoadflags, D3DRMLOADTEXTURECALLBACK lpCallback,
  558.              LPVOID lpArg) PURE;
  559.     STDMETHOD(GetLoadStatus) (THIS_ LPD3DRMPMESHLOADSTATUS lpStatus) PURE;
  560.     STDMETHOD(SetMinRenderDetail) (THIS_ D3DVALUE d3dVal) PURE;
  561.     STDMETHOD(Abort) (THIS_ DWORD dwFlags) PURE;
  562.     
  563.     STDMETHOD(GetFaceDetail) (THIS_ LPDWORD lpdwCount) PURE;
  564.     STDMETHOD(GetVertexDetail) (THIS_ LPDWORD lpdwCount) PURE;
  565.     STDMETHOD(SetFaceDetail) (THIS_ DWORD dwCount) PURE;
  566.     STDMETHOD(SetVertexDetail) (THIS_ DWORD dwCount) PURE;
  567.     STDMETHOD(GetFaceDetailRange) (THIS_ LPDWORD lpdwMin, LPDWORD lpdwMax) PURE;
  568.     STDMETHOD(GetVertexDetailRange) (THIS_ LPDWORD lpdwMin, LPDWORD lpdwMax) PURE;
  569.     STDMETHOD(GetDetail) (THIS_ D3DVALUE *lpdvVal) PURE;
  570.     STDMETHOD(SetDetail) (THIS_ D3DVALUE d3dVal) PURE;
  571.  
  572.     STDMETHOD(RegisterEvents) (THIS_ HANDLE hEvent, DWORD dwFlags, DWORD dwReserved) PURE;
  573.     STDMETHOD(CreateMesh) (THIS_ LPDIRECT3DRMMESH *lplpD3DRMMesh) PURE;
  574.     STDMETHOD(Duplicate) (THIS_ LPDIRECT3DRMPROGRESSIVEMESH *lplpD3DRMPMesh) PURE;
  575.     STDMETHOD(GetBox) (THIS_ LPD3DRMBOX lpBBox) PURE;
  576.     STDMETHOD(SetQuality) (THIS_ D3DRMRENDERQUALITY) PURE;
  577.     STDMETHOD(GetQuality) (THIS_ LPD3DRMRENDERQUALITY lpdwquality) PURE;
  578. };
  579.  
  580. #undef INTERFACE
  581. #define INTERFACE IDirect3DRMShadow
  582.  
  583. DECLARE_INTERFACE_(IDirect3DRMShadow, IDirect3DRMVisual)
  584. {
  585.     IUNKNOWN_METHODS(PURE);
  586.     IDIRECT3DRMOBJECT_METHODS(PURE);
  587.  
  588.     /*
  589.      * IDirect3DRMShadow methods
  590.      */
  591.     STDMETHOD(Init)
  592.     (    THIS_ LPDIRECT3DRMVISUAL visual, LPDIRECT3DRMLIGHT light,
  593.     D3DVALUE px, D3DVALUE py, D3DVALUE pz,
  594.     D3DVALUE nx, D3DVALUE ny, D3DVALUE nz
  595.     ) PURE;
  596. };
  597.  
  598. #undef INTERFACE
  599. #define INTERFACE IDirect3DRMFace
  600.  
  601. DECLARE_INTERFACE_(IDirect3DRMFace, IDirect3DRMObject)
  602. {
  603.     IUNKNOWN_METHODS(PURE);
  604.     IDIRECT3DRMOBJECT_METHODS(PURE);
  605.  
  606.     /*
  607.      * IDirect3DRMFace methods
  608.      */
  609.      STDMETHOD(AddVertex)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
  610.      STDMETHOD(AddVertexAndNormalIndexed)(THIS_ DWORD vertex, DWORD normal) PURE;
  611.      STDMETHOD(SetColorRGB)(THIS_ D3DVALUE, D3DVALUE, D3DVALUE) PURE;
  612.      STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE;
  613.      STDMETHOD(SetTexture)(THIS_ LPDIRECT3DRMTEXTURE) PURE;
  614.      STDMETHOD(SetTextureCoordinates)(THIS_ DWORD vertex, D3DVALUE u, D3DVALUE v) PURE;
  615.      STDMETHOD(SetMaterial)(THIS_ LPDIRECT3DRMMATERIAL) PURE;
  616.      STDMETHOD(SetTextureTopology)(THIS_ BOOL wrap_u, BOOL wrap_v) PURE;
  617.  
  618.      STDMETHOD(GetVertex)(THIS_ DWORD index, D3DVECTOR *vertex, D3DVECTOR *normal) PURE;
  619.      STDMETHOD(GetVertices)(THIS_ DWORD *vertex_count, D3DVECTOR *coords, D3DVECTOR *normals);
  620.      STDMETHOD(GetTextureCoordinates)(THIS_ DWORD vertex, D3DVALUE *u, D3DVALUE *v) PURE;
  621.      STDMETHOD(GetTextureTopology)(THIS_ BOOL *wrap_u, BOOL *wrap_v) PURE;
  622.      STDMETHOD(GetNormal)(THIS_ D3DVECTOR *) PURE;
  623.      STDMETHOD(GetTexture)(THIS_ LPDIRECT3DRMTEXTURE *) PURE;
  624.      STDMETHOD(GetMaterial)(THIS_ LPDIRECT3DRMMATERIAL *) PURE;
  625.  
  626.      STDMETHOD_(int, GetVertexCount)(THIS) PURE;
  627.      STDMETHOD_(int, GetVertexIndex)(THIS_ DWORD which) PURE;
  628.      STDMETHOD_(int, GetTextureCoordinateIndex)(THIS_ DWORD which) PURE;
  629.      STDMETHOD_(D3DCOLOR, GetColor)(THIS) PURE;
  630. };
  631.  
  632. #undef INTERFACE
  633. #define INTERFACE IDirect3DRMMeshBuilder
  634.  
  635. DECLARE_INTERFACE_(IDirect3DRMMeshBuilder, IDirect3DRMVisual)
  636. {
  637.     IUNKNOWN_METHODS(PURE);
  638.     IDIRECT3DRMOBJECT_METHODS(PURE);
  639.  
  640.     /*
  641.      * IDirect3DRMMeshBuilder methods
  642.      */
  643.     STDMETHOD(Load)(THIS_ LPVOID filename, LPVOID name, D3DRMLOADOPTIONS loadflags, D3DRMLOADTEXTURECALLBACK, LPVOID lpArg) PURE;
  644.     STDMETHOD(Save)(THIS_ const char *filename, D3DRMXOFFORMAT, D3DRMSAVEOPTIONS save) PURE;
  645.     STDMETHOD(Scale)(THIS_ D3DVALUE sx, D3DVALUE sy, D3DVALUE sz) PURE;
  646.     STDMETHOD(Translate)(THIS_ D3DVALUE tx, D3DVALUE ty, D3DVALUE tz) PURE;
  647.     STDMETHOD(SetColorSource)(THIS_ D3DRMCOLORSOURCE) PURE;
  648.     STDMETHOD(GetBox)(THIS_ D3DRMBOX *) PURE;
  649.     STDMETHOD(GenerateNormals)(THIS) PURE;
  650.     STDMETHOD_(D3DRMCOLORSOURCE, GetColorSource)(THIS) PURE;
  651.  
  652.     STDMETHOD(AddMesh)(THIS_ LPDIRECT3DRMMESH) PURE;
  653.     STDMETHOD(AddMeshBuilder)(THIS_ LPDIRECT3DRMMESHBUILDER) PURE;
  654.     STDMETHOD(AddFrame)(THIS_ LPDIRECT3DRMFRAME) PURE;
  655.     STDMETHOD(AddFace)(THIS_ LPDIRECT3DRMFACE) PURE;
  656.     STDMETHOD(AddFaces)
  657.     (    THIS_ DWORD vcount, D3DVECTOR *vertices, DWORD ncount, D3DVECTOR *normals,
  658.     DWORD *data, LPDIRECT3DRMFACEARRAY*
  659.     ) PURE;
  660.     STDMETHOD(ReserveSpace)(THIS_ DWORD vertex_Count, DWORD normal_count, DWORD face_count) PURE;
  661.     STDMETHOD(SetColorRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;
  662.     STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE;
  663.     STDMETHOD(SetTexture)(THIS_ LPDIRECT3DRMTEXTURE) PURE;
  664.     STDMETHOD(SetMaterial)(THIS_ LPDIRECT3DRMMATERIAL) PURE;
  665.     STDMETHOD(SetTextureTopology)(THIS_ BOOL wrap_u, BOOL wrap_v) PURE;
  666.     STDMETHOD(SetQuality)(THIS_ D3DRMRENDERQUALITY) PURE;
  667.     STDMETHOD(SetPerspective)(THIS_ BOOL) PURE;
  668.     STDMETHOD(SetVertex)(THIS_ DWORD index, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
  669.     STDMETHOD(SetNormal)(THIS_ DWORD index, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
  670.     STDMETHOD(SetTextureCoordinates)(THIS_ DWORD index, D3DVALUE u, D3DVALUE v) PURE;
  671.     STDMETHOD(SetVertexColor)(THIS_ DWORD index, D3DCOLOR) PURE;
  672.     STDMETHOD(SetVertexColorRGB)(THIS_ DWORD index, D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;
  673.  
  674.     STDMETHOD(GetFaces)(THIS_ LPDIRECT3DRMFACEARRAY*) PURE;
  675.     STDMETHOD(GetVertices)
  676.     (    THIS_ DWORD *vcount, D3DVECTOR *vertices, DWORD *ncount, D3DVECTOR *normals, DWORD *face_data_size, DWORD *face_data
  677.     ) PURE;
  678.     STDMETHOD(GetTextureCoordinates)(THIS_ DWORD index, D3DVALUE *u, D3DVALUE *v) PURE;
  679.  
  680.     STDMETHOD_(int, AddVertex)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
  681.     STDMETHOD_(int, AddNormal)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
  682.     STDMETHOD(CreateFace)(THIS_ LPDIRECT3DRMFACE*) PURE;
  683.     STDMETHOD_(D3DRMRENDERQUALITY, GetQuality)(THIS) PURE;
  684.     STDMETHOD_(BOOL, GetPerspective)(THIS) PURE;
  685.     STDMETHOD_(int, GetFaceCount)(THIS) PURE;
  686.     STDMETHOD_(int, GetVertexCount)(THIS) PURE;
  687.     STDMETHOD_(D3DCOLOR, GetVertexColor)(THIS_ DWORD index) PURE;
  688.  
  689.     STDMETHOD(CreateMesh)(THIS_ LPDIRECT3DRMMESH*) PURE;
  690. };
  691.  
  692. #undef INTERFACE
  693. #define INTERFACE IDirect3DRMMeshBuilder2
  694.  
  695. DECLARE_INTERFACE_(IDirect3DRMMeshBuilder2, IDirect3DRMMeshBuilder)
  696. {
  697.     IUNKNOWN_METHODS(PURE);
  698.     IDIRECT3DRMOBJECT_METHODS(PURE);
  699.  
  700.     /*
  701.      * IDirect3DRMMeshBuilder methods
  702.      */
  703.     STDMETHOD(Load)(THIS_ LPVOID filename, LPVOID name, D3DRMLOADOPTIONS loadflags, D3DRMLOADTEXTURECALLBACK, LPVOID lpArg) PURE;
  704.     STDMETHOD(Save)(THIS_ const char *filename, D3DRMXOFFORMAT, D3DRMSAVEOPTIONS save) PURE;
  705.     STDMETHOD(Scale)(THIS_ D3DVALUE sx, D3DVALUE sy, D3DVALUE sz) PURE;
  706.     STDMETHOD(Translate)(THIS_ D3DVALUE tx, D3DVALUE ty, D3DVALUE tz) PURE;
  707.     STDMETHOD(SetColorSource)(THIS_ D3DRMCOLORSOURCE) PURE;
  708.     STDMETHOD(GetBox)(THIS_ D3DRMBOX *) PURE;
  709.     STDMETHOD(GenerateNormals)(THIS) PURE;
  710.     STDMETHOD_(D3DRMCOLORSOURCE, GetColorSource)(THIS) PURE;
  711.  
  712.     STDMETHOD(AddMesh)(THIS_ LPDIRECT3DRMMESH) PURE;
  713.     STDMETHOD(AddMeshBuilder)(THIS_ LPDIRECT3DRMMESHBUILDER) PURE;
  714.     STDMETHOD(AddFrame)(THIS_ LPDIRECT3DRMFRAME) PURE;
  715.     STDMETHOD(AddFace)(THIS_ LPDIRECT3DRMFACE) PURE;
  716.     STDMETHOD(AddFaces)
  717.     (    THIS_ DWORD vcount, D3DVECTOR *vertices, DWORD ncount, D3DVECTOR *normals,
  718.     DWORD *data, LPDIRECT3DRMFACEARRAY*
  719.     ) PURE;
  720.     STDMETHOD(ReserveSpace)(THIS_ DWORD vertex_Count, DWORD normal_count, DWORD face_count) PURE;
  721.     STDMETHOD(SetColorRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;
  722.     STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE;
  723.     STDMETHOD(SetTexture)(THIS_ LPDIRECT3DRMTEXTURE) PURE;
  724.     STDMETHOD(SetMaterial)(THIS_ LPDIRECT3DRMMATERIAL) PURE;
  725.     STDMETHOD(SetTextureTopology)(THIS_ BOOL wrap_u, BOOL wrap_v) PURE;
  726.     STDMETHOD(SetQuality)(THIS_ D3DRMRENDERQUALITY) PURE;
  727.     STDMETHOD(SetPerspective)(THIS_ BOOL) PURE;
  728.     STDMETHOD(SetVertex)(THIS_ DWORD index, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
  729.     STDMETHOD(SetNormal)(THIS_ DWORD index, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
  730.     STDMETHOD(SetTextureCoordinates)(THIS_ DWORD index, D3DVALUE u, D3DVALUE v) PURE;
  731.     STDMETHOD(SetVertexColor)(THIS_ DWORD index, D3DCOLOR) PURE;
  732.     STDMETHOD(SetVertexColorRGB)(THIS_ DWORD index, D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;
  733.  
  734.     STDMETHOD(GetFaces)(THIS_ LPDIRECT3DRMFACEARRAY*) PURE;
  735.     STDMETHOD(GetVertices)
  736.     (    THIS_ DWORD *vcount, D3DVECTOR *vertices, DWORD *ncount, D3DVECTOR *normals, DWORD *face_data_size, DWORD *face_data
  737.     ) PURE;
  738.     STDMETHOD(GetTextureCoordinates)(THIS_ DWORD index, D3DVALUE *u, D3DVALUE *v) PURE;
  739.  
  740.     STDMETHOD_(int, AddVertex)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
  741.     STDMETHOD_(int, AddNormal)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
  742.     STDMETHOD(CreateFace)(THIS_ LPDIRECT3DRMFACE*) PURE;
  743.     STDMETHOD_(D3DRMRENDERQUALITY, GetQuality)(THIS) PURE;
  744.     STDMETHOD_(BOOL, GetPerspective)(THIS) PURE;
  745.     STDMETHOD_(int, GetFaceCount)(THIS) PURE;
  746.     STDMETHOD_(int, GetVertexCount)(THIS) PURE;
  747.     STDMETHOD_(D3DCOLOR, GetVertexColor)(THIS_ DWORD index) PURE;
  748.  
  749.     STDMETHOD(CreateMesh)(THIS_ LPDIRECT3DRMMESH*) PURE;
  750.  
  751.     /*
  752.      * IDirect3DRMMeshBuilder2 methods
  753.      */
  754.     STDMETHOD(GenerateNormals2)(THIS_ D3DVALUE crease, DWORD dwFlags) PURE;
  755.     STDMETHOD(GetFace)(THIS_ DWORD index, LPDIRECT3DRMFACE*) PURE;
  756. };
  757.  
  758. #undef INTERFACE
  759. #define INTERFACE IDirect3DRMLight
  760.  
  761. DECLARE_INTERFACE_(IDirect3DRMLight, IDirect3DRMObject)
  762. {
  763.     IUNKNOWN_METHODS(PURE);
  764.     IDIRECT3DRMOBJECT_METHODS(PURE);
  765.  
  766.     /*
  767.      * IDirect3DRMLight methods
  768.      */
  769.     STDMETHOD(SetType)(THIS_ D3DRMLIGHTTYPE) PURE;
  770.     STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE;
  771.     STDMETHOD(SetColorRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;
  772.     STDMETHOD(SetRange)(THIS_ D3DVALUE) PURE;
  773.     STDMETHOD(SetUmbra)(THIS_ D3DVALUE) PURE;
  774.     STDMETHOD(SetPenumbra)(THIS_ D3DVALUE) PURE;
  775.     STDMETHOD(SetConstantAttenuation)(THIS_ D3DVALUE) PURE;
  776.     STDMETHOD(SetLinearAttenuation)(THIS_ D3DVALUE) PURE;
  777.     STDMETHOD(SetQuadraticAttenuation)(THIS_ D3DVALUE) PURE;
  778.  
  779.     STDMETHOD_(D3DVALUE, GetRange)(THIS) PURE;
  780.     STDMETHOD_(D3DVALUE, GetUmbra)(THIS) PURE;
  781.     STDMETHOD_(D3DVALUE, GetPenumbra)(THIS) PURE;
  782.     STDMETHOD_(D3DVALUE, GetConstantAttenuation)(THIS) PURE;
  783.     STDMETHOD_(D3DVALUE, GetLinearAttenuation)(THIS) PURE;
  784.     STDMETHOD_(D3DVALUE, GetQuadraticAttenuation)(THIS) PURE;
  785.     STDMETHOD_(D3DCOLOR, GetColor)(THIS) PURE;
  786.     STDMETHOD_(D3DRMLIGHTTYPE, GetType)(THIS) PURE;
  787.  
  788.     STDMETHOD(SetEnableFrame)(THIS_ LPDIRECT3DRMFRAME) PURE;
  789.     STDMETHOD(GetEnableFrame)(THIS_ LPDIRECT3DRMFRAME*) PURE;
  790. };
  791.  
  792. #undef INTERFACE
  793. #define INTERFACE IDirect3DRMTexture
  794.  
  795. DECLARE_INTERFACE_(IDirect3DRMTexture, IDirect3DRMVisual)
  796. {
  797.     IUNKNOWN_METHODS(PURE);
  798.     IDIRECT3DRMOBJECT_METHODS(PURE);
  799.  
  800.     /*
  801.      * IDirect3DRMTexture methods
  802.      */
  803.     STDMETHOD(InitFromFile)(THIS_ const char *filename) PURE;
  804.     STDMETHOD(InitFromSurface)(THIS_ LPDIRECTDRAWSURFACE lpDDS) PURE;
  805.     STDMETHOD(InitFromResource)(THIS_ HRSRC) PURE;
  806.     STDMETHOD(Changed)(THIS_ BOOL pixels, BOOL palette) PURE;
  807.  
  808.     STDMETHOD(SetColors)(THIS_ DWORD) PURE;
  809.     STDMETHOD(SetShades)(THIS_ DWORD) PURE;
  810.     STDMETHOD(SetDecalSize)(THIS_ D3DVALUE width, D3DVALUE height) PURE;
  811.     STDMETHOD(SetDecalOrigin)(THIS_ LONG x, LONG y) PURE;
  812.     STDMETHOD(SetDecalScale)(THIS_ DWORD) PURE;
  813.     STDMETHOD(SetDecalTransparency)(THIS_ BOOL) PURE;
  814.     STDMETHOD(SetDecalTransparentColor)(THIS_ D3DCOLOR) PURE;
  815.  
  816.     STDMETHOD(GetDecalSize)(THIS_ D3DVALUE *width_return, D3DVALUE *height_return) PURE;
  817.     STDMETHOD(GetDecalOrigin)(THIS_ LONG *x_return, LONG *y_return) PURE;
  818.  
  819.     STDMETHOD_(D3DRMIMAGE *, GetImage)(THIS) PURE;
  820.     STDMETHOD_(DWORD, GetShades)(THIS) PURE;
  821.     STDMETHOD_(DWORD, GetColors)(THIS) PURE;
  822.     STDMETHOD_(DWORD, GetDecalScale)(THIS) PURE;
  823.     STDMETHOD_(BOOL, GetDecalTransparency)(THIS) PURE;
  824.     STDMETHOD_(D3DCOLOR, GetDecalTransparentColor)(THIS) PURE;
  825. };
  826.  
  827. #undef INTERFACE
  828. #define INTERFACE IDirect3DRMTexture2
  829.  
  830. DECLARE_INTERFACE_(IDirect3DRMTexture2, IDirect3DRMTexture)
  831. {
  832.     IUNKNOWN_METHODS(PURE);
  833.     IDIRECT3DRMOBJECT_METHODS(PURE);
  834.  
  835.     /*
  836.      * IDirect3DRMTexture methods
  837.      */
  838.     STDMETHOD(InitFromFile)(THIS_ const char *filename) PURE;
  839.     STDMETHOD(InitFromSurface)(THIS_ LPDIRECTDRAWSURFACE lpDDS) PURE;
  840.     STDMETHOD(InitFromResource)(THIS_ HRSRC) PURE;
  841.     STDMETHOD(Changed)(THIS_ BOOL pixels, BOOL palette) PURE;
  842.  
  843.     STDMETHOD(SetColors)(THIS_ DWORD) PURE;
  844.     STDMETHOD(SetShades)(THIS_ DWORD) PURE;
  845.     STDMETHOD(SetDecalSize)(THIS_ D3DVALUE width, D3DVALUE height) PURE;
  846.     STDMETHOD(SetDecalOrigin)(THIS_ LONG x, LONG y) PURE;
  847.     STDMETHOD(SetDecalScale)(THIS_ DWORD) PURE;
  848.     STDMETHOD(SetDecalTransparency)(THIS_ BOOL) PURE;
  849.     STDMETHOD(SetDecalTransparentColor)(THIS_ D3DCOLOR) PURE;
  850.  
  851.     STDMETHOD(GetDecalSize)(THIS_ D3DVALUE *width_return, D3DVALUE *height_return) PURE;
  852.     STDMETHOD(GetDecalOrigin)(THIS_ LONG *x_return, LONG *y_return) PURE;
  853.  
  854.     STDMETHOD_(D3DRMIMAGE *, GetImage)(THIS) PURE;
  855.     STDMETHOD_(DWORD, GetShades)(THIS) PURE;
  856.     STDMETHOD_(DWORD, GetColors)(THIS) PURE;
  857.     STDMETHOD_(DWORD, GetDecalScale)(THIS) PURE;
  858.     STDMETHOD_(BOOL, GetDecalTransparency)(THIS) PURE;
  859.     STDMETHOD_(D3DCOLOR, GetDecalTransparentColor)(THIS) PURE;
  860.  
  861.     /*
  862.      * IDirect3DRMTexture2 methods
  863.      */
  864.     STDMETHOD(InitFromImage)(THIS_ LPD3DRMIMAGE) PURE;
  865.     STDMETHOD(InitFromResource2)(THIS_ HMODULE hModule, LPCTSTR strName, LPCTSTR strType) PURE;
  866.     STDMETHOD(GenerateMIPMap)(THIS_ DWORD) PURE;
  867. };
  868.  
  869. #undef INTERFACE
  870. #define INTERFACE IDirect3DRMWrap
  871.  
  872. DECLARE_INTERFACE_(IDirect3DRMWrap, IDirect3DRMObject)
  873. {
  874.     IUNKNOWN_METHODS(PURE);
  875.     IDIRECT3DRMOBJECT_METHODS(PURE);
  876.  
  877.     /*
  878.      * IDirect3DRMWrap methods
  879.      */
  880.     STDMETHOD(Init)
  881.     (    THIS_ D3DRMWRAPTYPE, LPDIRECT3DRMFRAME ref,
  882.     D3DVALUE ox, D3DVALUE oy, D3DVALUE oz,
  883.     D3DVALUE dx, D3DVALUE dy, D3DVALUE dz,
  884.     D3DVALUE ux, D3DVALUE uy, D3DVALUE uz,
  885.     D3DVALUE ou, D3DVALUE ov,
  886.     D3DVALUE su, D3DVALUE sv
  887.     ) PURE;
  888.     STDMETHOD(Apply)(THIS_ LPDIRECT3DRMOBJECT) PURE;
  889.     STDMETHOD(ApplyRelative)(THIS_ LPDIRECT3DRMFRAME frame, LPDIRECT3DRMOBJECT) PURE;
  890. };
  891.  
  892. #undef INTERFACE
  893. #define INTERFACE IDirect3DRMMaterial
  894.  
  895. DECLARE_INTERFACE_(IDirect3DRMMaterial, IDirect3DRMObject)
  896. {
  897.     IUNKNOWN_METHODS(PURE);
  898.     IDIRECT3DRMOBJECT_METHODS(PURE);
  899.  
  900.     /*
  901.      * IDirect3DRMMaterial methods
  902.      */
  903.     STDMETHOD(SetPower)(THIS_ D3DVALUE power) PURE;
  904.     STDMETHOD(SetSpecular)(THIS_ D3DVALUE r, D3DVALUE g, D3DVALUE b) PURE;
  905.     STDMETHOD(SetEmissive)(THIS_ D3DVALUE r, D3DVALUE g, D3DVALUE b) PURE;
  906.  
  907.     STDMETHOD_(D3DVALUE, GetPower)(THIS) PURE;
  908.     STDMETHOD(GetSpecular)(THIS_ D3DVALUE* r, D3DVALUE* g, D3DVALUE* b) PURE;
  909.     STDMETHOD(GetEmissive)(THIS_ D3DVALUE* r, D3DVALUE* g, D3DVALUE* b) PURE;
  910. };
  911.  
  912. #undef INTERFACE
  913. #define INTERFACE IDirect3DRMAnimation
  914.  
  915. DECLARE_INTERFACE_(IDirect3DRMAnimation, IDirect3DRMObject)
  916. {
  917.     IUNKNOWN_METHODS(PURE);
  918.     IDIRECT3DRMOBJECT_METHODS(PURE);
  919.  
  920.     /*
  921.      * IDirect3DRMAnimation methods
  922.      */
  923.     STDMETHOD(SetOptions)(THIS_ D3DRMANIMATIONOPTIONS flags) PURE;
  924.     STDMETHOD(AddRotateKey)(THIS_ D3DVALUE time, D3DRMQUATERNION *q) PURE;
  925.     STDMETHOD(AddPositionKey)(THIS_ D3DVALUE time, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
  926.     STDMETHOD(AddScaleKey)(THIS_ D3DVALUE time, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
  927.     STDMETHOD(DeleteKey)(THIS_ D3DVALUE time) PURE;
  928.     STDMETHOD(SetFrame)(THIS_ LPDIRECT3DRMFRAME frame) PURE;
  929.     STDMETHOD(SetTime)(THIS_ D3DVALUE time) PURE;
  930.  
  931.     STDMETHOD_(D3DRMANIMATIONOPTIONS, GetOptions)(THIS) PURE;
  932. };
  933.  
  934. #undef INTERFACE
  935. #define INTERFACE IDirect3DRMAnimationSet
  936.  
  937. DECLARE_INTERFACE_(IDirect3DRMAnimationSet, IDirect3DRMObject)
  938. {
  939.     IUNKNOWN_METHODS(PURE);
  940.     IDIRECT3DRMOBJECT_METHODS(PURE);
  941.  
  942.     /*
  943.      * IDirect3DRMAnimationSet methods
  944.      */
  945.     STDMETHOD(AddAnimation)(THIS_ LPDIRECT3DRMANIMATION aid) PURE;
  946.     STDMETHOD(Load)(THIS_ LPVOID filename, LPVOID name, D3DRMLOADOPTIONS loadflags, D3DRMLOADTEXTURECALLBACK, LPVOID lpArg, LPDIRECT3DRMFRAME parent)PURE;
  947.     STDMETHOD(DeleteAnimation)(THIS_ LPDIRECT3DRMANIMATION aid) PURE;
  948.     STDMETHOD(SetTime)(THIS_ D3DVALUE time) PURE;
  949. };
  950.  
  951. #undef INTERFACE
  952. #define INTERFACE IDirect3DRMUserVisual
  953.  
  954. DECLARE_INTERFACE_(IDirect3DRMUserVisual, IDirect3DRMVisual)
  955. {
  956.     IUNKNOWN_METHODS(PURE);
  957.     IDIRECT3DRMOBJECT_METHODS(PURE);
  958.  
  959.     /*
  960.      * IDirect3DRMUserVisual methods
  961.      */
  962.     STDMETHOD(Init)(THIS_ D3DRMUSERVISUALCALLBACK fn, void *arg) PURE;
  963. };
  964.  
  965. #undef INTERFACE
  966. #define INTERFACE IDirect3DRMArray
  967.  
  968. DECLARE_INTERFACE_(IDirect3DRMArray, IUnknown)
  969. {
  970.     IUNKNOWN_METHODS(PURE);
  971.  
  972.     STDMETHOD_(DWORD, GetSize)(THIS) PURE;
  973.     /* No GetElement method as it would get overloaded
  974.      * in derived classes, and overloading is
  975.      * a no-no in COM
  976.      */
  977. };
  978.  
  979. #undef INTERFACE
  980. #define INTERFACE IDirect3DRMObjectArray
  981.  
  982. DECLARE_INTERFACE_(IDirect3DRMObjectArray, IDirect3DRMArray)
  983. {
  984.     IUNKNOWN_METHODS(PURE);
  985.  
  986.     STDMETHOD_(DWORD, GetSize)(THIS) PURE;
  987.     STDMETHOD(GetElement)(THIS_ DWORD index, LPDIRECT3DRMOBJECT *) PURE;
  988. };
  989.  
  990. #undef INTERFACE
  991. #define INTERFACE IDirect3DRMDeviceArray
  992.  
  993. DECLARE_INTERFACE_(IDirect3DRMDeviceArray, IDirect3DRMArray)
  994. {
  995.     IUNKNOWN_METHODS(PURE);
  996.  
  997.     STDMETHOD_(DWORD, GetSize)(THIS) PURE;
  998.     STDMETHOD(GetElement)(THIS_ DWORD index, LPDIRECT3DRMDEVICE *) PURE;
  999. };
  1000.  
  1001. #undef INTERFACE
  1002. #define INTERFACE IDirect3DRMFrameArray
  1003.  
  1004. DECLARE_INTERFACE_(IDirect3DRMFrameArray, IDirect3DRMArray)
  1005. {
  1006.     IUNKNOWN_METHODS(PURE);
  1007.  
  1008.     STDMETHOD_(DWORD, GetSize)(THIS) PURE;
  1009.     STDMETHOD(GetElement)(THIS_ DWORD index, LPDIRECT3DRMFRAME *) PURE;
  1010. };
  1011.  
  1012. #undef INTERFACE
  1013. #define INTERFACE IDirect3DRMViewportArray
  1014.  
  1015. DECLARE_INTERFACE_(IDirect3DRMViewportArray, IDirect3DRMArray)
  1016. {
  1017.     IUNKNOWN_METHODS(PURE);
  1018.  
  1019.     STDMETHOD_(DWORD, GetSize)(THIS) PURE;
  1020.     STDMETHOD(GetElement)(THIS_ DWORD index, LPDIRECT3DRMVIEWPORT *) PURE;
  1021. };
  1022.  
  1023. #undef INTERFACE
  1024. #define INTERFACE IDirect3DRMVisualArray
  1025.  
  1026. DECLARE_INTERFACE_(IDirect3DRMVisualArray, IDirect3DRMArray)
  1027. {
  1028.     IUNKNOWN_METHODS(PURE);
  1029.  
  1030.     STDMETHOD_(DWORD, GetSize)(THIS) PURE;
  1031.     STDMETHOD(GetElement)(THIS_ DWORD index, LPDIRECT3DRMVISUAL *) PURE;
  1032. };
  1033.  
  1034. #undef INTERFACE
  1035. #define INTERFACE IDirect3DRMPickedArray
  1036.  
  1037. DECLARE_INTERFACE_(IDirect3DRMPickedArray, IDirect3DRMArray)
  1038. {
  1039.     IUNKNOWN_METHODS(PURE);
  1040.  
  1041.     STDMETHOD_(DWORD, GetSize)(THIS) PURE;
  1042.     STDMETHOD(GetPick)(THIS_ DWORD index, LPDIRECT3DRMVISUAL *, LPDIRECT3DRMFRAMEARRAY *, LPD3DRMPICKDESC) PURE;
  1043. };
  1044.  
  1045. #undef INTERFACE
  1046. #define INTERFACE IDirect3DRMLightArray
  1047.  
  1048. DECLARE_INTERFACE_(IDirect3DRMLightArray, IDirect3DRMArray)
  1049. {
  1050.     IUNKNOWN_METHODS(PURE);
  1051.  
  1052.     STDMETHOD_(DWORD, GetSize)(THIS) PURE;
  1053.     STDMETHOD(GetElement)(THIS_ DWORD index, LPDIRECT3DRMLIGHT *) PURE;
  1054. };
  1055.  
  1056. #undef INTERFACE
  1057. #define INTERFACE IDirect3DRMFaceArray
  1058.  
  1059. DECLARE_INTERFACE_(IDirect3DRMFaceArray, IDirect3DRMArray)
  1060. {
  1061.     IUNKNOWN_METHODS(PURE);
  1062.  
  1063.     STDMETHOD_(DWORD, GetSize)(THIS) PURE;
  1064.     STDMETHOD(GetElement)(THIS_ DWORD index, LPDIRECT3DRMFACE *) PURE;
  1065. };
  1066.  
  1067. #undef INTERFACE
  1068. #define INTERFACE IDirect3DRMPicked2Array
  1069.  
  1070. DECLARE_INTERFACE_(IDirect3DRMPicked2Array, IDirect3DRMArray)
  1071. {
  1072.     IUNKNOWN_METHODS(PURE);
  1073.  
  1074.     STDMETHOD_(DWORD, GetSize)(THIS) PURE;
  1075.     STDMETHOD(GetPick)(THIS_ DWORD index, LPDIRECT3DRMVISUAL *, LPDIRECT3DRMFRAMEARRAY *, LPD3DRMPICKDESC2) PURE;
  1076. };
  1077.  
  1078. #undef INTERFACE
  1079. #define INTERFACE IDirect3DRMInterpolator
  1080.  
  1081. DECLARE_INTERFACE_(IDirect3DRMInterpolator, IDirect3DRMObject)
  1082. {
  1083.     IUNKNOWN_METHODS(PURE);
  1084.     IDIRECT3DRMOBJECT_METHODS(PURE);
  1085.  
  1086.     /*
  1087.      * IDirect3DRMInterpolator methods
  1088.      */
  1089.     STDMETHOD(AttachObject)(THIS_ LPDIRECT3DRMOBJECT) PURE;
  1090.     STDMETHOD(GetAttachedObjects)(THIS_ LPDIRECT3DRMOBJECTARRAY *) PURE;
  1091.     STDMETHOD(DetachObject)(THIS_ LPDIRECT3DRMOBJECT) PURE;
  1092.     STDMETHOD(SetIndex)(THIS_ D3DVALUE) PURE;
  1093.     STDMETHOD_(D3DVALUE, GetIndex)(THIS) PURE;
  1094.     STDMETHOD(Interpolate)(THIS_ D3DVALUE, LPDIRECT3DRMOBJECT, D3DRMINTERPOLATIONOPTIONS) PURE;
  1095. };
  1096.  
  1097. #ifdef __cplusplus
  1098. };
  1099. #endif
  1100. #endif /* _D3DRMOBJ_H_ */
  1101.