Team Fortress 2 Source Code as on 22/4/2020
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.
|
|
//========= 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; }; */
|