Bugfix #26584
authorTon Roosendaal <ton@blender.org>
Thu, 24 Mar 2011 14:31:58 +0000 (14:31 +0000)
committerTon Roosendaal <ton@blender.org>
Thu, 24 Mar 2011 14:31:58 +0000 (14:31 +0000)
- Colormanagement code was gamma correcting non-RGBA buffers in composite.
  (Like vector buffers).
- Crash on using "use Color Management" button during composites, because
  it was freeing all node images. Added code to stop first jobs before
  freeing. It sends notifier for recomposites after free anyway.

source/blender/makesrna/intern/rna_scene.c
source/blender/nodes/intern/CMP_nodes/CMP_image.c

index 812e991831b44af7cf9ef30c7642ace92d53cfdf..e00ceeafd99f8588f4d3fdb646b83ba685aa2333 100644 (file)
@@ -54,6 +54,7 @@
 #include <libavformat/avformat.h>
 #endif
 
+#include "WM_api.h"
 #include "WM_types.h"
 
 #include "BLI_threads.h"
@@ -754,6 +755,9 @@ static void rna_RenderSettings_color_management_update(Main *bmain, Scene *unuse
        bNode *node;
        
        if(ntree && scene->use_nodes) {
+               /* XXX images are freed here, stop render and preview threads, until Image is threadsafe */
+               WM_jobs_stop_all(bmain->wm.first);
+               
                for (node=ntree->nodes.first; node; node=node->next) {
                        if (ELEM(node->type, CMP_NODE_VIEWER, CMP_NODE_IMAGE)) {
                                ED_node_changed_update(&scene->id, node);
index a7be5ac6f8af95847da0ab195a255f596ca2d76a..1ea3cf96ad0c044d60b06348c55596b60e55c0d0 100644 (file)
@@ -80,9 +80,9 @@ static CompBuf *node_composit_get_image(RenderData *rd, Image *ima, ImageUser *i
                IMB_float_from_rect(ibuf);
        }
 
-       /* now we need a float buffer from the image
-        * with matching color management */
-       if(ibuf->channels == 4) {
+       /* now we need a float buffer from the image with matching color management */
+       /* XXX weak code, multilayer is excluded from this */
+       if(ibuf->channels == 4 && ima->rr==NULL) {
                if(rd->color_mgt_flag & R_COLOR_MANAGEMENT) {
                        if(ibuf->profile != IB_PROFILE_NONE) {
                                rect= ibuf->rect_float;