From 0d24c34d7fea73a0002a79e995f7c7f30b03a054 Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Mon, 19 Dec 2016 08:14:23 +0100 Subject: Add coopgamma backend MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mattias Andrée --- src/colorramp.c | 57 ++++++++++++++++++++++----------------------------------- 1 file changed, 22 insertions(+), 35 deletions(-) (limited to 'src/colorramp.c') diff --git a/src/colorramp.c b/src/colorramp.c index fda75f2..2c67969 100644 --- a/src/colorramp.c +++ b/src/colorramp.c @@ -21,6 +21,7 @@ #include #include +#include "colorramp.h" #include "redshift.h" /* Whitepoint values for temperatures at 100K intervals. @@ -285,43 +286,29 @@ interpolate_color(float a, const float *c1, const float *c2, float *c) #define F(Y, C) pow((Y) * setting->brightness * \ white_point[C], 1.0/setting->gamma[C]) -void -colorramp_fill(uint16_t *gamma_r, uint16_t *gamma_g, uint16_t *gamma_b, - int size, const color_setting_t *setting) -{ - /* Approximate white point */ - float white_point[3]; - float alpha = (setting->temperature % 100) / 100.0; - int temp_index = ((setting->temperature - 1000) / 100)*3; - interpolate_color(alpha, &blackbody_color[temp_index], - &blackbody_color[temp_index+3], white_point); - for (int i = 0; i < size; i++) { - gamma_r[i] = F((double)gamma_r[i]/(UINT16_MAX+1), 0) * - (UINT16_MAX+1); - gamma_g[i] = F((double)gamma_g[i]/(UINT16_MAX+1), 1) * - (UINT16_MAX+1); - gamma_b[i] = F((double)gamma_b[i]/(UINT16_MAX+1), 2) * - (UINT16_MAX+1); +#define X(SUFFIX, TYPE, MAX, TRUE_MAX, DEPTH)\ + void\ + colorramp_fill_##SUFFIX(TYPE *gamma_r, TYPE *gamma_g, TYPE *gamma_b,\ + size_t size_r, size_t size_g, size_t size_b,\ + const color_setting_t *setting)\ + {\ + /* Approximate white point */\ + float white_point[3];\ + float alpha = (setting->temperature % 100) / 100.0;\ + int temp_index = ((setting->temperature - 1000) / 100) * 3;\ + interpolate_color(alpha, &blackbody_color[temp_index],\ + &blackbody_color[temp_index+3], white_point);\ + \ + for (size_t i = 0; i < size_r; i++)\ + gamma_r[i] = F((double)gamma_r[i] / (MAX), 0) * (MAX);\ + for (size_t i = 0; i < size_g; i++)\ + gamma_g[i] = F((double)gamma_g[i] / (MAX), 1) * (MAX);\ + for (size_t i = 0; i < size_b; i++)\ + gamma_b[i] = F((double)gamma_b[i] / (MAX), 2) * (MAX);\ } -} - -void -colorramp_fill_float(float *gamma_r, float *gamma_g, float *gamma_b, - int size, const color_setting_t *setting) -{ - /* Approximate white point */ - float white_point[3]; - float alpha = (setting->temperature % 100) / 100.0; - int temp_index = ((setting->temperature - 1000) / 100)*3; - interpolate_color(alpha, &blackbody_color[temp_index], - &blackbody_color[temp_index+3], white_point); - for (int i = 0; i < size; i++) { - gamma_r[i] = F((double)gamma_r[i], 0); - gamma_g[i] = F((double)gamma_g[i], 1); - gamma_b[i] = F((double)gamma_b[i], 2); - } -} +LIST_RAMPS_STOP_VALUE_TYPES +#undef X #undef F -- cgit v1.2.3-70-g09d2