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
|
Line | |
---|
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.