summaryrefslogtreecommitdiff
path: root/materialsystem/itextureinternal.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/itextureinternal.h
downloadarchived-source-engine-2018-hl2-src-master.tar.xz
archived-source-engine-2018-hl2-src-master.zip
Diffstat (limited to 'materialsystem/itextureinternal.h')
-rw-r--r--materialsystem/itextureinternal.h190
1 files changed, 190 insertions, 0 deletions
diff --git a/materialsystem/itextureinternal.h b/materialsystem/itextureinternal.h
new file mode 100644
index 0000000..a6028a6
--- /dev/null
+++ b/materialsystem/itextureinternal.h
@@ -0,0 +1,190 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//
+//===========================================================================//
+
+#ifndef ITEXTUREINTERNAL_H
+#define ITEXTUREINTERNAL_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "materialsystem/itexture.h"
+#include "shaderapi/ishaderapi.h"
+#include "tier1/utlmap.h"
+
+class Vector;
+enum Sampler_t;
+class IFileList;
+
+enum RenderTargetType_t
+{
+ NO_RENDER_TARGET = 0,
+ // GR - using shared depth buffer
+ RENDER_TARGET = 1,
+ // GR - using own depth buffer
+ RENDER_TARGET_WITH_DEPTH = 2,
+ // GR - no depth buffer
+ RENDER_TARGET_NO_DEPTH = 3,
+ // only cares about depth buffer
+ RENDER_TARGET_ONLY_DEPTH = 4,
+};
+
+enum ResidencyType_t
+{
+ RESIDENT_NONE,
+ RESIDENT_PARTIAL,
+ RESIDENT_FULL
+};
+
+abstract_class ITextureInternal : public ITexture
+{
+public:
+
+ virtual void Bind( Sampler_t sampler ) = 0;
+ virtual void Bind( Sampler_t sampler1, int nFrame, Sampler_t sampler2 = (Sampler_t) -1 ) = 0;
+
+ // Methods associated with reference counting
+ virtual int GetReferenceCount() = 0;
+
+ virtual void GetReflectivity( Vector& reflectivity ) = 0;
+
+ // Set this as the render target, return false for failure
+ virtual bool SetRenderTarget( int nRenderTargetID ) = 0;
+
+ // Releases the texture's hw memory
+ virtual void ReleaseMemory() = 0;
+
+ // Called before Download() on restore. Gives render targets a change to change whether or
+ // not they force themselves to have a separate depth buffer due to AA.
+ virtual void OnRestore() = 0;
+
+ // Resets the texture's filtering and clamping mode
+ virtual void SetFilteringAndClampingMode( bool bOnlyLodValues = false ) = 0;
+
+ // Used by tools.... loads up the non-fallback information about the texture
+ virtual void Precache() = 0;
+
+ // Stretch blit the framebuffer into this texture.
+ virtual void CopyFrameBufferToMe( int nRenderTargetID = 0, Rect_t *pSrcRect = NULL, Rect_t *pDstRect = NULL ) = 0;
+ virtual void CopyMeToFrameBuffer( int nRenderTargetID = 0, Rect_t *pSrcRect = NULL, Rect_t *pDstRect = NULL ) = 0;
+
+ virtual ITexture *GetEmbeddedTexture( int nIndex ) = 0;
+
+ // Get the shaderapi texture handle associated w/ a particular frame
+ virtual ShaderAPITextureHandle_t GetTextureHandle( int nFrame, int nTextureChannel =0 ) = 0;
+
+ virtual ~ITextureInternal()
+ {
+ }
+
+ virtual ImageFormat GetImageFormat() const = 0;
+
+ // Creates a new texture
+ static ITextureInternal *CreateFileTexture( const char *pFileName, const char *pTextureGroupName );
+
+ static ITextureInternal *CreateProceduralTexture(
+ const char *pTextureName,
+ const char *pTextureGroupName,
+ int w,
+ int h,
+ int d,
+ ImageFormat fmt,
+ int nFlags,
+ ITextureRegenerator *generator = NULL);
+
+ static ITextureInternal *CreateRenderTarget(
+ const char *pRTName, // NULL for an auto-generated name.
+ int w,
+ int h,
+ RenderTargetSizeMode_t sizeMode,
+ ImageFormat fmt,
+ RenderTargetType_t type,
+ unsigned int textureFlags,
+ unsigned int renderTargetFlags );
+
+ static void ChangeRenderTarget(
+ ITextureInternal *pTexture,
+ int w,
+ int h,
+ RenderTargetSizeMode_t sizeMode,
+ ImageFormat fmt,
+ RenderTargetType_t type,
+ unsigned int textureFlags,
+ unsigned int renderTargetFlags );
+
+ static ITextureInternal *CreateReferenceTextureFromHandle(
+ const char *pTextureName,
+ const char *pTextureGroupName,
+ ShaderAPITextureHandle_t hTexture );
+
+ static void Destroy( ITextureInternal *pTexture, bool bSkipTexMgrCheck = false );
+
+ // Set this as the render target, return false for failure
+ virtual bool SetRenderTarget( int nRenderTargetID, ITexture* pDepthTexture ) = 0;
+
+ // Bind this to a vertex texture sampler
+ virtual void BindVertexTexture( VertexTextureSampler_t sampler, int frameNum = 0 ) = 0;
+
+ virtual void MarkAsPreloaded( bool bSet ) = 0;
+ virtual bool IsPreloaded() const = 0;
+
+ virtual void MarkAsExcluded( bool bSet, int nDimensionsLimit ) = 0;
+ virtual bool UpdateExcludedState( void ) = 0;
+
+ virtual bool IsTempRenderTarget( void ) const = 0;
+
+ // Reload any files the texture is responsible for.
+ virtual void ReloadFilesInList( IFileList *pFilesToReload ) = 0;
+
+ virtual bool AsyncReadTextureFromFile( IVTFTexture* pVTFTexture, unsigned int nAdditionalCreationFlags ) = 0;
+ virtual void AsyncCancelReadTexture() = 0;
+
+ // Map and unmap. These can fail. And can cause a very significant perf penalty. Be very careful with them.
+ virtual void Map( void** pOutDst, int* pOutPitch ) = 0;
+ virtual void Unmap() = 0;
+
+ // Texture streaming!
+ virtual ResidencyType_t GetCurrentResidence() const = 0;
+ virtual ResidencyType_t GetTargetResidence() const = 0;
+ virtual bool MakeResident( ResidencyType_t newResidence ) = 0;
+ virtual void UpdateLodBias() = 0;
+};
+
+inline bool IsTextureInternalEnvCubemap( const ITextureInternal *pTexture )
+{
+ return ( pTexture == ( ITextureInternal * )-1 );
+}
+
+//-----------------------------------------------------------------------------
+// Ensures that caller provided names are consistent to the dictionary
+//-----------------------------------------------------------------------------
+inline char *NormalizeTextureName( const char *pName, char *pOutName, int nOutNameSize )
+{
+ // hdr textures have an ldr version and need to resolve correctly
+ int nLen = Q_strlen( pName ) + 1;
+ if ( nLen <= 5 || Q_stricmp( pName + nLen - 5, ".hdr" ) )
+ {
+ // strip any non .hdr extension
+ Q_StripExtension( pName, pOutName, nOutNameSize );
+ }
+ else
+ {
+ // keep .hdr extension
+ Q_strncpy( pOutName, pName, nOutNameSize );
+ }
+
+ Q_strlower( pOutName );
+ Q_FixSlashes( pOutName, '/' );
+
+ return pOutName;
+}
+
+extern ConVar mat_texture_tracking;
+extern CUtlMap<ITexture*, CInterlockedInt> *g_pTextureRefList;
+
+#endif // ITEXTUREINTERNAL_H