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