XSIShader.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 /******************************************************************************\
00017 *
00018 * File:          XSIShader.h
00019 * Creation date: January 23, 2002 10:59
00020 * Author:        ClassBuilder
00021 *                XXXX
00022 * Purpose:       Declaration of class 'CSLXSIShader'
00023 *
00024 * Modifications: @INSERT_MODIFICATIONS(* )
00025 * January 23, 2002 10:59 Frederic O'Reilly
00026 *     Added method 'DestructorInclude'
00027 *     Added method 'ConstructorInclude'
00028 *     Added method '~CSLXSIShader'
00029 *     Added inheritance 'CSLTemplate'
00030 *     Added member 'm_pProgID'
00031 *     Added member 'm_pOutputType'
00032 *     Added member 'm_pConnectionPoints'
00033 *     Added member 'm_pParameters'
00034 *
00035 * Copyright 2002, XXXXX
00036 * All rights are reserved. Reproduction in whole or part is prohibited
00037 * without the written consent of the copyright owner.
00038 *
00039 \******************************************************************************/
00040 #ifndef _XSISHADER_H
00041 #define _XSISHADER_H
00042 
00043 #include "Template.h"
00044 class CSLVariantParameter;
00045 class CSLShaderConnectionPoint;
00046 class CSLShaderInstanceData;
00047 class CSLImage;
00048 class CSLXSIShaderMultiPortConnection;
00049 class CSLXSITextureLayer;
00050 class CSLXSIMaterial;
00051 
00064 class XSIEXPORT CSLXSIShader
00065     : public CSLTemplate
00066 {
00067 public:
00068 
00075     CSLXSIShader(CSLScene* in_pScene, CSLModel *in_pParentModel, CdotXSITemplate* in_pTemplate, CSLXSIMaterial* in_pParentMaterial = NULL);
00076     
00078     virtual ~CSLXSIShader();
00079     
00083     SI_Error Synchronize();
00084 
00088     CSLTemplate::ETemplateType Type(){ return XSI_SHADER; } 
00089 
00090     // Parameters Functionality ///////////////////////////////////////////////
00094     CSLVariantParameter* AddParameter();
00095 
00100     SI_Error RemoveParameter( SI_Int in_nIndex );
00101 
00106     SI_Error RemoveParameter( CSLVariantParameter* in_pToRemove );
00107 
00111     SI_Error ClearParameters();
00112 
00117     CSLVariantParameter* ConnectParameter( CSLVariantParameter* in_pToConnect );
00118 
00122     CSLVariantParameter** GetParameterList();
00123 
00127     CSLVariantParameter* FindParameterByName(char *in_pName);
00128 
00132     SI_Int GetParameterCount();
00133 
00138     virtual CSLAnimatableType* ParameterFromName(SI_Char *in_szName);
00139     virtual CSLAnimatableType* ParameterFromType(EFCurveType in_Type, SI_Char *in_szParameterName);
00140 
00141     // Connection points functionality ////////////////////////////////////////
00142     
00146     CSLShaderConnectionPoint* AddConnectionPoint();
00147 
00152     SI_Error RemoveConnectionPoint( SI_Int in_nIndex );
00153 
00158     SI_Error RemoveConnectionPoint( CSLShaderConnectionPoint* in_pToRemove );
00159 
00163     SI_Error ClearConnectionPoints();
00164 
00169     CSLShaderConnectionPoint* ConnectConnectionPoint( CSLShaderConnectionPoint* in_pToConnect );
00170 
00174     CSLShaderConnectionPoint** GetConnectionPointList();
00175 
00179     SI_Int GetConnectionPointCount();
00180 
00181     // instance data functionality ////////////////////////////////////////
00182     
00191     CSLAnimatableType* GetParameterFromModel( SI_Char *in_szParamName, CSLModel *in_pFromModel );
00192 
00196     CSLShaderInstanceData* AddInstanceData();
00197 
00202     SI_Error RemoveInstanceData( SI_Int in_nIndex );
00203 
00208     SI_Error RemoveInstanceData( CSLShaderInstanceData* in_pToRemove );
00209 
00213     SI_Error ClearInstanceDatas();
00214 
00219     CSLShaderInstanceData* ConnectInstanceData( CSLShaderInstanceData* in_pToConnect );
00220 
00224     CSLShaderInstanceData** GetInstanceDataList();
00225 
00229     SI_Int GetInstanceDataCount();
00230 
00231     // Prog ID Accessors //////////////////////////////////////////////////////
00232 
00236     SI_Char* GetProgID();
00237 
00241     SI_Void SetProgID( SI_Char* in_szProgID );
00242 
00247     CSLShaderConnectionPoint *ConnectShader( CSLXSIShader *in_pSource, char *in_pConnection);
00252     CSLShaderConnectionPoint  *ConnectImage(CSLImage *in_pSource, char *in_pConnection);
00253 
00254     // Output Type Accessors //////////////////////////////////////////////////
00256     enum EOutputType
00257     {
00258         SI_OT_UNKNOWN,      
00259         SI_OT_BOOLEAN,      
00260         SI_OT_INTEGER,      
00261         SI_OT_SCALAR,       
00262         SI_OT_COLOR,        
00263         SI_OT_VECTOR,       
00264         SI_OT_TEXTURE_SPACE,
00265         SI_OT_TEXTURE,      
00266         SI_OT_STRING,       
00267         SI_OT_FILENAME,     
00268         SI_OT_LENS,         
00269         SI_OT_LIGHT,        
00270         SI_OT_MATERIAL,     
00271         SI_OT_MODEL,        
00272         SI_OT_MULTI,        
00273     };
00274 
00278     EOutputType GetOutputType();
00279 
00283     SI_Void SetOutputType( EOutputType in_OutputType );
00284 
00285     // Multi Port Connection functionality ////////////////////////////////////////
00286     
00290     CSLXSIShaderMultiPortConnection* AddMultiPortConnection();
00291 
00295     SI_Error RemoveMultiPortConnection(SI_Int in_nIndex);
00296 
00300     SI_Error RemoveMultiPortConnection(CSLXSIShaderMultiPortConnection* in_pToRemove);
00301 
00306     CSLXSIShaderMultiPortConnection* GetMultiPortConnection(SI_Int in_nIndex);
00307 
00313     CSLXSIShaderMultiPortConnection* GetMultiPortConnectionByParameter(SI_Char* in_pParameter);
00314 
00318     SI_Int GetMultiPortConnectionCount();
00319 
00322     SI_Error ClearMultiPortConnections();
00323 
00327     CSLXSIShaderMultiPortConnection** GetMultiPortConnectionList();
00328 
00333     CSLXSIShaderMultiPortConnection* ConnectMultiPortConnection( CSLXSIShaderMultiPortConnection* in_pToConnect );
00334 
00339     CSLXSIShaderMultiPortConnection* FindMultiPortConnectionByParameterName(SI_Char *in_pName);
00340 
00341     // Texture Layer functionality ////////////////////////////////////////
00342     
00346     CSLXSITextureLayer* AddTextureLayer();
00347 
00351     SI_Error RemoveTextureLayer(SI_Int in_nIndex);
00352 
00356     SI_Error RemoveTextureLayer(CSLXSITextureLayer* in_pToRemove);
00357 
00362     CSLXSITextureLayer* GetTextureLayer(SI_Int in_nIndex);
00363 
00368     CSLXSITextureLayer* FindTextureLayerByOrder(SI_Int in_nOrder);
00369 
00373     SI_Int GetTextureLayerCount();
00374 
00377     SI_Error ClearTextureLayers();
00378 
00382     CSLXSITextureLayer** GetTextureLayerList();
00383 
00388     CSLXSITextureLayer* ConnectTextureLayer( CSLXSITextureLayer* in_pToConnect );
00389 
00393     void SetParentMaterial(CSLXSIMaterial* in_pParentMaterial);
00394 
00398     CSLXSIMaterial* ParentMaterial();
00399 
00400 private:
00401 
00402     CSLShaderInstanceData* InstanceDataFromModel( CSLModel *in_pModel );
00403 
00404     CSIBCArray<CSLVariantParameter *> m_Parameters;
00405     CSIBCArray<CSLShaderConnectionPoint *> m_ConnectionPoints;
00406     CSIBCArray<CSLShaderInstanceData*> m_InstanceDatas;
00407     CSLEnumProxy<EOutputType, SI_OT_MULTI> m_OutputType;
00408     CSLStringProxy m_ProgID;
00409     CSIBCArray<CSLXSIShaderMultiPortConnection *> m_MultiPortConnections;
00410     CSIBCArray<CSLXSITextureLayer *> m_TextureLayers;
00411     CSLXSIMaterial* m_pParentMaterial;
00412 
00413     SI_Void *m_pReserved;   // reserved for future use
00414 };
00415 
00416 #endif