XSIShader.h

00001 //***************************************************************************************
00002 //
00003 // File supervisor: Crosswalk team
00004 //
00005 // Copyright 2008 Autodesk, Inc.  All rights reserved.
00006 // Use of this software is subject to the terms of the Autodesk license agreement
00007 // provided at the time of installation or download, or which otherwise accompanies
00008 // this software in either electronic or hard copy form.
00009 //
00010 //***************************************************************************************
00011 
00012 /******************************************************************************\
00013 *
00014 * File:          XSIShader.h
00015 * Creation date: January 23, 2002 10:59
00016 * Author:        ClassBuilder
00017 *                XXXX
00018 * Purpose:       Declaration of class 'CSLXSIShader'
00019 *
00020 * Modifications: @INSERT_MODIFICATIONS(* )
00021 * January 23, 2002 10:59 Frederic O'Reilly
00022 *     Added method 'DestructorInclude'
00023 *     Added method 'ConstructorInclude'
00024 *     Added method '~CSLXSIShader'
00025 *     Added inheritance 'CSLTemplate'
00026 *     Added member 'm_pProgID'
00027 *     Added member 'm_pOutputType'
00028 *     Added member 'm_pConnectionPoints'
00029 *     Added member 'm_pParameters'
00030 *
00031 * Copyright 2002, XXXXX
00032 * All rights are reserved. Reproduction in whole or part is prohibited
00033 * without the written consent of the copyright owner.
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     // Parameters Functionality ///////////////////////////////////////////////
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     // Connection points functionality ////////////////////////////////////////
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     // instance data functionality ////////////////////////////////////////
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     // Prog ID Accessors //////////////////////////////////////////////////////
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     // Output Type Accessors //////////////////////////////////////////////////
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     // Multi Port Connection functionality ////////////////////////////////////////
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     // Texture Layer functionality ////////////////////////////////////////
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     // Shader Compound Functionality //////////////////////////////////////////
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;   // reserved for future use
00434 };
00435 
00436 #endif