mirror of
https://github.com/id-Software/DOOM-3-BFG.git
synced 2025-06-02 01:31:45 +00:00
SWF shapes export
This commit is contained in:
parent
038f798f88
commit
dd056c4ecc
4 changed files with 38 additions and 33 deletions
|
@ -46,11 +46,11 @@ idFile_SWF::~idFile_SWF()
|
||||||
|
|
||||||
int idFile_SWF::BitCountS( const int value )
|
int idFile_SWF::BitCountS( const int value )
|
||||||
{
|
{
|
||||||
//int nBits = idMath::BitCount( value );
|
|
||||||
|
|
||||||
|
|
||||||
int count = 0;
|
int count = 0;
|
||||||
|
|
||||||
|
#if 1
|
||||||
|
count = idMath::BitCount( value );
|
||||||
|
#else
|
||||||
int v = value;
|
int v = value;
|
||||||
while( v > 0 )
|
while( v > 0 )
|
||||||
{
|
{
|
||||||
|
@ -59,10 +59,11 @@ int idFile_SWF::BitCountS( const int value )
|
||||||
// lower bit is set
|
// lower bit is set
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
|
|
||||||
// shift bits, remove lower bit
|
// shift bits, remove lower bit
|
||||||
v >>= 1;
|
v >>= 1;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
@ -110,6 +111,8 @@ int idFile_SWF::EnlargeBitCountU( const int value, int numBits )
|
||||||
|
|
||||||
int idFile_SWF::Write( const void* buffer, int len )
|
int idFile_SWF::Write( const void* buffer, int len )
|
||||||
{
|
{
|
||||||
|
ByteAlign();
|
||||||
|
|
||||||
return file->Write( buffer, len );
|
return file->Write( buffer, len );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -169,18 +172,25 @@ void idFile_SWF::WriteU32( uint32 value )
|
||||||
|
|
||||||
void idFile_SWF::WriteRect( const swfRect_t& rect )
|
void idFile_SWF::WriteRect( const swfRect_t& rect )
|
||||||
{
|
{
|
||||||
int nBits = rect.BitCount();
|
|
||||||
|
|
||||||
int tl_x = FLOAT2SWFTWIP( rect.tl.x );
|
int tl_x = FLOAT2SWFTWIP( rect.tl.x );
|
||||||
int br_x = FLOAT2SWFTWIP( rect.br.x );
|
int br_x = FLOAT2SWFTWIP( rect.br.x );
|
||||||
int tl_y = FLOAT2SWFTWIP( rect.tl.y );
|
int tl_y = FLOAT2SWFTWIP( rect.tl.y );
|
||||||
int br_y = FLOAT2SWFTWIP( rect.br.y );
|
int br_y = FLOAT2SWFTWIP( rect.br.y );
|
||||||
|
|
||||||
|
int nBits = 0;
|
||||||
|
|
||||||
|
nBits = EnlargeBitCountS( tl_x, nBits );
|
||||||
|
nBits = EnlargeBitCountS( br_x, nBits );
|
||||||
|
nBits = EnlargeBitCountS( tl_y, nBits );
|
||||||
|
nBits = EnlargeBitCountS( br_y, nBits );
|
||||||
|
|
||||||
WriteUBits( nBits, 5 );
|
WriteUBits( nBits, 5 );
|
||||||
WriteSBits( tl_x, nBits );
|
WriteSBits( tl_x, nBits );
|
||||||
WriteSBits( br_x, nBits );
|
WriteSBits( br_x, nBits );
|
||||||
WriteSBits( tl_y, nBits );
|
WriteSBits( tl_y, nBits );
|
||||||
WriteSBits( br_y, nBits );
|
WriteSBits( br_y, nBits );
|
||||||
|
|
||||||
|
ByteAlign();
|
||||||
}
|
}
|
||||||
|
|
||||||
void idFile_SWF::WriteMatrix( const swfMatrix_t& matrix )
|
void idFile_SWF::WriteMatrix( const swfMatrix_t& matrix )
|
||||||
|
@ -239,6 +249,8 @@ void idFile_SWF::WriteMatrix( const swfMatrix_t& matrix )
|
||||||
|
|
||||||
void idFile_SWF::WriteColorRGB( const swfColorRGB_t& color )
|
void idFile_SWF::WriteColorRGB( const swfColorRGB_t& color )
|
||||||
{
|
{
|
||||||
|
ByteAlign();
|
||||||
|
|
||||||
WriteByte( color.r );
|
WriteByte( color.r );
|
||||||
WriteByte( color.g );
|
WriteByte( color.g );
|
||||||
WriteByte( color.b );
|
WriteByte( color.b );
|
||||||
|
@ -246,6 +258,8 @@ void idFile_SWF::WriteColorRGB( const swfColorRGB_t& color )
|
||||||
|
|
||||||
void idFile_SWF::WriteColorRGBA( const swfColorRGBA_t& color )
|
void idFile_SWF::WriteColorRGBA( const swfColorRGBA_t& color )
|
||||||
{
|
{
|
||||||
|
ByteAlign();
|
||||||
|
|
||||||
WriteByte( color.r );
|
WriteByte( color.r );
|
||||||
WriteByte( color.g );
|
WriteByte( color.g );
|
||||||
WriteByte( color.b );
|
WriteByte( color.b );
|
||||||
|
|
|
@ -269,7 +269,7 @@ void idSWF::WriteSWF( const char* swfFilename, const byte* atlasImageRGBA, int a
|
||||||
{
|
{
|
||||||
idSWFShapeDrawFill& fillDraw = shape->fillDraws[d];
|
idSWFShapeDrawFill& fillDraw = shape->fillDraws[d];
|
||||||
|
|
||||||
if( fillDraw.style.type == 0 )
|
if( fillDraw.style.type == 0 /* || fillDraw.style.type == 4 */ )
|
||||||
{
|
{
|
||||||
numFillDraws++;
|
numFillDraws++;
|
||||||
}
|
}
|
||||||
|
@ -286,8 +286,15 @@ void idSWF::WriteSWF( const char* swfFilename, const byte* atlasImageRGBA, int a
|
||||||
tag.WriteU16( i ); // characterID
|
tag.WriteU16( i ); // characterID
|
||||||
tag.WriteRect( shape->startBounds );
|
tag.WriteRect( shape->startBounds );
|
||||||
|
|
||||||
tag.WriteU8( 0xFF );
|
if( numFillDraws >= 0xFF )
|
||||||
tag.WriteU16( numFillDraws );
|
{
|
||||||
|
tag.WriteU8( 0xFF );
|
||||||
|
tag.WriteU16( numFillDraws );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
tag.WriteU8( numFillDraws );
|
||||||
|
}
|
||||||
|
|
||||||
for( int d = 0; d < shape->fillDraws.Num(); d++ )
|
for( int d = 0; d < shape->fillDraws.Num(); d++ )
|
||||||
{
|
{
|
||||||
|
@ -296,22 +303,23 @@ void idSWF::WriteSWF( const char* swfFilename, const byte* atlasImageRGBA, int a
|
||||||
|
|
||||||
if( fillDraw.style.type == 0 )
|
if( fillDraw.style.type == 0 )
|
||||||
{
|
{
|
||||||
|
// solid
|
||||||
|
tag.WriteU8( 0x00 );
|
||||||
tag.WriteColorRGBA( fillDraw.style.startColor );
|
tag.WriteColorRGBA( fillDraw.style.startColor );
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
else
|
else
|
||||||
|
if( fillDraw.style.type == 4 )
|
||||||
if( fillDraw.style.type == 4 )
|
|
||||||
{
|
{
|
||||||
//uint8 styleType = ( ( int ) fillDraw.style.type << 4 );
|
// bitmap
|
||||||
tag.WriteU8( 0x40 );
|
tag.WriteU8( 0x40 );
|
||||||
|
|
||||||
// bitmap
|
|
||||||
tag.WriteU16( fillDraw.style.bitmapID );
|
tag.WriteU16( fillDraw.style.bitmapID );
|
||||||
tag.WriteMatrix( fillDraw.style.startMatrix );
|
tag.WriteMatrix( fillDraw.style.startMatrix );
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
// type: 0 = solid, 1 = gradient, 4 = bitmap
|
// type: 0 = solid, 1 = gradient, 4 = bitmap
|
||||||
//if( fillDraw.style.type == 0 )
|
//if( fillDraw.style.type == 0 )
|
||||||
|
|
||||||
|
@ -340,8 +348,8 @@ void idSWF::WriteSWF( const char* swfFilename, const byte* atlasImageRGBA, int a
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO
|
// TODO
|
||||||
tag.WriteU8( 0xFF );
|
tag.WriteU8( 0 ); // no lines
|
||||||
tag.WriteU16( 0 );
|
tag.WriteU8( 1 ); // no shapes
|
||||||
|
|
||||||
/*
|
/*
|
||||||
file->WriteBig( shape->lineDraws.Num() );
|
file->WriteBig( shape->lineDraws.Num() );
|
||||||
|
@ -361,7 +369,7 @@ void idSWF::WriteSWF( const char* swfFilename, const byte* atlasImageRGBA, int a
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
file.WriteTagHeader( Tag_DefineShape3, tag->Length() );
|
file.WriteTagHeader( Tag_DefineShape3, tagMem->Length() );
|
||||||
file.Write( tagMem->GetDataPtr(), tagMem->Length() );
|
file.Write( tagMem->GetDataPtr(), tagMem->Length() );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,20 +46,7 @@ bool idSWF::isMouseInClientArea = false;
|
||||||
|
|
||||||
extern idCVar in_useJoystick;
|
extern idCVar in_useJoystick;
|
||||||
|
|
||||||
// RB begin
|
|
||||||
int swfRect_t::BitCount() const
|
|
||||||
{
|
|
||||||
int num = 0;
|
|
||||||
|
|
||||||
num = idFile_SWF::EnlargeBitCountS( FLOAT2SWFTWIP( tl.x ), num );
|
|
||||||
num = idFile_SWF::EnlargeBitCountS( FLOAT2SWFTWIP( tl.y ), num );
|
|
||||||
num = idFile_SWF::EnlargeBitCountS( FLOAT2SWFTWIP( br.x ), num );
|
|
||||||
num = idFile_SWF::EnlargeBitCountS( FLOAT2SWFTWIP( br.x ), num );
|
|
||||||
|
|
||||||
return num;
|
|
||||||
}
|
|
||||||
|
|
||||||
// RB end
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
===================
|
===================
|
||||||
|
|
|
@ -67,10 +67,6 @@ struct swfRect_t
|
||||||
swfRect_t();
|
swfRect_t();
|
||||||
idVec2 tl;
|
idVec2 tl;
|
||||||
idVec2 br;
|
idVec2 br;
|
||||||
|
|
||||||
// RB begin
|
|
||||||
int BitCount() const;
|
|
||||||
// RB end
|
|
||||||
};
|
};
|
||||||
struct swfMatrix_t
|
struct swfMatrix_t
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue