mirror of
https://github.com/alliedmodders/hl2sdk.git
synced 2024-12-22 17:47:38 +08:00
100 lines
3.6 KiB
C++
100 lines
3.6 KiB
C++
//========= Copyright Valve Corporation, All rights reserved. ============//
|
|
//
|
|
// Purpose:
|
|
//
|
|
// $Workfile: $
|
|
// $Date: $
|
|
// $NoKeywords: $
|
|
//===========================================================================//
|
|
#ifndef MATERIALSYSTEMUTIL_H
|
|
#define MATERIALSYSTEMUTIL_H
|
|
|
|
#ifdef _WIN32
|
|
#pragma once
|
|
#endif
|
|
|
|
#include "bitmap/imageformat.h" //ImageFormat enum definition
|
|
#include "materialsystem/imaterialsystem.h" // RenderTargetSizeMode_t and MaterialRenderTargetDepth_t definition
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Forward declarations
|
|
//-----------------------------------------------------------------------------
|
|
class IMaterial;
|
|
class ITexture;
|
|
class KeyValues;
|
|
|
|
class KeyValues;
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Little utility class to deal with material references
|
|
//-----------------------------------------------------------------------------
|
|
class CMaterialReference
|
|
{
|
|
public:
|
|
// constructor, destructor
|
|
CMaterialReference( char const* pMaterialName = 0, const char *pTextureGroupName = 0, bool bComplain = true );
|
|
~CMaterialReference();
|
|
|
|
// Attach to a material
|
|
void Init( const char* pMaterialName, const char *pTextureGroupName, bool bComplain = true );
|
|
void Init( const char *pMaterialName, KeyValues *pVMTKeyValues );
|
|
void Init( IMaterial* pMaterial );
|
|
void Init( CMaterialReference& ref );
|
|
void Init( const char *pMaterialName, const char *pTextureGroupName, KeyValues *pVMTKeyValues );
|
|
|
|
// Detach from a material
|
|
void Shutdown();
|
|
bool IsValid() { return m_pMaterial != 0; }
|
|
|
|
// Automatic casts to IMaterial
|
|
operator IMaterial*() { return m_pMaterial; }
|
|
operator IMaterial*() const { return m_pMaterial; }
|
|
operator IMaterial const*() const { return m_pMaterial; }
|
|
IMaterial* operator->() { return m_pMaterial; }
|
|
|
|
private:
|
|
IMaterial* m_pMaterial;
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Little utility class to deal with texture references
|
|
//-----------------------------------------------------------------------------
|
|
class CTextureReference
|
|
{
|
|
public:
|
|
// constructor, destructor
|
|
CTextureReference( );
|
|
CTextureReference( const CTextureReference &ref );
|
|
~CTextureReference();
|
|
|
|
// Attach to a texture
|
|
void Init( char const* pTexture, const char *pTextureGroupName, bool bComplain = true );
|
|
void InitProceduralTexture( const char *pTextureName, const char *pTextureGroupName, int w, int h, ImageFormat fmt, int nFlags );
|
|
void InitRenderTarget( int w, int h, RenderTargetSizeMode_t sizeMode, ImageFormat fmt, MaterialRenderTargetDepth_t depth, bool bHDR, char *pStrOptionalName = NULL );
|
|
#if defined( _X360 )
|
|
// used when RT coupling is disparate (texture is DDR based, surface is EDRAM based)
|
|
void InitRenderTargetTexture( int width, int height, RenderTargetSizeMode_t sizeMode, ImageFormat fmt, MaterialRenderTargetDepth_t depth, bool bHDR, char *pStrOptionalName = NULL );
|
|
void InitRenderTargetSurface( int width, int height, ImageFormat fmt, bool bSameAsTexture );
|
|
#endif
|
|
void Init( ITexture* pTexture );
|
|
|
|
// Detach from a texture
|
|
void Shutdown( bool bDeleteIfUnReferenced = false );
|
|
bool IsValid() { return m_pTexture != 0; }
|
|
|
|
// Automatic casts to ITexture
|
|
operator ITexture*() { return m_pTexture; }
|
|
operator ITexture const*() const { return m_pTexture; }
|
|
ITexture* operator->() { return m_pTexture; }
|
|
|
|
// Assignment operator
|
|
void operator=( CTextureReference &ref );
|
|
|
|
private:
|
|
ITexture* m_pTexture;
|
|
};
|
|
|
|
|
|
#endif // !MATERIALSYSTEMUTIL_H
|