initial
This commit is contained in:
264
hammer/material.h
Normal file
264
hammer/material.h
Normal file
@@ -0,0 +1,264 @@
|
||||
//===== Copyright <20> 1996-2005, Valve Corporation, All rights reserved. ======//
|
||||
//
|
||||
// Purpose: Implementation of IEditorTexture interface for materials.
|
||||
//
|
||||
// $NoKeywords: $
|
||||
//===========================================================================//
|
||||
|
||||
#ifndef MATERIAL_H
|
||||
#define MATERIAL_H
|
||||
#pragma once
|
||||
|
||||
|
||||
#include "IEditorTexture.h"
|
||||
#include "materialsystem/IMaterialVar.h"
|
||||
#include "materialsystem/IMaterial.h"
|
||||
|
||||
|
||||
class IMaterial;
|
||||
class CMaterialCache;
|
||||
class IMaterialSystem;
|
||||
class IMaterialSystemHardwareConfig;
|
||||
struct MaterialSystem_Config_t;
|
||||
struct MaterialCacheEntry_t;
|
||||
|
||||
|
||||
#define INCLUDE_MODEL_MATERIALS 0x01
|
||||
#define INCLUDE_WORLD_MATERIALS 0x02
|
||||
#define INCLUDE_ALL_MATERIALS 0xFFFFFFFF
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Inherit from this to enumerate materials
|
||||
//-----------------------------------------------------------------------------
|
||||
class IMaterialEnumerator
|
||||
{
|
||||
public:
|
||||
virtual bool EnumMaterial( const char *pMaterialName, int nContext ) = 0;
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//-----------------------------------------------------------------------------
|
||||
class CMaterial : public IEditorTexture
|
||||
{
|
||||
public:
|
||||
static bool Initialize( HWND hwnd );
|
||||
static void ShutDown(void);
|
||||
static void EnumerateMaterials( IMaterialEnumerator *pEnum, const char *szRoot, int nContext, int nFlags = INCLUDE_ALL_MATERIALS );
|
||||
static CMaterial *CreateMaterial( const char *pszMaterialName, bool bLoadImmediately, bool* pFound = 0 );
|
||||
|
||||
virtual ~CMaterial(void);
|
||||
|
||||
void Draw(CDC *pDC, RECT& rect, int iFontHeight, int iIconHeight, DrawTexData_t &DrawTexData); //DWORD dwFlags = (drawCaption|drawIcons));
|
||||
|
||||
void FreeData(void);
|
||||
|
||||
inline const char *GetName(void) const
|
||||
{
|
||||
return(m_szName);
|
||||
}
|
||||
int GetShortName(char *pszName) const;
|
||||
|
||||
int GetKeywords(char *pszKeywords) const;
|
||||
|
||||
void GetSize(SIZE &size) const;
|
||||
|
||||
int GetImageDataRGB(void *pImageRGB);
|
||||
int GetImageDataRGBA(void *pImageRGBA);
|
||||
|
||||
// Image dimensions
|
||||
int GetPreviewImageWidth(void) const;
|
||||
int GetPreviewImageHeight(void) const;
|
||||
int GetMappingWidth(void) const;
|
||||
int GetMappingHeight(void) const;
|
||||
// todo: remove these. They are the same as GetPreviewImageWidth, etc.
|
||||
int GetWidth(void) const;
|
||||
int GetHeight(void) const;
|
||||
|
||||
|
||||
float GetDecalScale(void) const;
|
||||
|
||||
const char *GetFileName(void) const;
|
||||
|
||||
inline CPalette *GetPalette(void) const
|
||||
{
|
||||
return(NULL);
|
||||
}
|
||||
|
||||
inline int GetSurfaceAttributes(void) const
|
||||
{
|
||||
return(0);
|
||||
}
|
||||
|
||||
inline int GetSurfaceContents(void) const
|
||||
{
|
||||
return(0);
|
||||
}
|
||||
|
||||
inline int GetSurfaceValue(void) const
|
||||
{
|
||||
return(0);
|
||||
}
|
||||
|
||||
inline TEXTUREFORMAT GetTextureFormat(void) const
|
||||
{
|
||||
return(tfVMT);
|
||||
}
|
||||
|
||||
inline int GetTextureID(void) const
|
||||
{
|
||||
return(m_nTextureID);
|
||||
}
|
||||
|
||||
bool HasAlpha(void) const
|
||||
{
|
||||
return(false);
|
||||
}
|
||||
|
||||
inline bool HasData(void) const
|
||||
{
|
||||
return((m_nPreviewImageWidth != 0) && (m_nPreviewImageHeight != 0));
|
||||
}
|
||||
|
||||
inline bool HasPalette(void) const
|
||||
{
|
||||
return(false);
|
||||
}
|
||||
|
||||
inline bool IsDummy(void) const
|
||||
{
|
||||
return(false);
|
||||
}
|
||||
|
||||
bool Load(void);
|
||||
void Reload( bool bFullReload );
|
||||
|
||||
inline bool IsLoaded() const
|
||||
{
|
||||
return m_bLoaded;
|
||||
}
|
||||
|
||||
inline void SetTextureID(int nTextureID)
|
||||
{
|
||||
m_nTextureID = nTextureID;
|
||||
}
|
||||
|
||||
bool IsWater( void ) const;
|
||||
|
||||
virtual IMaterial* GetMaterial( bool bForceLoad=true );
|
||||
|
||||
protected:
|
||||
// Used to draw the bitmap for the texture browser
|
||||
void DrawBitmap( CDC *pDC, RECT& srcRect, RECT& dstRect );
|
||||
void DrawBrowserIcons( CDC *pDC, RECT& dstRect, bool detectErrors );
|
||||
void DrawIcon( CDC *pDC, CMaterial* pIcon, RECT& dstRect );
|
||||
|
||||
static bool ShouldSkipMaterial(const char *pszName, int nFlags);
|
||||
|
||||
// Finds all .VMT files in a particular directory
|
||||
static bool LoadMaterialsInDirectory( char const* pDirectoryName, int nDirectoryNameLen,
|
||||
IMaterialEnumerator *pEnum, int nContext, int nFlags );
|
||||
|
||||
// Discovers all .VMT files lying under a particular directory recursively
|
||||
static bool InitDirectoryRecursive( char const* pDirectoryName,
|
||||
IMaterialEnumerator *pEnum, int nContext, int nFlags );
|
||||
|
||||
CMaterial(void);
|
||||
bool LoadMaterialHeader(IMaterial *material);
|
||||
bool LoadMaterialImage();
|
||||
|
||||
static bool IsIgnoredMaterial( const char *pName );
|
||||
|
||||
// Will actually load the material bits
|
||||
// We don't want to load them all at once because it takes way too long
|
||||
bool LoadMaterial();
|
||||
|
||||
char m_szName[MAX_PATH];
|
||||
char m_szFileName[MAX_PATH];
|
||||
char m_szKeywords[MAX_PATH];
|
||||
|
||||
int m_nTextureID; // Uniquely identifies this texture in all 3D renderers.
|
||||
|
||||
int m_nPreviewImageWidth; // Texture width in texels.
|
||||
int m_nPreviewImageHeight; // Texture height in texels.
|
||||
|
||||
bool m_TranslucentBaseTexture;
|
||||
bool m_bLoaded; // We don't load these immediately; only when needed..
|
||||
|
||||
void *m_pData; // Loaded texel data (NULL if not loaded).
|
||||
|
||||
IMaterial *m_pMaterial;
|
||||
|
||||
friend class CMaterialImageCache;
|
||||
};
|
||||
|
||||
|
||||
typedef CMaterial *CMaterialPtr;
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//-----------------------------------------------------------------------------
|
||||
class CMaterialCache
|
||||
{
|
||||
public:
|
||||
|
||||
CMaterialCache(void);
|
||||
~CMaterialCache(void);
|
||||
|
||||
inline bool CacheExists(void);
|
||||
bool Create(int nMaxEntries);
|
||||
|
||||
CMaterial *CreateMaterial(const char *pszMaterialName);
|
||||
void AddRef(CMaterial *pMaterial);
|
||||
void Release(CMaterial *pMaterial);
|
||||
|
||||
protected:
|
||||
|
||||
CMaterial *FindMaterial(const char *pszMaterialName);
|
||||
void AddMaterial(CMaterial *pMaterial);
|
||||
|
||||
MaterialCacheEntry_t *m_pCache;
|
||||
int m_nMaxEntries;
|
||||
int m_nEntries;
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Returns true if the cache has been allocated, false if not.
|
||||
//-----------------------------------------------------------------------------
|
||||
inline bool CMaterialCache::CacheExists(void)
|
||||
{
|
||||
return((m_pCache != NULL) && (m_nMaxEntries > 0));
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// returns the material system interface + config
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
inline IMaterialSystem *MaterialSystemInterface()
|
||||
{
|
||||
return materials;
|
||||
}
|
||||
|
||||
inline MaterialSystem_Config_t& MaterialSystemConfig()
|
||||
{
|
||||
extern MaterialSystem_Config_t g_materialSystemConfig;
|
||||
return g_materialSystemConfig;
|
||||
}
|
||||
|
||||
inline IMaterialSystemHardwareConfig* MaterialSystemHardwareConfig()
|
||||
{
|
||||
extern IMaterialSystemHardwareConfig* g_pMaterialSystemHardwareConfig;
|
||||
return g_pMaterialSystemHardwareConfig;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------
|
||||
// call AllocateLightingPreviewtextures to make sure necessary rts are allocated
|
||||
//--------------------------------------------------------------------------------
|
||||
void AllocateLightingPreviewtextures(void);
|
||||
|
||||
#endif // MATERIAL_H
|
||||
Reference in New Issue
Block a user