]> git.rm.cloudns.org Git - xonotic/xonotic.git/commitdiff
add a sRGB conversion tool for .map files (for _color keys)
authorRudolf Polzer <divVerent@xonotic.org>
Tue, 8 Nov 2011 10:17:11 +0000 (11:17 +0100)
committerRudolf Polzer <divVerent@xonotic.org>
Tue, 8 Nov 2011 10:17:11 +0000 (11:17 +0100)
misc/tools/map-sRGBconvert.pl [new file with mode: 0644]

diff --git a/misc/tools/map-sRGBconvert.pl b/misc/tools/map-sRGBconvert.pl
new file mode 100644 (file)
index 0000000..5a928b9
--- /dev/null
@@ -0,0 +1,69 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+my @defaultkeys = qw/_color _floodlight/;
+
+my @colorkeys = @ARGV;
+@colorkeys = '+'
+       if @colorkeys == 0;
+@colorkeys = map { $_ eq '-' ? map { "-$_" } @defaultkeys : $_ eq '+' ? @defaultkeys : $_ } @colorkeys;
+print STDERR "Remapping keys: @colorkeys\n";
+
+sub Image_LinearFloatFromsRGBFloat($) {($_[0] <= 0.04045) ? $_[0] * (1.0 / 12.92) : (($_[0] + 0.055)*(1.0/1.055)) ** 2.4}
+sub Image_sRGBFloatFromLinearFloat($) {($_[0] < 0.0031308) ? $_[0] * 12.92 : 1.055 * ($_[0] ** (1.0/2.4)) - 0.055}
+
+while(<STDIN>)
+{
+       chomp;
+       my $line = $_;
+       if(/^\s*"([^"]*)"\s+"\s*([-+0-9.]+)\s*([-+0-9.]+)\s*([-+0-9.]+)\s*"\s*$/i)
+       {
+               my $key = $1;
+               my $r = $2;
+               my $g = $3;
+               my $b = $4;
+               if(grep { /^\+?\Q$key\E$/i } @colorkeys)
+               {
+                       $r = Image_LinearFloatFromsRGBFloat $r;
+                       $g = Image_LinearFloatFromsRGBFloat $g;
+                       $b = Image_LinearFloatFromsRGBFloat $b;
+                       $line = "\"$key\" \"$r $g $b\"";
+               }
+               elsif(grep { /^-\Q$key\E$/i } @colorkeys)
+               {
+                       $r = Image_sRGBFloatFromLinearFloat $r;
+                       $g = Image_sRGBFloatFromLinearFloat $g;
+                       $b = Image_sRGBFloatFromLinearFloat $b;
+                       $line = "\"$key\" \"$r $g $b\"";
+               }
+       }
+       elsif(/^\s*"_floodlight"\s+"\s*([-+0-9.]+)\s*([-+0-9.]+)\s*([-+0-9.]+)\s*(.*)"\s*$/i)
+       {
+               my $r = $1;
+               my $g = $2;
+               my $b = $3;
+               my $rest = $4;
+               if(grep { /^\+?_floodlight$/i } @colorkeys)
+               {
+                       $r = 255.0*Image_LinearFloatFromsRGBFloat($r/255.0);
+                       $g = 255.0*Image_LinearFloatFromsRGBFloat($g/255.0);
+                       $b = 255.0*Image_LinearFloatFromsRGBFloat($b/255.0);
+                       $line = "\"_floodlight\" \"$r $g $b$rest\"";
+               }
+               elsif(grep { /^-_floodlight$/i } @colorkeys)
+               {
+                       $r = 255.0*Image_sRGBFloatFromLinearFloat($r/255.0);
+                       $g = 255.0*Image_sRGBFloatFromLinearFloat($g/255.0);
+                       $b = 255.0*Image_sRGBFloatFromLinearFloat($b/255.0);
+                       $line = "\"_floodlight\" \"$r $g $b$rest\"";
+               }
+       }
+       if($line ne $_)
+       {
+               print STDERR "Converting: $_ -> $line\n";
+               $_ = $line;
+       }
+       print "$_\n";
+}