From 8acb27a788f24f85f38cf4ca45f2c3124128fa26 Mon Sep 17 00:00:00 2001 From: Vito Caputo Date: Tue, 8 Aug 2017 10:40:14 -0700 Subject: 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. --- src/libs/ray/ray_gamma.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 src/libs/ray/ray_gamma.c (limited to 'src/libs/ray/ray_gamma.c') 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 + +#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; +} -- cgit v1.2.1