if(ibuf==NULL)
return NULL;
- if(ibuf->rect_float==NULL)
- IMB_float_from_rect(ibuf);
+ if (rd->color_mgt_flag & R_COLOR_MANAGEMENT) {
+ if (ibuf->profile == IB_PROFILE_NONE) {
+ /* if float buffer already exists = already linear */
+ /* else ... */
+ if (ibuf->rect_float == NULL) {
+ imb_freerectfloatImBuf(ibuf);
+ ibuf->profile = IB_PROFILE_SRGB;
+ IMB_float_from_rect(ibuf);
+ } else {
+ ibuf->profile = IB_PROFILE_LINEAR_RGB;
+ }
+ }
+ } else {
+ if (ibuf->profile == IB_PROFILE_SRGB) {
+ if (ibuf->rect_float != NULL) {
+ imb_freerectfloatImBuf(ibuf);
+ }
+ ibuf->profile = IB_PROFILE_NONE;
+ IMB_float_from_rect(ibuf);
+ }
+ }
+ if (ibuf->rect_float == NULL) {
+ IMB_float_from_rect(ibuf);
+ }
+
type= ibuf->channels;
if(rd->scemode & R_COMP_CROP) {
if(out[1]->hasoutput)
out[1]->data= valbuf_from_rgbabuf(stackbuf, CHAN_A);
- generate_preview(node, stackbuf);
+ generate_preview(data, node, stackbuf);
}
}
};
static void node_composit_exec_rlayers(void *data, bNode *node, bNodeStack **in, bNodeStack **out)
{
- Scene *sce= node->id?(Scene *)node->id:G.scene; /* G.scene is WEAK! */
+ Scene *sce= (Scene *)node->id;
+ Render *re= (sce)? RE_GetRender(sce->id.name): NULL;
RenderData *rd= data;
- RenderResult *rr;
+ RenderResult *rr= NULL;
- rr= RE_GetResult(RE_GetRender(sce->id.name));
+ if(re)
+ rr= RE_AcquireResultRead(re);
if(rr) {
SceneRenderLayer *srl= BLI_findlink(&sce->r.layers, node->custom1);
node_composit_rlayers_out(rd, rl, out, rr->rectx, rr->recty);
- generate_preview(node, stackbuf);
+ generate_preview(data, node, stackbuf);
}
}
}
- }
+ }
+
+ if(re)
+ RE_ReleaseResult(re);
};