XSIMaterial.h

00001 /****************************************************************************************
00002 THIS CODE IS PUBLISHED AS A SAMPLE ONLY AND IS PROVIDED "AS IS".
00003 IN NO EVENT SHALL SOFTIMAGE, AVID TECHNOLOGY, INC. AND/OR THEIR RESPECTIVE 
00004 SUPPLIERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY
00005 DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
00006 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
00007 CONNECTION WITH THE USE OR PERFORMANCE OF THIS CODE . 
00008  
00009 COPYRIGHT NOTICE. Copyright © 1999-2002 Avid Technology Inc. . All rights reserved. 
00010 
00011 SOFTIMAGE is a registered trademark of Avid Technology Inc. or its subsidiaries 
00012 or divisions. Windows NT is a registered trademark of Microsoft Corp. All other
00013 trademarks contained herein are the property of their respective owners. 
00014 ****************************************************************************************/
00015 
00016 #ifndef _XSIMATERIAL_H
00017 #define _XSIMATERIAL_H
00018 
00019 #include "Material.h"
00020 
00021 class CSLConnectionPoint;
00022 class CSLXSIShader;
00023 class CSLXSIMaterialInfo;
00024 class CSLXSIShaderMultiPortConnection;
00025 class CSLXSITextureLayer;
00026 
00040 class XSIEXPORT CSLXSIMaterial
00041     : public CSLBaseMaterial
00042 {
00043 public:
00049     CSLXSIMaterial(CSLScene* in_pScene, CSLModel *in_pModel, CdotXSITemplate* in_pTemplate);
00050     
00052     virtual ~CSLXSIMaterial();
00053 
00057     CSLTemplate::ETemplateType Type(){ return XSI_MATERIAL; }
00058 
00062     SI_Error Synchronize();
00063 
00068     virtual CSLAnimatableType* ParameterFromName(SI_Char *in_szName);
00069 
00071     // Connection points functionality ////////////////////////////////////////
00073     
00077     CSLConnectionPoint* AddConnectionPoint();
00078 
00083     SI_Error RemoveConnectionPoint( SI_Int in_nIndex );
00084 
00089     SI_Error RemoveConnectionPoint( CSLConnectionPoint* in_pToRemove );
00090 
00094     SI_Error ClearConnectionPoints();
00095 
00100     CSLConnectionPoint* ConnectConnectionPoint( CSLConnectionPoint* in_pToConnect );
00101 
00105     CSLConnectionPoint** GetConnectionPointList();
00106 
00110     SI_Int GetConnectionPointCount();
00111     
00113     // Shaders functionality //////////////////////////////////////////////////
00115     
00119     CSLXSIShader* AddShader();
00120 
00125     SI_Error RemoveShader( SI_Int in_nIndex );
00126 
00131     SI_Error RemoveShader( CSLXSIShader* in_pToRemove );
00132 
00136     SI_Error ClearShaders();
00137 
00142     CSLXSIShader* ConnectShader( CSLXSIShader* in_pToConnect );
00143 
00147     CSLXSIShader** GetShaderList();
00148 
00152     SI_Int GetShaderCount();
00153 
00158     CSLXSIShader* FindShader( SI_Char* in_szShaderName );
00159 
00161     // Material Info functionality ////////////////////////////////////////////
00163 
00167     CSLXSIMaterialInfo* CreateMaterialInfo();
00168 
00172     SI_Error DestroyMaterialInfo();
00173 
00178     CSLXSIMaterialInfo* ConnectMaterialInfo( CSLXSIMaterialInfo* in_pToConnect );
00179 
00183     CSLXSIMaterialInfo* GetMaterialInfo();
00184 
00186     // Multi Port Connection functionality ////////////////////////////////
00188     
00194     CSLXSIShaderMultiPortConnection* AddMultiPortConnection();
00195 
00199     SI_Error RemoveMultiPortConnection(SI_Int in_nIndex);
00200 
00204     SI_Error RemoveMultiPortConnection(CSLXSIShaderMultiPortConnection* in_pToRemove);
00205 
00210     CSLXSIShaderMultiPortConnection* GetMultiPortConnection(SI_Int in_nIndex);
00211 
00217     CSLXSIShaderMultiPortConnection* GetMultiPortConnectionByParameter(SI_Char* in_pParameter);
00218 
00222     SI_Int GetMultiPortConnectionCount();
00223 
00226     SI_Error ClearMultiPortConnections();
00227 
00231     CSLXSIShaderMultiPortConnection** GetMultiPortConnectionList();
00232 
00237     CSLXSIShaderMultiPortConnection* ConnectMultiPortConnection( CSLXSIShaderMultiPortConnection* in_pToConnect );
00238 
00243     CSLXSIShaderMultiPortConnection* FindMultiPortConnectionByParameterName(SI_Char *in_pName);
00244 
00246     // Texture Layer functionality ////////////////////////////////////////
00248     
00252     CSLXSITextureLayer* AddTextureLayer();
00253 
00257     SI_Error RemoveTextureLayer(SI_Int in_nIndex);
00258 
00262     SI_Error RemoveTextureLayer(CSLXSITextureLayer* in_pToRemove);
00263 
00268     CSLXSITextureLayer* GetTextureLayer(SI_Int in_nIndex);
00269 
00274     CSLXSITextureLayer* FindTextureLayerByOrder(SI_Int in_nOrder);
00275 
00279     SI_Int GetTextureLayerCount();
00280 
00283     SI_Error ClearTextureLayers();
00284 
00288     CSLXSITextureLayer** GetTextureLayerList();
00289 
00294     CSLXSITextureLayer* ConnectTextureLayer( CSLXSITextureLayer* in_pToConnect );
00295 
00296 // Members
00297 private:
00298     CSIBCArray<CSLConnectionPoint*> m_ConnectionPoints;
00299     CSIBCArray<CSLXSIShader*> m_Shaders;
00300     CSLXSIMaterialInfo *m_pMaterialInfo;
00301     CSIBCArray<CSLXSIShaderMultiPortConnection *> m_MultiPortConnections;
00302     CSIBCArray<CSLXSITextureLayer*> m_TextureLayers;
00303 
00304     SI_Void *m_pReserved;   // reserved for future use
00305 };
00306 
00307 #endif // _XSIMATERIAL_H