//========= Copyright Valve Corporation, All rights reserved. ============// // // A class representing a procedural texture // //============================================================================= #ifndef DMETEXTURE_H #define DMETEXTURE_H #ifdef _WIN32 #pragma once #endif #include "datamodel/dmelement.h" #include "materialsystem/MaterialSystemUtil.h" #include "movieobjects/dmeimage.h" //----------------------------------------------------------------------------- // Forward declarations //----------------------------------------------------------------------------- class ITexture; class IMesh; enum ImageFormat; class IVTFTexture; //----------------------------------------------------------------------------- // Compression types //----------------------------------------------------------------------------- enum DmeTextureCompress_t { DMETEXTURE_COMPRESS_DEFAULT = 0, DMETEXTURE_COMPRESS_NONE, DMETEXTURE_COMPRESS_DXT1, DMETEXTURE_COMPRESS_DXT5, }; //----------------------------------------------------------------------------- // Filter types //----------------------------------------------------------------------------- enum DmeTextureFilter_t { DMETEXTURE_FILTER_DEFAULT = 0, DMETEXTURE_FILTER_ANISOTROPIC, DMETEXTURE_FILTER_TRILINEAR, DMETEXTURE_FILTER_BILINEAR, DMETEXTURE_FILTER_POINT, }; //----------------------------------------------------------------------------- // Mipmap types //----------------------------------------------------------------------------- enum DmeTextureMipmap_t { DMETEXTURE_MIPMAP_DEFAULT = 0, DMETEXTURE_MIPMAP_ALL_LEVELS, DMETEXTURE_MIPMAP_NONE, }; //----------------------------------------------------------------------------- // A base class for textures //----------------------------------------------------------------------------- class CDmeBaseTexture : public CDmElement { DEFINE_ELEMENT( CDmeBaseTexture, CDmElement ); public: ITexture *GetCachedTexture(); // Compression type void SetCompressionType( DmeTextureCompress_t type ); DmeTextureCompress_t GetCompressionType() const; // Filter type void SetFilterType( DmeTextureFilter_t type ); DmeTextureFilter_t GetFilterType() const; // Mipmap type void SetMipmapType( DmeTextureMipmap_t type ); DmeTextureMipmap_t GetMipmapType() const; public: CDmAttributeVar m_bClampS; CDmAttributeVar m_bClampT; CDmAttributeVar m_bClampU; CDmAttributeVar m_bNoDebugOverride; CDmAttributeVar m_bNoLod; CDmAttributeVar m_bNiceFiltered; CDmAttributeVar m_bNormalMap; CDmAttributeVar m_flBumpScale; protected: // Computes texture flags int CalcTextureFlags( int nDepth ) const; // Computes the desired texture format based on flags ImageFormat ComputeDesiredImageFormat( ImageFormat srcFormat, int nWidth, int nHeight, int nDepth, int nFlags ); CDmAttributeVar m_nCompressType; CDmAttributeVar m_nFilterType; CDmAttributeVar m_nMipmapType; // Computed values CTextureReference m_Texture; IVTFTexture *m_pVTFTexture; Vector m_vecReflectivity; }; //----------------------------------------------------------------------------- // Inline methods //----------------------------------------------------------------------------- inline void CDmeBaseTexture::SetCompressionType( DmeTextureCompress_t type ) { m_nCompressType = type; } inline DmeTextureCompress_t CDmeBaseTexture::GetCompressionType() const { return (DmeTextureCompress_t)m_nCompressType.Get(); } inline void CDmeBaseTexture::SetFilterType( DmeTextureFilter_t type ) { m_nFilterType = type; } inline DmeTextureFilter_t CDmeBaseTexture::GetFilterType() const { return (DmeTextureFilter_t)m_nFilterType.Get(); } inline void CDmeBaseTexture::SetMipmapType( DmeTextureMipmap_t type ) { m_nMipmapType = type; } inline DmeTextureMipmap_t CDmeBaseTexture::GetMipmapType() const { return (DmeTextureMipmap_t)m_nMipmapType.Get(); } //----------------------------------------------------------------------------- // A class representing a texture //----------------------------------------------------------------------------- class CDmeTexture : public CDmeBaseTexture { DEFINE_ELEMENT( CDmeTexture, CDmeBaseTexture ); public: virtual void Resolve(); private: // Array of images in an animated texture CDmAttributeVarElementArray< CDmeImage > m_Images; }; //----------------------------------------------------------------------------- // A class representing a cube texture //----------------------------------------------------------------------------- class CDmeCubeTexture : public CDmeBaseTexture { DEFINE_ELEMENT( CDmeCubeTexture, CDmeBaseTexture ); public: virtual void Resolve(); private: // Array of images in an animated texture CDmAttributeVarElementArray< CDmeImage > m_ImagesPosX; CDmAttributeVarElementArray< CDmeImage > m_ImagesNegX; CDmAttributeVarElementArray< CDmeImage > m_ImagesPosY; CDmAttributeVarElementArray< CDmeImage > m_ImagesNegY; CDmAttributeVarElementArray< CDmeImage > m_ImagesPosZ; CDmAttributeVarElementArray< CDmeImage > m_ImagesNegZ; }; #endif // DMETEXTURE_H