diff options
author | Vito Caputo <vcaputo@pengaru.com> | 2017-08-08 10:40:14 -0700 |
---|---|---|
committer | Vito Caputo <vcaputo@pengaru.com> | 2019-11-13 02:17:54 -0800 |
commit | 8acb27a788f24f85f38cf4ca45f2c3124128fa26 (patch) | |
tree | 7b747bb9a50bf3f804ac11e03149dd347839f6fc /src/libs/ray/ray_gamma.c | |
parent | 448362dcd54c1275ec80d16bcb4d88732f6912f2 (diff) |
ray: add rudimentary gamma correction
color banding has been quite visible, and somewhat expected with a
direct conversion from the linear float color space to the 8-bit
integral rgb color components.
A simple lookup table is used here to non-linearly map the values, table
generation is taken from Greg Ward's REAL PIXELS gem in Graphics Gems II.
Diffstat (limited to 'src/libs/ray/ray_gamma.c')
-rw-r--r-- | src/libs/ray/ray_gamma.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/libs/ray/ray_gamma.c b/src/libs/ray/ray_gamma.c new file mode 100644 index 0000000..21a9afc --- /dev/null +++ b/src/libs/ray/ray_gamma.c @@ -0,0 +1,15 @@ +#include <math.h> + +#include "ray_gamma.h" + +void ray_gamma_prepare(float gamma, ray_gamma_t *res_gamma) +{ + if (res_gamma->gamma == gamma) + return; + + /* This is from graphics gems 2 "REAL PIXELS" */ + for (unsigned i = 0; i < 1024; i++) + res_gamma->table[i] = 256.0f * powf((((float)i + .5f) / 1024.0f), 1.0f/gamma); + + res_gamma->gamma = gamma; +} |