r5716 - trunk/misc/tools
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Mon Feb 2 03:09:19 EST 2009
Author: div0
Date: 2009-02-02 03:09:14 -0500 (Mon, 02 Feb 2009)
New Revision: 5716
Modified:
trunk/misc/tools/shader-checksums.pl
Log:
shader checksum script improved
Modified: trunk/misc/tools/shader-checksums.pl
===================================================================
--- trunk/misc/tools/shader-checksums.pl 2009-02-01 16:38:53 UTC (rev 5715)
+++ trunk/misc/tools/shader-checksums.pl 2009-02-02 08:09:14 UTC (rev 5716)
@@ -4,6 +4,18 @@
use warnings;
use Digest::MD5;
+sub normalize_path($)
+{
+ my ($p) = @_;
+ $p =~ s/\\/\//g;
+ $p =~ s/(?:\.jpg|\.png|\.tga)$//gi;
+ $p = lc $p;
+ return $p;
+}
+
+my $find_texture_names;
+$find_texture_names = grep { /^-t$/ } @ARGV;
+
my $shadertext = "";
my $level = 0;
my $curshader;
@@ -23,24 +35,68 @@
if($line[0] eq '{')
{
+ die "{ line contains other stuff"
+ unless @line == 1;
+ die "{ line without shader name"
+ unless defined $curshader;
+ die "{ line in level $level"
+ if $level >= 2;
++$level;
}
elsif($line[0] eq '}')
{
+ die "} line contains other stuff"
+ unless @line == 1;
+ die "} line without shader name"
+ unless defined $curshader;
+ die "{ line in level $level"
+ if $level <= 0;
--$level;
if($level <= 0)
{
$level = 0;
- if(defined $curshader)
+ printf "%s %s\n", Digest::MD5::md5_hex($shadertext), $curshader;
+
+ if($find_texture_names)
{
- printf "%s %s\n", Digest::MD5::md5_hex($shadertext), $curshader;
+ # find out possibly loaded textures
+ my @maps = ($shadertext =~ /^map ([^\$].*)$/gim);
+ for($shadertext =~ /^animmap \S+ (.*)$/gim)
+ {
+ push @maps, split / /, $_;
+ }
+ for($shadertext =~ /^skyparms (.*)$/gim)
+ {
+ for(split / /, $_)
+ {
+ next if $_ eq "-";
+ push @maps, "$_"."_lf";
+ push @maps, "$_"."_ft";
+ push @maps, "$_"."_rt";
+ push @maps, "$_"."_bk";
+ push @maps, "$_"."_up";
+ push @maps, "$_"."_dn";
+ }
+ }
+ @maps = ($curshader)
+ if @maps == 0;
+ printf "* %s %s\n", $_, $curshader
+ for map { normalize_path $_ } @maps;
}
+
$curshader = undef;
}
}
elsif($level == 0)
{
- $curshader = $line[0];
+ die "shader name already set"
+ if defined $curshader;
+ $curshader = normalize_path $line[0];
$shadertext = "";
}
}
+
+if($level != 0)
+{
+ die "missing } line";
+}
More information about the nexuiz-commits
mailing list