mirror of
https://github.com/celisej567/source-engine.git
synced 2026-01-03 05:49:41 +03:00
1
This commit is contained in:
215
hammer/texture.cpp
Normal file
215
hammer/texture.cpp
Normal file
@@ -0,0 +1,215 @@
|
||||
//========= 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);
|
||||
}
|
||||
Reference in New Issue
Block a user