|
|
/*==========================================================================;
* * Copyright (C) 1995-1997 Microsoft Corporation. All Rights Reserved. * * File: d3drmvis.h * Content: Direct3DRM external visualinclude file *@@BEGIN_MSINTERNAL * * History: * Date By Reason * ==== == ====== * 12/06/97 stevela Initial rev *@@END_MSINTERNAL * ***************************************************************************/
#ifndef _D3DRMVIS_H_
#define _D3DRMVIS_H_
//@@BEGIN_MSINTERNAL
#if 1
#include "d3prm.h"
#include "d3prmobj.h"
#else
//@@END_MSINTERNAL
#include "d3drm.h"
#include "d3drmobj.h"
//@@BEGIN_MSINTERNAL
#endif
//@@END_MSINTERNAL
#include <ocidl.h>
#include "dxfile.h"
#ifdef __cplusplus
extern "C" { #endif
WIN_TYPES(IDirect3DRMExternalVisual, DIRECT3DRMEXTERNALVISUAL); WIN_TYPES(IDirect3DRMExternalUtil, DIRECT3DRMEXTERNALUTIL);
DEFINE_GUID(IID_IDirect3DRMExternalVisual, 0x4516ec80, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3); DEFINE_GUID(IID_IDirect3DRMExternalUtil, 0x4516ec80, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3);
/* In IDirect3DRMExternalVisual::CanSee() */ #define D3DRMEXTVIS_CANNOTSEE 0x00000001L
#define D3DRMEXTVIS_CANSEE 0x00000002L
/* In IDirect3DRMExternalVisual::Pick() */ #define D3DRMEXTVIS_NOTPICKED 0x00000001L
#define D3DRMEXTVIS_PICKED 0x00000002L
/* In D3DRMEXTVISRENDERCONTEXT.dwOverrides */ #define D3DRMEXTVIS_RENDERCONTEXT_OVERRIDEMATERIAL 0x00000001L
#define D3DRMEXTVIS_RENDERCONTEXT_OVERRIDETEXTURE 0x00000002L
#define D3DRMEXTVIS_RENDERCONTEXT_DEVICEOVERRIDE 0x00000004L
/* In D3DRMEXTVISRENDERCONTEXT.dwZBufferMode */ #define D3DRMEXTVIS_RENDERCONTEXT_ZBUFFERON 0x00000001L
#define D3DRMEXTVIS_RENDERCONTEXT_ZBUFFEROFF 0x00000002L
/*
* Structure for IDirect3DRMExternalVisual::SetRenderContext() */ typedef struct { DWORD dwSize; /* Size of structure */ DWORD dwFlags; /* Must be zero */ DWORD dwOverrides; /* Indicates which overrides are in effect */ D3DMATERIALHANDLE hMat; /* If non-zero, this material handle MUST
be used for all rendering */ D3DTEXTUREHANDLE hTex; /* If non-zero, this texture handle MUST
be used for all rendering */ D3DRMMATERIALOVERRIDE dmUserOverride; /* contains per-attribute overrides
for materials */ D3DRMSHADEMODE pShadeMode; /* Flat, gouraud or phong */ D3DRMLIGHTMODE pLightMode; /* On or off */ D3DRMFILLMODE pFillMode; /* Points, wireframe or solid */ DWORD dwZBufferMode; /* As defined above */ DWORD dwRenderMode; /* Blended transparency and/or sorted */ } D3DRMEXTVISRENDERCONTEXT, *LPD3DRMEXTVISRENDERCONTEXT;
/*
* Structure for IDirect3DRMExternalVisual::RayPick() */ typedef struct { D3DVALUE dDistance; D3DVECTOR dvPosition; D3DVECTOR dvNormal; D3DVALUE tu; D3DVALUE tv; D3DCOLOR dcColor; } D3DRMEXTVISRAYPICKINFO, *LPD3DRMEXTVISRAYPICKINFO;
#undef INTERFACE
#define INTERFACE IDirect3DRMExternalVisual
DECLARE_INTERFACE_(IDirect3DRMExternalVisual, IUnknown) { IUNKNOWN_METHODS(PURE);
/*
* IDirect3DRMExternalVisual methods */ STDMETHOD(Initialize)(THIS_ LPDIRECT3DRM, LPDIRECT3DRMEXTERNALUTIL, DWORD dwFlags) PURE; STDMETHOD(Load)(THIS_ IDirectXFileData *dObject, IPropertyBag *pPropBag, DWORD dwFlags) PURE;
/*
* Information about device state, viewport state, overrides, etc... */ STDMETHOD(SetRenderContext)(THIS_ LPD3DRMEXTVISRENDERCONTEXT pCntx, DWORD dwFlags) PURE; /*
* Rendering operations */ STDMETHOD(CanSee)(THIS_ LPDIRECT3DRMDEVICE2, LPDIRECT3DRMVIEWPORT2, LPDWORD pdwCanSee) PURE; STDMETHOD(Render)(THIS_ LPDIRECT3DRMDEVICE2, LPDIRECT3DRMVIEWPORT2, DWORD dwFlags) PURE; STDMETHOD(DeviceChange)(THIS) PURE;
/*
* Notify external visuals when BeginScene/EndScene are called during * rendering */ STDMETHOD(BeginScene)(THIS) PURE; STDMETHOD(EndScene)(THIS) PURE;
/*
* Picking */ STDMETHOD(Pick)(THIS_ LPDIRECT3DRMVIEWPORT2 pViewIn, LPDIRECT3DRMFRAME3 pFrameIn, DWORD dwXIn, DWORD dwYIn, LPD3DVALUE pdvZOut, LPDWORD pdwPicked) PURE;
/*
* RayPicking * * dwFlags can contain: * D3DRMRAYPICK_INTERPOLATENORMAL - pPickInfo.dvNormal must be filled in * D3DRMRAYPICK_INTERPOLATECOLOR - pPickInfo.dcColor must be filled in * D3DRMRAYPICK_INTERPOLATEUV - pPickInfo.tu, tv must be filled in */ STDMETHOD(RayPick)(THIS_ LPDIRECT3DRMFRAME3 pFrameIn, LPD3DRMRAY pRayIn, DWORD dwFlags, LPDWORD pdwPicked, LPD3DRMEXTVISRAYPICKINFO pPickInfo) PURE;
/*
* Misc */ STDMETHOD(GetBox)(THIS_ LPD3DRMBOX) PURE; STDMETHOD(GetAge)(THIS_ LPDWORD) PURE; };
/*
* Flags for UpdateBounds */ #define D3DRMEXTUTIL_BOUNDSINVALIDATE 0x00000001L
#define D3DRMEXTUTIL_BOUNDSVALID 0x00000002L
#undef INTERFACE
#define INTERFACE IDirect3DRMExternalUtil
DECLARE_INTERFACE_(IDirect3DRMExternalUtil, IDirect3DRMObject) { IUNKNOWN_METHODS(PURE);
/*
* External Visual must use these methods to provide IDirect3DRMObject * functionality. */ IDIRECT3DRMOBJECT_METHODS(PURE);
/*
* IDirect3DRMExternalUtil methods */
/*
* Texture Management */ STDMETHOD(FindDeviceTexture)(LPDIRECT3DRMDEVICE2, LPDIRECT3DRMTEXTURE, LPDWORD dwDevTexId) PURE; STDMETHOD(GetTextureHandle)(DWORD dwDevTexId, LPDWORD pdwHandle) PURE; STDMETHOD(DestroyDeviceTexture)(DWORD dwDevTexId) PURE; STDMETHOD(ValidateDeviceTextures)(LPDIRECT3DRMDEVICE2, LPDWORD dwDevTexIds, DWORD dwNumIds) PURE; STDMETHOD(UpdateBounds)(DWORD dwFlags, LPD3DVECTOR dvMin, LPD3DVECTOR dvMax) PURE; STDMETHOD(SetExtents)(LPDIRECT3DRMVIEWPORT2, DWORD dwNumExtents, LPD3DCLIPSTATUS pExtents) PURE; };
#ifdef __cplusplus
}; #endif /* __cplusplus */
#endif /* _D3DRMVIS_H_ */
|