//========= Copyright © 1996-2005, Valve Corporation, All rights reserved. ============// // // Purpose: Simple texture object used for sprites. Handed to the renderer // for binding. May become a general purpose texture object. // //=============================================================================// #include "stdafx.h" #include "Texture.h" // memdbgon must be the last include file in a .cpp file!!! #include //----------------------------------------------------------------------------- // Purpose: Constuctor. Initializes data members. //----------------------------------------------------------------------------- CTexture::CTexture( void ) { m_nWidth = 0; m_nHeight = 0; m_bHasAlpha = false; m_pImageData = NULL; m_nTextureID = TEXTURE_ID_NONE; m_szName[0] = '\0'; } //----------------------------------------------------------------------------- // Purpose: Destructor. Frees the texture image data. //----------------------------------------------------------------------------- CTexture::~CTexture( void ) { if ( m_pImageData != NULL ) { delete [] m_pImageData; } } //----------------------------------------------------------------------------- // Purpose: Allocates image data for a given texture size and pixel format. // Input : nWidth - Desired width of image, in texels. // nHeight - Desired height of image, in texels. // nFlags - Flags indicating the pixel format of the image data. The default // is 24 bit RGB, no alpha component, but can be set to: // // TEXTURE_HAS_ALPHA: the image has an alpha component. Each texel is 32 bits. // // Output : Returns true on success, false on failure. //----------------------------------------------------------------------------- bool CTexture::Allocate( int nWidth, int nHeight, int nFlags ) { if ( m_pImageData != NULL ) { delete [] m_pImageData; m_pImageData = NULL; m_nWidth = 0; m_nHeight = 0; } if (( nWidth == 0 ) || ( nHeight == 0 )) { return( false ); } if ( nFlags & TEXTURE_HAS_ALPHA ) { m_pImageData = new unsigned char [nWidth * nHeight * 4]; m_bHasAlpha = true; } else { m_pImageData = new unsigned char [nWidth * nHeight * 3]; m_bHasAlpha = false; } if ( m_pImageData != NULL ) { m_nWidth = nWidth; m_nHeight = nHeight; } return( m_pImageData != NULL ); } //----------------------------------------------------------------------------- // Purpose: // Input : *pDC - // rect - // iFontHeight - // dwFlags - //----------------------------------------------------------------------------- void CTexture::Draw(CDC *pDC, RECT &rect, int iFontHeight, int iIconHeight, DrawTexData_t &DrawTexData) { } //----------------------------------------------------------------------------- // Purpose: Returns the full path of the file from which this texture was loaded. //----------------------------------------------------------------------------- const char *CTexture::GetFileName() const { static char szEmpty[] = ""; return(szEmpty); } //----------------------------------------------------------------------------- // Purpose: Gets the image data in RGB format, or queries the image data size. // Input : pData - Buffer to receive image data. If NULL, no image data is // copied. Otherwise, the buffer must be large enough to hold the // image data. // Output : Returns the image data size in bytes. //----------------------------------------------------------------------------- int CTexture::GetImageDataRGB( void *pData ) { int nSize = 0; if ( m_bHasAlpha ) { // Conversion from 32 to 24 bits not implemented. Assert( FALSE ); } else { nSize = m_nWidth * m_nHeight * 3; if (( pData != NULL ) && ( nSize > 0 )) { memcpy( pData, m_pImageData, nSize ); } } return( nSize ); } //----------------------------------------------------------------------------- // Purpose: Gets the image data in RGBA format, or queries the image data size. // Input : pData - Buffer to receive image data. If NULL, no image data is // copied. Otherwise, the buffer must be large enough to hold the // image data. // Output : Returns the image data size in bytes. //----------------------------------------------------------------------------- int CTexture::GetImageDataRGBA( void *pData ) { int nSize = 0; if ( m_bHasAlpha ) { nSize = m_nWidth * m_nHeight * 4; if (( pData != NULL ) && ( nSize > 0 )) { memcpy( pData, m_pImageData, nSize ); } } else { // Conversion from 24 to 32 bits not implemented. Assert( FALSE ); } return( nSize ); } //----------------------------------------------------------------------------- // Purpose: Returns a string of comma delimited keywords associated with this // material. // Input : pszKeywords - Buffer to receive keywords, NULL to query string length. // Output : Returns the number of characters in the keyword string. //----------------------------------------------------------------------------- int CTexture::GetKeywords(char *pszKeywords) const { if (pszKeywords != NULL) { *pszKeywords = '\0'; } return(0); } //----------------------------------------------------------------------------- // Purpose: // Input : *pszName - // Output : //----------------------------------------------------------------------------- int CTexture::GetShortName(char *pszName) const { if (pszName != NULL) { strcpy(pszName, m_szName); } return(strlen(m_szName)); } //----------------------------------------------------------------------------- // Purpose: // Output : Returns true on success, false on failure. //----------------------------------------------------------------------------- bool CTexture::Load(void) { return(true); }