tge/lib/maxsdk70/include/IViewportManager.h
2017-04-17 06:17:10 -06:00

172 lines
5.9 KiB
C++
Executable File

/**********************************************************************
*<
FILE: IViewportManager.h
DESCRIPTION: Viewport Manager for loading up Effects
CREATED BY: Neil Hazzard
HISTORY: Created: 02/15/02
Updated: 05/05/04 New interface added for 3ds max7
*> Copyright (c) 2004, All Rights Reserved.
**********************************************************************/
#ifndef __IVIEWPORTMANAGER_H__
#define __IVIEWPORTMANAGER_H__
#include "iFnPub.h"
#include "custattrib.h"
#include "IHardwareMaterial.h"
#define VIEWPORT_SHADER_MANAGER_INTERFACE Interface_ID(0x5dbe33d6, 0x2e1b422b)
#define VIEWPORT_SHADER_MANAGER_INTERFACE2 Interface_ID(0x5a4d6672, 0x7d8a2857)
#define VIEWPORT_SHADER_CLIENT_INTERFACE Interface_ID(0x40c926b8, 0x7c3a66b7)
#define VIEWPORT_SHADER9_CLIENT_INTERFACE Interface_ID(0x40c926b7, 0x7c3a6347)
#define IDX_SHADER_MANAGER Interface_ID(0x6dce7429, 0x200169ac)
//! An Interface class to access the Viewport Manager
/*! This Interface allows access to the various components of the Viewport Manager. THis includes finding out
how many effects are registered with the system
*/
class IViewportShaderManager : public FPMixinInterface {
public:
enum { get_num_effects, get_active_effect, is_effect_active, is_manager_active,
get_effect_name,set_effect,activate_effect};
FPInterfaceDesc* GetDesc();
/*! Get the number of effects registered with the system
\return The total number of effects
*/
virtual int GetNumEffects()=0;
/*! Get the current active effect. This effect will implement the IDXDataBridge classes
\return A referenceTarget implementing the effect
*/
virtual ReferenceTarget* GetActiveEffect()=0;
/*! Access the UI name for the effect
\param i An index of the effect whose name is required
\return A TCHAR containing the name
*/
virtual TCHAR * GetEffectName(int i)=0;
/*! Set the actual viewport effect to be used.
\param i An index of the effect to set.
\return A pointer to the effect
*/
virtual ReferenceTarget * SetViewportEffect(int i)=0;
/*! Turns on the effect based on the material and state supplied. THis sets the internal flag on the material
that tells the system that a DX shader is present
\param *mtl THe material to activate
\State A boolean value that defines the state of the flag
*/
virtual void ActivateEffect(MtlBase * mtl, BOOL State)=0;
};
//! A new interface for 3dsmax 7
/*! This extends the current interface, and provides support for the new UI options on the Viewport Manager
*/
class IViewportShaderManager2 : public IViewportShaderManager
{
public:
//! Save the current effect based on the Standard Material as an effect file
/*!
\param * filename The name of the file to save
\return The success of the operation
*/
virtual bool SaveFXFile(TCHAR * fileName)=0;
/*! Is the DX Display of the Standard Material enabled
\return TRUE/FALSE
*/
virtual bool IsDxStdMtlEnabled()=0;
/*! Access to set the state of the DX Display of the Standard Material flag
\param state The state of the flag - TRUE to set
*/
virtual void SetDxStdMtlEnabled(bool state)=0;
/*! The name of the current effect as displayed in the UI
\return The name of the effect
*/
virtual TCHAR * GetActiveEffectName() = 0;
};
//! Viewport Effect interface
/*! A Direct X 8.1 shader should implement this class. It is used by the system to get information from the shader
If a material implements this class, then all it needs to do is pass back a pointer in the GetInterface implementation.
All the other methods can simply be a no op.
*/
class IDXDataBridge : public BaseInterface
{
public:
virtual Interface_ID GetID() { return VIEWPORT_SHADER_CLIENT_INTERFACE; }
// Interface Lifetime
virtual LifetimeType LifetimeControl() { return noRelease; }
/*! The Viewport Manager will call this on the effect so that it can draw its dialog
\param hWnd The parent window handle
\param *imp A pointer to IMtlParam - see the main max SDK for info on this class
\return A new ParamDlg pointer which the Viewport Manager will uses as a child of its window
*/
virtual ParamDlg * CreateEffectDlg(HWND hWnd, IMtlParams * imp)= 0;
//! This is no longer used
virtual void DisableUI()=0;
/*! Get the UI name of the effect - this is only used for Viewport MAnager effects - not materials
\return A TCHAR containing the name
*/
virtual TCHAR * GetName()=0;
/*! For effects that will be using the fixed function pipeline. This provided access to the IHArdwareMaterial
allowing access to DirectX FFP.
\param *pHWMtl A pointer to the internal hardware material.
\param *pMtl A pointer to the parent Material
*/
virtual void SetDXData(IHardwareMaterial * pHWMtl, Mtl * pMtl)=0;
};
// If you are creating a DX9 based effect then you need to implement this interface
class IDX9DataBridge : public IDXDataBridge
{
public:
// Interface Lifetime
virtual LifetimeType LifetimeControl() { return noRelease; }
virtual Interface_ID GetID() { return VIEWPORT_SHADER9_CLIENT_INTERFACE; }
//! Versioning
/*! The system uses this to determine whether the effect is compatible to the current GFX loaded on MAX
\return 8.1 or 9.0 etc...
*/
virtual float GetDXVersion() = 0;
};
/*! An Interface that provides access to the actual manager. The manager is responsible for displaying the Viewport Manager which is
implemented as a Cust Attribute on the material
*/
class IDXShaderManagerInterface : public FPStaticInterface
{
public:
virtual CustAttrib* FindViewportShaderManager (MtlBase* mtl)=0;
virtual CustAttrib* AddViewportShaderManager(MtlBase * mtl)=0;
virtual void SetVisible(BOOL show=TRUE)=0;
virtual BOOL IsVisible()=0;
};
inline IDXShaderManagerInterface* GetDXShaderManager() { return (IDXShaderManagerInterface*)GetCOREInterface(IDX_SHADER_MANAGER); }
#endif