Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukas Stockner <lukas.stockner@freenet.de>2018-06-14 18:48:19 +0300
committerLukas Stockner <lukas.stockner@freenet.de>2018-06-14 23:21:37 +0300
commit3ee606621cf53a2a4897e534e7e04d3632f419f8 (patch)
treee8ffff99f0ceeea46aa170298853d8034a1acf1d /intern/cycles/util
parent064e701472ac430c8063ab5d577b5014eecf9ad5 (diff)
Cycles: Query XYZ to/from Scene Linear conversion from OCIO instead of assuming sRGB
I've limited it to just the RGB<->XYZ stuff for now, correct image handling is the next step. Reviewers: brecht, sergey Differential Revision: https://developer.blender.org/D3478
Diffstat (limited to 'intern/cycles/util')
-rw-r--r--intern/cycles/util/util_color.h44
1 files changed, 16 insertions, 28 deletions
diff --git a/intern/cycles/util/util_color.h b/intern/cycles/util/util_color.h
index c73beab98dc..62a9bf8e47d 100644
--- a/intern/cycles/util/util_color.h
+++ b/intern/cycles/util/util_color.h
@@ -47,7 +47,7 @@ ccl_device_inline float3 color_byte_to_float(uchar4 c)
return make_float3(c.x*(1.0f/255.0f), c.y*(1.0f/255.0f), c.z*(1.0f/255.0f));
}
-ccl_device float color_srgb_to_scene_linear(float c)
+ccl_device float color_srgb_to_linear(float c)
{
if(c < 0.04045f)
return (c < 0.0f)? 0.0f: c * (1.0f/12.92f);
@@ -55,7 +55,7 @@ ccl_device float color_srgb_to_scene_linear(float c)
return powf((c + 0.055f) * (1.0f / 1.055f), 2.4f);
}
-ccl_device float color_scene_linear_to_srgb(float c)
+ccl_device float color_linear_to_srgb(float c)
{
if(c < 0.0031308f)
return (c < 0.0f)? 0.0f: c * 12.92f;
@@ -150,13 +150,6 @@ ccl_device float3 xyY_to_xyz(float x, float y, float Y)
return make_float3(X, Y, Z);
}
-ccl_device float3 xyz_to_rgb(float x, float y, float z)
-{
- return make_float3(3.240479f * x + -1.537150f * y + -0.498535f * z,
- -0.969256f * x + 1.875991f * y + 0.041556f * z,
- 0.055648f * x + -0.204043f * y + 1.057311f * z);
-}
-
#ifdef __KERNEL_SSE2__
/*
* Calculate initial guess for arg^exp based on float representation
@@ -204,7 +197,7 @@ ccl_device_inline ssef fastpow24(const ssef &arg)
return x * (x * x);
}
-ccl_device ssef color_srgb_to_scene_linear(const ssef &c)
+ccl_device ssef color_srgb_to_linear(const ssef &c)
{
sseb cmp = c < ssef(0.04045f);
ssef lt = max(c * ssef(1.0f/12.92f), ssef(0.0f));
@@ -214,42 +207,37 @@ ccl_device ssef color_srgb_to_scene_linear(const ssef &c)
}
#endif /* __KERNEL_SSE2__ */
-ccl_device float3 color_srgb_to_scene_linear_v3(float3 c)
+ccl_device float3 color_srgb_to_linear_v3(float3 c)
{
- return make_float3(color_srgb_to_scene_linear(c.x),
- color_srgb_to_scene_linear(c.y),
- color_srgb_to_scene_linear(c.z));
+ return make_float3(color_srgb_to_linear(c.x),
+ color_srgb_to_linear(c.y),
+ color_srgb_to_linear(c.z));
}
-ccl_device float3 color_scene_linear_to_srgb_v3(float3 c)
+ccl_device float3 color_linear_to_srgb_v3(float3 c)
{
- return make_float3(color_scene_linear_to_srgb(c.x),
- color_scene_linear_to_srgb(c.y),
- color_scene_linear_to_srgb(c.z));
+ return make_float3(color_linear_to_srgb(c.x),
+ color_linear_to_srgb(c.y),
+ color_linear_to_srgb(c.z));
}
-ccl_device float4 color_srgb_to_scene_linear_v4(float4 c)
+ccl_device float4 color_srgb_to_linear_v4(float4 c)
{
#ifdef __KERNEL_SSE2__
ssef r_ssef;
float4 &r = (float4 &)r_ssef;
r = c;
- r_ssef = color_srgb_to_scene_linear(r_ssef);
+ r_ssef = color_srgb_to_linear(r_ssef);
r.w = c.w;
return r;
#else
- return make_float4(color_srgb_to_scene_linear(c.x),
- color_srgb_to_scene_linear(c.y),
- color_srgb_to_scene_linear(c.z),
+ return make_float4(color_srgb_to_linear(c.x),
+ color_srgb_to_linear(c.y),
+ color_srgb_to_linear(c.z),
c.w);
#endif
}
-ccl_device float linear_rgb_to_gray(float3 c)
-{
- return c.x*0.2126f + c.y*0.7152f + c.z*0.0722f;
-}
-
CCL_NAMESPACE_END
#endif /* __UTIL_COLOR_H__ */