From c8516fb59724ec1d492c1eca8e87af15dd4ccecd Mon Sep 17 00:00:00 2001 From: Tiago Chaves Date: Thu, 30 Jul 2020 15:15:57 -0300 Subject: [PATCH 01/13] Add Rendering -> Post Process Rendering action --- sandbox/icons/rendering_post_process.png | Bin 0 -> 705 bytes .../icons/rendering_post_process_disabled.png | Bin 0 -> 617 bytes .../icons/rendering_post_process_hover.png | Bin 0 -> 646 bytes sandbox/tests/test scenes/tonemap/out.png | Bin 0 -> 74753 bytes .../mainwindow/mainwindow.cpp | 41 ++++++++++++++++++ src/appleseed.studio/mainwindow/mainwindow.h | 2 + src/appleseed.studio/mainwindow/mainwindow.ui | 9 ++++ .../mainwindow/project/tools.h | 2 +- 8 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 sandbox/icons/rendering_post_process.png create mode 100644 sandbox/icons/rendering_post_process_disabled.png create mode 100644 sandbox/icons/rendering_post_process_hover.png create mode 100644 sandbox/tests/test scenes/tonemap/out.png diff --git a/sandbox/icons/rendering_post_process.png b/sandbox/icons/rendering_post_process.png new file mode 100644 index 0000000000000000000000000000000000000000..584aa06b3f6d151ee379b97080344b6f7be8edd6 GIT binary patch literal 705 zcmV;y0zUnTP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0#->xK~y+TrBcgp z5^)gT-|}dA6!5Uf(?X(&!SsNM{s9`b-Xu!&)@afr2NKehgoGmoA@SN6=pR60dN4t& zUX2E#2aIB&p*|qRq{?F#x4^Q_EW2b4z4={+`DVUvXMPOzzaVm)LpU7P7Yc=8DwPst zN2%lS(#6qe^bk!@jQpHIGMS_&lgTBY-~Z&G z(O5Scjc?_W^z}?8a}7*(Q5=iKUea=H2CLO-vop+NLP!83a@ed)p@=bJJ~u%=pJymS z-iV^;2a`to@bIj%w=^~(tFg_^SLt;6svrn2h$K*f<2aqsWO@zab6`^Yb#(NR=lN%) zQt4YT7`$7lRB{kc8w`eH>?gVH?K0S#F#*Tp&(-Q9Q4kjVKHu7xy}hT+W^>K$@vLZR z4Yp8&KZ6mx(fM31_Z4%x-|apa4Tl{3)&NWw0)eR4>wV60-0fDY^}*qAtmw2_?4^4B z9t$72qKFZ=8_8y~o*%8&y+ys=ZnN3)<#Kr+Zy*#3*Fupt(4BnZ|<^=GcrqU^9 zj~IV+wFF5jK|~OFy;^024ENl-p;gjW_j5S zDG$!?;RH9}_afWxuR5L1J76I7sv+G09uLd1Uh~qD6GZgScDoAu_c3CQJl3&KQmLR2 zM%Z&5_NCxa8<1}#5{d5^F-IQj*oVz(CB&YuXd92H+3KaDhJUSKN55Ppy00000NkvXXu0mjf5}HS0 literal 0 HcmV?d00001 diff --git a/sandbox/icons/rendering_post_process_disabled.png b/sandbox/icons/rendering_post_process_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..faa3cdc71e79da9e15147486367a73783a2a81b2 GIT binary patch literal 617 zcmV-v0+#)WP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0scuuK~y+TrBO|a z+F%&Yf7CS5GJ+_S$UsVq%bvhXxN_sxONb|M=K;i(9$^IO0lIY2NC#)AGNYwxbYcu9 znfJ*g!M54;fsgm^d4E6Vf5ApF4TuH(e*epx`G$78{Vh@%#JEWR13?h5y& zdGwy*f{^f~PB0h@luD(duU4yvG;0Co6Tl! zu~>Y!Uau{~Fa$+W0-~$z*SovV9?yr95HVOR7Ehk%aivn}Wse70L17Mu zL*O{htlRCnu({{$c0ma~bz^xdMC20r_xXJO$7ZuR(J_>wvb@{L61s@1AQ<7ubU=|Tl}G(|y{ zWr>PflgZ>f9*@0z+m5|Ji6XTu9jPBMu()YlMzkt;SLp z{`=$Oj`n{*GW?LR;YS=i_)|eY!KZZq;72?%ufQ;`KywZTGj||Q00000NkvXXu0mjf D$oC(% literal 0 HcmV?d00001 diff --git a/sandbox/icons/rendering_post_process_hover.png b/sandbox/icons/rendering_post_process_hover.png new file mode 100644 index 0000000000000000000000000000000000000000..22109ff4f769ba99eb9289cd16b953213d228ade GIT binary patch literal 646 zcmV;10(t$3P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0vkz0K~y+TwNf!? z6JZqo@1i~QM7)Hymb0U14%@*%(nSk}w#iZ)yA_d4y`>NwL&>wAz)CWTh3t8W}Vb~ZnQWm$YapZ7q`(R%Lb zmSxZ6y*^0{PM~O9@vBa8V&%hjm*Z9d1?w?uXpav>gwC= zt*yC-2~t#)b{#$8oa4^ZQQQK+wh*HHtHfiu-=^&}h)D{hY`b^G=TjFJcECe{0X%Xmoqj(nNsa-h)43dpM6^&SbP@;z2Aa+0OL)5b`_a*dn}dVT zqtWQ6cC?MocMy-quee;U;X4WS<#$F0NRN3fDj(@ZB42`v_jHQMeA&}cLq5ZDBM z0p@@TtEe||&#XP*@dpgNrfI{_4&kg`ukTkXm7iFdX9)M`gT4oJ0AJiyo6Y8@6GC*J z=by^5{1q!|9O52**mr{-5JmA41f*;>yIv}l9!ru`#yM8hILAHuaDE|lUB8h^r9>us gfOFh4*#$!W0KOV literal 0 HcmV?d00001 diff --git a/sandbox/tests/test scenes/tonemap/out.png b/sandbox/tests/test scenes/tonemap/out.png new file mode 100644 index 0000000000000000000000000000000000000000..e3cf93e17a7e6d5cb67d2ac6b0a2895a2f6eb716 GIT binary patch literal 74753 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 IM6N<$f`{erM*si- literal 0 HcmV?d00001 diff --git a/src/appleseed.studio/mainwindow/mainwindow.cpp b/src/appleseed.studio/mainwindow/mainwindow.cpp index 42ce097d59..a0f1386445 100644 --- a/src/appleseed.studio/mainwindow/mainwindow.cpp +++ b/src/appleseed.studio/mainwindow/mainwindow.cpp @@ -407,6 +407,7 @@ void MainWindow::build_menus() connect(m_ui->action_rendering_start_final_rendering, SIGNAL(triggered()), SLOT(slot_start_final_rendering())); connect(m_ui->action_rendering_pause_resume_rendering, SIGNAL(toggled(bool)), SLOT(slot_pause_or_resume_rendering(const bool))); connect(m_ui->action_rendering_stop_rendering, SIGNAL(triggered()), &m_rendering_manager, SLOT(slot_abort_rendering())); + connect(m_ui->action_rendering_post_process_rendering, SIGNAL(triggered()), SLOT(slot_post_process_rendering())); connect(m_ui->action_rendering_rendering_settings, SIGNAL(triggered()), SLOT(slot_show_rendering_settings_window())); // @@ -650,6 +651,10 @@ void MainWindow::build_toolbar() connect(m_action_stop_rendering, SIGNAL(triggered()), &m_rendering_manager, SLOT(slot_abort_rendering())); m_ui->main_toolbar->addAction(m_action_stop_rendering); + m_action_post_process_rendering = new QAction(load_icons("rendering_post_process"), combine_name_and_shortcut("Post Process Rendering", m_ui->action_rendering_post_process_rendering->shortcut()), this); + connect(m_action_post_process_rendering, SIGNAL(triggered()), SLOT(slot_post_process_rendering())); + m_ui->main_toolbar->addAction(m_action_post_process_rendering); + m_action_rendering_settings = new QAction(load_icons("rendering_settings"), combine_name_and_shortcut("Rendering Settings...", m_ui->action_rendering_rendering_settings->shortcut()), this); connect(m_action_rendering_settings, SIGNAL(triggered()), SLOT(slot_show_rendering_settings_window())); m_ui->main_toolbar->addAction(m_action_rendering_settings); @@ -879,6 +884,10 @@ void MainWindow::set_rendering_widgets_enabled(const bool is_enabled, const Rend m_ui->action_rendering_stop_rendering->setEnabled(allow_stop); m_action_stop_rendering->setEnabled(allow_stop); + // Rendering -> Post Process Rendering. + m_ui->action_rendering_post_process_rendering->setEnabled(allow_start); // FIXME allow for paused renderings as well + m_action_post_process_rendering->setEnabled(allow_start); // FIXME allow for paused renderings as well + // Rendering -> Rendering Settings. m_ui->action_rendering_rendering_settings->setEnabled(allow_start); m_action_rendering_settings->setEnabled(allow_start); @@ -1717,6 +1726,38 @@ void MainWindow::slot_pause_or_resume_rendering(const bool checked) update_pause_resume_checkbox(checked); } +void MainWindow::slot_post_process_rendering() +{ + Project* project = m_project_manager.get_project(); + assert(project != nullptr); + + Frame* frame = project->get_frame(); + assert(frame != nullptr); + + if (!frame->post_processing_stages().empty()) + { + // Make a temporary copy of the frame. + // Render info, AOVs and other data are not copied. + // todo: creating a frame with denoising enabled is very expensive, see benchmark_frame.cpp. + auto_release_ptr working_frame = + FrameFactory::create( + (std::string(frame->get_name()) + "_copy").c_str(), + frame->get_parameters() + .remove_path("denoiser")); + working_frame->image().copy_from(frame->image()); + + RENDERER_LOG_INFO("previewing post-processing stage:"); + + // Apply post-processing stages. + // FIXME follow stage ordering, like in MasterRenderer::postprocess() + for (PostProcessingStage& stage : frame->post_processing_stages()) + { + RENDERER_LOG_INFO(" \"%s\"", stage.get_path().c_str()); + apply_post_processing_stage(stage, working_frame.ref()); + } + } +} + void MainWindow::slot_rendering_end() { apply_false_colors_settings(); diff --git a/src/appleseed.studio/mainwindow/mainwindow.h b/src/appleseed.studio/mainwindow/mainwindow.h index ba6b8c20c5..e6d0c2846f 100644 --- a/src/appleseed.studio/mainwindow/mainwindow.h +++ b/src/appleseed.studio/mainwindow/mainwindow.h @@ -138,6 +138,7 @@ class MainWindow QAction* m_action_start_final_rendering; QAction* m_action_pause_resume_rendering; QAction* m_action_stop_rendering; + QAction* m_action_post_process_rendering; QAction* m_action_rendering_settings; QAction* m_action_fullscreen; @@ -275,6 +276,7 @@ class MainWindow const bool successful); void slot_pause_or_resume_rendering( const bool checked); + void slot_post_process_rendering(); void slot_rendering_end(); void slot_camera_changed(); diff --git a/src/appleseed.studio/mainwindow/mainwindow.ui b/src/appleseed.studio/mainwindow/mainwindow.ui index 6e98d01110..69cb229dd6 100644 --- a/src/appleseed.studio/mainwindow/mainwindow.ui +++ b/src/appleseed.studio/mainwindow/mainwindow.ui @@ -93,6 +93,7 @@ + @@ -413,6 +414,14 @@ Shift+F5 + + + P&ost Process Rendering + + + Ctrl+Shift+P + + &Rendering Settings... diff --git a/src/appleseed.studio/mainwindow/project/tools.h b/src/appleseed.studio/mainwindow/project/tools.h index 512ef04ac9..d24584cccd 100644 --- a/src/appleseed.studio/mainwindow/project/tools.h +++ b/src/appleseed.studio/mainwindow/project/tools.h @@ -129,7 +129,7 @@ class LineEditSliderAdaptor // -// Binds QLineEdit and qtcommon::DoubleSlider controls together such that updading +// Binds QLineEdit and qtcommon::DoubleSlider controls together such that updating // the value in one control updates the value in the other. // From 2d092999bb24992c7636850fa3aed71255c6c2f8 Mon Sep 17 00:00:00 2001 From: Tiago Chaves Date: Thu, 30 Jul 2020 16:04:11 -0300 Subject: [PATCH 02/13] Allow effects preview in paused renderings --- .../mainwindow/mainwindow.cpp | 23 ++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/src/appleseed.studio/mainwindow/mainwindow.cpp b/src/appleseed.studio/mainwindow/mainwindow.cpp index a0f1386445..13cca856fc 100644 --- a/src/appleseed.studio/mainwindow/mainwindow.cpp +++ b/src/appleseed.studio/mainwindow/mainwindow.cpp @@ -582,6 +582,10 @@ void MainWindow::update_pause_resume_checkbox(const bool checked) old_state = m_ui->action_rendering_pause_resume_rendering->blockSignals(true); m_ui->action_rendering_pause_resume_rendering->setChecked(checked); m_ui->action_rendering_pause_resume_rendering->blockSignals(old_state); + + //@Cleanup enable/disable post process rendering preview. + m_ui->action_rendering_post_process_rendering->setEnabled(checked); + m_action_post_process_rendering->setEnabled(checked); } void MainWindow::build_status_bar() @@ -864,9 +868,12 @@ void MainWindow::set_project_explorer_enabled(const bool is_enabled) void MainWindow::set_rendering_widgets_enabled(const bool is_enabled, const RenderingMode rendering_mode) { - const bool is_project_open = m_project_manager.is_project_open(); - const bool allow_start = is_enabled && is_project_open && rendering_mode == RenderingMode::NotRendering; - const bool allow_stop = is_enabled && is_project_open && rendering_mode != RenderingMode::NotRendering; + const bool is_enabled_and_project_open = is_enabled && m_project_manager.is_project_open(); + const bool is_not_rendering = rendering_mode == RenderingMode::NotRendering; + + const bool allow_start = is_enabled_and_project_open && is_not_rendering; + const bool allow_stop = is_enabled_and_project_open && !is_not_rendering; + const bool allow_post_process = is_enabled_and_project_open && (m_rendering_manager.is_rendering_paused() || is_not_rendering); // Rendering -> Start Interactive Rendering. m_ui->action_rendering_start_interactive_rendering->setEnabled(allow_start); @@ -885,8 +892,8 @@ void MainWindow::set_rendering_widgets_enabled(const bool is_enabled, const Rend m_action_stop_rendering->setEnabled(allow_stop); // Rendering -> Post Process Rendering. - m_ui->action_rendering_post_process_rendering->setEnabled(allow_start); // FIXME allow for paused renderings as well - m_action_post_process_rendering->setEnabled(allow_start); // FIXME allow for paused renderings as well + m_ui->action_rendering_post_process_rendering->setEnabled(allow_post_process); + m_action_post_process_rendering->setEnabled(allow_post_process); // Rendering -> Rendering Settings. m_ui->action_rendering_rendering_settings->setEnabled(allow_start); @@ -903,15 +910,15 @@ void MainWindow::set_rendering_widgets_enabled(const bool is_enabled, const Rend // Clear frame. render_tab->set_clear_frame_button_enabled( - is_enabled && is_project_open && rendering_mode == RenderingMode::NotRendering); + is_enabled_and_project_open && rendering_mode == RenderingMode::NotRendering); // Set/clear rendering region. render_tab->set_render_region_buttons_enabled( - is_enabled && is_project_open && rendering_mode != RenderingMode::FinalRendering); + is_enabled_and_project_open && rendering_mode != RenderingMode::FinalRendering); // Scene picker. render_tab->get_scene_picking_handler()->set_enabled( - is_enabled && is_project_open && rendering_mode != RenderingMode::FinalRendering); + is_enabled_and_project_open && rendering_mode != RenderingMode::FinalRendering); } } } From ed4b852c33875b0fce86d917b69f8becdb3b8840 Mon Sep 17 00:00:00 2001 From: Tiago Chaves Date: Thu, 30 Jul 2020 17:08:03 -0300 Subject: [PATCH 03/13] Update duplicate shortcut --- src/appleseed.studio/mainwindow/mainwindow.cpp | 12 +++++++----- src/appleseed.studio/mainwindow/mainwindow.ui | 2 +- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/appleseed.studio/mainwindow/mainwindow.cpp b/src/appleseed.studio/mainwindow/mainwindow.cpp index 13cca856fc..ae6bf756f4 100644 --- a/src/appleseed.studio/mainwindow/mainwindow.cpp +++ b/src/appleseed.studio/mainwindow/mainwindow.cpp @@ -582,10 +582,6 @@ void MainWindow::update_pause_resume_checkbox(const bool checked) old_state = m_ui->action_rendering_pause_resume_rendering->blockSignals(true); m_ui->action_rendering_pause_resume_rendering->setChecked(checked); m_ui->action_rendering_pause_resume_rendering->blockSignals(old_state); - - //@Cleanup enable/disable post process rendering preview. - m_ui->action_rendering_post_process_rendering->setEnabled(checked); - m_action_post_process_rendering->setEnabled(checked); } void MainWindow::build_status_bar() @@ -1724,6 +1720,10 @@ void MainWindow::slot_pause_or_resume_rendering(const bool checked) { assert(!m_rendering_manager.is_rendering_paused()); m_rendering_manager.pause_rendering(); + + //@CLEANUP enable/disable post process rendering preview. + m_ui->action_rendering_post_process_rendering->setEnabled(true); + m_action_post_process_rendering->setEnabled(true); } else { @@ -1756,7 +1756,9 @@ void MainWindow::slot_post_process_rendering() RENDERER_LOG_INFO("previewing post-processing stage:"); // Apply post-processing stages. - // FIXME follow stage ordering, like in MasterRenderer::postprocess() + //@FIXME follow stage ordering, like in MasterRenderer::postprocess() + //@NOTE actually.. it might make more sense to only preview a single effect + // at a time (considering this is triggered when parameters are changed.. ?) for (PostProcessingStage& stage : frame->post_processing_stages()) { RENDERER_LOG_INFO(" \"%s\"", stage.get_path().c_str()); diff --git a/src/appleseed.studio/mainwindow/mainwindow.ui b/src/appleseed.studio/mainwindow/mainwindow.ui index 69cb229dd6..2085023f80 100644 --- a/src/appleseed.studio/mainwindow/mainwindow.ui +++ b/src/appleseed.studio/mainwindow/mainwindow.ui @@ -419,7 +419,7 @@ P&ost Process Rendering - Ctrl+Shift+P + Ctrl+Shift+F5 From 423af69d9bd3bd8c5da4ec59e03bc3cb22e92f69 Mon Sep 17 00:00:00 2001 From: Tiago Chaves Date: Fri, 31 Jul 2020 15:42:16 -0300 Subject: [PATCH 04/13] Specialize ProjectBuilder::edit_entity for post processing --- .../mainwindow/project/projectbuilder.h | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/appleseed.studio/mainwindow/project/projectbuilder.h b/src/appleseed.studio/mainwindow/project/projectbuilder.h index 54e6ffc7d9..216065b407 100644 --- a/src/appleseed.studio/mainwindow/project/projectbuilder.h +++ b/src/appleseed.studio/mainwindow/project/projectbuilder.h @@ -39,6 +39,7 @@ #include "renderer/api/environment.h" #include "renderer/api/environmentedf.h" #include "renderer/api/light.h" +#include "renderer/api/postprocessing.h" #include "renderer/api/project.h" #include "renderer/api/scene.h" #include "renderer/api/shadergroup.h" @@ -96,6 +97,13 @@ class ProjectBuilder ParentEntity& parent, const foundation::Dictionary& values) const; + // Simulate partial specialization of edit_entity() for Entity = renderer::PostProcessingStage. + template + renderer::PostProcessingStage* edit_entity( + renderer::PostProcessingStage* old_entity, + ParentEntity& parent, + const foundation::Dictionary& values) const; + renderer::Frame* edit_frame( const foundation::Dictionary& values) const; @@ -300,6 +308,26 @@ inline renderer::Light* ProjectBuilder::edit_entity( return new_entity_ptr; } +template +inline renderer::PostProcessingStage* ProjectBuilder::edit_entity( + renderer::PostProcessingStage* old_entity, + ParentEntity& parent, + const foundation::Dictionary& values) const +{ + foundation::auto_release_ptr new_entity( + create_entity(values)); + renderer::PostProcessingStage* new_entity_ptr = new_entity.get(); + + renderer::EntityTraits::remove_entity(old_entity, parent); + renderer::EntityTraits::insert_entity(new_entity, parent); + + //@TODO create a slot_notify_post_processing_stage_modification() + // then apply the changes into a copy of the frame for preview + slot_notify_project_modification(); + + return new_entity_ptr; +} + template foundation::auto_release_ptr ProjectBuilder::create_entity( const foundation::Dictionary& values) const From 6b8b15352061631f6a7ed6b7f51bd1df6589abf6 Mon Sep 17 00:00:00 2001 From: Tiago Chaves Date: Fri, 31 Jul 2020 16:28:20 -0300 Subject: [PATCH 05/13] Signal post-processing stages modifications --- src/appleseed.studio/mainwindow/mainwindow.cpp | 12 ++++++++++++ src/appleseed.studio/mainwindow/mainwindow.h | 1 + .../mainwindow/project/projectbuilder.h | 8 ++++++++ .../mainwindow/project/projectexplorer.cpp | 5 +++++ .../mainwindow/project/projectexplorer.h | 1 + 5 files changed, 27 insertions(+) diff --git a/src/appleseed.studio/mainwindow/mainwindow.cpp b/src/appleseed.studio/mainwindow/mainwindow.cpp index ae6bf756f4..9df8fe3061 100644 --- a/src/appleseed.studio/mainwindow/mainwindow.cpp +++ b/src/appleseed.studio/mainwindow/mainwindow.cpp @@ -782,6 +782,11 @@ void MainWindow::update_project_explorer() m_project_explorer, SIGNAL(signal_project_modified()), SLOT(slot_project_modified())); + connect( + //@NOTE we probably need an argument to know which stage was altered + m_project_explorer, SIGNAL(signal_post_processing_stage_modified()), + SLOT(slot_post_processing_stage_modified())); + connect( m_project_explorer, SIGNAL(signal_frame_modified()), SLOT(slot_frame_modified())); @@ -1609,6 +1614,13 @@ void MainWindow::slot_project_modified() update_window_title(); } +void MainWindow::slot_post_processing_stage_modified() +{ + assert(m_project_manager.is_project_open()); + + //@TODO get the modified stage and render it to a copy of the frame +} + void MainWindow::slot_toggle_project_file_monitoring(const bool checked) { if (checked) diff --git a/src/appleseed.studio/mainwindow/mainwindow.h b/src/appleseed.studio/mainwindow/mainwindow.h index e6d0c2846f..708a671e38 100644 --- a/src/appleseed.studio/mainwindow/mainwindow.h +++ b/src/appleseed.studio/mainwindow/mainwindow.h @@ -257,6 +257,7 @@ class MainWindow void slot_pack_project_as(); void slot_close_project(); void slot_project_modified(); + void slot_post_processing_stage_modified(); //@INCOMPLETE // Project file monitoring. void slot_toggle_project_file_monitoring(const bool checked); diff --git a/src/appleseed.studio/mainwindow/project/projectbuilder.h b/src/appleseed.studio/mainwindow/project/projectbuilder.h index 216065b407..56d6c3f7ee 100644 --- a/src/appleseed.studio/mainwindow/project/projectbuilder.h +++ b/src/appleseed.studio/mainwindow/project/projectbuilder.h @@ -110,6 +110,8 @@ class ProjectBuilder signals: void signal_project_modified() const; void signal_frame_modified() const; + //@INCOMPLETE check if a param is required + void signal_post_processing_stage_modified() const; public slots: void slot_notify_project_modification() const; @@ -318,11 +320,17 @@ inline renderer::PostProcessingStage* ProjectBuilder::edit_entity( create_entity(values)); renderer::PostProcessingStage* new_entity_ptr = new_entity.get(); + auto old_model = old_entity->get_model(); + auto new_model = new_entity->get_model(); + + assert(old_model == new_model); + renderer::EntityTraits::remove_entity(old_entity, parent); renderer::EntityTraits::insert_entity(new_entity, parent); //@TODO create a slot_notify_post_processing_stage_modification() // then apply the changes into a copy of the frame for preview + emit signal_post_processing_stage_modified(); slot_notify_project_modification(); return new_entity_ptr; diff --git a/src/appleseed.studio/mainwindow/project/projectexplorer.cpp b/src/appleseed.studio/mainwindow/project/projectexplorer.cpp index 7f6f9306da..98f003e089 100644 --- a/src/appleseed.studio/mainwindow/project/projectexplorer.cpp +++ b/src/appleseed.studio/mainwindow/project/projectexplorer.cpp @@ -118,6 +118,11 @@ ProjectExplorer::ProjectExplorer( connect( &m_project_builder, SIGNAL(signal_frame_modified()), SIGNAL(signal_frame_modified())); + + //@INCOMPLETE + connect( + &m_project_builder, SIGNAL(signal_post_processing_stage_modified()), + SIGNAL(signal_post_processing_stage_modified())); } ProjectExplorer::~ProjectExplorer() diff --git a/src/appleseed.studio/mainwindow/project/projectexplorer.h b/src/appleseed.studio/mainwindow/project/projectexplorer.h index 67730da9e5..65615e9c3e 100644 --- a/src/appleseed.studio/mainwindow/project/projectexplorer.h +++ b/src/appleseed.studio/mainwindow/project/projectexplorer.h @@ -87,6 +87,7 @@ class ProjectExplorer signals: void signal_project_modified() const; void signal_frame_modified() const; + void signal_post_processing_stage_modified() const; //@INCOMPLETE private: QTreeWidget* m_tree_widget; From 470674d0bc312a5dd03820a712e21835e912e67f Mon Sep 17 00:00:00 2001 From: Tiago Chaves Date: Fri, 31 Jul 2020 18:45:35 -0300 Subject: [PATCH 06/13] Apply effects on change --- .../mainwindow/mainwindow.cpp | 54 +++++++++++++++++-- src/appleseed.studio/mainwindow/mainwindow.h | 2 +- .../mainwindow/project/projectbuilder.h | 5 +- .../mainwindow/project/projectexplorer.cpp | 5 +- .../mainwindow/project/projectexplorer.h | 2 +- 5 files changed, 57 insertions(+), 11 deletions(-) diff --git a/src/appleseed.studio/mainwindow/mainwindow.cpp b/src/appleseed.studio/mainwindow/mainwindow.cpp index 9df8fe3061..c09ed1dd18 100644 --- a/src/appleseed.studio/mainwindow/mainwindow.cpp +++ b/src/appleseed.studio/mainwindow/mainwindow.cpp @@ -784,8 +784,8 @@ void MainWindow::update_project_explorer() connect( //@NOTE we probably need an argument to know which stage was altered - m_project_explorer, SIGNAL(signal_post_processing_stage_modified()), - SLOT(slot_post_processing_stage_modified())); + m_project_explorer, SIGNAL(signal_post_processing_stage_modified(const QString&)), + SLOT(slot_post_processing_stage_modified(const QString&))); connect( m_project_explorer, SIGNAL(signal_frame_modified()), @@ -1614,11 +1614,59 @@ void MainWindow::slot_project_modified() update_window_title(); } -void MainWindow::slot_post_processing_stage_modified() +void MainWindow::slot_post_processing_stage_modified(const QString& stage_name) { assert(m_project_manager.is_project_open()); +#if 0 //@TODO get the modified stage and render it to a copy of the frame + PostProcessingStageFactoryRegistrar factory_registrar; + + auto factory = factory_registrar.lookup(stage_name.toStdString().c_str()); + const ParamArray empty_param_array; + + auto_release_ptr stage( + factory->create((std::string("__") + stage_name.toStdString()).c_str(), empty_param_array)); + + // Apply post-processing stage. + Project* project = m_project_manager.get_project(); + assert(project != nullptr); + + Frame* frame = project->get_frame(); + assert(frame != nullptr); + + //@FIXME create a copy of the frame + apply_post_processing_stage(stage.ref(), *frame); +#endif + + Project* project = m_project_manager.get_project(); + assert(project != nullptr); + + Frame* frame = project->get_frame(); + assert(frame != nullptr); + + if (!frame->post_processing_stages().empty()) + { + // Make a temporary copy of the frame. + // Render info, AOVs and other data are not copied. + // todo: creating a frame with denoising enabled is very expensive, see benchmark_frame.cpp. + auto_release_ptr working_frame = + FrameFactory::create( + (std::string(frame->get_name()) + "_copy").c_str(), + frame->get_parameters().remove_path("denoiser")); + working_frame->image().copy_from(frame->image()); + + // Preview the post-processing stage changes. + for (PostProcessingStage& stage : frame->post_processing_stages()) + { + auto model_str = stage.get_model(); + auto name_str = stage.get_name(); + //@INCOMPLETE make sure this is applying the new (i.e. changed) + // settings.. otherwise we'd need to pass it through the signal + if (model_str == stage_name) + apply_post_processing_stage(stage, working_frame.ref()); + } + } } void MainWindow::slot_toggle_project_file_monitoring(const bool checked) diff --git a/src/appleseed.studio/mainwindow/mainwindow.h b/src/appleseed.studio/mainwindow/mainwindow.h index 708a671e38..4ffdf673fa 100644 --- a/src/appleseed.studio/mainwindow/mainwindow.h +++ b/src/appleseed.studio/mainwindow/mainwindow.h @@ -257,7 +257,7 @@ class MainWindow void slot_pack_project_as(); void slot_close_project(); void slot_project_modified(); - void slot_post_processing_stage_modified(); //@INCOMPLETE + void slot_post_processing_stage_modified(const QString& stage_name); // Project file monitoring. void slot_toggle_project_file_monitoring(const bool checked); diff --git a/src/appleseed.studio/mainwindow/project/projectbuilder.h b/src/appleseed.studio/mainwindow/project/projectbuilder.h index 56d6c3f7ee..f3723fbdad 100644 --- a/src/appleseed.studio/mainwindow/project/projectbuilder.h +++ b/src/appleseed.studio/mainwindow/project/projectbuilder.h @@ -110,8 +110,7 @@ class ProjectBuilder signals: void signal_project_modified() const; void signal_frame_modified() const; - //@INCOMPLETE check if a param is required - void signal_post_processing_stage_modified() const; + void signal_post_processing_stage_modified(const QString& stage_name) const; public slots: void slot_notify_project_modification() const; @@ -330,7 +329,7 @@ inline renderer::PostProcessingStage* ProjectBuilder::edit_entity( //@TODO create a slot_notify_post_processing_stage_modification() // then apply the changes into a copy of the frame for preview - emit signal_post_processing_stage_modified(); + emit signal_post_processing_stage_modified(QString::fromStdString(new_model)); slot_notify_project_modification(); return new_entity_ptr; diff --git a/src/appleseed.studio/mainwindow/project/projectexplorer.cpp b/src/appleseed.studio/mainwindow/project/projectexplorer.cpp index 98f003e089..e873a6fa26 100644 --- a/src/appleseed.studio/mainwindow/project/projectexplorer.cpp +++ b/src/appleseed.studio/mainwindow/project/projectexplorer.cpp @@ -119,10 +119,9 @@ ProjectExplorer::ProjectExplorer( &m_project_builder, SIGNAL(signal_frame_modified()), SIGNAL(signal_frame_modified())); - //@INCOMPLETE connect( - &m_project_builder, SIGNAL(signal_post_processing_stage_modified()), - SIGNAL(signal_post_processing_stage_modified())); + &m_project_builder, SIGNAL(signal_post_processing_stage_modified(const QString&)), + SIGNAL(signal_post_processing_stage_modified(const QString&))); } ProjectExplorer::~ProjectExplorer() diff --git a/src/appleseed.studio/mainwindow/project/projectexplorer.h b/src/appleseed.studio/mainwindow/project/projectexplorer.h index 65615e9c3e..25e0ab80f2 100644 --- a/src/appleseed.studio/mainwindow/project/projectexplorer.h +++ b/src/appleseed.studio/mainwindow/project/projectexplorer.h @@ -87,7 +87,7 @@ class ProjectExplorer signals: void signal_project_modified() const; void signal_frame_modified() const; - void signal_post_processing_stage_modified() const; //@INCOMPLETE + void signal_post_processing_stage_modified(const QString& stage_name) const; private: QTreeWidget* m_tree_widget; From 1ddd946e0fab6879cd124eb07588d0c5894df8a0 Mon Sep 17 00:00:00 2001 From: Tiago Chaves Date: Mon, 3 Aug 2020 16:00:38 -0300 Subject: [PATCH 07/13] Reload stage previews as they are modified --- .../mainwindow/mainwindow.cpp | 37 ++++--------------- src/appleseed.studio/mainwindow/mainwindow.h | 2 +- .../mainwindow/project/projectbuilder.h | 13 ++----- 3 files changed, 12 insertions(+), 40 deletions(-) diff --git a/src/appleseed.studio/mainwindow/mainwindow.cpp b/src/appleseed.studio/mainwindow/mainwindow.cpp index c09ed1dd18..4e4c073b22 100644 --- a/src/appleseed.studio/mainwindow/mainwindow.cpp +++ b/src/appleseed.studio/mainwindow/mainwindow.cpp @@ -783,7 +783,6 @@ void MainWindow::update_project_explorer() SLOT(slot_project_modified())); connect( - //@NOTE we probably need an argument to know which stage was altered m_project_explorer, SIGNAL(signal_post_processing_stage_modified(const QString&)), SLOT(slot_post_processing_stage_modified(const QString&))); @@ -1614,30 +1613,11 @@ void MainWindow::slot_project_modified() update_window_title(); } -void MainWindow::slot_post_processing_stage_modified(const QString& stage_name) +void MainWindow::slot_post_processing_stage_modified(const QString& stage_model) { assert(m_project_manager.is_project_open()); -#if 0 - //@TODO get the modified stage and render it to a copy of the frame - PostProcessingStageFactoryRegistrar factory_registrar; - - auto factory = factory_registrar.lookup(stage_name.toStdString().c_str()); - const ParamArray empty_param_array; - - auto_release_ptr stage( - factory->create((std::string("__") + stage_name.toStdString()).c_str(), empty_param_array)); - - // Apply post-processing stage. - Project* project = m_project_manager.get_project(); - assert(project != nullptr); - - Frame* frame = project->get_frame(); - assert(frame != nullptr); - - //@FIXME create a copy of the frame - apply_post_processing_stage(stage.ref(), *frame); -#endif + //@REFACTOR most of this is copy-pasted from apply_false_colors_settings Project* project = m_project_manager.get_project(); assert(project != nullptr); @@ -1656,14 +1636,10 @@ void MainWindow::slot_post_processing_stage_modified(const QString& stage_name) frame->get_parameters().remove_path("denoiser")); working_frame->image().copy_from(frame->image()); - // Preview the post-processing stage changes. + // Preview the post-processing stage that was modified. for (PostProcessingStage& stage : frame->post_processing_stages()) { - auto model_str = stage.get_model(); - auto name_str = stage.get_name(); - //@INCOMPLETE make sure this is applying the new (i.e. changed) - // settings.. otherwise we'd need to pass it through the signal - if (model_str == stage_name) + if (stage.get_model() == stage_model) apply_post_processing_stage(stage, working_frame.ref()); } } @@ -1793,6 +1769,8 @@ void MainWindow::slot_pause_or_resume_rendering(const bool checked) update_pause_resume_checkbox(checked); } +//@CLEANUP it may make more sense to remove this altogether, if simply +// previewing effects when stage values are changed is a good solution void MainWindow::slot_post_process_rendering() { Project* project = m_project_manager.get_project(); @@ -1809,8 +1787,7 @@ void MainWindow::slot_post_process_rendering() auto_release_ptr working_frame = FrameFactory::create( (std::string(frame->get_name()) + "_copy").c_str(), - frame->get_parameters() - .remove_path("denoiser")); + frame->get_parameters().remove_path("denoiser")); working_frame->image().copy_from(frame->image()); RENDERER_LOG_INFO("previewing post-processing stage:"); diff --git a/src/appleseed.studio/mainwindow/mainwindow.h b/src/appleseed.studio/mainwindow/mainwindow.h index 4ffdf673fa..a3fe53614a 100644 --- a/src/appleseed.studio/mainwindow/mainwindow.h +++ b/src/appleseed.studio/mainwindow/mainwindow.h @@ -257,7 +257,7 @@ class MainWindow void slot_pack_project_as(); void slot_close_project(); void slot_project_modified(); - void slot_post_processing_stage_modified(const QString& stage_name); + void slot_post_processing_stage_modified(const QString& stage_model); // Project file monitoring. void slot_toggle_project_file_monitoring(const bool checked); diff --git a/src/appleseed.studio/mainwindow/project/projectbuilder.h b/src/appleseed.studio/mainwindow/project/projectbuilder.h index f3723fbdad..2e822d6279 100644 --- a/src/appleseed.studio/mainwindow/project/projectbuilder.h +++ b/src/appleseed.studio/mainwindow/project/projectbuilder.h @@ -110,7 +110,7 @@ class ProjectBuilder signals: void signal_project_modified() const; void signal_frame_modified() const; - void signal_post_processing_stage_modified(const QString& stage_name) const; + void signal_post_processing_stage_modified(const QString& stage_model) const; public slots: void slot_notify_project_modification() const; @@ -319,19 +319,14 @@ inline renderer::PostProcessingStage* ProjectBuilder::edit_entity( create_entity(values)); renderer::PostProcessingStage* new_entity_ptr = new_entity.get(); - auto old_model = old_entity->get_model(); - auto new_model = new_entity->get_model(); - - assert(old_model == new_model); - renderer::EntityTraits::remove_entity(old_entity, parent); renderer::EntityTraits::insert_entity(new_entity, parent); - //@TODO create a slot_notify_post_processing_stage_modification() - // then apply the changes into a copy of the frame for preview - emit signal_post_processing_stage_modified(QString::fromStdString(new_model)); slot_notify_project_modification(); + // Signal the modified stage, so that it can be previewed. + emit signal_post_processing_stage_modified(QString::fromUtf8(new_entity_ptr->get_model())); + return new_entity_ptr; } From 3382ce9281bf1bf379a4ab64726fa0b98f973b24 Mon Sep 17 00:00:00 2001 From: Tiago Chaves Date: Wed, 5 Aug 2020 14:38:03 -0300 Subject: [PATCH 08/13] Use the stage uid (instead of name) to reload --- .../mainwindow/mainwindow.cpp | 32 ++++++++++++++++--- src/appleseed.studio/mainwindow/mainwindow.h | 2 +- .../mainwindow/project/projectbuilder.h | 7 ++-- .../mainwindow/project/projectexplorer.cpp | 4 +-- .../mainwindow/project/projectexplorer.h | 2 +- 5 files changed, 37 insertions(+), 10 deletions(-) diff --git a/src/appleseed.studio/mainwindow/mainwindow.cpp b/src/appleseed.studio/mainwindow/mainwindow.cpp index 4e4c073b22..b1af3ee9e1 100644 --- a/src/appleseed.studio/mainwindow/mainwindow.cpp +++ b/src/appleseed.studio/mainwindow/mainwindow.cpp @@ -783,8 +783,8 @@ void MainWindow::update_project_explorer() SLOT(slot_project_modified())); connect( - m_project_explorer, SIGNAL(signal_post_processing_stage_modified(const QString&)), - SLOT(slot_post_processing_stage_modified(const QString&))); + m_project_explorer, SIGNAL(signal_post_processing_stage_modified(const std::uint64_t)), + SLOT(slot_post_processing_stage_modified(const std::uint64_t))); connect( m_project_explorer, SIGNAL(signal_frame_modified()), @@ -1280,6 +1280,22 @@ void MainWindow::start_rendering(const RenderingMode rendering_mode) m_render_tabs["RGB"]); } +namespace +{ + auto_release_ptr make_temporary_frame_copy(Frame& frame) + { + // Make a temporary copy of the frame. + // Render info, AOVs and other data are not copied. + // todo: creating a frame with denoising enabled is very expensive, see benchmark_frame.cpp. + auto_release_ptr working_frame = FrameFactory::create( + (std::string(frame.get_name()) + "_copy").c_str(), + frame.get_parameters().remove_path("denoiser")); + working_frame->image().copy_from(frame.image()); + + return working_frame; + } +} + void MainWindow::apply_false_colors_settings() { Project* project = m_project_manager.get_project(); @@ -1293,6 +1309,9 @@ void MainWindow::apply_false_colors_settings() if (false_colors_enabled) { +#if 0 + auto_release_ptr working_frame = make_temporary_frame_copy(frame); +#else // Make a temporary copy of the frame. // Render info, AOVs and other data are not copied. // todo: creating a frame with denoising enabled is very expensive, see benchmark_frame.cpp. @@ -1302,6 +1321,7 @@ void MainWindow::apply_false_colors_settings() frame->get_parameters() .remove_path("denoiser")); working_frame->image().copy_from(frame->image()); +#endif // Create post-processing stage. auto_release_ptr stage( @@ -1613,7 +1633,7 @@ void MainWindow::slot_project_modified() update_window_title(); } -void MainWindow::slot_post_processing_stage_modified(const QString& stage_model) +void MainWindow::slot_post_processing_stage_modified(const std::uint64_t stage_uid) { assert(m_project_manager.is_project_open()); @@ -1627,6 +1647,9 @@ void MainWindow::slot_post_processing_stage_modified(const QString& stage_model) if (!frame->post_processing_stages().empty()) { +#if 0 + auto_release_ptr working_frame = make_temporary_frame_copy(frame); +#else // Make a temporary copy of the frame. // Render info, AOVs and other data are not copied. // todo: creating a frame with denoising enabled is very expensive, see benchmark_frame.cpp. @@ -1635,11 +1658,12 @@ void MainWindow::slot_post_processing_stage_modified(const QString& stage_model) (std::string(frame->get_name()) + "_copy").c_str(), frame->get_parameters().remove_path("denoiser")); working_frame->image().copy_from(frame->image()); +#endif // Preview the post-processing stage that was modified. for (PostProcessingStage& stage : frame->post_processing_stages()) { - if (stage.get_model() == stage_model) + if (stage.get_uid() == stage_uid) apply_post_processing_stage(stage, working_frame.ref()); } } diff --git a/src/appleseed.studio/mainwindow/mainwindow.h b/src/appleseed.studio/mainwindow/mainwindow.h index a3fe53614a..47c57cd96c 100644 --- a/src/appleseed.studio/mainwindow/mainwindow.h +++ b/src/appleseed.studio/mainwindow/mainwindow.h @@ -257,7 +257,7 @@ class MainWindow void slot_pack_project_as(); void slot_close_project(); void slot_project_modified(); - void slot_post_processing_stage_modified(const QString& stage_model); + void slot_post_processing_stage_modified(const std::uint64_t stage_uid); // Project file monitoring. void slot_toggle_project_file_monitoring(const bool checked); diff --git a/src/appleseed.studio/mainwindow/project/projectbuilder.h b/src/appleseed.studio/mainwindow/project/projectbuilder.h index 2e822d6279..b6fa6afecf 100644 --- a/src/appleseed.studio/mainwindow/project/projectbuilder.h +++ b/src/appleseed.studio/mainwindow/project/projectbuilder.h @@ -110,7 +110,8 @@ class ProjectBuilder signals: void signal_project_modified() const; void signal_frame_modified() const; - void signal_post_processing_stage_modified(const QString& stage_model) const; + // void signal_post_processing_stage_modified(const QString& stage_model) const; //@CLEANUP + void signal_post_processing_stage_modified(const std::uint64_t stage_uid) const; public slots: void slot_notify_project_modification() const; @@ -324,8 +325,10 @@ inline renderer::PostProcessingStage* ProjectBuilder::edit_entity( slot_notify_project_modification(); + //@TODO change the signal's param to quint64 and pass it the stage's UniqueID (std::uint64_t) // Signal the modified stage, so that it can be previewed. - emit signal_post_processing_stage_modified(QString::fromUtf8(new_entity_ptr->get_model())); + // emit signal_post_processing_stage_modified(QString::fromUtf8(new_entity_ptr->get_model())); //@CLEANUP + emit signal_post_processing_stage_modified(new_entity_ptr->get_uid()); return new_entity_ptr; } diff --git a/src/appleseed.studio/mainwindow/project/projectexplorer.cpp b/src/appleseed.studio/mainwindow/project/projectexplorer.cpp index e873a6fa26..18e0ff6c47 100644 --- a/src/appleseed.studio/mainwindow/project/projectexplorer.cpp +++ b/src/appleseed.studio/mainwindow/project/projectexplorer.cpp @@ -120,8 +120,8 @@ ProjectExplorer::ProjectExplorer( SIGNAL(signal_frame_modified())); connect( - &m_project_builder, SIGNAL(signal_post_processing_stage_modified(const QString&)), - SIGNAL(signal_post_processing_stage_modified(const QString&))); + &m_project_builder, SIGNAL(signal_post_processing_stage_modified(const std::uint64_t)), + SIGNAL(signal_post_processing_stage_modified(const std::uint64_t))); } ProjectExplorer::~ProjectExplorer() diff --git a/src/appleseed.studio/mainwindow/project/projectexplorer.h b/src/appleseed.studio/mainwindow/project/projectexplorer.h index 25e0ab80f2..6e8eda2e7f 100644 --- a/src/appleseed.studio/mainwindow/project/projectexplorer.h +++ b/src/appleseed.studio/mainwindow/project/projectexplorer.h @@ -87,7 +87,7 @@ class ProjectExplorer signals: void signal_project_modified() const; void signal_frame_modified() const; - void signal_post_processing_stage_modified(const QString& stage_name) const; + void signal_post_processing_stage_modified(const std::uint64_t stage_uid) const; private: QTreeWidget* m_tree_widget; From 9222133c90e9af9a9ab26bb39d888e57275d1f8f Mon Sep 17 00:00:00 2001 From: Tiago Chaves Date: Wed, 5 Aug 2020 14:46:49 -0300 Subject: [PATCH 09/13] Extract temporary frame creation into a new function --- .../mainwindow/mainwindow.cpp | 42 ++++--------------- 1 file changed, 8 insertions(+), 34 deletions(-) diff --git a/src/appleseed.studio/mainwindow/mainwindow.cpp b/src/appleseed.studio/mainwindow/mainwindow.cpp index b1af3ee9e1..50b0889754 100644 --- a/src/appleseed.studio/mainwindow/mainwindow.cpp +++ b/src/appleseed.studio/mainwindow/mainwindow.cpp @@ -1309,19 +1309,7 @@ void MainWindow::apply_false_colors_settings() if (false_colors_enabled) { -#if 0 - auto_release_ptr working_frame = make_temporary_frame_copy(frame); -#else - // Make a temporary copy of the frame. - // Render info, AOVs and other data are not copied. - // todo: creating a frame with denoising enabled is very expensive, see benchmark_frame.cpp. - auto_release_ptr working_frame = - FrameFactory::create( - (std::string(frame->get_name()) + "_copy").c_str(), - frame->get_parameters() - .remove_path("denoiser")); - working_frame->image().copy_from(frame->image()); -#endif + auto_release_ptr working_frame = make_temporary_frame_copy(*frame); // Create post-processing stage. auto_release_ptr stage( @@ -1647,25 +1635,18 @@ void MainWindow::slot_post_processing_stage_modified(const std::uint64_t stage_u if (!frame->post_processing_stages().empty()) { -#if 0 - auto_release_ptr working_frame = make_temporary_frame_copy(frame); -#else - // Make a temporary copy of the frame. - // Render info, AOVs and other data are not copied. - // todo: creating a frame with denoising enabled is very expensive, see benchmark_frame.cpp. - auto_release_ptr working_frame = - FrameFactory::create( - (std::string(frame->get_name()) + "_copy").c_str(), - frame->get_parameters().remove_path("denoiser")); - working_frame->image().copy_from(frame->image()); -#endif + auto_release_ptr working_frame = make_temporary_frame_copy(*frame); // Preview the post-processing stage that was modified. for (PostProcessingStage& stage : frame->post_processing_stages()) { - if (stage.get_uid() == stage_uid) + if (stage.get_uid() == stage_uid) { apply_post_processing_stage(stage, working_frame.ref()); + return; + } } + + assert(false); } } @@ -1805,14 +1786,7 @@ void MainWindow::slot_post_process_rendering() if (!frame->post_processing_stages().empty()) { - // Make a temporary copy of the frame. - // Render info, AOVs and other data are not copied. - // todo: creating a frame with denoising enabled is very expensive, see benchmark_frame.cpp. - auto_release_ptr working_frame = - FrameFactory::create( - (std::string(frame->get_name()) + "_copy").c_str(), - frame->get_parameters().remove_path("denoiser")); - working_frame->image().copy_from(frame->image()); + auto_release_ptr working_frame = make_temporary_frame_copy(*frame); RENDERER_LOG_INFO("previewing post-processing stage:"); From 04e6452587fbf484712fc80024435f35858527b3 Mon Sep 17 00:00:00 2001 From: Tiago Chaves Date: Wed, 5 Aug 2020 15:04:48 -0300 Subject: [PATCH 10/13] Avoid comparing every stage --- .../mainwindow/mainwindow.cpp | 25 +++++++------------ .../mainwindow/project/projectbuilder.h | 3 --- 2 files changed, 9 insertions(+), 19 deletions(-) diff --git a/src/appleseed.studio/mainwindow/mainwindow.cpp b/src/appleseed.studio/mainwindow/mainwindow.cpp index 50b0889754..7e481b951a 100644 --- a/src/appleseed.studio/mainwindow/mainwindow.cpp +++ b/src/appleseed.studio/mainwindow/mainwindow.cpp @@ -1623,31 +1623,24 @@ void MainWindow::slot_project_modified() void MainWindow::slot_post_processing_stage_modified(const std::uint64_t stage_uid) { - assert(m_project_manager.is_project_open()); - - //@REFACTOR most of this is copy-pasted from apply_false_colors_settings - Project* project = m_project_manager.get_project(); assert(project != nullptr); Frame* frame = project->get_frame(); assert(frame != nullptr); - if (!frame->post_processing_stages().empty()) - { - auto_release_ptr working_frame = make_temporary_frame_copy(*frame); + auto_release_ptr working_frame = make_temporary_frame_copy(*frame); - // Preview the post-processing stage that was modified. - for (PostProcessingStage& stage : frame->post_processing_stages()) - { - if (stage.get_uid() == stage_uid) { - apply_post_processing_stage(stage, working_frame.ref()); - return; - } + // Preview the post-processing stage that was modified. + for (PostProcessingStage& stage : frame->post_processing_stages()) + { + if (stage.get_uid() == stage_uid) { + apply_post_processing_stage(stage, working_frame.ref()); + return; } - - assert(false); } + + assert(false); } void MainWindow::slot_toggle_project_file_monitoring(const bool checked) diff --git a/src/appleseed.studio/mainwindow/project/projectbuilder.h b/src/appleseed.studio/mainwindow/project/projectbuilder.h index b6fa6afecf..f6cefdfa19 100644 --- a/src/appleseed.studio/mainwindow/project/projectbuilder.h +++ b/src/appleseed.studio/mainwindow/project/projectbuilder.h @@ -110,7 +110,6 @@ class ProjectBuilder signals: void signal_project_modified() const; void signal_frame_modified() const; - // void signal_post_processing_stage_modified(const QString& stage_model) const; //@CLEANUP void signal_post_processing_stage_modified(const std::uint64_t stage_uid) const; public slots: @@ -325,9 +324,7 @@ inline renderer::PostProcessingStage* ProjectBuilder::edit_entity( slot_notify_project_modification(); - //@TODO change the signal's param to quint64 and pass it the stage's UniqueID (std::uint64_t) // Signal the modified stage, so that it can be previewed. - // emit signal_post_processing_stage_modified(QString::fromUtf8(new_entity_ptr->get_model())); //@CLEANUP emit signal_post_processing_stage_modified(new_entity_ptr->get_uid()); return new_entity_ptr; From 0dce4fb7400d705ba9d01ab1a4b049041c829b12 Mon Sep 17 00:00:00 2001 From: Tiago Chaves Date: Thu, 6 Aug 2020 14:19:46 -0300 Subject: [PATCH 11/13] Remove dedicated 'Post Process Rendering' button --- sandbox/icons/rendering_post_process.png | Bin 705 -> 0 bytes .../icons/rendering_post_process_disabled.png | Bin 617 -> 0 bytes .../icons/rendering_post_process_hover.png | Bin 646 -> 0 bytes sandbox/tests/test scenes/tonemap/out.png | Bin 74753 -> 0 bytes .../mainwindow/mainwindow.cpp | 56 ++---------------- src/appleseed.studio/mainwindow/mainwindow.h | 2 - src/appleseed.studio/mainwindow/mainwindow.ui | 9 --- 7 files changed, 6 insertions(+), 61 deletions(-) delete mode 100644 sandbox/icons/rendering_post_process.png delete mode 100644 sandbox/icons/rendering_post_process_disabled.png delete mode 100644 sandbox/icons/rendering_post_process_hover.png delete mode 100644 sandbox/tests/test scenes/tonemap/out.png diff --git a/sandbox/icons/rendering_post_process.png b/sandbox/icons/rendering_post_process.png deleted file mode 100644 index 584aa06b3f6d151ee379b97080344b6f7be8edd6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 705 zcmV;y0zUnTP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0#->xK~y+TrBcgp z5^)gT-|}dA6!5Uf(?X(&!SsNM{s9`b-Xu!&)@afr2NKehgoGmoA@SN6=pR60dN4t& zUX2E#2aIB&p*|qRq{?F#x4^Q_EW2b4z4={+`DVUvXMPOzzaVm)LpU7P7Yc=8DwPst zN2%lS(#6qe^bk!@jQpHIGMS_&lgTBY-~Z&G z(O5Scjc?_W^z}?8a}7*(Q5=iKUea=H2CLO-vop+NLP!83a@ed)p@=bJJ~u%=pJymS z-iV^;2a`to@bIj%w=^~(tFg_^SLt;6svrn2h$K*f<2aqsWO@zab6`^Yb#(NR=lN%) zQt4YT7`$7lRB{kc8w`eH>?gVH?K0S#F#*Tp&(-Q9Q4kjVKHu7xy}hT+W^>K$@vLZR z4Yp8&KZ6mx(fM31_Z4%x-|apa4Tl{3)&NWw0)eR4>wV60-0fDY^}*qAtmw2_?4^4B z9t$72qKFZ=8_8y~o*%8&y+ys=ZnN3)<#Kr+Zy*#3*Fupt(4BnZ|<^=GcrqU^9 zj~IV+wFF5jK|~OFy;^024ENl-p;gjW_j5S zDG$!?;RH9}_afWxuR5L1J76I7sv+G09uLd1Uh~qD6GZgScDoAu_c3CQJl3&KQmLR2 zM%Z&5_NCxa8<1}#5{d5^F-IQj*oVz(CB&YuXd92H+3KaDhJUSKN55Ppy00000NkvXXu0mjf5}HS0 diff --git a/sandbox/icons/rendering_post_process_disabled.png b/sandbox/icons/rendering_post_process_disabled.png deleted file mode 100644 index faa3cdc71e79da9e15147486367a73783a2a81b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 617 zcmV-v0+#)WP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0scuuK~y+TrBO|a z+F%&Yf7CS5GJ+_S$UsVq%bvhXxN_sxONb|M=K;i(9$^IO0lIY2NC#)AGNYwxbYcu9 znfJ*g!M54;fsgm^d4E6Vf5ApF4TuH(e*epx`G$78{Vh@%#JEWR13?h5y& zdGwy*f{^f~PB0h@luD(duU4yvG;0Co6Tl! zu~>Y!Uau{~Fa$+W0-~$z*SovV9?yr95HVOR7Ehk%aivn}Wse70L17Mu zL*O{htlRCnu({{$c0ma~bz^xdMC20r_xXJO$7ZuR(J_>wvb@{L61s@1AQ<7ubU=|Tl}G(|y{ zWr>PflgZ>f9*@0z+m5|Ji6XTu9jPBMu()YlMzkt;SLp z{`=$Oj`n{*GW?LR;YS=i_)|eY!KZZq;72?%ufQ;`KywZTGj||Q00000NkvXXu0mjf D$oC(% diff --git a/sandbox/icons/rendering_post_process_hover.png b/sandbox/icons/rendering_post_process_hover.png deleted file mode 100644 index 22109ff4f769ba99eb9289cd16b953213d228ade..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 646 zcmV;10(t$3P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0vkz0K~y+TwNf!? z6JZqo@1i~QM7)Hymb0U14%@*%(nSk}w#iZ)yA_d4y`>NwL&>wAz)CWTh3t8W}Vb~ZnQWm$YapZ7q`(R%Lb zmSxZ6y*^0{PM~O9@vBa8V&%hjm*Z9d1?w?uXpav>gwC= zt*yC-2~t#)b{#$8oa4^ZQQQK+wh*HHtHfiu-=^&}h)D{hY`b^G=TjFJcECe{0X%Xmoqj(nNsa-h)43dpM6^&SbP@;z2Aa+0OL)5b`_a*dn}dVT zqtWQ6cC?MocMy-quee;U;X4WS<#$F0NRN3fDj(@ZB42`v_jHQMeA&}cLq5ZDBM z0p@@TtEe||&#XP*@dpgNrfI{_4&kg`ukTkXm7iFdX9)M`gT4oJ0AJiyo6Y8@6GC*J z=by^5{1q!|9O52**mr{-5JmA41f*;>yIv}l9!ru`#yM8hILAHuaDE|lUB8h^r9>us gfOFh4*#$!W0KOV diff --git a/sandbox/tests/test scenes/tonemap/out.png b/sandbox/tests/test scenes/tonemap/out.png deleted file mode 100644 index e3cf93e17a7e6d5cb67d2ac6b0a2895a2f6eb716..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74753 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 IM6N<$f`{erM*si- diff --git a/src/appleseed.studio/mainwindow/mainwindow.cpp b/src/appleseed.studio/mainwindow/mainwindow.cpp index 7e481b951a..e0c55f6c00 100644 --- a/src/appleseed.studio/mainwindow/mainwindow.cpp +++ b/src/appleseed.studio/mainwindow/mainwindow.cpp @@ -407,7 +407,6 @@ void MainWindow::build_menus() connect(m_ui->action_rendering_start_final_rendering, SIGNAL(triggered()), SLOT(slot_start_final_rendering())); connect(m_ui->action_rendering_pause_resume_rendering, SIGNAL(toggled(bool)), SLOT(slot_pause_or_resume_rendering(const bool))); connect(m_ui->action_rendering_stop_rendering, SIGNAL(triggered()), &m_rendering_manager, SLOT(slot_abort_rendering())); - connect(m_ui->action_rendering_post_process_rendering, SIGNAL(triggered()), SLOT(slot_post_process_rendering())); connect(m_ui->action_rendering_rendering_settings, SIGNAL(triggered()), SLOT(slot_show_rendering_settings_window())); // @@ -651,10 +650,6 @@ void MainWindow::build_toolbar() connect(m_action_stop_rendering, SIGNAL(triggered()), &m_rendering_manager, SLOT(slot_abort_rendering())); m_ui->main_toolbar->addAction(m_action_stop_rendering); - m_action_post_process_rendering = new QAction(load_icons("rendering_post_process"), combine_name_and_shortcut("Post Process Rendering", m_ui->action_rendering_post_process_rendering->shortcut()), this); - connect(m_action_post_process_rendering, SIGNAL(triggered()), SLOT(slot_post_process_rendering())); - m_ui->main_toolbar->addAction(m_action_post_process_rendering); - m_action_rendering_settings = new QAction(load_icons("rendering_settings"), combine_name_and_shortcut("Rendering Settings...", m_ui->action_rendering_rendering_settings->shortcut()), this); connect(m_action_rendering_settings, SIGNAL(triggered()), SLOT(slot_show_rendering_settings_window())); m_ui->main_toolbar->addAction(m_action_rendering_settings); @@ -868,12 +863,9 @@ void MainWindow::set_project_explorer_enabled(const bool is_enabled) void MainWindow::set_rendering_widgets_enabled(const bool is_enabled, const RenderingMode rendering_mode) { - const bool is_enabled_and_project_open = is_enabled && m_project_manager.is_project_open(); - const bool is_not_rendering = rendering_mode == RenderingMode::NotRendering; - - const bool allow_start = is_enabled_and_project_open && is_not_rendering; - const bool allow_stop = is_enabled_and_project_open && !is_not_rendering; - const bool allow_post_process = is_enabled_and_project_open && (m_rendering_manager.is_rendering_paused() || is_not_rendering); + const bool is_project_open = m_project_manager.is_project_open(); + const bool allow_start = is_enabled && is_project_open && rendering_mode == RenderingMode::NotRendering; + const bool allow_stop = is_enabled && is_project_open && rendering_mode != RenderingMode::NotRendering; // Rendering -> Start Interactive Rendering. m_ui->action_rendering_start_interactive_rendering->setEnabled(allow_start); @@ -891,10 +883,6 @@ void MainWindow::set_rendering_widgets_enabled(const bool is_enabled, const Rend m_ui->action_rendering_stop_rendering->setEnabled(allow_stop); m_action_stop_rendering->setEnabled(allow_stop); - // Rendering -> Post Process Rendering. - m_ui->action_rendering_post_process_rendering->setEnabled(allow_post_process); - m_action_post_process_rendering->setEnabled(allow_post_process); - // Rendering -> Rendering Settings. m_ui->action_rendering_rendering_settings->setEnabled(allow_start); m_action_rendering_settings->setEnabled(allow_start); @@ -910,15 +898,15 @@ void MainWindow::set_rendering_widgets_enabled(const bool is_enabled, const Rend // Clear frame. render_tab->set_clear_frame_button_enabled( - is_enabled_and_project_open && rendering_mode == RenderingMode::NotRendering); + is_enabled && is_project_open && rendering_mode == RenderingMode::NotRendering); // Set/clear rendering region. render_tab->set_render_region_buttons_enabled( - is_enabled_and_project_open && rendering_mode != RenderingMode::FinalRendering); + is_enabled && is_project_open && rendering_mode != RenderingMode::FinalRendering); // Scene picker. render_tab->get_scene_picking_handler()->set_enabled( - is_enabled_and_project_open && rendering_mode != RenderingMode::FinalRendering); + is_enabled && is_project_open && rendering_mode != RenderingMode::FinalRendering); } } } @@ -1754,10 +1742,6 @@ void MainWindow::slot_pause_or_resume_rendering(const bool checked) { assert(!m_rendering_manager.is_rendering_paused()); m_rendering_manager.pause_rendering(); - - //@CLEANUP enable/disable post process rendering preview. - m_ui->action_rendering_post_process_rendering->setEnabled(true); - m_action_post_process_rendering->setEnabled(true); } else { @@ -1767,34 +1751,6 @@ void MainWindow::slot_pause_or_resume_rendering(const bool checked) update_pause_resume_checkbox(checked); } -//@CLEANUP it may make more sense to remove this altogether, if simply -// previewing effects when stage values are changed is a good solution -void MainWindow::slot_post_process_rendering() -{ - Project* project = m_project_manager.get_project(); - assert(project != nullptr); - - Frame* frame = project->get_frame(); - assert(frame != nullptr); - - if (!frame->post_processing_stages().empty()) - { - auto_release_ptr working_frame = make_temporary_frame_copy(*frame); - - RENDERER_LOG_INFO("previewing post-processing stage:"); - - // Apply post-processing stages. - //@FIXME follow stage ordering, like in MasterRenderer::postprocess() - //@NOTE actually.. it might make more sense to only preview a single effect - // at a time (considering this is triggered when parameters are changed.. ?) - for (PostProcessingStage& stage : frame->post_processing_stages()) - { - RENDERER_LOG_INFO(" \"%s\"", stage.get_path().c_str()); - apply_post_processing_stage(stage, working_frame.ref()); - } - } -} - void MainWindow::slot_rendering_end() { apply_false_colors_settings(); diff --git a/src/appleseed.studio/mainwindow/mainwindow.h b/src/appleseed.studio/mainwindow/mainwindow.h index 47c57cd96c..7167cdc9d4 100644 --- a/src/appleseed.studio/mainwindow/mainwindow.h +++ b/src/appleseed.studio/mainwindow/mainwindow.h @@ -138,7 +138,6 @@ class MainWindow QAction* m_action_start_final_rendering; QAction* m_action_pause_resume_rendering; QAction* m_action_stop_rendering; - QAction* m_action_post_process_rendering; QAction* m_action_rendering_settings; QAction* m_action_fullscreen; @@ -277,7 +276,6 @@ class MainWindow const bool successful); void slot_pause_or_resume_rendering( const bool checked); - void slot_post_process_rendering(); void slot_rendering_end(); void slot_camera_changed(); diff --git a/src/appleseed.studio/mainwindow/mainwindow.ui b/src/appleseed.studio/mainwindow/mainwindow.ui index 2085023f80..6e98d01110 100644 --- a/src/appleseed.studio/mainwindow/mainwindow.ui +++ b/src/appleseed.studio/mainwindow/mainwindow.ui @@ -93,7 +93,6 @@ - @@ -414,14 +413,6 @@ Shift+F5 - - - P&ost Process Rendering - - - Ctrl+Shift+F5 - - &Rendering Settings... From dc8f4f4e6e65feaca36ff50a5236017cd60cb5a4 Mon Sep 17 00:00:00 2001 From: Tiago Chaves Date: Sun, 4 Oct 2020 12:13:15 -0300 Subject: [PATCH 12/13] Avoid direct changes to frame params when copying --- src/appleseed.studio/mainwindow/mainwindow.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/appleseed.studio/mainwindow/mainwindow.cpp b/src/appleseed.studio/mainwindow/mainwindow.cpp index e0c55f6c00..54091a0ada 100644 --- a/src/appleseed.studio/mainwindow/mainwindow.cpp +++ b/src/appleseed.studio/mainwindow/mainwindow.cpp @@ -1270,14 +1270,17 @@ void MainWindow::start_rendering(const RenderingMode rendering_mode) namespace { - auto_release_ptr make_temporary_frame_copy(Frame& frame) + auto_release_ptr make_temporary_frame_copy(const Frame& frame) { + // todo: creating a frame with denoising enabled is very expensive, see benchmark_frame.cpp. + ParamArray params_copy(frame.get_parameters()); + params_copy.remove_path("denoiser"); + // Make a temporary copy of the frame. // Render info, AOVs and other data are not copied. - // todo: creating a frame with denoising enabled is very expensive, see benchmark_frame.cpp. - auto_release_ptr working_frame = FrameFactory::create( - (std::string(frame.get_name()) + "_copy").c_str(), - frame.get_parameters().remove_path("denoiser")); + auto_release_ptr working_frame = + FrameFactory::create((std::string(frame.get_name()) + "_copy").c_str(), params_copy); + working_frame->image().copy_from(frame.image()); return working_frame; From 4ab64a35787235ab1cbacd3a9173ecbea09bc525 Mon Sep 17 00:00:00 2001 From: Tiago Chaves Date: Sun, 4 Oct 2020 20:13:59 -0300 Subject: [PATCH 13/13] WIP test real-time preview checkbox --- .../bindpostprocessingstage.cpp | 1 + .../mainwindow/project/projectbuilder.h | 27 ++++++++++++++++++- .../ipostprocessingstagefactory.cpp | 8 ++++++ 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/src/appleseed.python/bindpostprocessingstage.cpp b/src/appleseed.python/bindpostprocessingstage.cpp index c1a41239ba..d0b8be246c 100644 --- a/src/appleseed.python/bindpostprocessingstage.cpp +++ b/src/appleseed.python/bindpostprocessingstage.cpp @@ -82,6 +82,7 @@ void bind_post_processing_stage() .def("__init__", bpy::make_constructor(create_post_processing_stage)) .def("get_model", &PostProcessingStage::get_model) .def("get_order", &PostProcessingStage::get_order); + // @Note: this might need to be updated if a "real_time_preview" flag is added. bind_typed_entity_vector("PostProcessingStageContainer"); diff --git a/src/appleseed.studio/mainwindow/project/projectbuilder.h b/src/appleseed.studio/mainwindow/project/projectbuilder.h index f6cefdfa19..63e89f982a 100644 --- a/src/appleseed.studio/mainwindow/project/projectbuilder.h +++ b/src/appleseed.studio/mainwindow/project/projectbuilder.h @@ -324,8 +324,33 @@ inline renderer::PostProcessingStage* ProjectBuilder::edit_entity( slot_notify_project_modification(); + // @Note: we need to know whether or not to emit the signal. For this, + // we can either: + // * change the `PostProcessingStage` class to have a `bool` flag (not good) + // * pass this flag in its `params`, so that we can retrieve it here (maybe?) + // * pass the flag through `values` instead (not sure if it'd be better or not) + // + // @Fixme: if the flag was true and is now false, the effect needs to be "unapplied"! + +#if 0 + // @Note: using this to be able to inspect Dictionary values in Visual Studio.. :( + bool preview_enabled = false; + for (const auto& str : values.strings()) + { + const auto key = std::string(str.key()); + const auto value = std::string(str.value()); + if (key == "real_time_preview") + preview_enabled = true; + if (value == "real_time_preview") + preview_enabled = true; + } +#else + const bool preview_enabled = new_entity_ptr->get_parameters().get_required("real_time_preview"); +#endif + // Signal the modified stage, so that it can be previewed. - emit signal_post_processing_stage_modified(new_entity_ptr->get_uid()); + if (preview_enabled) + emit signal_post_processing_stage_modified(new_entity_ptr->get_uid()); return new_entity_ptr; } diff --git a/src/appleseed/renderer/modeling/postprocessingstage/ipostprocessingstagefactory.cpp b/src/appleseed/renderer/modeling/postprocessingstage/ipostprocessingstagefactory.cpp index d90655ee12..5d888eecc3 100644 --- a/src/appleseed/renderer/modeling/postprocessingstage/ipostprocessingstagefactory.cpp +++ b/src/appleseed/renderer/modeling/postprocessingstage/ipostprocessingstagefactory.cpp @@ -55,6 +55,14 @@ void IPostProcessingStageFactory::add_common_input_metadata(DictionaryArray& met .insert("type", "soft")) .insert("use", "required") .insert("default", "0")); + + metadata.push_back( + Dictionary() + .insert("name", "real_time_preview") + .insert("label", "Real-time Preview") + .insert("type", "boolean") + .insert("use", "required") + .insert("default", "false")); } } // namespace renderer