XSIShader.h

Go to the documentation of this file.
00001 //***************************************************************************************
00002 // File supervisor: Crosswalk team
00012 //***************************************************************************************
00013 
00014 #ifndef _XSISHADER_H
00015 #define _XSISHADER_H
00016 
00017 #include "Template.h"
00018 class CSLVariantParameter;
00019 class CSLShaderConnectionPoint;
00020 class CSLShaderInstanceData;
00021 class CSLImage;
00022 class CSLXSIShaderMultiPortConnection;
00023 class CSLXSITextureLayer;
00024 class CSLXSIMaterial;
00025 class CSLXSIShaderCompound;
00026 
00037 class XSIEXPORT CSLXSIShader
00038     : public CSLTemplate
00039 {
00040 public:
00041 
00048     CSLXSIShader(CSLScene* in_pScene, CSLModel *in_pParentModel, CdotXSITemplate* in_pTemplate, CSLXSIMaterial* in_pParentMaterial = NULL);
00049 
00051     virtual ~CSLXSIShader();
00052 
00056     SI_Error Synchronize();
00057 
00061     CSLTemplate::ETemplateType Type(){ return XSI_SHADER; }
00062 
00063     // Parameters Functionality ///////////////////////////////////////////////
00067     CSLVariantParameter* AddParameter();
00068 
00073     SI_Error RemoveParameter( SI_Int in_nIndex );
00074 
00079     SI_Error RemoveParameter( CSLVariantParameter* in_pToRemove );
00080 
00084     SI_Error ClearParameters();
00085 
00090     CSLVariantParameter* ConnectParameter( CSLVariantParameter* in_pToConnect );
00091 
00095     CSLVariantParameter** GetParameterList();
00096 
00101     CSLVariantParameter* FindParameterByName(char *in_pName);
00102 
00106     SI_Int GetParameterCount();
00107 
00112     virtual CSLAnimatableType* ParameterFromName(SI_Char *in_szName);
00113     virtual CSLAnimatableType* ParameterFromType(EFCurveType in_Type, SI_Char *in_szParameterName);
00114 
00115     // Connection points functionality ////////////////////////////////////////
00116 
00120     CSLShaderConnectionPoint* AddConnectionPoint();
00121 
00126     SI_Error RemoveConnectionPoint( SI_Int in_nIndex );
00127 
00132     SI_Error RemoveConnectionPoint( CSLShaderConnectionPoint* in_pToRemove );
00133 
00137     SI_Error ClearConnectionPoints();
00138 
00143     CSLShaderConnectionPoint* ConnectConnectionPoint( CSLShaderConnectionPoint* in_pToConnect );
00144 
00148     CSLShaderConnectionPoint** GetConnectionPointList();
00149 
00153     SI_Int GetConnectionPointCount();
00154 
00155     // instance data functionality ////////////////////////////////////////
00156 
00164     CSLAnimatableType* GetParameterFromModel( SI_Char *in_szParamName, CSLModel *in_pFromModel );
00165 
00169     CSLShaderInstanceData* AddInstanceData();
00170 
00175     SI_Error RemoveInstanceData( SI_Int in_nIndex );
00176 
00181     SI_Error RemoveInstanceData( CSLShaderInstanceData* in_pToRemove );
00182 
00186     SI_Error ClearInstanceDatas();
00187 
00192     CSLShaderInstanceData* ConnectInstanceData( CSLShaderInstanceData* in_pToConnect );
00193 
00197     CSLShaderInstanceData** GetInstanceDataList();
00198 
00202     SI_Int GetInstanceDataCount();
00203 
00204     // Prog ID Accessors //////////////////////////////////////////////////////
00205 
00209     SI_Char* GetProgID();
00210 
00214     SI_Void SetProgID( SI_Char* in_szProgID );
00215 
00220     CSLShaderConnectionPoint *ConnectShader( CSLXSIShader *in_pSource, char *in_pConnection);
00221 
00226     CSLShaderConnectionPoint  *ConnectImage(CSLImage *in_pSource, char *in_pConnection);
00227 
00228     // Output Type Accessors //////////////////////////////////////////////////
00230     enum EOutputType
00231     {
00232         SI_OT_UNKNOWN,      
00233         SI_OT_BOOLEAN,      
00234         SI_OT_INTEGER,      
00235         SI_OT_SCALAR,       
00236         SI_OT_COLOR,        
00237         SI_OT_VECTOR,       
00238         SI_OT_TEXTURE_SPACE,
00239         SI_OT_TEXTURE,      
00240         SI_OT_STRING,       
00241         SI_OT_FILENAME,     
00242         SI_OT_LENS,         
00243         SI_OT_LIGHT,        
00244         SI_OT_MATERIAL,     
00245         SI_OT_MODEL,        
00246         SI_OT_MULTI,        
00247     };
00248 
00252     EOutputType GetOutputType();
00253 
00257     SI_Void SetOutputType( EOutputType in_OutputType );
00258 
00259     // Multi Port Connection functionality ////////////////////////////////////////
00260 
00264     CSLXSIShaderMultiPortConnection* AddMultiPortConnection();
00265 
00269     SI_Error RemoveMultiPortConnection(SI_Int in_nIndex);
00270 
00274     SI_Error RemoveMultiPortConnection(CSLXSIShaderMultiPortConnection* in_pToRemove);
00275 
00280     CSLXSIShaderMultiPortConnection* GetMultiPortConnection(SI_Int in_nIndex);
00281 
00286     CSLXSIShaderMultiPortConnection* GetMultiPortConnectionByParameter(SI_Char* in_pParameter);
00287 
00291     SI_Int GetMultiPortConnectionCount();
00292 
00295     SI_Error ClearMultiPortConnections();
00296 
00300     CSLXSIShaderMultiPortConnection** GetMultiPortConnectionList();
00301 
00306     CSLXSIShaderMultiPortConnection* ConnectMultiPortConnection( CSLXSIShaderMultiPortConnection* in_pToConnect );
00307 
00312     CSLXSIShaderMultiPortConnection* FindMultiPortConnectionByParameterName(SI_Char *in_pName);
00313 
00314     // Texture Layer functionality ////////////////////////////////////////
00315 
00319     CSLXSITextureLayer* AddTextureLayer();
00320 
00324     SI_Error RemoveTextureLayer(SI_Int in_nIndex);
00325 
00329     SI_Error RemoveTextureLayer(CSLXSITextureLayer* in_pToRemove);
00330 
00335     CSLXSITextureLayer* GetTextureLayer(SI_Int in_nIndex);
00336 
00341     CSLXSITextureLayer* FindTextureLayerByOrder(SI_Int in_nOrder);
00342 
00346     SI_Int GetTextureLayerCount();
00347 
00350     SI_Error ClearTextureLayers();
00351 
00355     CSLXSITextureLayer** GetTextureLayerList();
00356 
00361     CSLXSITextureLayer* ConnectTextureLayer( CSLXSITextureLayer* in_pToConnect );
00362 
00366     void SetParentMaterial(CSLXSIMaterial* in_pParentMaterial);
00367 
00371     CSLXSIMaterial* ParentMaterial();
00372 
00374     // Shader Compound Functionality //////////////////////////////////////////
00376 
00381     CSLXSIShaderCompound* CreateShaderCompound();
00382 
00386     SI_Error DestroyShaderCompound();
00387 
00392     CSLXSIShaderCompound* ConnectShaderCompound( CSLXSIShaderCompound* in_pToConnect );
00393 
00397     CSLXSIShaderCompound* ShaderCompound();
00398 
00399 private:
00400 
00401     CSLShaderInstanceData* InstanceDataFromModel( CSLModel *in_pModel );
00402 
00403     CSIBCArray<CSLVariantParameter *> m_Parameters;
00404     CSIBCArray<CSLShaderConnectionPoint *> m_ConnectionPoints;
00405     CSIBCArray<CSLShaderInstanceData*> m_InstanceDatas;
00406     CSLEnumProxy<EOutputType, SI_OT_MULTI> m_OutputType;
00407     CSLStringProxy m_ProgID;
00408     CSIBCArray<CSLXSIShaderMultiPortConnection *> m_MultiPortConnections;
00409     CSIBCArray<CSLXSITextureLayer *> m_TextureLayers;
00410     CSLXSIMaterial* m_pParentMaterial;
00411     CSLXSIShaderCompound* m_pShaderCompound;
00412 
00413     SI_Void *m_pReserved;   // reserved for future use
00414 };
00415 
00416 #endif