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.
102 lines
2.9 KiB
102 lines
2.9 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: Various material proxies for TF |
|
// |
|
//=====================================================================================// |
|
|
|
#include "cbase.h" |
|
|
|
#include "filesystem.h" |
|
#include "materialsystem/imaterialproxy.h" |
|
#include "materialsystem/imaterialvar.h" |
|
#include "materialsystem/itexture.h" |
|
#include "pixelwriter.h" |
|
#include "toolframework_client.h" |
|
#include "econ_gcmessages.h" |
|
#include "tf_item_inventory.h" |
|
|
|
// memdbgon must be the last include file in a .cpp file!!! |
|
#include "tier0/memdbgon.h" |
|
|
|
//----------------------------------------------------------------------------- |
|
|
|
// @note Currently not used since we cache the image on disk as a VTF |
|
class CRGBAImageTextureRegenerator : public ITextureRegenerator |
|
{ |
|
public: |
|
CRGBAImageTextureRegenerator() {} |
|
virtual ~CRGBAImageTextureRegenerator() {} |
|
|
|
// @return true if the image retrieval was successful, false otherwise |
|
virtual bool GetRGBAImage( uint8 *pubDest, int nDestBufferSize ) = 0; |
|
|
|
virtual void RegenerateTextureBits( ITexture *pTexture, IVTFTexture *pVTFTexture, Rect_t *pRect ) |
|
{ |
|
const int width = 64; |
|
const int height = 64; |
|
|
|
// if the width or height mismatches, we abort |
|
int nWidth = pVTFTexture->Width(); |
|
int nHeight = pVTFTexture->Height(); |
|
if ( nWidth != width || nHeight != height ) |
|
{ |
|
return; |
|
} |
|
|
|
// retrieve the image |
|
int destBufferSize = width * height * 4; |
|
byte *rgbaAvatarImage = (byte*)malloc( destBufferSize ); |
|
if ( GetRGBAImage( rgbaAvatarImage, destBufferSize ) ) |
|
{ |
|
// Set up the pixel writer to write into the VTF texture |
|
CPixelWriter pixelWriter; |
|
pixelWriter.SetPixelMemory( pVTFTexture->Format(), pVTFTexture->ImageData(), pVTFTexture->RowSizeInBytes( 0 ) ); |
|
|
|
// only write the pixels requested |
|
for (int y = pRect->y; y < pRect->height; ++y) |
|
{ |
|
pixelWriter.Seek( pRect->x, y ); |
|
for (int x = pRect->x; x < pRect->width; ++x) |
|
{ |
|
int idx = ( y * width + x ) * 4; |
|
byte *rgba = &rgbaAvatarImage[idx]; |
|
byte r = rgba[0]; |
|
byte g = rgba[1]; |
|
byte b = rgba[2]; |
|
byte a = rgba[3]; |
|
pixelWriter.WritePixel( r, g, b, a ); |
|
} |
|
} |
|
} |
|
|
|
// cleanup after ourselves |
|
free( rgbaAvatarImage ); |
|
} |
|
|
|
virtual void Release() |
|
{ |
|
} |
|
}; |
|
|
|
//----------------------------------------------------------------------------- |
|
|
|
/* @note Tom Bui: Here for reference |
|
class CPlayerSteamAvatarTextureRegenerator : public CRGBAImageTextureRegenerator |
|
{ |
|
public: |
|
CPlayerSteamAvatarTextureRegenerator( const CSteamID &steamID ) |
|
: CRGBAImageTextureRegenerator() |
|
, m_steamID(steamID) |
|
{} |
|
virtual ~CPlayerSteamAvatarTextureRegenerator() {} |
|
|
|
virtual bool GetRGBAImage( uint8 *pubDest, int nDestBufferSize ) |
|
{ |
|
int iAvatar = steamapicontext->SteamFriends()->GetFriendAvatar( m_steamID, k_EAvatarSize64x64 ); |
|
return steamapicontext->SteamUtils()->GetImageRGBA( iAvatar, pubDest, nDestBufferSize ); |
|
} |
|
|
|
private: |
|
CSteamID m_steamID; |
|
}; |
|
*/
|
|
|