X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fdarkplaces.git;a=blobdiff_plain;f=fogeval.pl;h=fe4d0523f5a8dd1fe7cd95ee9499dc18f05b8fe3;hp=a3633203fbcab438ba6b9edf79934589c3658c62;hb=33fb1d11372ce3b1beab0407015535247d6bff14;hpb=3b87da444fad9c737068a564a69efc4d11240a4a diff --git a/fogeval.pl b/fogeval.pl index a3633203..fe4d0523 100644 --- a/fogeval.pl +++ b/fogeval.pl @@ -31,27 +31,48 @@ sub evalblend($$$$$$) sub isinvariant($$$$) { my ($fs, $fd, $s, $sa) = @_; - my ($d, $da) = (0.7823, 0.3289); + my ($d, $da) = (rand, rand); my ($out, $outa) = evalblend $fs, $fd, $s, $sa, $d, $da; - return abs($out - $d) < 0.001 && abs($outa - $da) < 0.001; + return abs($out - $d) < 0.0001 && abs($outa - $da) < 0.0001; } sub isfogfriendly($$$$$) { my ($fs, $fd, $s, $sa, $foghack) = @_; - my ($d, $da) = (0.7823, 0.3289); - my $fogamount = 0.3237; - my $fogcolor = 0.8612; + my ($d, $da) = (rand, rand); + my $fogamount = rand; + my $fogcolor = rand; # compare: # 1. blend(fog(s), sa, fog(d), da) # 2. fog(blend(s, sa, d, da)) - my ($out1, $out1a) = evalblend $fs, $fd, $s + ((defined $foghack ? $foghack < 0 ? $s : $foghack : $fogcolor) - $s) * $fogamount, $sa, $d + ($fogcolor - $d) * $fogamount, $da; + my ($out1, $out1a) = evalblend $fs, $fd, $s + ((defined $foghack ? $foghack eq 'ALPHA' ? $fogcolor*$sa : $foghack : $fogcolor) - $s) * $fogamount, $sa, $d + ($fogcolor - $d) * $fogamount, $da; my ($out2, $out2a) = evalblend $fs, $fd, $s, $sa, $d, $da; $out2 = $out2 + ($fogcolor - $out2) * $fogamount; - return abs($out1 - $out2) < 0.001 && abs($out1a - $out2a) < 0.001; + return abs($out1 - $out2) < 0.0001 && abs($out1a - $out2a) < 0.0001; +} + +use Carp; +sub decide(&) +{ + my ($sub) = @_; + my $good = 0; + my $bad = 0; + for(;;) + { + for(1..200) + { + my $r = $sub->(); + ++$good if $r; + ++$bad if not $r; + } + #print STDERR "decide: $good vs $bad\n"; + return 1 if $good > $bad + 150; + return 0 if $bad > $good + 150; + warn "No clear decision, continuing to test ($good : $bad)"; + } } #die isfogfriendly $blendfuncs{GL_ONE}, $blendfuncs{GL_ONE}, 1, 0, 0; @@ -65,9 +86,9 @@ sub willitblend($$) { for my $sa(0, 0.25, 0.5, 0.75, 1) { - if(isinvariant($fs, $fd, $s, $sa)) + if(decide { isinvariant($fs, $fd, $s, $sa); }) { - if(!isinvariant($fs, $fd, 0, $sa)) + if(!decide { isinvariant($fs, $fd, 0, $sa); }) { return 0; # no colormod possible } @@ -82,13 +103,13 @@ sub willitfog($$) my ($fs, $fd) = @_; FOGHACK: - for my $foghack(undef, 0, 1, -1) + for my $foghack(undef, 0, 'ALPHA') { for my $s(0, 0.25, 0.5, 0.75, 1) { for my $sa(0, 0.25, 0.5, 0.75, 1) { - if(!isfogfriendly($fs, $fd, $s, $sa, $foghack)) + if(!decide { isfogfriendly($fs, $fd, $s, $sa, $foghack); }) { next FOGHACK; } @@ -104,6 +125,7 @@ for my $s(sort keys %blendfuncs) { for my $d(sort keys %blendfuncs) { + #print STDERR "$s $d\n"; if(!willitblend $blendfuncs{$s}, $blendfuncs{$d}) { print "\tif(src == $s && dst == $d) r &= ~BLENDFUNC_ALLOWS_COLORMOD;\n";