Fix T38813: missing color management in texture nodes preview.
authorBrecht Van Lommel <brechtvanlommel@gmail.com>
Mon, 24 Feb 2014 19:18:51 +0000 (20:18 +0100)
committerBrecht Van Lommel <brechtvanlommel@gmail.com>
Mon, 24 Feb 2014 19:18:51 +0000 (20:18 +0100)
source/blender/nodes/texture/node_texture_tree.c
source/blender/nodes/texture/node_texture_util.c
source/blender/nodes/texture/node_texture_util.h
source/blender/nodes/texture/nodes/node_texture_output.c
source/blender/nodes/texture/nodes/node_texture_viewer.c

index 5e863da96353b99c55cb49476e63453dca5143c8..7e9360b271c05adb7c5dfc53ca978bb0603c0171 100644 (file)
@@ -318,6 +318,7 @@ int ntreeTexExecTree(
        data.osatex = osatex;
        data.target = texres;
        data.do_preview = preview;
+       data.do_manage = (shi) ? shi->do_manage : 0;
        data.thread = thread;
        data.which_output = which_output;
        data.cfra = cfra;
index a8117b7b33399acf6886073c874feb9b48b40556..e01b7ec49f139764a1e051929239958ff87765d8 100644 (file)
@@ -70,7 +70,7 @@ static void tex_call_delegate(TexDelegate *dg, float *out, TexParams *params, sh
                dg->fn(out, params, dg->node, dg->in, thread);
 
                if (dg->cdata->do_preview)
-                       tex_do_preview(dg->preview, params->previewco, out);
+                       tex_do_preview(dg->preview, params->previewco, out, dg->cdata->do_manage);
        }
 }
 
@@ -127,13 +127,13 @@ void params_from_cdata(TexParams *out, TexCallData *in)
        out->mtex = in->mtex;
 }
 
-void tex_do_preview(bNodePreview *preview, const float coord[2], const float col[4])
+void tex_do_preview(bNodePreview *preview, const float coord[2], const float col[4], bool do_manage)
 {
        if (preview) {
                int xs = ((coord[0] + 1.0f) * 0.5f) * preview->xsize;
                int ys = ((coord[1] + 1.0f) * 0.5f) * preview->ysize;
                
-               BKE_node_preview_set_pixel(preview, col, xs, ys, 0); /* 0 = no color management */
+               BKE_node_preview_set_pixel(preview, col, xs, ys, do_manage);
        }
 }
 
index b81ea51ddffb50033364ed0ef2a0e1366e172f16..eb81bcd69496416208c57ceaa0b1bb28b874bc6f 100644 (file)
@@ -84,7 +84,8 @@ typedef struct TexCallData {
        float *dxt, *dyt;
 
        int osatex;
-       char do_preview;
+       bool do_preview;
+       bool do_manage;
        short thread;
        short which_output;
        int cfra;
@@ -126,7 +127,7 @@ void tex_input_vec(float *out, bNodeStack *in, TexParams *params, short thread);
 float tex_input_value(bNodeStack *in, TexParams *params, short thread);
 
 void tex_output(bNode *node, bNodeExecData *execdata, bNodeStack **in, bNodeStack *out, TexFn texfn, TexCallData *data);
-void tex_do_preview(bNodePreview *preview, const float coord[2], const float col[4]);
+void tex_do_preview(bNodePreview *preview, const float coord[2], const float col[4], bool do_manage);
 
 void params_from_cdata(TexParams *out, TexCallData *in);
 
index 37e527f611aca98fb17ac329e093a68beda5496b..f93c020b38bb1756b47eeddf3236ed80d5102904 100644 (file)
@@ -54,7 +54,7 @@ static void exec(void *data, int UNUSED(thread), bNode *node, bNodeExecData *exe
                        tex_input_rgba(&target->tr, in[1], &params, cdata->thread);
                else
                        tex_input_rgba(&target->tr, in[0], &params, cdata->thread);
-               tex_do_preview(execdata->preview, params.co, &target->tr);
+               tex_do_preview(execdata->preview, params.co, &target->tr, cdata->do_manage);
        }
        else {
                /* 0 means don't care, so just use first */
index 5d84a673199c5bbd6ccb82febd956bff4c4c936a..4168e7a16e707a43d1a69a696efee7d6493b9bb6 100644 (file)
@@ -52,7 +52,7 @@ static void exec(void *data, int UNUSED(thread), bNode *UNUSED(node), bNodeExecD
                params_from_cdata(&params, cdata);
 
                tex_input_rgba(col, in[0], &params, cdata->thread);
-               tex_do_preview(execdata->preview, params.previewco, col);
+               tex_do_preview(execdata->preview, params.previewco, col, cdata->do_manage);
        }
 }