diff options
Diffstat (limited to 'source/blender/compositor')
15 files changed, 53 insertions, 142 deletions
diff --git a/source/blender/compositor/COM_compositor.h b/source/blender/compositor/COM_compositor.h index eafa6614d31..0fdd7647f8d 100644 --- a/source/blender/compositor/COM_compositor.h +++ b/source/blender/compositor/COM_compositor.h @@ -318,12 +318,6 @@ extern "C" { * - output nodes can have different priorities in the WorkScheduler. * This is implemented in the COM_execute function. * - * \param view_settings: - * reference to view settings used for color management - * - * \param display_settings: - * reference to display settings used for color management - * * OCIO_TODO: this options only used in rare cases, namely in output file node, * so probably this settings could be passed in a nicer way. * should be checked further, probably it'll be also needed for preview @@ -335,8 +329,6 @@ void COM_execute(RenderData *render_data, Scene *scene, bNodeTree *node_tree, int rendering, - const ColorManagedViewSettings *view_settings, - const ColorManagedDisplaySettings *display_settings, const char *view_name); /** diff --git a/source/blender/compositor/intern/COM_CompositorContext.cc b/source/blender/compositor/intern/COM_CompositorContext.cc index f17a24c6b9d..2c55af1779a 100644 --- a/source/blender/compositor/intern/COM_CompositorContext.cc +++ b/source/blender/compositor/intern/COM_CompositorContext.cc @@ -12,8 +12,6 @@ CompositorContext::CompositorContext() quality_ = eCompositorQuality::High; hasActiveOpenCLDevices_ = false; fast_calculation_ = false; - view_settings_ = nullptr; - display_settings_ = nullptr; bnodetree_ = nullptr; } diff --git a/source/blender/compositor/intern/COM_CompositorContext.h b/source/blender/compositor/intern/COM_CompositorContext.h index 430bab48352..480f70f4193 100644 --- a/source/blender/compositor/intern/COM_CompositorContext.h +++ b/source/blender/compositor/intern/COM_CompositorContext.h @@ -64,10 +64,6 @@ class CompositorContext { */ bool fast_calculation_; - /* \brief color management settings */ - const ColorManagedViewSettings *view_settings_; - const ColorManagedDisplaySettings *display_settings_; - /** * \brief active rendering view name */ @@ -153,38 +149,6 @@ class CompositorContext { } /** - * \brief set view settings of color management - */ - void set_view_settings(const ColorManagedViewSettings *view_settings) - { - view_settings_ = view_settings; - } - - /** - * \brief get view settings of color management - */ - const ColorManagedViewSettings *get_view_settings() const - { - return view_settings_; - } - - /** - * \brief set display settings of color management - */ - void set_display_settings(const ColorManagedDisplaySettings *display_settings) - { - display_settings_ = display_settings; - } - - /** - * \brief get display settings of color management - */ - const ColorManagedDisplaySettings *get_display_settings() const - { - return display_settings_; - } - - /** * \brief set the quality */ void set_quality(eCompositorQuality quality) diff --git a/source/blender/compositor/intern/COM_ExecutionSystem.cc b/source/blender/compositor/intern/COM_ExecutionSystem.cc index 036e2bc8a91..c850585148a 100644 --- a/source/blender/compositor/intern/COM_ExecutionSystem.cc +++ b/source/blender/compositor/intern/COM_ExecutionSystem.cc @@ -23,8 +23,6 @@ ExecutionSystem::ExecutionSystem(RenderData *rd, bNodeTree *editingtree, bool rendering, bool fastcalculation, - const ColorManagedViewSettings *view_settings, - const ColorManagedDisplaySettings *display_settings, const char *view_name) { num_work_threads_ = WorkScheduler::get_num_cpu_threads(); @@ -45,8 +43,6 @@ ExecutionSystem::ExecutionSystem(RenderData *rd, (editingtree->flag & NTREE_COM_OPENCL)); context_.set_render_data(rd); - context_.set_view_settings(view_settings); - context_.set_display_settings(display_settings); BLI_mutex_init(&work_mutex_); BLI_condition_init(&work_finished_cond_); diff --git a/source/blender/compositor/intern/COM_ExecutionSystem.h b/source/blender/compositor/intern/COM_ExecutionSystem.h index 9dd20d18144..2cd9e2d9001 100644 --- a/source/blender/compositor/intern/COM_ExecutionSystem.h +++ b/source/blender/compositor/intern/COM_ExecutionSystem.h @@ -160,8 +160,6 @@ class ExecutionSystem { bNodeTree *editingtree, bool rendering, bool fastcalculation, - const ColorManagedViewSettings *view_settings, - const ColorManagedDisplaySettings *display_settings, const char *view_name); /** diff --git a/source/blender/compositor/intern/COM_NodeOperationBuilder.cc b/source/blender/compositor/intern/COM_NodeOperationBuilder.cc index 2f27699ce9c..788686f3036 100644 --- a/source/blender/compositor/intern/COM_NodeOperationBuilder.cc +++ b/source/blender/compositor/intern/COM_NodeOperationBuilder.cc @@ -221,8 +221,9 @@ PreviewOperation *NodeOperationBuilder::make_preview_operation() const bNodeInstanceHash *previews = context_->get_preview_hash(); if (previews) { - PreviewOperation *operation = new PreviewOperation(context_->get_view_settings(), - context_->get_display_settings(), + Scene *scene = context_->get_scene(); + PreviewOperation *operation = new PreviewOperation(&scene->view_settings, + &scene->display_settings, current_node_->get_bnode()->preview_xsize, current_node_->get_bnode()->preview_ysize); operation->set_bnodetree(context_->get_bnodetree()); diff --git a/source/blender/compositor/intern/COM_compositor.cc b/source/blender/compositor/intern/COM_compositor.cc index 791cc327bfb..519ad93bcaf 100644 --- a/source/blender/compositor/intern/COM_compositor.cc +++ b/source/blender/compositor/intern/COM_compositor.cc @@ -49,8 +49,6 @@ void COM_execute(RenderData *render_data, Scene *scene, bNodeTree *node_tree, int rendering, - const ColorManagedViewSettings *view_settings, - const ColorManagedDisplaySettings *display_settings, const char *view_name) { /* Initialize mutex, TODO: this mutex init is actually not thread safe and @@ -80,14 +78,8 @@ void COM_execute(RenderData *render_data, /* Execute. */ const bool twopass = (node_tree->flag & NTREE_TWO_PASS) && !rendering; if (twopass) { - blender::compositor::ExecutionSystem fast_pass(render_data, - scene, - node_tree, - rendering, - true, - view_settings, - display_settings, - view_name); + blender::compositor::ExecutionSystem fast_pass( + render_data, scene, node_tree, rendering, true, view_name); fast_pass.execute(); if (node_tree->test_break(node_tree->tbh)) { @@ -97,7 +89,7 @@ void COM_execute(RenderData *render_data, } blender::compositor::ExecutionSystem system( - render_data, scene, node_tree, rendering, false, view_settings, display_settings, view_name); + render_data, scene, node_tree, rendering, false, view_name); system.execute(); BLI_mutex_unlock(&g_compositor.mutex); diff --git a/source/blender/compositor/nodes/COM_OutputFileNode.cc b/source/blender/compositor/nodes/COM_OutputFileNode.cc index ab5898c526d..f69511d88e6 100644 --- a/source/blender/compositor/nodes/COM_OutputFileNode.cc +++ b/source/blender/compositor/nodes/COM_OutputFileNode.cc @@ -106,36 +106,33 @@ void OutputFileNode::convert_to_operations(NodeConverter &converter, if (is_multiview && format->views_format == R_IMF_VIEWS_MULTIVIEW) { output_operation = new OutputOpenExrSingleLayerMultiViewOperation( + context.get_scene(), context.get_render_data(), context.get_bnodetree(), input->get_data_type(), format, path, - context.get_view_settings(), - context.get_display_settings(), context.get_view_name(), sockdata->save_as_render); } else if ((!is_multiview) || (format->views_format == R_IMF_VIEWS_INDIVIDUAL)) { - output_operation = new OutputSingleLayerOperation(context.get_render_data(), + output_operation = new OutputSingleLayerOperation(context.get_scene(), + context.get_render_data(), context.get_bnodetree(), input->get_data_type(), format, path, - context.get_view_settings(), - context.get_display_settings(), context.get_view_name(), sockdata->save_as_render); } else { /* R_IMF_VIEWS_STEREO_3D */ - output_operation = new OutputStereoOperation(context.get_render_data(), + output_operation = new OutputStereoOperation(context.get_scene(), + context.get_render_data(), context.get_bnodetree(), input->get_data_type(), format, path, sockdata->layer, - context.get_view_settings(), - context.get_display_settings(), context.get_view_name(), sockdata->save_as_render); } diff --git a/source/blender/compositor/nodes/COM_SplitViewerNode.cc b/source/blender/compositor/nodes/COM_SplitViewerNode.cc index 0e7db05980a..d02bc6e773d 100644 --- a/source/blender/compositor/nodes/COM_SplitViewerNode.cc +++ b/source/blender/compositor/nodes/COM_SplitViewerNode.cc @@ -24,6 +24,7 @@ void SplitViewerNode::convert_to_operations(NodeConverter &converter, NodeInput *image2Socket = this->get_input_socket(1); Image *image = (Image *)this->get_bnode()->id; ImageUser *image_user = (ImageUser *)this->get_bnode()->storage; + Scene *scene = context.get_scene(); SplitOperation *split_viewer_operation = new SplitOperation(); split_viewer_operation->set_split_percentage(this->get_bnode()->custom1); @@ -36,8 +37,8 @@ void SplitViewerNode::convert_to_operations(NodeConverter &converter, ViewerOperation *viewer_operation = new ViewerOperation(); viewer_operation->set_image(image); viewer_operation->set_image_user(image_user); - viewer_operation->set_view_settings(context.get_view_settings()); - viewer_operation->set_display_settings(context.get_display_settings()); + viewer_operation->set_view_settings(&scene->view_settings); + viewer_operation->set_display_settings(&scene->display_settings); viewer_operation->set_render_data(context.get_render_data()); viewer_operation->set_view_name(context.get_view_name()); diff --git a/source/blender/compositor/nodes/COM_TextureNode.cc b/source/blender/compositor/nodes/COM_TextureNode.cc index 216df59cc47..be5f7b90e11 100644 --- a/source/blender/compositor/nodes/COM_TextureNode.cc +++ b/source/blender/compositor/nodes/COM_TextureNode.cc @@ -17,8 +17,7 @@ void TextureNode::convert_to_operations(NodeConverter &converter, bNode *editor_node = this->get_bnode(); Tex *texture = (Tex *)editor_node->id; TextureOperation *operation = new TextureOperation(); - const ColorManagedDisplaySettings *display_settings = context.get_display_settings(); - bool scene_color_manage = !STREQ(display_settings->display_device, "None"); + bool scene_color_manage = !STREQ(context.get_scene()->display_settings.display_device, "None"); operation->set_texture(texture); operation->set_render_data(context.get_render_data()); operation->set_scene_color_manage(scene_color_manage); diff --git a/source/blender/compositor/nodes/COM_ViewerNode.cc b/source/blender/compositor/nodes/COM_ViewerNode.cc index 1b335abc4d7..ebef331c62f 100644 --- a/source/blender/compositor/nodes/COM_ViewerNode.cc +++ b/source/blender/compositor/nodes/COM_ViewerNode.cc @@ -37,8 +37,9 @@ void ViewerNode::convert_to_operations(NodeConverter &converter, viewer_operation->set_render_data(context.get_render_data()); viewer_operation->set_view_name(context.get_view_name()); - viewer_operation->set_view_settings(context.get_view_settings()); - viewer_operation->set_display_settings(context.get_display_settings()); + Scene *scene = context.get_scene(); + viewer_operation->set_view_settings(&scene->view_settings); + viewer_operation->set_display_settings(&scene->display_settings); viewer_operation->set_canvas_input_index(0); if (!image_socket->is_linked()) { diff --git a/source/blender/compositor/operations/COM_OutputFileMultiViewOperation.cc b/source/blender/compositor/operations/COM_OutputFileMultiViewOperation.cc index 4da11cc9053..aeaf6b659e3 100644 --- a/source/blender/compositor/operations/COM_OutputFileMultiViewOperation.cc +++ b/source/blender/compositor/operations/COM_OutputFileMultiViewOperation.cc @@ -17,24 +17,16 @@ namespace blender::compositor { /************************************ OpenEXR Singlelayer Multiview ******************************/ OutputOpenExrSingleLayerMultiViewOperation::OutputOpenExrSingleLayerMultiViewOperation( + const Scene *scene, const RenderData *rd, const bNodeTree *tree, DataType datatype, ImageFormatData *format, const char *path, - const ColorManagedViewSettings *view_settings, - const ColorManagedDisplaySettings *display_settings, const char *view_name, const bool save_as_render) - : OutputSingleLayerOperation(rd, - tree, - datatype, - format, - path, - view_settings, - display_settings, - view_name, - save_as_render) + : OutputSingleLayerOperation( + scene, rd, tree, datatype, format, path, view_name, save_as_render) { } @@ -68,7 +60,7 @@ void *OutputOpenExrSingleLayerMultiViewOperation::get_handle(const char *filenam /* prepare the file with all the channels */ - if (!IMB_exr_begin_write(exrhandle, filename, width, height, format_->exr_codec, nullptr)) { + if (!IMB_exr_begin_write(exrhandle, filename, width, height, format_.exr_codec, nullptr)) { printf("Error Writing Singlelayer Multiview Openexr\n"); IMB_exr_close(exrhandle); } @@ -104,7 +96,7 @@ void OutputOpenExrSingleLayerMultiViewOperation::deinit_execution() datatype_, view_name_, width, - format_->depth == R_IMF_CHAN_DEPTH_16, + format_.depth == R_IMF_CHAN_DEPTH_16, output_buffer_); /* memory can only be freed after we write all views to the file */ @@ -247,25 +239,17 @@ void OutputOpenExrMultiLayerMultiViewOperation::deinit_execution() /******************************** Stereo3D ******************************/ -OutputStereoOperation::OutputStereoOperation(const RenderData *rd, +OutputStereoOperation::OutputStereoOperation(const Scene *scene, + const RenderData *rd, const bNodeTree *tree, DataType datatype, ImageFormatData *format, const char *path, const char *name, - const ColorManagedViewSettings *view_settings, - const ColorManagedDisplaySettings *display_settings, const char *view_name, const bool save_as_render) - : OutputSingleLayerOperation(rd, - tree, - datatype, - format, - path, - view_settings, - display_settings, - view_name, - save_as_render) + : OutputSingleLayerOperation( + scene, rd, tree, datatype, format, path, view_name, save_as_render) { BLI_strncpy(name_, name, sizeof(name_)); channels_ = get_datatype_size(datatype); @@ -317,7 +301,7 @@ void OutputStereoOperation::deinit_execution() 1, channels_ * width * height, buf, - format_->depth == R_IMF_CHAN_DEPTH_16); + format_.depth == R_IMF_CHAN_DEPTH_16); image_input_ = nullptr; output_buffer_ = nullptr; @@ -332,7 +316,7 @@ void OutputStereoOperation::deinit_execution() /* get rectf from EXR */ for (i = 0; i < 2; i++) { float *rectf = IMB_exr_channel_rect(exrhandle, nullptr, name_, names[i]); - ibuf[i] = IMB_allocImBuf(width, height, format_->planes, 0); + ibuf[i] = IMB_allocImBuf(width, height, format_.planes, 0); ibuf[i]->channels = channels_; ibuf[i]->rect_float = rectf; @@ -340,24 +324,23 @@ void OutputStereoOperation::deinit_execution() ibuf[i]->dither = rd_->dither_intensity; /* do colormanagement in the individual views, so it doesn't need to do in the stereo */ - IMB_colormanagement_imbuf_for_write( - ibuf[i], true, false, view_settings_, display_settings_, format_); + IMB_colormanagement_imbuf_for_write(ibuf[i], true, false, &format_); IMB_prepare_write_ImBuf(IMB_isfloat(ibuf[i]), ibuf[i]); } /* create stereo buffer */ - ibuf[2] = IMB_stereo3d_ImBuf(format_, ibuf[0], ibuf[1]); + ibuf[2] = IMB_stereo3d_ImBuf(&format_, ibuf[0], ibuf[1]); BKE_image_path_from_imformat(filename, path_, BKE_main_blendfile_path_from_global(), rd_->cfra, - format_, + &format_, (rd_->scemode & R_EXTENSION) != 0, true, nullptr); - BKE_imbuf_write(ibuf[2], filename, format_); + BKE_imbuf_write(ibuf[2], filename, &format_); /* imbuf knows which rects are not part of ibuf */ for (i = 0; i < 3; i++) { diff --git a/source/blender/compositor/operations/COM_OutputFileMultiViewOperation.h b/source/blender/compositor/operations/COM_OutputFileMultiViewOperation.h index 6d36db3b777..69f4011d340 100644 --- a/source/blender/compositor/operations/COM_OutputFileMultiViewOperation.h +++ b/source/blender/compositor/operations/COM_OutputFileMultiViewOperation.h @@ -18,13 +18,12 @@ namespace blender::compositor { class OutputOpenExrSingleLayerMultiViewOperation : public OutputSingleLayerOperation { private: public: - OutputOpenExrSingleLayerMultiViewOperation(const RenderData *rd, + OutputOpenExrSingleLayerMultiViewOperation(const Scene *scene, + const RenderData *rd, const bNodeTree *tree, DataType datatype, ImageFormatData *format, const char *path, - const ColorManagedViewSettings *view_settings, - const ColorManagedDisplaySettings *display_settings, const char *view_name, bool save_as_render); @@ -54,14 +53,13 @@ class OutputStereoOperation : public OutputSingleLayerOperation { size_t channels_; public: - OutputStereoOperation(const RenderData *rd, + OutputStereoOperation(const Scene *scene, + const RenderData *rd, const bNodeTree *tree, DataType datatype, struct ImageFormatData *format, const char *path, const char *name, - const ColorManagedViewSettings *view_settings, - const ColorManagedDisplaySettings *display_settings, const char *view_name, bool save_as_render); void *get_handle(const char *filename); diff --git a/source/blender/compositor/operations/COM_OutputFileOperation.cc b/source/blender/compositor/operations/COM_OutputFileOperation.cc index 67c92a3bcb0..cde1496546e 100644 --- a/source/blender/compositor/operations/COM_OutputFileOperation.cc +++ b/source/blender/compositor/operations/COM_OutputFileOperation.cc @@ -200,16 +200,14 @@ static void write_buffer_rect(rcti *rect, } } -OutputSingleLayerOperation::OutputSingleLayerOperation( - const RenderData *rd, - const bNodeTree *tree, - DataType datatype, - ImageFormatData *format, - const char *path, - const ColorManagedViewSettings *view_settings, - const ColorManagedDisplaySettings *display_settings, - const char *view_name, - const bool save_as_render) +OutputSingleLayerOperation::OutputSingleLayerOperation(const Scene *scene, + const RenderData *rd, + const bNodeTree *tree, + DataType datatype, + ImageFormatData *format, + const char *path, + const char *view_name, + const bool save_as_render) { rd_ = rd; tree_ = tree; @@ -220,11 +218,9 @@ OutputSingleLayerOperation::OutputSingleLayerOperation( datatype_ = datatype; image_input_ = nullptr; - format_ = format; + BKE_image_format_init_for_write(&format_, scene, format); BLI_strncpy(path_, path, sizeof(path_)); - view_settings_ = view_settings; - display_settings_ = display_settings; view_name_ = view_name; save_as_render_ = save_as_render; } @@ -245,7 +241,7 @@ void OutputSingleLayerOperation::deinit_execution() if (this->get_width() * this->get_height() != 0) { int size = get_datatype_size(datatype_); - ImBuf *ibuf = IMB_allocImBuf(this->get_width(), this->get_height(), format_->planes, 0); + ImBuf *ibuf = IMB_allocImBuf(this->get_width(), this->get_height(), format_.planes, 0); char filename[FILE_MAX]; const char *suffix; @@ -254,8 +250,7 @@ void OutputSingleLayerOperation::deinit_execution() ibuf->mall |= IB_rectfloat; ibuf->dither = rd_->dither_intensity; - IMB_colormanagement_imbuf_for_write( - ibuf, save_as_render_, false, view_settings_, display_settings_, format_); + IMB_colormanagement_imbuf_for_write(ibuf, save_as_render_, false, &format_); suffix = BKE_scene_multiview_view_suffix_get(rd_, view_name_); @@ -263,12 +258,12 @@ void OutputSingleLayerOperation::deinit_execution() path_, BKE_main_blendfile_path_from_global(), rd_->cfra, - format_, + &format_, (rd_->scemode & R_EXTENSION) != 0, true, suffix); - if (0 == BKE_imbuf_write(ibuf, filename, format_)) { + if (0 == BKE_imbuf_write(ibuf, filename, &format_)) { printf("Cannot save Node File Output to %s\n", filename); } else { diff --git a/source/blender/compositor/operations/COM_OutputFileOperation.h b/source/blender/compositor/operations/COM_OutputFileOperation.h index 51240082a80..98b7e77cc21 100644 --- a/source/blender/compositor/operations/COM_OutputFileOperation.h +++ b/source/blender/compositor/operations/COM_OutputFileOperation.h @@ -20,27 +20,23 @@ class OutputSingleLayerOperation : public MultiThreadedOperation { const RenderData *rd_; const bNodeTree *tree_; - ImageFormatData *format_; + ImageFormatData format_; char path_[FILE_MAX]; float *output_buffer_; DataType datatype_; SocketReader *image_input_; - const ColorManagedViewSettings *view_settings_; - const ColorManagedDisplaySettings *display_settings_; - const char *view_name_; bool save_as_render_; public: - OutputSingleLayerOperation(const RenderData *rd, + OutputSingleLayerOperation(const Scene *scene, + const RenderData *rd, const bNodeTree *tree, DataType datatype, ImageFormatData *format, const char *path, - const ColorManagedViewSettings *view_settings, - const ColorManagedDisplaySettings *display_settings, const char *view_name, bool save_as_render); |