[Bf-blender-cvs] [089b55885c2] draw-colormanagement: OCIO: Use GroupTransform to avoid doing 3 transforms instead of 2
Clément Foucault
noreply at git.blender.org
Tue Jan 28 00:23:47 CET 2020
Commit: 089b55885c2b41c1a845b3aabc13a77f170b1d8e
Author: Clément Foucault
Date: Tue Jan 28 00:23:34 2020 +0100
Branches: draw-colormanagement
https://developer.blender.org/rB089b55885c2b41c1a845b3aabc13a77f170b1d8e
OCIO: Use GroupTransform to avoid doing 3 transforms instead of 2
This exposes OCIO::GroupTransform to C api to be able to chain the
display transform with a corrective transform to output display linear
colors.
For now the display code only use an exponent transform to go back to
linear but should use a ColorSpaceTransform once we have the correct
config.
===================================================================
M intern/opencolorio/fallback_impl.cc
M intern/opencolorio/gpu_shader_display_transform.glsl
M intern/opencolorio/ocio_capi.cc
M intern/opencolorio/ocio_capi.h
M intern/opencolorio/ocio_impl.cc
M intern/opencolorio/ocio_impl.h
M intern/opencolorio/ocio_impl_glsl.cc
M source/blender/imbuf/intern/colormanagement.c
M source/blender/makesrna/intern/rna_render.c
===================================================================
diff --git a/intern/opencolorio/fallback_impl.cc b/intern/opencolorio/fallback_impl.cc
index 6d49644b39d..0e5441af4e8 100644
--- a/intern/opencolorio/fallback_impl.cc
+++ b/intern/opencolorio/fallback_impl.cc
@@ -594,6 +594,43 @@ void FallbackImpl::OCIO_PackedImageDescRelease(OCIO_PackedImageDesc *id)
MEM_freeN(id);
}
+OCIO_GroupTransformRcPtr *FallbackImpl::createGroupTransform(void)
+{
+ FallbackTransform *transform = new FallbackTransform();
+ transform->type = TRANSFORM_UNKNOWN;
+ return (OCIO_GroupTransformRcPtr *)transform;
+}
+
+void FallbackImpl::groupTransformSetDirection(OCIO_GroupTransformRcPtr * /*gt*/,
+ const bool /*forward */)
+{
+}
+
+void FallbackImpl::groupTransformPushBack(OCIO_GroupTransformRcPtr * /*gt*/,
+ OCIO_ConstTransformRcPtr * /*transform*/)
+{
+}
+
+void FallbackImpl::groupTransformRelease(OCIO_GroupTransformRcPtr * /*gt*/)
+{
+}
+
+OCIO_ColorSpaceTransformRcPtr *FallbackImpl::createColorSpaceTransform(void)
+{
+ FallbackTransform *transform = new FallbackTransform();
+ transform->type = TRANSFORM_UNKNOWN;
+ return (OCIO_ColorSpaceTransformRcPtr *)transform;
+}
+
+void FallbackImpl::colorSpaceTransformSetSrc(OCIO_ColorSpaceTransformRcPtr * /*ct*/,
+ const char * /*name*/)
+{
+}
+
+void FallbackImpl::colorSpaceTransformRelease(OCIO_ColorSpaceTransformRcPtr * /*ct*/)
+{
+}
+
OCIO_ExponentTransformRcPtr *FallbackImpl::createExponentTransform(void)
{
FallbackTransform *transform = new FallbackTransform();
@@ -658,7 +695,6 @@ bool FallbackImpl::supportGLSLDraw(void)
}
bool FallbackImpl::setupGLSLDraw(struct OCIO_GLSLDrawState ** /*state_r*/,
- OCIO_ConstProcessorRcPtr * /*processor*/,
OCIO_ConstProcessorRcPtr * /*processor*/,
OCIO_ConstProcessorRcPtr * /*processor*/,
OCIO_CurveMappingSettings * /*curve_mapping_settings*/,
diff --git a/intern/opencolorio/gpu_shader_display_transform.glsl b/intern/opencolorio/gpu_shader_display_transform.glsl
index a2bd49fa686..f1f77cf7df2 100644
--- a/intern/opencolorio/gpu_shader_display_transform.glsl
+++ b/intern/opencolorio/gpu_shader_display_transform.glsl
@@ -5,7 +5,6 @@ uniform sampler2D image_texture;
uniform sampler2D overlay_texture;
uniform sampler3D lut3d_texture;
uniform sampler3D lut3d_display_texture;
-uniform sampler3D lut3d_linear_texture;
uniform float dither;
uniform bool predivide;
@@ -150,21 +149,19 @@ vec4 OCIO_ProcessColor(vec4 col, vec4 col_overlay, vec2 noise_uv)
* for straight alpha at this moment
*/
- col = OCIO_to_display_encoded_with_look(col, lut3d_texture);
+ col = OCIO_to_display_linear_with_look(col, lut3d_texture);
if (dither > 0.0) {
col = apply_dither(col, noise_uv);
}
if (overlay) {
- col = OCIO_to_display_linear(col, lut3d_display_texture);
-
col *= 1.0 - col_overlay.a;
col += col_overlay; /* Assumed unassociated alpha. */
-
- col = OCIO_to_display_encoded(col, lut3d_linear_texture);
}
+ col = OCIO_to_display_encoded(col, lut3d_display_texture);
+
return col;
}
diff --git a/intern/opencolorio/ocio_capi.cc b/intern/opencolorio/ocio_capi.cc
index 0d2aab43e14..74f692e12c3 100644
--- a/intern/opencolorio/ocio_capi.cc
+++ b/intern/opencolorio/ocio_capi.cc
@@ -307,6 +307,41 @@ void OCIO_PackedImageDescRelease(OCIO_PackedImageDesc *id)
impl->OCIO_PackedImageDescRelease(id);
}
+OCIO_GroupTransformRcPtr *OCIO_createGroupTransform(void)
+{
+ return impl->createGroupTransform();
+}
+
+void OCIO_groupTransformSetDirection(OCIO_GroupTransformRcPtr *gt, const bool forward)
+{
+ impl->groupTransformSetDirection(gt, forward);
+}
+
+void OCIO_groupTransformPushBack(OCIO_GroupTransformRcPtr *gt, OCIO_ConstTransformRcPtr *tr)
+{
+ impl->groupTransformPushBack(gt, tr);
+}
+
+void OCIO_groupTransformRelease(OCIO_GroupTransformRcPtr *gt)
+{
+ impl->groupTransformRelease(gt);
+}
+
+OCIO_ColorSpaceTransformRcPtr *OCIO_createColorSpaceTransform(void)
+{
+ return impl->createColorSpaceTransform();
+}
+
+void OCIO_colorSpaceTransformSetSrc(OCIO_ColorSpaceTransformRcPtr *ct, const char *name)
+{
+ impl->colorSpaceTransformSetSrc(ct, name);
+}
+
+void OCIO_colorSpaceTransformRelease(OCIO_ColorSpaceTransformRcPtr *ct)
+{
+ impl->colorSpaceTransformRelease(ct);
+}
+
OCIO_ExponentTransformRcPtr *OCIO_createExponentTransform(void)
{
return impl->createExponentTransform();
@@ -351,21 +386,14 @@ int OCIO_supportGLSLDraw(void)
int OCIO_setupGLSLDraw(struct OCIO_GLSLDrawState **state_r,
OCIO_ConstProcessorRcPtr *processor,
- OCIO_ConstProcessorRcPtr *processor_linear,
OCIO_ConstProcessorRcPtr *processor_display,
OCIO_CurveMappingSettings *curve_mapping_settings,
float dither,
bool predivide,
bool overlay)
{
- return (int)impl->setupGLSLDraw(state_r,
- processor,
- processor_linear,
- processor_display,
- curve_mapping_settings,
- dither,
- predivide,
- overlay);
+ return (int)impl->setupGLSLDraw(
+ state_r, processor, processor_display, curve_mapping_settings, dither, predivide, overlay);
}
void OCIO_finishGLSLDraw(struct OCIO_GLSLDrawState *state)
diff --git a/intern/opencolorio/ocio_capi.h b/intern/opencolorio/ocio_capi.h
index dd80bf3c66d..804b677e397 100644
--- a/intern/opencolorio/ocio_capi.h
+++ b/intern/opencolorio/ocio_capi.h
@@ -46,8 +46,10 @@ OCIO_DECLARE_HANDLE(OCIO_ConstContextRcPtr);
OCIO_DECLARE_HANDLE(OCIO_PackedImageDesc);
OCIO_DECLARE_HANDLE(OCIO_DisplayTransformRcPtr);
OCIO_DECLARE_HANDLE(OCIO_ConstTransformRcPtr);
+OCIO_DECLARE_HANDLE(OCIO_ColorSpaceTransformRcPtr);
OCIO_DECLARE_HANDLE(OCIO_ExponentTransformRcPtr);
OCIO_DECLARE_HANDLE(OCIO_MatrixTransformRcPtr);
+OCIO_DECLARE_HANDLE(OCIO_GroupTransformRcPtr);
OCIO_DECLARE_HANDLE(OCIO_ConstLookRcPtr);
/* Standard XYZ to linear sRGB transform, for fallback. */
@@ -198,6 +200,15 @@ OCIO_PackedImageDesc *OCIO_createOCIO_PackedImageDesc(float *data,
void OCIO_PackedImageDescRelease(OCIO_PackedImageDesc *p);
+OCIO_GroupTransformRcPtr *OCIO_createGroupTransform(void);
+void OCIO_groupTransformSetDirection(OCIO_GroupTransformRcPtr *gt, const bool forward);
+void OCIO_groupTransformPushBack(OCIO_GroupTransformRcPtr *gt, OCIO_ConstTransformRcPtr *tr);
+void OCIO_groupTransformRelease(OCIO_GroupTransformRcPtr *gt);
+
+OCIO_ColorSpaceTransformRcPtr *OCIO_createColorSpaceTransform(void);
+void OCIO_colorSpaceTransformSetSrc(OCIO_ColorSpaceTransformRcPtr *ct, const char *name);
+void OCIO_colorSpaceTransformRelease(OCIO_ColorSpaceTransformRcPtr *ct);
+
OCIO_ExponentTransformRcPtr *OCIO_createExponentTransform(void);
void OCIO_exponentTransformSetValue(OCIO_ExponentTransformRcPtr *et, const float *exponent);
void OCIO_exponentTransformRelease(OCIO_ExponentTransformRcPtr *et);
@@ -213,7 +224,6 @@ void OCIO_matrixTransformScale(float *m44, float *offset4, const float *scale4);
int OCIO_supportGLSLDraw(void);
int OCIO_setupGLSLDraw(struct OCIO_GLSLDrawState **state_r,
OCIO_ConstProcessorRcPtr *processor,
- OCIO_ConstProcessorRcPtr *processor_linear,
OCIO_ConstProcessorRcPtr *processor_display,
OCIO_CurveMappingSettings *curve_mapping_settings,
float dither,
diff --git a/intern/opencolorio/ocio_impl.cc b/intern/opencolorio/ocio_impl.cc
index b838f0e979f..fd749bb4050 100644
--- a/intern/opencolorio/ocio_impl.cc
+++ b/intern/opencolorio/ocio_impl.cc
@@ -822,6 +822,51 @@ void OCIOImpl::OCIO_PackedImageDescRelease(OCIO_PackedImageDesc *id)
OBJECT_GUARDED_DELETE((PackedImageDesc *)id, PackedImageDesc);
}
+OCIO_GroupTransformRcPtr *OCIOImpl::createGroupTransform(void)
+{
+ GroupTransformRcPtr *gt = OBJECT_GUARDED_NEW(GroupTransformRcPtr);
+
+ *gt = GroupTransform::Create();
+
+ return (OCIO_GroupTransformRcPtr *)gt;
+}
+
+void OCIOImpl::groupTransformSetDirection(OCIO_GroupTransformRcPtr *gt, const bool forward)
+{
+ TransformDirection dir = forward ? TRANSFORM_DIR_FORWARD : TRANSFORM_DIR_INVERSE;
+ (*(GroupTransformRcPtr *)gt)->setDirection(dir);
+}
+
+void OCIOImpl::groupTransformPushBack(OCIO_GroupTransformRcPtr *gt, OCIO_ConstTransformRcPtr *tr)
+{
+ (*(GroupTransformRcPtr *)gt)->push_back(*(ConstTransformRcPtr *)tr);
+}
+
+void OCIOImpl::groupTransformRelease(OCIO_GroupTransformRcPtr *gt)
+{
+ OBJECT_GUARDED_DELETE((GroupTransformRcPtr *)gt, GroupTransformRcPtr);
+}
+
+OCIO_ColorSpaceTransformRcPtr *OCIOImpl::createColorSpaceTransform(void)
+{
+ ColorSpaceTransformRcPtr *ct = OBJECT_GUARDED_NEW(ColorSpaceTransformRcPtr);
+
+ *ct = ColorSpaceTransform::Create();
+ (*ct)->setDirection(TRANSFORM_DIR_FORWARD);
+
+ return (OCIO_ColorSpaceTransformRcPtr *)ct;
+}
+
+void OCIOImpl::colorSpaceTransformSetSrc(OCIO_ColorSpaceTransformRcPtr *ct, const char *name)
+{
+ (*(ColorSpaceTransformRcPtr *)ct)->setSrc(name);
+}
+
+void OCIOImpl::colorSpaceTransformRelease(OCIO_ColorSpaceTransformRcPtr *ct)
+{
+ OBJECT_GUARDED_DELETE((ColorSpaceTransformRcPtr *)ct, ColorSpaceTransformRcPtr);
+}
+
OCIO_ExponentTransformRcPtr *OCIOImpl::createExponentTransform(void)
{
ExponentTransformRcPtr *et = OBJECT_GUARDED_NEW(ExponentTransformRcPtr);
diff --git a/intern/opencolorio/ocio_impl.h b/intern/opencolorio/ocio_impl.h
index b4fe8dcc2ce..2ca0521a924 100644
--- a/intern/opencolorio/ocio_impl.h
+++ b/intern/opencolorio/ocio_impl.h
@@ -117,6 +117,16 @@ class IOCIOImpl {
virtual void OCIO_PackedImageDescRelease(OCIO_PackedImageDesc *p) = 0;
+ virtual OCIO_GroupTransformRcPtr *createGroupTransform(void) = 0;
+ virtual void groupTransformSetDirection(OCIO_GroupTransformRcPtr *gt, const bool forward) = 0;
+ virtual void groupTransform
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list