BVB Source Codes

CRYENGINE Show Material.h Source code

Return Download CRYENGINE: download Material.h Source code - Download CRYENGINE Source code - Type:.h
  1. // Copyright 2001-2016 Crytek GmbH / Crytek Group. All rights reserved.
  2.  
  3. // -------------------------------------------------------------------------
  4. //  File name:   Material.h
  5. //  Version:     v1.00
  6. //  Created:     3/9/2004 by Timur.
  7. //  Compilers:   Visual Studio.NET 2003
  8. //  Description:
  9. // -------------------------------------------------------------------------
  10. //  History:
  11. //
  12. ////////////////////////////////////////////////////////////////////////////
  13.  
  14. #ifndef __Material_h__
  15. #define __Material_h__
  16. #pragma once
  17.  
  18. #include <Cry3DEngine/IMaterial.h>
  19.  
  20. #if CRY_PLATFORM_DESKTOP
  21.         #define TRACE_MATERIAL_LEAKS
  22.         #define SUPPORT_MATERIAL_EDITING
  23. #endif
  24.  
  25. #ifndef _RELEASE
  26.         #define SUPPORT_MATERIAL_SKETCH
  27. #endif
  28.  
  29. class CMaterialLayer : public IMaterialLayer
  30. {
  31. public:
  32.         CMaterialLayer() : m_nRefCount(0), m_nFlags(0)
  33.         {
  34.         }
  35.  
  36.         virtual ~CMaterialLayer()
  37.         {
  38.                 SAFE_RELEASE(m_pShaderItem.m_pShader);
  39.                 SAFE_RELEASE(m_pShaderItem.m_pShaderResources);
  40.         }
  41.  
  42.         virtual void AddRef()
  43.         {
  44.                 m_nRefCount++;
  45.         };
  46.  
  47.         virtual void Release()
  48.         {
  49.                 if (--m_nRefCount <= 0)
  50.                 {
  51.                         delete this;
  52.                 }
  53.         }
  54.  
  55.         virtual void Enable(bool bEnable = true)
  56.         {
  57.                 m_nFlags |= (bEnable == false) ? MTL_LAYER_USAGE_NODRAW : 0;
  58.         }
  59.  
  60.         virtual bool IsEnabled() const
  61.         {
  62.                 return (m_nFlags & MTL_LAYER_USAGE_NODRAW) ? false : true;
  63.         }
  64.  
  65.         virtual void FadeOut(bool bFadeOut = true)
  66.         {
  67.                 m_nFlags |= (bFadeOut == false) ? MTL_LAYER_USAGE_FADEOUT : 0;
  68.         }
  69.  
  70.         virtual bool DoesFadeOut() const
  71.         {
  72.                 return (m_nFlags & MTL_LAYER_USAGE_FADEOUT) ? true : false;
  73.         }
  74.  
  75.         virtual void               SetShaderItem(const IMaterial* pParentMtl, const SShaderItem& pShaderItem);
  76.  
  77.         virtual const SShaderItem& GetShaderItem() const
  78.         {
  79.                 return m_pShaderItem;
  80.         }
  81.  
  82.         virtual SShaderItem& GetShaderItem()
  83.         {
  84.                 return m_pShaderItem;
  85.         }
  86.  
  87.         virtual void SetFlags(uint8 nFlags)
  88.         {
  89.                 m_nFlags = nFlags;
  90.         }
  91.  
  92.         virtual uint8 GetFlags() const
  93.         {
  94.                 return m_nFlags;
  95.         }
  96.  
  97.         void   GetMemoryUsage(ICrySizer* pSizer);
  98.         size_t GetResourceMemoryUsage(ICrySizer* pSizer);
  99.  
  100. private:
  101.         uint8       m_nFlags;
  102.         int         m_nRefCount;
  103.         SShaderItem m_pShaderItem;
  104. };
  105.  
  106. //////////////////////////////////////////////////////////////////////
  107. class CMatInfo : public IMaterial, public stl::intrusive_linked_list_node<CMatInfo>, public Cry3DEngineBase
  108. {
  109. public:
  110.         CMatInfo();
  111.         ~CMatInfo();
  112.  
  113.         void         ShutDown();
  114.  
  115.         virtual void AddRef();
  116.         ;
  117.         virtual void Release();
  118.  
  119.         virtual int  GetNumRefs() { return m_nRefCount; };
  120.  
  121.         //////////////////////////////////////////////////////////////////////////
  122.         // IMaterial implementation
  123.         //////////////////////////////////////////////////////////////////////////
  124.         int                       Size();
  125.  
  126.         virtual IMaterialHelpers& GetMaterialHelpers();
  127.         virtual IMaterialManager* GetMaterialManager();
  128.  
  129.         virtual void              SetName(const char* pName);
  130.         virtual const char*       GetName() const     { return m_sMaterialName; };
  131.  
  132.         virtual void              SetFlags(int flags) { m_Flags = flags; };
  133.         virtual int               GetFlags() const    { return m_Flags; };
  134.  
  135.         // Returns true if this is the default material.
  136.         virtual bool          IsDefault();
  137.  
  138.         virtual int           GetSurfaceTypeId() { return m_nSurfaceTypeId; };
  139.  
  140.         virtual void          SetSurfaceType(const char* sSurfaceTypeName);
  141.         virtual ISurfaceType* GetSurfaceType();
  142.  
  143.         virtual void          SetMatTemplate(const char* sMatTemplate);
  144.         virtual IMaterial*    GetMatTemplate();
  145.         // shader item
  146.  
  147.         virtual void               SetShaderItem(const SShaderItem& _ShaderItem);
  148.         // [Alexey] EF_LoadShaderItem return value with RefCount = 1, so if you'll use SetShaderItem after EF_LoadShaderItem use Assign function
  149.         virtual void               AssignShaderItem(const SShaderItem& _ShaderItem);
  150.  
  151.         virtual SShaderItem&       GetShaderItem();
  152.         virtual const SShaderItem& GetShaderItem() const;
  153.  
  154.         virtual SShaderItem&       GetShaderItem(int nSubMtlSlot);
  155.         virtual const SShaderItem& GetShaderItem(int nSubMtlSlot) const;
  156.  
  157.         virtual bool               IsStreamedIn(const int nMinPrecacheRoundIds[MAX_STREAM_PREDICTION_ZONES], IRenderMesh* pRenderMesh) const;
  158.         virtual bool               IsStreamedIn(const int nMinPrecacheRoundIds[MAX_STREAM_PREDICTION_ZONES]) const;
  159.         bool                       AreChunkTexturesStreamedIn(CRenderChunk* pChunk, const int nMinPrecacheRoundIds[MAX_STREAM_PREDICTION_ZONES]) const;
  160.         bool                       AreTexturesStreamedIn(const int nMinPrecacheRoundIds[MAX_STREAM_PREDICTION_ZONES]) const;
  161.  
  162.         //////////////////////////////////////////////////////////////////////////
  163.         virtual bool SetGetMaterialParamFloat(const char* sParamName, float& v, bool bGet);
  164.         virtual bool SetGetMaterialParamVec3(const char* sParamName, Vec3& v, bool bGet);
  165.         virtual void SetTexture(int textureId, int textureSlot);
  166.         virtual void SetSubTexture(int textureId, int subMaterialSlot, int textureSlot);
  167.  
  168.         virtual void SetCamera(CCamera& cam);
  169.  
  170.         //////////////////////////////////////////////////////////////////////////
  171.         // Sub materials.
  172.         //////////////////////////////////////////////////////////////////////////
  173.         virtual void       SetSubMtlCount(int numSubMtl);
  174.         virtual int        GetSubMtlCount() { return m_subMtls.size(); }
  175.         virtual IMaterial* GetSubMtl(int nSlot)
  176.         {
  177.                 if (m_subMtls.empty() || !(m_Flags & MTL_FLAG_MULTI_SUBMTL))
  178.                         return 0; // Not Multi material.
  179.                 if (nSlot >= 0 && nSlot < (int)m_subMtls.size())
  180.                         return m_subMtls[nSlot];
  181.                 else
  182.                         return 0;
  183.         }
  184.         virtual void       SetSubMtl(int nSlot, IMaterial* pMtl);
  185.         virtual void       SetUserData(void* pUserData);
  186.         virtual void*      GetUserData() const;
  187.  
  188.         virtual IMaterial* GetSafeSubMtl(int nSlot);
  189.         virtual CMatInfo*  Clone(CMatInfo* pParentOfClonedMtl);
  190.         virtual void       Copy(IMaterial* pMtlDest, EMaterialCopyFlags flags);
  191.  
  192.         virtual void       ActivateDynamicTextureSources(bool activate);
  193.  
  194.         //////////////////////////////////////////////////////////////////////////
  195.         // Layers
  196.         //////////////////////////////////////////////////////////////////////////
  197.         virtual void                  SetLayerCount(uint32 nCount);
  198.         virtual uint32                GetLayerCount() const;
  199.         virtual void                  SetLayer(uint32 nSlot, IMaterialLayer* pLayer);
  200.         virtual const IMaterialLayer* GetLayer(uint8 nLayersMask, uint8 nLayersUsageMask) const;
  201.         virtual const IMaterialLayer* GetLayer(uint32 nSlot) const;
  202.         virtual IMaterialLayer*       CreateLayer();
  203.  
  204.         // Fill int table with surface ids of sub materials.
  205.         // Return number of filled items.
  206.         int            FillSurfaceTypeIds(int pSurfaceIdsTable[]);
  207.  
  208.         virtual void   GetMemoryUsage(ICrySizer* pSizer) const;
  209.  
  210.         virtual size_t GetResourceMemoryUsage(ICrySizer* pSizer);
  211.  
  212.         void           UpdateShaderItems();
  213.         void           RefreshShaderResourceConstants();
  214.  
  215.         virtual void IncrementModificationId() final { m_nModificationId++; }
  216.         uint32 GetModificationId() const { return m_nModificationId; }
  217.  
  218.         //////////////////////////////////////////////////////////////////////////
  219.         void SetSketchMode(int mode);
  220.         void SetTexelDensityDebug(int mode);
  221.  
  222.         // Check for specific rendering conditions (forward rendering/nearest cubemap requirement)
  223.         bool IsForwardRenderingRequired();
  224.         bool IsNearestCubemapRequired();
  225.  
  226.         //////////////////////////////////////////////////////////////////////////
  227.         // Debug routines
  228.         //////////////////////////////////////////////////////////////////////////
  229.         virtual const char* GetLoadingCallstack();  // trace leaking materials by callstack
  230.  
  231.         virtual void        RequestTexturesLoading(const float fMipFactor);
  232.         virtual void        ForceTexturesLoading(const float fMipFactor);
  233.         virtual void        ForceTexturesLoading(const int iScreenTexels);
  234.  
  235.         virtual void        PrecacheMaterial(const float fEntDistance, struct IRenderMesh* pRenderMesh, bool bFullUpdate, bool bDrawNear = false);
  236.         void                PrecacheTextures(const float fMipFactor, const int nFlags, bool bFullUpdate);
  237.         void                PrecacheTextures(const int iScreenTexels, const int nFlags, bool bFullUpdate);
  238.         void                PrecacheChunkTextures(const float fInstanceDistance, const int nFlags, CRenderChunk* pRenderChunk, bool bFullUpdate);
  239.  
  240.         virtual int         GetTextureMemoryUsage(ICrySizer* pSizer, int nSubMtlSlot = -1);
  241.         virtual void        SetKeepLowResSysCopyForDiffTex();
  242.  
  243.         virtual void        SetMaterialLinkName(const char* name);
  244.         virtual const char* GetMaterialLinkName() const;
  245.  
  246. #if CRY_PLATFORM_WINDOWS
  247.         virtual void LoadConsoleMaterial();
  248. #endif
  249.  
  250.         virtual CryCriticalSection& GetSubMaterialResizeLock();
  251. public:
  252.         //////////////////////////////////////////////////////////////////////////
  253.         // for debug purposes
  254.         //////////////////////////////////////////////////////////////////////////
  255. #ifdef TRACE_MATERIAL_LEAKS
  256.         string m_sLoadingCallstack;
  257. #endif
  258.  
  259. private:
  260.  
  261.         void UpdateMaterialFlags();
  262.  
  263. private:
  264.         friend class CMatMan;
  265.         friend class CMaterialLayer;
  266.  
  267.         //////////////////////////////////////////////////////////////////////////
  268.         string m_sMaterialName;
  269.         string m_sUniqueMaterialName;
  270.  
  271.         // Id of surface type assigned to this material.
  272.         int m_nSurfaceTypeId;
  273.  
  274.         //! Number of references to this material.
  275.         volatile int m_nRefCount;
  276.         //! Material flags.
  277.         //! @see EMatInfoFlags
  278.         int         m_Flags;
  279.  
  280.         bool        m_bDeleted;
  281.  
  282.         SShaderItem m_shaderItem;
  283.  
  284.         // Used to detect the cases when dependent permanent render objects have to be updated
  285.         uint32 m_nModificationId;
  286.  
  287. #ifdef SUPPORT_MATERIAL_SKETCH
  288.         _smart_ptr<IShader> m_pPreSketchShader;
  289.         int                 m_nPreSketchTechnique;
  290. #endif
  291.  
  292.         //! Array of Sub materials.
  293.         typedef DynArray<_smart_ptr<CMatInfo>> SubMtls;
  294.         SubMtls m_subMtls;
  295.  
  296. #ifdef SUPPORT_MATERIAL_EDITING
  297.         // User data used by Editor.
  298.         void*  m_pUserData;
  299.  
  300.         string m_sMaterialLinkName;
  301.         // name of mat templalte material
  302.         string m_sMatTemplate;
  303. #endif
  304.  
  305.         //! Material layers
  306.         typedef std::vector<_smart_ptr<CMaterialLayer>> MatLayers;
  307.         MatLayers* m_pMaterialLayers;
  308.  
  309.         //! Used for material layers
  310.         mutable CMaterialLayer* m_pActiveLayer;
  311.  
  312.         struct SStreamingPredictionZone
  313.         {
  314.                 int   nRoundId      : 31;
  315.                 int   bHighPriority : 1;
  316.                 float fMinMipFactor;
  317.         } m_streamZoneInfo[2];
  318.  
  319. #if defined(ENABLE_CONSOLE_MTL_VIZ)
  320. public:
  321.         static void RegisterConsoleMatCVar();
  322.         static bool IsConsoleMatModeEnabled() { return ms_useConsoleMat >= 0; }
  323.  
  324. private:
  325.         static int            ms_useConsoleMat;
  326.         _smart_ptr<IMaterial> m_pConsoleMtl;
  327. #endif
  328. };
  329.  
  330. #endif // __Material_h__
  331.  
downloadMaterial.h Source code - Download CRYENGINE Source code
Related Source Codes/Software:
postal - 2017-06-11
reactide - Reactide is the first dedicated IDE for React web ... 2017-06-11
rkt - rkt is a pod-native container engine for Linux. It... 2017-06-11
uWebSockets - Tiny WebSockets https://for... 2017-06-11
realworld - TodoMVC for the RealWorld - Exemplary fullstack Me... 2017-06-11
CRYENGINE - CRYENGINE is a powerful real-time game development... 2017-06-11
goreplay - GoReplay is an open-source tool for capturing and ... 2017-06-10
pyenv - Simple Python version management 2017-06-10
redux-saga - An alternative side effect model for Redux apps ... 2017-06-10
angular-starter - 2017-06-10

 Back to top