Counter Strike : Global Offensive Source Code
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.
 
 
 
 
 
 

112 lines
2.3 KiB

//====== Copyright © 1996-2005, Valve Corporation, All rights reserved. =======
//
// Purpose:
//
//=============================================================================
#ifndef AMALGAMATEDTEXTURE_H
#define AMALGAMATEDTEXTURE_H
#ifdef _WIN32
#pragma once
#endif
#include "amalg_texture_vars.h"
#include "bitmap/floatbitmap.h"
#include "tier1/utlmap.h"
#include "tier1/utlstringmap.h"
#include "tier2/tier2.h"
struct Sequence;
struct SequenceFrame
{
SequenceFrame() : m_mapSequences( DefLessFunc( Sequence * ) ) {}
FloatBitMap_t *m_pImage;
int m_XCoord, m_YCoord; // where it ended up packed
CUtlMap< Sequence *, int > m_mapSequences;
};
struct SequenceEntry
{
SequenceFrame *m_pSeqFrame[MAX_IMAGES_PER_FRAME];
float m_fDisplayTime;
};
struct Sequence
{
int m_nSequenceNumber;
bool m_Clamp; // as opposed to loop
int m_eMode;
CUtlVector<SequenceEntry> m_Frames;
Sequence( void )
{
m_Clamp = true;
m_eMode = SQM_RGBA;
}
};
// The texture itself.
class CAmalgamatedTexture
{
public:
CAmalgamatedTexture();
void Init( const char *pShtFileName = NULL );
void WriteFile();
void DetermineBestPacking();
bool PackImages( char const *pFilename, int nWidth );
int GetWidth() { return m_nWidth; }
void SetCurrentSequenceClamp( bool bState );
void SetPackingMode( int mode );
void CreateNewSequence( int sequenceNumber, int mode );
void ValidateSequenceType( int eMode, char *word );
void SetSequenceType( int eMode );
bool CurrentSequenceExists();
void CreateFrame( float ftime, CUtlVector<char *> &frameNames );
void LoadFrame( SequenceEntry &newSequenceEntry, char *fnamebuf, int frameNumber );
private:
int GetPackingMode();
int GetSequenceType();
void ValidateFramePacking( SequenceFrame *pBitmap, char *fileName );
bool PackImages_Flat( char const *pFilename, int nWidth );
bool PackImages_Rgb_A( char const *pFilename, int nWidth );
float UCoord( int u )
{
float uc = u + 0.5;
return uc / (float) m_nWidth;
}
float VCoord( int v )
{
float vc = v + 0.5;
return vc / (float) m_nHeight;
}
const char *m_pShtFile;
CUtlStringMap<SequenceFrame *> m_ImageList;
int m_ePackingMode;
CUtlVector<Sequence *> m_Sequences;
Sequence *m_pCurSequence;
int m_nWidth;
int m_nHeight;
};
#endif // AMALGAMATEDTEXTURE_H