172 lines
5.9 KiB
C++
Executable File
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 |