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