125 lines
3.9 KiB
C++
Executable File
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
|
|
|