Texture converter, DevIL: ABGR DDS support.

Textures: converted ARGB to ABGR.
Misc: warning fixes, etc.

This was SVN commit r3631.
This commit is contained in:
Ykkrosh 2006-03-14 21:29:19 +00:00
parent 1c1bfcbb53
commit ed38414b41
29 changed files with 228 additions and 34 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -199,6 +199,11 @@ void CObjectManager::GetAllObjectNames(std::vector<CStr>& names)
VFSUtil::EnumDirEnts("art/actors/", VFSUtil::RECURSIVE, "*.xml",
GetObjectName_ThunkCb, &names);
}
void CObjectManager::GetPropObjectNames(std::vector<CStr>& names)
{
VFSUtil::EnumDirEnts("art/actors/props/", VFSUtil::RECURSIVE, "*.xml",
GetObjectName_ThunkCb, &names);
}
struct CObjectThing_Entity : public CObjectThing
{

View File

@ -73,6 +73,7 @@ public:
// Get all names, quite slowly. (Intended only for ScEd.)
void GetAllObjectNames(std::vector<CStr>& names);
void GetPropObjectNames(std::vector<CStr>& names);
//CBaseEntity* m_SelectedEntity;
void SetSelectedEntity(CBaseEntity* thing);

View File

@ -38,7 +38,7 @@ public:
float m_TWaterTrans;
float m_SWaterScrollCounter;
float m_TWaterScrollCounter;
float m_WaterTexTimer;
double m_WaterTexTimer;
public:
WaterManager();

View File

@ -1688,4 +1688,4 @@ jsval CEntity::SetRun( JSContext* cx, uintN argc, jsval* argv )
jsval CEntity::GetRunState( JSContext* UNUSED(cx), uintN UNUSED(argc), jsval* UNUSED(argv) )
{
return m_isRunning;
}
}

View File

@ -4,6 +4,8 @@
template<typename T> class DeltaArray2D
{
public:
virtual ~DeltaArray2D() {}
T get(int x, int y);
void set(int x, int y, const T& val);

View File

@ -60,7 +60,7 @@ MESSAGEHANDLER(Scroll)
CVector3D origin, dir;
float x, y;
msg->pos.GetScreenSpace(x, y);
g_Game->GetView()->GetCamera()->BuildCameraRay(x, y, origin, dir);
g_Game->GetView()->GetCamera()->BuildCameraRay((int)x, (int)y, origin, dir);
dir *= targetDistance;
camera.Translate(targetPos - dir - origin);
g_Game->GetView()->GetCamera()->UpdateFrustum();

View File

@ -115,7 +115,7 @@ BEGIN_COMMAND(AlterElevation)
// TODO: proper variable raise amount (store floats in terrain delta array?)
float b = g_CurrentBrush.Get(dx, dy);
if (b)
m_TerrainDelta.RaiseVertex(x0+dx, y0+dy, amount*b);
m_TerrainDelta.RaiseVertex(x0+dx, y0+dy, (int)(amount*b));
}
g_Game->GetWorld()->GetTerrain()->MakeDirty(x0, y0, x0+g_CurrentBrush.m_W, y0+g_CurrentBrush.m_H, RENDERDATA_UPDATE_VERTICES);

View File

@ -316,7 +316,7 @@ QUERYHANDLER(SelectObject)
msg->pos.GetScreenSpace(x, y);
CVector3D rayorigin, raydir;
g_Game->GetView()->GetCamera()->BuildCameraRay(x, y, rayorigin, raydir);
g_Game->GetView()->GetCamera()->BuildCameraRay((int)x, (int)y, rayorigin, raydir);
CUnit* target = g_UnitMan.PickUnit(rayorigin, raydir);

132
source/tools/dds/DDS.pm Normal file
View File

@ -0,0 +1,132 @@
use strict;
use warnings;
package DDS;
sub new
{
my $proto = shift;
my $class = ref($proto) || $proto;
my $fh;
if (ref $_[0])
{
$fh = $_[0];
}
else
{
open $fh, '<', $_[0] or die "Cannot open $_[0]";
binmode $fh;
}
my %dds;
$dds{dwMagic} = pack L => read_DWORD($fh);
for (qw(Size Flags Height Width PitchOrLinearSize Depth MipMapCount))
{
$dds{"dw$_"} = read_DWORD($fh);
}
read_DWORD($fh) for 1..11; # dwReserved1
$dds{dwFlags} = expand_flags($dds{dwFlags}, 'sd');
$dds{ddpfPixelFormat} = read_DDPIXELFORMAT($fh);
$dds{ddsCaps} = read_DDCAPS2($fh);
read_DWORD($fh);# dwReserved2
bless \%dds, $class;
}
sub getType
{
my ($self) = @_;
if (grep $_ eq 'DDPF_RGB', @{$self->{ddpfPixelFormat}{dwFlags}})
{
return pack N => (
((unpack L => 'RRRR') & $self->{ddpfPixelFormat}{dwRBitMask}) |
((unpack L => 'GGGG') & $self->{ddpfPixelFormat}{dwGBitMask}) |
((unpack L => 'BBBB') & $self->{ddpfPixelFormat}{dwBBitMask}) |
((unpack L => 'AAAA') & $self->{ddpfPixelFormat}{dwRGBAlphaBitMask})
);
}
elsif (grep $_ eq 'DDPF_FOURCC', @{$self->{ddpfPixelFormat}{dwFlags}})
{
return $self->{ddpfPixelFormat}{dwFourCC}
}
else
{
die "Unknown type";
}
}
sub read_DWORD
{
die "Failed to read DWORD" unless (read $_[0], my $b, 4) == 4;
return unpack L => $b;
}
sub read_DDPIXELFORMAT
{
my $r = { map +("dw$_" => read_DWORD($_[0])),
qw(Size Flags FourCC RGBBitCount RBitMask GBitMask BBitMask RGBAlphaBitMask) };
$r->{dwFourCC} = pack L => $r->{dwFourCC};
$r->{dwFlags} = expand_flags($r->{dwFlags}, 'pf');
return $r;
}
sub read_DDCAPS2
{
my $r = { map +("dw$_" => read_DWORD($_[0])),
qw(Caps1 Caps2) };
$r->{dwCaps1} = expand_flags($r->{dwCaps1}, 'cap1');
$r->{dwCaps2} = expand_flags($r->{dwCaps2}, 'cap2');
return $r;
}
my %flag_names = (
sd => {
DDSD_CAPS => 0x00000001,
DDSD_HEIGHT => 0x00000002,
DDSD_WIDTH => 0x00000004,
DDSD_PITCH => 0x00000008,
DDSD_PIXELFORMAT => 0x00001000,
DDSD_MIPMAPCOUNT => 0x00020000,
DDSD_LINEARSIZE => 0x00080000,
DDSD_DEPTH => 0x00800000,
},
pf => {
DDPF_ALPHAPIXELS => 0x00000001,
DDPF_FOURCC => 0x00000004,
DDPF_RGB => 0x00000040,
},
cap1 => {
DDSCAPS_COMPLEX => 0x00000008,
DDSCAPS_TEXTURE => 0x00001000,
DDSCAPS_MIPMAP => 0x00400000,
},
cap2 => {
DDSCAPS2_CUBEMAP => 0x00000200,
DDSCAPS2_CUBEMAP_POSITIVEX => 0x00000400,
DDSCAPS2_CUBEMAP_NEGATIVEX => 0x00000800,
DDSCAPS2_CUBEMAP_POSITIVEY => 0x00001000,
DDSCAPS2_CUBEMAP_NEGATIVEY => 0x00002000,
DDSCAPS2_CUBEMAP_POSITIVEZ => 0x00004000,
DDSCAPS2_CUBEMAP_NEGATIVEZ => 0x00008000,
DDSCAPS2_VOLUME => 0x00200000,
},
);
sub expand_flags
{
my ($n, $name) = @_;
return [ grep $flag_names{$name}{$_} & $n, keys %{$flag_names{$name}} ];
}
1;

View File

@ -0,0 +1,47 @@
use DDS;
use Data::Dumper;
use File::Find;
my @dds;
find({
wanted => sub {
if (/(\.svn|CVS)$/)
{
$File::Find::prune = 1;
}
else
{
push @dds, $File::Find::name if /\.dds$/;
}
},
no_chdir => 1,
}, "../../../binaries/data/mods/official/art/textures/");
=pod
for my $f (@dds)
{
my $dds = new DDS($f);
print "$f\t", $dds->getType(), "\n";
}
=cut
#=pod
my @c;
for my $f (@dds)
{
my $dds = new DDS($f);
if ($dds->getType() eq 'ARGB')
{
$f =~ /(.*).dds/ or die;
push @c, $1;
}
}
print "textureconv -tga ".(join ' ', map "$_.dds", @c)."\n";
print "textureconv -abgr ".(join ' ', map "$_.tga", @c)."\n";
=cut
=pod
my $dds = new DDS("../../../binaries/data/mods/official/art/textures/ui/session/status_pane.dds");
print Dumper $dds;
=cut

View File

@ -33,7 +33,7 @@
const TCHAR* msgbox_title = _T("Wildfire Games - Texture Converter");
enum OutputFileFormat { DXTn, DXT1, DXT3, DXT5, BMP, TGA, BEST };
enum OutputFileFormat { DXTn, DXT1, DXT3, DXT5, ABGR, BMP, TGA, BEST };
enum trool { tr_false, tr_true, tr_maybe };
struct ConversionSettings
{
@ -132,6 +132,8 @@ void process_args(int argc, TCHAR** argv)
settings.top().fmt = DXT3;
CASE("-dxt5")
settings.top().fmt = DXT5;
CASE("-abgr")
settings.top().fmt = ABGR;
CASE("-bmp")
settings.top().fmt = BMP;
CASE("-tga")
@ -183,6 +185,7 @@ void convert(std::tstring filename, ConversionSettings& settings)
case DXT1:
case DXT3:
case DXT5:
case ABGR:
extn = _T(".dds");
break;
case BMP:
@ -325,6 +328,9 @@ void convert(std::tstring filename, ConversionSettings& settings)
case DXT5:
ilSetInteger(IL_DXTC_FORMAT, IL_DXT5);
break;
case ABGR:
ilSetInteger(IL_DXTC_FORMAT, IL_DXT_NO_COMP);
break;
}
if (settings.mipmaps)

View File

@ -23,14 +23,14 @@ Global
{FFB317CC-4B72-4CA5-9CB8-86A8A0E8382E}.Debug.Build.0 = Debug|Win32
{FFB317CC-4B72-4CA5-9CB8-86A8A0E8382E}.Release.ActiveCfg = Release|Win32
{FFB317CC-4B72-4CA5-9CB8-86A8A0E8382E}.Release.Build.0 = Release|Win32
{76BBC723-9716-451F-92D9-A7B65F3BA85F}.Debug.ActiveCfg = Debug|Win32
{76BBC723-9716-451F-92D9-A7B65F3BA85F}.Debug.Build.0 = Debug|Win32
{76BBC723-9716-451F-92D9-A7B65F3BA85F}.Release.ActiveCfg = Release|Win32
{76BBC723-9716-451F-92D9-A7B65F3BA85F}.Release.Build.0 = Release|Win32
{984C31F1-11EB-4D44-ACF4-B3F573E1F08E}.Debug.ActiveCfg = Debug|Win32
{984C31F1-11EB-4D44-ACF4-B3F573E1F08E}.Debug.Build.0 = Debug|Win32
{984C31F1-11EB-4D44-ACF4-B3F573E1F08E}.Release.ActiveCfg = Release|Win32
{984C31F1-11EB-4D44-ACF4-B3F573E1F08E}.Release.Build.0 = Release|Win32
{76BBC723-9716-451F-92D9-A7B65F3BA85F}.Debug.ActiveCfg = Debug Unicode|Win32
{76BBC723-9716-451F-92D9-A7B65F3BA85F}.Debug.Build.0 = Debug Unicode|Win32
{76BBC723-9716-451F-92D9-A7B65F3BA85F}.Release.ActiveCfg = Release Unicode|Win32
{76BBC723-9716-451F-92D9-A7B65F3BA85F}.Release.Build.0 = Release Unicode|Win32
{984C31F1-11EB-4D44-ACF4-B3F573E1F08E}.Debug.ActiveCfg = Debug Unicode|Win32
{984C31F1-11EB-4D44-ACF4-B3F573E1F08E}.Debug.Build.0 = Debug Unicode|Win32
{984C31F1-11EB-4D44-ACF4-B3F573E1F08E}.Release.ActiveCfg = Release Unicode|Win32
{984C31F1-11EB-4D44-ACF4-B3F573E1F08E}.Release.Build.0 = Release Unicode|Win32
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
EndGlobalSection

View File

@ -4,6 +4,7 @@
Version="7.10"
Name="textureconv"
ProjectGUID="{FFB317CC-4B72-4CA5-9CB8-86A8A0E8382E}"
RootNamespace="textureconv"
Keyword="Win32Proj">
<Platforms>
<Platform
@ -19,7 +20,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="..\..\..\libraries\devil\src\include"
AdditionalIncludeDirectories="..\..\..\libraries\devil\include"
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
MinimalRebuild="TRUE"
BasicRuntimeChecks="3"
@ -35,7 +36,7 @@
AdditionalDependencies="DevIL_DBG.lib DevILU_DBG.lib"
OutputFile="$(OutDir)/textureconv.exe"
LinkIncremental="2"
AdditionalLibraryDirectories="&quot;..\..\..\libraries\devil\src\lib&quot;"
AdditionalLibraryDirectories="&quot;..\..\..\libraries\devil\lib&quot;"
GenerateDebugInformation="TRUE"
ProgramDatabaseFile="$(OutDir)/textureconv.pdb"
SubSystem="0"
@ -71,7 +72,7 @@
WholeProgramOptimization="FALSE">
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories="..\..\..\libraries\devil\src\include"
AdditionalIncludeDirectories="..\..\..\libraries\devil\include"
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
RuntimeLibrary="2"
UsePrecompiledHeader="0"
@ -85,7 +86,7 @@
AdditionalDependencies="DevIL.lib DevILU.lib"
OutputFile="$(OutDir)/textureconv.exe"
LinkIncremental="1"
AdditionalLibraryDirectories="&quot;..\..\..\libraries\devil\src\lib&quot;;&quot;e:\icc81\compiler80\ia32\lib&quot;"
AdditionalLibraryDirectories="&quot;..\..\..\libraries\devil\lib&quot;"
GenerateDebugInformation="TRUE"
SubSystem="1"
OptimizeReferences="2"