summaryrefslogtreecommitdiff
path: root/public/materialsystem/itexture.h
diff options
context:
space:
mode:
Diffstat (limited to 'public/materialsystem/itexture.h')
-rw-r--r--public/materialsystem/itexture.h143
1 files changed, 143 insertions, 0 deletions
diff --git a/public/materialsystem/itexture.h b/public/materialsystem/itexture.h
new file mode 100644
index 0000000..0e31544
--- /dev/null
+++ b/public/materialsystem/itexture.h
@@ -0,0 +1,143 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//
+//===========================================================================//
+
+#ifndef ITEXTURE_H
+#define ITEXTURE_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "tier0/platform.h"
+#include "bitmap/imageformat.h" // ImageFormat defn.
+
+class IVTFTexture;
+class ITexture;
+struct Rect_t;
+
+//-----------------------------------------------------------------------------
+// This will get called on procedural textures to re-fill the textures
+// with the appropriate bit pattern. Calling Download() will also
+// cause this interface to be called. It will also be called upon
+// mode switch, or on other occasions where the bits are discarded.
+//-----------------------------------------------------------------------------
+abstract_class ITextureRegenerator
+{
+public:
+ // This will be called when the texture bits need to be regenerated.
+ // Use the VTFTexture interface, which has been set up with the
+ // appropriate texture size + format
+ // The rect specifies which part of the texture needs to be updated
+ // You can choose to update all of the bits if you prefer
+ virtual void RegenerateTextureBits( ITexture *pTexture, IVTFTexture *pVTFTexture, Rect_t *pRect ) = 0;
+
+ // This will be called when the regenerator needs to be deleted
+ // which will happen when the texture is destroyed
+ virtual void Release() = 0;
+
+ // (erics): This should have a virtual destructor, but would be ABI breaking (non-versioned interface implemented
+ // by the game)
+// virtual ~ITextureRegenerator(){}
+};
+
+abstract_class ITexture
+{
+public:
+ // Various texture polling methods
+ virtual const char *GetName( void ) const = 0;
+ virtual int GetMappingWidth() const = 0;
+ virtual int GetMappingHeight() const = 0;
+ virtual int GetActualWidth() const = 0;
+ virtual int GetActualHeight() const = 0;
+ virtual int GetNumAnimationFrames() const = 0;
+ virtual bool IsTranslucent() const = 0;
+ virtual bool IsMipmapped() const = 0;
+
+ virtual void GetLowResColorSample( float s, float t, float *color ) const = 0;
+
+ // Gets texture resource data of the specified type.
+ // Params:
+ // eDataType type of resource to retrieve.
+ // pnumBytes on return is the number of bytes available in the read-only data buffer or is undefined
+ // Returns:
+ // pointer to the resource data, or NULL
+ virtual void *GetResourceData( uint32 eDataType, size_t *pNumBytes ) const = 0;
+
+ // Methods associated with reference count
+ virtual void IncrementReferenceCount( void ) = 0;
+ virtual void DecrementReferenceCount( void ) = 0;
+
+ inline void AddRef() { IncrementReferenceCount(); }
+ inline void Release() { DecrementReferenceCount(); }
+
+ // Used to modify the texture bits (procedural textures only)
+ virtual void SetTextureRegenerator( ITextureRegenerator *pTextureRegen ) = 0;
+
+ // Reconstruct the texture bits in HW memory
+
+ // If rect is not specified, reconstruct all bits, otherwise just
+ // reconstruct a subrect.
+ virtual void Download( Rect_t *pRect = 0, int nAdditionalCreationFlags = 0 ) = 0;
+
+ // Uses for stats. . .get the approximate size of the texture in it's current format.
+ virtual int GetApproximateVidMemBytes( void ) const = 0;
+
+ // Returns true if the texture data couldn't be loaded.
+ virtual bool IsError() const = 0;
+
+ // NOTE: Stuff after this is added after shipping HL2.
+
+ // For volume textures
+ virtual bool IsVolumeTexture() const = 0;
+ virtual int GetMappingDepth() const = 0;
+ virtual int GetActualDepth() const = 0;
+
+ virtual ImageFormat GetImageFormat() const = 0;
+ virtual NormalDecodeMode_t GetNormalDecodeMode() const = 0;
+
+ // Various information about the texture
+ virtual bool IsRenderTarget() const = 0;
+ virtual bool IsCubeMap() const = 0;
+ virtual bool IsNormalMap() const = 0;
+ virtual bool IsProcedural() const = 0;
+
+ virtual void DeleteIfUnreferenced() = 0;
+
+#if defined( _X360 )
+ virtual bool ClearTexture( int r, int g, int b, int a ) = 0;
+ virtual bool CreateRenderTargetSurface( int width, int height, ImageFormat format, bool bSameAsTexture ) = 0;
+#endif
+
+ // swap everything except the name with another texture
+ virtual void SwapContents( ITexture *pOther ) = 0;
+
+ // Retrieve the vtf flags mask
+ virtual unsigned int GetFlags( void ) const = 0;
+
+ // Force LOD override (automatically downloads the texture)
+ virtual void ForceLODOverride( int iNumLodsOverrideUpOrDown ) = 0;
+
+ // Save texture to a file.
+ virtual bool SaveToFile( const char *fileName ) = 0;
+
+ // Copy this texture, which must be a render target or a renderable texture, to the destination texture,
+ // which must have been created with the STAGING bit.
+ virtual void CopyToStagingTexture( ITexture* pDstTex ) = 0;
+
+ // Set that this texture should return true for the call "IsError"
+ virtual void SetErrorTexture( bool bIsErrorTexture ) = 0;
+};
+
+
+inline bool IsErrorTexture( ITexture *pTex )
+{
+ return !pTex || pTex->IsError();
+}
+
+
+#endif // ITEXTURE_H