You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
180 lines
6.3 KiB
180 lines
6.3 KiB
//========= Copyright Valve Corporation, All rights reserved. ============//
|
|
//
|
|
// Purpose:
|
|
//
|
|
// $Header: $
|
|
// $NoKeywords: $
|
|
//===========================================================================//
|
|
|
|
#ifndef TEXTUREMANAGER_H
|
|
#define TEXTUREMANAGER_H
|
|
|
|
#ifdef _WIN32
|
|
#pragma once
|
|
#endif
|
|
|
|
#include "itextureinternal.h"
|
|
class ITexture;
|
|
class ITextureInternal;
|
|
class IVTFTexture;
|
|
|
|
enum
|
|
{
|
|
COLOR_CORRECTION_MAX_TEXTURES = 4,
|
|
COLOR_CORRECTION_TEXTURE_SIZE = 32
|
|
};
|
|
|
|
class CTextureCompositorTemplate;
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Texture manager interface
|
|
//-----------------------------------------------------------------------------
|
|
abstract_class ITextureManager
|
|
{
|
|
public:
|
|
// Initialization + shutdown
|
|
virtual void Init( int nFlags ) = 0;
|
|
virtual void Shutdown() = 0;
|
|
|
|
// Allocate, free standard render target textures
|
|
virtual void AllocateStandardRenderTargets( ) = 0;
|
|
virtual void FreeStandardRenderTargets() = 0;
|
|
|
|
//Some render targets are managed by code outside of the materialsystem but are used by the materialsystem all the time.
|
|
virtual void CacheExternalStandardRenderTargets() = 0;
|
|
|
|
// Creates a procedural texture
|
|
// NOTE: Passing in NULL as a texture name will cause it to not
|
|
// be able to be looked up by name using FindOrLoadTexture.
|
|
// Also, you may not get a texture with the requested size or format;
|
|
// you'll get something close though.
|
|
virtual ITextureInternal *CreateProceduralTexture(
|
|
const char *pTextureName,
|
|
const char *pTextureGroupName,
|
|
int w,
|
|
int h,
|
|
int d,
|
|
ImageFormat fmt,
|
|
int nFlags,
|
|
ITextureRegenerator *generator = NULL) = 0;
|
|
|
|
// Creates a texture which is a render target
|
|
virtual ITextureInternal *CreateRenderTargetTexture(
|
|
const char *pRTName, // NULL for auto-generated name
|
|
int w,
|
|
int h,
|
|
RenderTargetSizeMode_t sizeMode,
|
|
ImageFormat fmt,
|
|
RenderTargetType_t type,
|
|
unsigned int textureFlags,
|
|
unsigned int renderTargetFlags ) = 0;
|
|
|
|
// Loads a texture from disk
|
|
virtual ITextureInternal *FindOrLoadTexture( const char *pTextureName, const char *pTextureGroupName, int nAdditionalCreationFlags = 0 ) = 0;
|
|
|
|
// Call this to reset the filtering state
|
|
virtual void ResetTextureFilteringState() = 0;
|
|
|
|
// Reload all textures
|
|
virtual void ReloadTextures( void ) = 0;
|
|
|
|
// These two are used when we lose our video memory due to a mode switch etc
|
|
virtual void ReleaseTextures( void ) = 0;
|
|
virtual void RestoreRenderTargets( void ) = 0;
|
|
virtual void RestoreNonRenderTargetTextures( void ) = 0;
|
|
|
|
// Suspend or resume texture streaming requests
|
|
virtual void SuspendTextureStreaming( void ) = 0;
|
|
virtual void ResumeTextureStreaming( void ) = 0;
|
|
|
|
// delete any texture that has a refcount <= 0
|
|
virtual void RemoveUnusedTextures( void ) = 0;
|
|
virtual void DebugPrintUsedTextures( void ) = 0;
|
|
|
|
// Request a texture ID
|
|
virtual int RequestNextTextureID() = 0;
|
|
|
|
// Get at a couple standard textures
|
|
virtual ITextureInternal *ErrorTexture() = 0;
|
|
virtual ITextureInternal *NormalizationCubemap() = 0;
|
|
virtual ITextureInternal *SignedNormalizationCubemap() = 0;
|
|
virtual ITextureInternal *ColorCorrectionTexture( int index ) = 0;
|
|
virtual ITextureInternal *ShadowNoise2D() = 0;
|
|
virtual ITextureInternal *IdentityLightWarp() = 0;
|
|
virtual ITextureInternal *FullFrameDepthTexture() = 0;
|
|
virtual ITextureInternal *DebugLuxels2D() = 0;
|
|
|
|
// Generates an error texture pattern
|
|
virtual void GenerateErrorTexture( ITexture *pTexture, IVTFTexture *pVTFTexture ) = 0;
|
|
|
|
// Updates the color correction state
|
|
virtual void SetColorCorrectionTexture( int i, ITextureInternal *pTexture ) = 0;
|
|
|
|
virtual void ForceAllTexturesIntoHardware( void ) = 0;
|
|
|
|
virtual bool IsTextureLoaded( const char *pTextureName ) = 0;
|
|
|
|
// Mark a texture as now-unreferenced, so it can be checked for removal at a later (and thread-safe) time.
|
|
virtual void MarkUnreferencedTextureForCleanup( ITextureInternal *pTexture ) = 0;
|
|
|
|
virtual void RemoveTexture( ITextureInternal *pTexture ) = 0;
|
|
|
|
// start with -1, list terminates with -1
|
|
virtual int FindNext( int iIndex, ITextureInternal **ppTexture ) = 0;
|
|
|
|
virtual void AddTextureAlias( const char *pAlias, const char *pRealName ) = 0;
|
|
virtual void RemoveTextureAlias( const char *pAlias ) = 0;
|
|
|
|
virtual void SetExcludedTextures( const char *pScriptName ) = 0;
|
|
virtual void UpdateExcludedTextures( void ) = 0;
|
|
|
|
//Releases texture memory bits for temporary render targets, does NOT destroy the CTexture entirely
|
|
virtual void ReleaseTempRenderTargetBits( void ) = 0;
|
|
|
|
// See CL_HandlePureServerWhitelist for a description of the pure server stuff.
|
|
virtual void ReloadFilesInList( IFileList *pFilesToReload ) = 0;
|
|
|
|
// Called once per frame by material system "somewhere."
|
|
virtual void Update( ) = 0;
|
|
|
|
// Load a texture asynchronously and then call the provided callback.
|
|
virtual void AsyncFindOrLoadTexture( const char *pTextureName, const char *pTextureGroupName, IAsyncTextureOperationReceiver* pRecipient, void* pExtraArgs, bool bComplain, int nAdditionalCreationFlags ) = 0;
|
|
|
|
// Stream a render target back to system memory, perform format conversion to the specified destination format,
|
|
virtual void AsyncCreateTextureFromRenderTarget( ITexture* pSrcRt, const char* pDstName, ImageFormat dstFmt, bool bGenMips, int nAdditionalCreationFlags, IAsyncTextureOperationReceiver* pRecipient, void* pExtraArgs ) = 0;
|
|
|
|
virtual void WarmTextureCache() = 0;
|
|
virtual void CoolTextureCache() = 0;
|
|
|
|
virtual void RequestAllMipmaps( ITextureInternal* pTex ) = 0;
|
|
|
|
virtual void EvictAllTextures() = 0;
|
|
|
|
virtual void UpdatePostAsync() = 0;
|
|
|
|
virtual void ReleaseAsyncScratchVTF( IVTFTexture* pScratchVTF ) = 0;
|
|
|
|
virtual bool ThreadInAsyncLoadThread() const = 0;
|
|
virtual bool ThreadInAsyncReadThread() const = 0;
|
|
|
|
virtual bool HasPendingTextureDestroys() const = 0;
|
|
|
|
virtual bool AddTextureCompositorTemplate( const char* pName, KeyValues* pTmplDesc ) = 0;
|
|
virtual bool VerifyTextureCompositorTemplates() = 0;
|
|
|
|
virtual CTextureCompositorTemplate* FindTextureCompositorTemplate( const char* pName ) = 0;
|
|
|
|
};
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Singleton instance
|
|
//-----------------------------------------------------------------------------
|
|
inline ITextureManager *TextureManager()
|
|
{
|
|
extern ITextureManager *g_pTextureManager;
|
|
return g_pTextureManager;
|
|
}
|
|
|
|
|
|
#endif // TEXTUREMANAGER_H
|