Last change
on this file was
e16e8f2,
checked in by Edwin Eefting <edwin@datux.nl>, 3 years ago
|
bootstuff
|
-
Property mode set to
100644
|
File size:
984 bytes
|
Rev | Line | |
---|
[e16e8f2] | 1 | #!/usr/bin/perl |
---|
| 2 | # |
---|
| 3 | # Produce gamma-correction tables for alpha blending, assuming sRGB space. |
---|
| 4 | # |
---|
| 5 | |
---|
| 6 | sub srgb_to_linear($) |
---|
| 7 | { |
---|
| 8 | my($s) = @_; |
---|
| 9 | |
---|
| 10 | if ($s <= 10) { |
---|
| 11 | return $s/(255*12.92); |
---|
| 12 | } else { |
---|
| 13 | return (($s+14.025)/269.025)**2.4; |
---|
| 14 | } |
---|
| 15 | } |
---|
| 16 | |
---|
| 17 | sub linear_to_srgb($) |
---|
| 18 | { |
---|
| 19 | my($l) = @_; |
---|
| 20 | my $s; |
---|
| 21 | |
---|
| 22 | if ($l <= 0.00304) { |
---|
| 23 | $s = 12.92*$l; |
---|
| 24 | } else { |
---|
| 25 | $s = 1.055*$l**(1.0/2.4) - 0.055; |
---|
| 26 | } |
---|
| 27 | |
---|
| 28 | return int($s*255+0.5); |
---|
| 29 | } |
---|
| 30 | |
---|
| 31 | # Header |
---|
| 32 | print "#include <inttypes.h>\n\n"; |
---|
| 33 | |
---|
| 34 | # |
---|
| 35 | # Table 1: convert 8-bit sRGB values to 16-bit linear values |
---|
| 36 | # |
---|
| 37 | |
---|
| 38 | print "const uint16_t __vesacon_srgb_to_linear[256] = {\n"; |
---|
| 39 | for ($i = 0; $i <= 255; $i++) { |
---|
| 40 | printf "\t%5d,\n", int(srgb_to_linear($i)*65535+0.5); |
---|
| 41 | } |
---|
| 42 | print "};\n\n"; |
---|
| 43 | |
---|
| 44 | # |
---|
| 45 | # Table 2: convert linear values in the range [0, 65535*255], |
---|
| 46 | # shifted right by 12 bits, to sRGB |
---|
| 47 | # |
---|
| 48 | |
---|
| 49 | print "const uint8_t __vesacon_linear_to_srgb[4080] = {\n"; |
---|
| 50 | for ($i = 0; $i <= 4079; $i++) { |
---|
| 51 | printf "\t%3d,\n", linear_to_srgb(($i+0.5)/4079.937744); |
---|
| 52 | } |
---|
| 53 | print "};\n\n"; |
---|
Note: See
TracBrowser
for help on using the repository browser.