summaryrefslogtreecommitdiff
path: root/src/libs/ray/ray_gamma.c
diff options
context:
space:
mode:
authorVito Caputo <vcaputo@pengaru.com>2017-08-08 10:40:14 -0700
committerVito Caputo <vcaputo@pengaru.com>2019-11-13 02:17:54 -0800
commit8acb27a788f24f85f38cf4ca45f2c3124128fa26 (patch)
tree7b747bb9a50bf3f804ac11e03149dd347839f6fc /src/libs/ray/ray_gamma.c
parent448362dcd54c1275ec80d16bcb4d88732f6912f2 (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.c15
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;
+}
© All Rights Reserved