mirror of
https://github.com/id-Software/DOOM-3-BFG.git
synced 2025-03-15 07:00:58 +00:00
Added swf_exportAtlas
This commit is contained in:
parent
4502588338
commit
9c58fdf6f9
2 changed files with 107 additions and 1 deletions
|
@ -29,12 +29,14 @@ If you have questions concerning this license or the applicable additional terms
|
|||
#pragma hdrstop
|
||||
#include "precompiled.h"
|
||||
#include "../renderer/Image.h"
|
||||
#include "../renderer/DXT//DXTCodec.h"
|
||||
|
||||
#pragma warning(disable: 4355) // 'this' : used in base member initializer list
|
||||
|
||||
idCVar swf_loadBinary( "swf_loadBinary", "1", CVAR_INTEGER, "used to set whether to load binary swf from generated" );
|
||||
// RB begin
|
||||
idCVar swf_exportXML( "swf_exportXML", "1", CVAR_INTEGER, "" );
|
||||
idCVar swf_exportAtlas( "swf_exportAtlas", "1", CVAR_INTEGER, "" );
|
||||
// RB end
|
||||
|
||||
int idSWF::mouseX = -1;
|
||||
|
@ -157,12 +159,114 @@ idSWF::idSWF( const char* filename_, idSoundWorld* soundWorld_ )
|
|||
|
||||
WriteXML( xmlFileName );
|
||||
}
|
||||
// RB end
|
||||
|
||||
idStr atlasFileName = binaryFileName;
|
||||
atlasFileName.SetFileExtension( ".tga" );
|
||||
atlasMaterial = declManager->FindMaterial( atlasFileName );
|
||||
|
||||
if( swf_exportAtlas.GetBool() )
|
||||
{
|
||||
idStrStatic< MAX_OSPATH > generatedName = atlasFileName;
|
||||
generatedName.StripFileExtension();
|
||||
idImage::GetGeneratedName( generatedName, TD_DEFAULT, CF_2D );
|
||||
|
||||
idBinaryImage im( generatedName );
|
||||
ID_TIME_T binaryFileTime = im.LoadFromGeneratedFile( FILE_NOT_FOUND_TIMESTAMP );
|
||||
|
||||
if( binaryFileTime != FILE_NOT_FOUND_TIMESTAMP )
|
||||
{
|
||||
const bimageFile_t& imgHeader = im.GetFileHeader();
|
||||
const bimageImage_t& img = im.GetImageHeader( 0 );
|
||||
|
||||
const byte* data = im.GetImageData( 0 );
|
||||
|
||||
//( img.level, 0, 0, img.destZ, img.width, img.height, data );
|
||||
|
||||
idTempArray<byte> rgba( img.width * img.height * 4 );
|
||||
memset( rgba.Ptr(), 255, rgba.Size() );
|
||||
|
||||
if( imgHeader.format == FMT_DXT1 )
|
||||
{
|
||||
idDxtDecoder dxt;
|
||||
dxt.DecompressImageDXT1( data, rgba.Ptr(), img.width, img.height );
|
||||
}
|
||||
else if( imgHeader.format == FMT_DXT5 )
|
||||
{
|
||||
idDxtDecoder dxt;
|
||||
|
||||
if( imgHeader.colorFormat == CFM_NORMAL_DXT5 )
|
||||
{
|
||||
dxt.DecompressNormalMapDXT5( data, rgba.Ptr(), img.width, img.height );
|
||||
}
|
||||
else if( imgHeader.colorFormat == CFM_YCOCG_DXT5 )
|
||||
{
|
||||
dxt.DecompressYCoCgDXT5( data, rgba.Ptr(), img.width, img.height );
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
dxt.DecompressImageDXT5( data, rgba.Ptr(), img.width, img.height );
|
||||
}
|
||||
}
|
||||
else if( imgHeader.format == FMT_LUM8 || imgHeader.format == FMT_INT8 )
|
||||
{
|
||||
// LUM8 and INT8 just read the red channel
|
||||
byte* pic = rgba.Ptr();
|
||||
for( int i = 0; i < img.dataSize; i++ )
|
||||
{
|
||||
pic[ i * 4 ] = data[ i ];
|
||||
}
|
||||
}
|
||||
else if( imgHeader.format == FMT_ALPHA )
|
||||
{
|
||||
// ALPHA reads the alpha channel
|
||||
byte* pic = rgba.Ptr();
|
||||
for( int i = 0; i < img.dataSize; i++ )
|
||||
{
|
||||
pic[ i * 4 + 3 ] = data[ i ];
|
||||
}
|
||||
}
|
||||
else if( imgHeader.format == FMT_L8A8 )
|
||||
{
|
||||
// L8A8 reads the alpha and red channels
|
||||
byte* pic = rgba.Ptr();
|
||||
for( int i = 0; i < img.dataSize / 2; i++ )
|
||||
{
|
||||
pic[ i * 4 + 0 ] = data[ i * 2 + 0 ];
|
||||
pic[ i * 4 + 3 ] = data[ i * 2 + 1 ];
|
||||
}
|
||||
}
|
||||
else if( imgHeader.format == FMT_RGB565 )
|
||||
{
|
||||
// FIXME
|
||||
/*
|
||||
byte* pic = rgba.Ptr();
|
||||
for( int i = 0; i < img.dataSize / 2; i++ )
|
||||
{
|
||||
unsigned short color = ( ( pic[ i * 4 + 0 ] >> 3 ) << 11 ) | ( ( pic[ i * 4 + 1 ] >> 2 ) << 5 ) | ( pic[ i * 4 + 2 ] >> 3 );
|
||||
img.data[ i * 2 + 0 ] = ( color >> 8 ) & 0xFF;
|
||||
img.data[ i * 2 + 1 ] = color & 0xFF;
|
||||
}
|
||||
*/
|
||||
}
|
||||
else
|
||||
{
|
||||
byte* pic = rgba.Ptr();
|
||||
for( int i = 0; i < img.dataSize; i++ )
|
||||
{
|
||||
pic[ i ] = data[ i ];
|
||||
}
|
||||
}
|
||||
|
||||
idStr atlasFileNameExport = atlasFileName;
|
||||
atlasFileNameExport.SetFileExtension( ".png" );
|
||||
|
||||
R_WritePNG( atlasFileNameExport, rgba.Ptr(), 4, img.width, img.height, true, "fs_basepath" );
|
||||
}
|
||||
|
||||
}
|
||||
// RB end
|
||||
|
||||
globals = idSWFScriptObject::Alloc();
|
||||
globals->Set( "_global", globals );
|
||||
|
||||
|
|
|
@ -321,6 +321,7 @@ void idSWFSprite::WriteXML( idFile* f, const char* indentPrefix, int characterID
|
|||
}
|
||||
|
||||
|
||||
#if 1
|
||||
idBase64 base64;
|
||||
|
||||
for( int i = 0; i < commands.Num(); i++ )
|
||||
|
@ -366,6 +367,7 @@ void idSWFSprite::WriteXML( idFile* f, const char* indentPrefix, int characterID
|
|||
|
||||
//f->WriteFloatString( "%s\t<DoInitAction streamLength=\"%i\">%s</DoInitAction>\n", indentPrefix, doInitActions[i].Length(), doInitActions[i].Ptr() );
|
||||
}
|
||||
#endif
|
||||
|
||||
f->WriteFloatString( "%s</Sprite>\n", indentPrefix );
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue