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 #ifndef _XSISHADER_H
00037 #define _XSISHADER_H
00038
00039 #include "Template.h"
00040 class CSLVariantParameter;
00041 class CSLShaderConnectionPoint;
00042 class CSLShaderInstanceData;
00043 class CSLImage;
00044 class CSLXSIShaderMultiPortConnection;
00045 class CSLXSITextureLayer;
00046 class CSLXSIMaterial;
00047 class CSLXSIShaderCompound;
00048
00057 class XSIEXPORT CSLXSIShader
00058 : public CSLTemplate
00059 {
00060 public:
00061
00068 CSLXSIShader(CSLScene* in_pScene, CSLModel *in_pParentModel, CdotXSITemplate* in_pTemplate, CSLXSIMaterial* in_pParentMaterial = NULL);
00069
00071 virtual ~CSLXSIShader();
00072
00076 SI_Error Synchronize();
00077
00081 CSLTemplate::ETemplateType Type(){ return XSI_SHADER; }
00082
00083
00087 CSLVariantParameter* AddParameter();
00088
00093 SI_Error RemoveParameter( SI_Int in_nIndex );
00094
00099 SI_Error RemoveParameter( CSLVariantParameter* in_pToRemove );
00100
00104 SI_Error ClearParameters();
00105
00110 CSLVariantParameter* ConnectParameter( CSLVariantParameter* in_pToConnect );
00111
00115 CSLVariantParameter** GetParameterList();
00116
00120 CSLVariantParameter* FindParameterByName(char *in_pName);
00121
00125 SI_Int GetParameterCount();
00126
00131 virtual CSLAnimatableType* ParameterFromName(SI_Char *in_szName);
00132 virtual CSLAnimatableType* ParameterFromType(EFCurveType in_Type, SI_Char *in_szParameterName);
00133
00134
00135
00139 CSLShaderConnectionPoint* AddConnectionPoint();
00140
00145 SI_Error RemoveConnectionPoint( SI_Int in_nIndex );
00146
00151 SI_Error RemoveConnectionPoint( CSLShaderConnectionPoint* in_pToRemove );
00152
00156 SI_Error ClearConnectionPoints();
00157
00162 CSLShaderConnectionPoint* ConnectConnectionPoint( CSLShaderConnectionPoint* in_pToConnect );
00163
00167 CSLShaderConnectionPoint** GetConnectionPointList();
00168
00172 SI_Int GetConnectionPointCount();
00173
00174
00175
00184 CSLAnimatableType* GetParameterFromModel( SI_Char *in_szParamName, CSLModel *in_pFromModel );
00185
00189 CSLShaderInstanceData* AddInstanceData();
00190
00195 SI_Error RemoveInstanceData( SI_Int in_nIndex );
00196
00201 SI_Error RemoveInstanceData( CSLShaderInstanceData* in_pToRemove );
00202
00206 SI_Error ClearInstanceDatas();
00207
00212 CSLShaderInstanceData* ConnectInstanceData( CSLShaderInstanceData* in_pToConnect );
00213
00217 CSLShaderInstanceData** GetInstanceDataList();
00218
00222 SI_Int GetInstanceDataCount();
00223
00224
00225
00229 SI_Char* GetProgID();
00230
00234 SI_Void SetProgID( SI_Char* in_szProgID );
00235
00240 CSLShaderConnectionPoint *ConnectShader( CSLXSIShader *in_pSource, char *in_pConnection);
00245 CSLShaderConnectionPoint *ConnectImage(CSLImage *in_pSource, char *in_pConnection);
00246
00247
00249 enum EOutputType
00250 {
00251 SI_OT_UNKNOWN,
00252 SI_OT_BOOLEAN,
00253 SI_OT_INTEGER,
00254 SI_OT_SCALAR,
00255 SI_OT_COLOR,
00256 SI_OT_VECTOR,
00257 SI_OT_TEXTURE_SPACE,
00258 SI_OT_TEXTURE,
00259 SI_OT_STRING,
00260 SI_OT_FILENAME,
00261 SI_OT_LENS,
00262 SI_OT_LIGHT,
00263 SI_OT_MATERIAL,
00264 SI_OT_MODEL,
00265 SI_OT_MULTI,
00266 };
00267
00271 EOutputType GetOutputType();
00272
00276 SI_Void SetOutputType( EOutputType in_OutputType );
00277
00278
00279
00283 CSLXSIShaderMultiPortConnection* AddMultiPortConnection();
00284
00288 SI_Error RemoveMultiPortConnection(SI_Int in_nIndex);
00289
00293 SI_Error RemoveMultiPortConnection(CSLXSIShaderMultiPortConnection* in_pToRemove);
00294
00299 CSLXSIShaderMultiPortConnection* GetMultiPortConnection(SI_Int in_nIndex);
00300
00306 CSLXSIShaderMultiPortConnection* GetMultiPortConnectionByParameter(SI_Char* in_pParameter);
00307
00311 SI_Int GetMultiPortConnectionCount();
00312
00315 SI_Error ClearMultiPortConnections();
00316
00320 CSLXSIShaderMultiPortConnection** GetMultiPortConnectionList();
00321
00326 CSLXSIShaderMultiPortConnection* ConnectMultiPortConnection( CSLXSIShaderMultiPortConnection* in_pToConnect );
00327
00332 CSLXSIShaderMultiPortConnection* FindMultiPortConnectionByParameterName(SI_Char *in_pName);
00333
00334
00335
00339 CSLXSITextureLayer* AddTextureLayer();
00340
00344 SI_Error RemoveTextureLayer(SI_Int in_nIndex);
00345
00349 SI_Error RemoveTextureLayer(CSLXSITextureLayer* in_pToRemove);
00350
00355 CSLXSITextureLayer* GetTextureLayer(SI_Int in_nIndex);
00356
00361 CSLXSITextureLayer* FindTextureLayerByOrder(SI_Int in_nOrder);
00362
00366 SI_Int GetTextureLayerCount();
00367
00370 SI_Error ClearTextureLayers();
00371
00375 CSLXSITextureLayer** GetTextureLayerList();
00376
00381 CSLXSITextureLayer* ConnectTextureLayer( CSLXSITextureLayer* in_pToConnect );
00382
00386 void SetParentMaterial(CSLXSIMaterial* in_pParentMaterial);
00387
00391 CSLXSIMaterial* ParentMaterial();
00392
00394
00396
00401 CSLXSIShaderCompound* CreateShaderCompound();
00402
00406 SI_Error DestroyShaderCompound();
00407
00412 CSLXSIShaderCompound* ConnectShaderCompound( CSLXSIShaderCompound* in_pToConnect );
00413
00417 CSLXSIShaderCompound* ShaderCompound();
00418
00419 private:
00420
00421 CSLShaderInstanceData* InstanceDataFromModel( CSLModel *in_pModel );
00422
00423 CSIBCArray<CSLVariantParameter *> m_Parameters;
00424 CSIBCArray<CSLShaderConnectionPoint *> m_ConnectionPoints;
00425 CSIBCArray<CSLShaderInstanceData*> m_InstanceDatas;
00426 CSLEnumProxy<EOutputType, SI_OT_MULTI> m_OutputType;
00427 CSLStringProxy m_ProgID;
00428 CSIBCArray<CSLXSIShaderMultiPortConnection *> m_MultiPortConnections;
00429 CSIBCArray<CSLXSITextureLayer *> m_TextureLayers;
00430 CSLXSIMaterial* m_pParentMaterial;
00431 CSLXSIShaderCompound* m_pShaderCompound;
00432
00433 SI_Void *m_pReserved;
00434 };
00435
00436 #endif