00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
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
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
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
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
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
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
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
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;
00414 };
00415
00416 #endif