Initial commit
This commit is contained in:
227
Torque/SDK/lib/maxsdk40/RenderElements.h
Normal file
227
Torque/SDK/lib/maxsdk40/RenderElements.h
Normal file
@@ -0,0 +1,227 @@
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
//
|
||||
// Render Element Plug-Ins
|
||||
//
|
||||
// Created 4/15/2000 Kells Elmquist
|
||||
//
|
||||
|
||||
#ifndef RENDER_ELEMENTS_H
|
||||
#define RENDER_ELEMENTS_H
|
||||
|
||||
// includes
|
||||
#include "sfx.h"
|
||||
|
||||
// predeclarations
|
||||
class IllumParams;
|
||||
|
||||
|
||||
#define BEAUTY_RENDER_ELEMENT_CLASS_ID 0x00000001
|
||||
|
||||
// Returned by a RenderElement when it is asked to put up its rollup page.
|
||||
typedef SFXParamDlg IRenderElementParamDlg;
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////
|
||||
//
|
||||
// RenderElement base interface
|
||||
//
|
||||
// class SpecialFX declared in maxsdk/include/render.h
|
||||
//
|
||||
class IRenderElement : public SpecialFX
|
||||
{
|
||||
public:
|
||||
// set/get element's enabled state
|
||||
virtual void SetEnabled(BOOL enabled)=0;
|
||||
virtual BOOL IsEnabled() const = 0;
|
||||
|
||||
// set/get element's filter enabled state
|
||||
virtual void SetFilterEnabled(BOOL filterEnabled)=0;
|
||||
virtual BOOL IsFilterEnabled() const =0;
|
||||
|
||||
// is this element to be blended for multipass effects?
|
||||
virtual BOOL BlendOnMultipass() const =0;
|
||||
|
||||
// set/get whether to apply atmosphere
|
||||
// virtual void SetApplyAtmosphere(BOOL applyAtmosphere) =0;
|
||||
virtual BOOL AtmosphereApplied() const =0;
|
||||
|
||||
// virtual void SetApplyShadows(BOOL applyShadows) =0;
|
||||
virtual BOOL ShadowsApplied() const =0;
|
||||
|
||||
// set/get element's name (as it will appear in render dialog)
|
||||
virtual void SetElementName( TCHAR* newName )=0;
|
||||
virtual const TCHAR* ElementName() const =0;
|
||||
|
||||
/*
|
||||
// set/get path name for file output
|
||||
virtual void SetPathName( TCHAR* newPathName)=0;
|
||||
virtual const TCHAR* PathName() const =0;
|
||||
|
||||
virtual void SetBitmap( Bitmap* bitmap)=0;
|
||||
virtual Bitmap* GetBitmap() const =0;
|
||||
*/
|
||||
virtual void SetPBBitmap(PBBitmap* &pPBBitmap) const =0;
|
||||
virtual void GetPBBitmap(PBBitmap* &pPBBitmap) const =0;
|
||||
|
||||
// this is the element specific optional UI, which is a rollup in the render dialog
|
||||
virtual IRenderElementParamDlg *CreateParamDialog(IRendParams *ip) { return NULL; }
|
||||
|
||||
// Implement this if you are using the ParamMap2 AUTO_UI system and the
|
||||
// IRenderElement has secondary dialogs that don't have the IRenderElement as their 'thing'.
|
||||
// Called once for each secondary dialog, for you to install the correct thing.
|
||||
// Return TRUE if you process the dialog, false otherwise.
|
||||
virtual BOOL SetDlgThing(IRenderElementParamDlg* dlg) { return FALSE; }
|
||||
|
||||
// ---------------------
|
||||
// from class RefMaker
|
||||
// ---------------------
|
||||
// it is critical for merging that this code is called at the start of a plug-in's save and load methods.
|
||||
// SpecialFX's base implementation saves/loads SpecialFX::name, which is used to populate the 'Merge Render Elements'
|
||||
// dialog box. if a plugin re-implements this function, it should first call IRenderElement::Save(iSave)
|
||||
// or IRenderElement::Load(iLoad)
|
||||
IOResult Save(ISave *iSave)
|
||||
{
|
||||
name = ElementName();
|
||||
return SpecialFX::Save(iSave);
|
||||
}
|
||||
IOResult Load(ILoad *iLoad)
|
||||
{
|
||||
return SpecialFX::Load(iLoad);
|
||||
}
|
||||
|
||||
virtual RefResult NotifyRefChanged(Interval changeInt, RefTargetHandle hTarget, PartID& partID, RefMessage message) { return REF_SUCCEED; }
|
||||
|
||||
// ---------------------
|
||||
// from class Animatable
|
||||
// ---------------------
|
||||
SClass_ID SuperClassID() { return RENDER_ELEMENT_CLASS_ID; }
|
||||
|
||||
// renderer will call this method to see if IRenderElement is compatible with it
|
||||
virtual void* GetInterface(ULONG id) =0;
|
||||
virtual void ReleaseInterface(ULONG id, void *i) =0;
|
||||
};
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////
|
||||
//
|
||||
// RenderElement base class for max's default scanline renderer.
|
||||
// RenderElement plugins that utilize ShadeContext and IllumParams
|
||||
// should sub-class from here
|
||||
//
|
||||
class MaxRenderElement : public IRenderElement
|
||||
{
|
||||
protected:
|
||||
int mShadeOutputIndex;
|
||||
|
||||
public:
|
||||
// this interface's ID
|
||||
enum { IID = 0xeffeeffe };
|
||||
|
||||
// set/get this element's index into the ShadeOutput's array of element channels
|
||||
void SetShadeOutputIndex(int shadeOutputIndex) { mShadeOutputIndex = shadeOutputIndex; }
|
||||
int ShadeOutputIndex() const { return mShadeOutputIndex; }
|
||||
|
||||
// will be called on each element before call to PostIllum()
|
||||
virtual void Update(TimeValue timeValue) { }
|
||||
|
||||
// compute the element and store in the ShadeContext's ShadeOutput.
|
||||
virtual void PostIllum(ShadeContext& sc, IllumParams& ip) =0;
|
||||
|
||||
// called after atmospheres are computed, to allow elements to handle atmospheres
|
||||
virtual void PostAtmosphere(ShadeContext& sc, float z, float prevZ) =0;
|
||||
|
||||
// ---------------------
|
||||
// from class Animatable
|
||||
// ---------------------
|
||||
// renderer will call this method to see if IRenderElement is compatible with it
|
||||
virtual void* GetInterface(ULONG id) { return (id == IID) ? this : NULL; }
|
||||
virtual void ReleaseInterface(ULONG id, void *i) { }
|
||||
};
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////
|
||||
//
|
||||
// IRenderElement compatibility interface
|
||||
//
|
||||
// The system will ask a Renderer for this interface by calling
|
||||
// Renderer::GetInterface(IRenderElementCompatible::ICompatibleID).
|
||||
// If the Renderer returns a pointer to this interface, it is implied that the Renderer
|
||||
// supports render elements. The system will then call IRenderElementCompatible::IsCompatible()
|
||||
// to determine if an IRenderElement instance is compatible with it.
|
||||
//
|
||||
// To determine compatibility, the Renderer can call IRenderElement::GetInterface()
|
||||
// (inherited from class Animatable), passing in an interface ID that a compatible IRenderElement
|
||||
// would understand. If the Renderer receives a valid interface pointer, it can return TRUE to
|
||||
// IRenderElementCompatible::IsCompatible().
|
||||
//
|
||||
// for an example, see class IScanRenderElement below
|
||||
//
|
||||
class IRenderElementCompatible
|
||||
{
|
||||
public:
|
||||
// this interface's ID
|
||||
enum { IID = 0xcafeface };
|
||||
|
||||
virtual BOOL IsCompatible(IRenderElement *pIRenderElement) = 0;
|
||||
};
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////
|
||||
//
|
||||
// RenderElementMgr base interface
|
||||
//
|
||||
#define IREND_ELEM_MGR_INTERFACE Interface_ID(0x95791767, 0x17651746)
|
||||
|
||||
class IRenderElementMgr : public FPMixinInterface
|
||||
{
|
||||
public:
|
||||
// called by system to add an element merged from another file
|
||||
virtual BOOL AppendMergedRenderElement(IRenderElement *pRenderElement) = 0;
|
||||
virtual BOOL AppendMergedRenderElement(ReferenceTarget *pRenderElement) = 0; // ensures ReferenceTarget is a render element
|
||||
|
||||
// adds/removes an instance of IRenderElement to the manager's list
|
||||
virtual BOOL AddRenderElement(IRenderElement *pRenderElement) = 0;
|
||||
virtual BOOL AddRenderElement(ReferenceTarget *pRenderElement) = 0; // ensures ReferenceTarget is a render element
|
||||
virtual BOOL RemoveRenderElement(IRenderElement *pRenderElement) = 0;
|
||||
virtual BOOL RemoveRenderElement(ReferenceTarget *pRenderElement) = 0; // ensures ReferenceTarget is a render element
|
||||
virtual void RemoveAllRenderElements() = 0;
|
||||
|
||||
// returns number of render elements in manager's list
|
||||
virtual int NumRenderElements() = 0;
|
||||
|
||||
// returns pointer to a specific render element in manager's list -- NULL if invalid index
|
||||
virtual IRenderElement *GetRenderElement(int index) = 0;
|
||||
|
||||
// sets/gets whether element list should be active during a render
|
||||
virtual void SetElementsActive(BOOL elementsActive) = 0;
|
||||
virtual BOOL GetElementsActive() const = 0;
|
||||
|
||||
// sets/gets whether elements should be displayed in their own viewer
|
||||
virtual void SetDisplayElements(BOOL displayElements) = 0;
|
||||
virtual BOOL GetDisplayElements() const = 0;
|
||||
|
||||
// sets/gets whether element list should be exported to Combustion file format
|
||||
virtual void SetCombustionOutputEnabled(BOOL combustionOutEnabled) = 0;
|
||||
virtual BOOL GetCombustionOutputEnabled() const = 0;
|
||||
|
||||
// sets/gets Combustion output path
|
||||
virtual void SetCombustionOutputPath(const TCHAR *combustionOutputPath) = 0;
|
||||
virtual void SetCombustionOutputPath(const TSTR& combustionOutputPath) = 0;
|
||||
virtual const TSTR& GetCombustionOutputPath() const = 0;
|
||||
virtual const TCHAR* GetCombustionOutputPathPtr() const = 0;
|
||||
|
||||
// function publishing
|
||||
enum
|
||||
{
|
||||
fps_AddRenderElement, fps_RemoveRenderElement, fps_RemoveAllRenderElements,
|
||||
fps_NumRenderElements, fps_GetRenderElement,
|
||||
fps_SetElementsActive, fps_GetElementsActive,
|
||||
fps_SetDisplayElements, fps_GetDisplayElements,
|
||||
fps_SetCombustionOutputEnabled, fps_GetCombustionOutputEnabled,
|
||||
fps_SetCombustionOutputPath, fps_GetCombustionOutputPath,
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user