summaryrefslogtreecommitdiff
path: root/materialsystem/texturemanager.h
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /materialsystem/texturemanager.h
downloadarchived-source-engine-2018-hl2-src-master.tar.xz
archived-source-engine-2018-hl2-src-master.zip
Diffstat (limited to 'materialsystem/texturemanager.h')
-rw-r--r--materialsystem/texturemanager.h180
1 files changed, 180 insertions, 0 deletions
diff --git a/materialsystem/texturemanager.h b/materialsystem/texturemanager.h
new file mode 100644
index 0000000..6542138
--- /dev/null
+++ b/materialsystem/texturemanager.h
@@ -0,0 +1,180 @@
+//========= 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