mirror of
https://github.com/celisej567/source-engine.git
synced 2026-01-04 18:09:53 +03:00
1
This commit is contained in:
102
game/client/tf/tf_proxyplayer.cpp
Normal file
102
game/client/tf/tf_proxyplayer.cpp
Normal file
@@ -0,0 +1,102 @@
|
||||
//========= 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;
|
||||
};
|
||||
*/
|
||||
Reference in New Issue
Block a user