|
|
//========= 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); }
|