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.
215 lines
5.6 KiB
215 lines
5.6 KiB
//========= Copyright 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 <tier0/memdbgon.h> |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// 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); |
|
}
|
|
|