00001
00002
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
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
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
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
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
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
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
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
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;
00414 };
00415
00416 #endif