2017-04-17 06:17:10 -06:00

125 lines
3.9 KiB
C++
Executable File

/*==============================================================================
file: imrShader.h
author: Daniel Levesque
created: 10feb2003
description:
Interface definition for mental ray shaders.
modified:
© 2003 Autodesk
==============================================================================*/
#ifndef __IMRSHADER__H
#define __IMRSHADER__H
#include <windows.h>
#include <tab.h>
#include <maxtypes.h>
#include <BaseInterface.h>
#include <strclass.h>
class imrShaderClassDesc;
class IParamBlock2;
class ReferenceTarget;
// Interface ID for imrShader interface
#define IMRSHADER_INTERFACE_ID Interface_ID(0x3b2f7b97, 0x5766e45)
//==============================================================================
// class imrShader
//
// Abstract class from which the mental ray shaders are derived.
//
// 3rd parties must not derive from this interface.
//
// This interface is implemented by both material plugins (class Mtl) and texture
// map plugins (class Texmap). To query this interface from a material or texture
// map plugin, use the GetIMRShader() and IsIMRShader() functions below.
//
//==============================================================================
class imrShader : public BaseInterface {
public:
// Naming methods
virtual void SetName(const TCHAR* name) = 0;
virtual const TCHAR* GetName() = 0;
virtual TSTR GetFullName() = 0;
// Returns the class descriptor of this shader.
virtual imrShaderClassDesc& GetClassDesc() = 0;
// Access to the four main parameter blocks
virtual IParamBlock2* GetResultsParamBlock() = 0;
virtual IParamBlock2* GetParametersParamBlock() = 0;
virtual IParamBlock2* GetConnectionsParamBlock() = 0;
// Called when WM_HELP is received by the shader editor. Show shader help
// and return true, or return false for default handling.
virtual bool HandleHelp() = 0;
// Returns the ReferenceTarget associated with the given shader. Class imrShader
// does not derive from ReferenceTarget, but its implementation does.
// This method is necessary if the client wishes to create a reference to the
// shader.
virtual ReferenceTarget& GetReferenceTarget() = 0;
// Controls whether this shader was created for custom translation.
// USED INTERNALLY.
virtual bool IsCustomTranslationShader() = 0;
virtual void SetCustomTranslationShader(bool val) = 0;
// -- from BaseInterface
virtual Interface_ID GetID();
};
inline Interface_ID imrShader::GetID() {
return IMRSHADER_INTERFACE_ID;
}
//==============================================================================
// GetIMRShader()
//
// Queries and returns the imrShader interface on an object. Returns NULL if
// the given object is _not_ a mental ray shader.
//==============================================================================
inline imrShader* GetIMRShader(InterfaceServer* iserver) {
if(iserver == NULL)
return NULL;
else
return static_cast<imrShader*>(iserver->GetInterface(IMRSHADER_INTERFACE_ID));
}
//==============================================================================
// IsIMRShader()
//
// Returns whether an object implements the imrShader interface (i.e. returns
// whether an object _is_ a mental ray shader).
//==============================================================================
inline bool IsIMRShader(InterfaceServer* iserver) {
return (GetIMRShader(iserver) != NULL);
}
//==============================================================================
// GetReferenceTarget()
//
// Converts a mental ray shader back to a reference target.
//==============================================================================
inline ReferenceTarget* GetReferenceTarget(imrShader* shader) {
return ((shader != NULL) ? &shader->GetReferenceTarget() : NULL);
}
#endif