Skip to content

Commit

Permalink
Saving PerfAnalyzer show/hide state; Creating renderers on demand
Browse files Browse the repository at this point in the history
  • Loading branch information
nadult committed Oct 19, 2024
1 parent 9cfabca commit 0c587e1
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 14 deletions.
38 changes: 25 additions & 13 deletions src/lucid_app.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@
#include <fwk/vulkan/vulkan_swap_chain.h>
#include <fwk/vulkan/vulkan_window.h>

// TODO: device lost crash when resizing window with path tracer

FilePath mainPath() {
return platform == Platform::msvc ? FilePath::current().get() : executablePath().parent();
}
Expand Down Expand Up @@ -114,9 +116,15 @@ void LucidApp::setConfig(const AnyConfig &config) {
m_select_stats_tab = config.get("selected_stats_tab", -1);
if(auto *scene_name = config.get<string>("scene"))
selectSetup(*scene_name);
if(m_perf_analyzer)
if(config.get("show_perf_analyzer", true)) {
if(!m_perf_analyzer)
m_perf_analyzer.emplace();
if(auto *sub = config.subConfig("perf_analyzer"))
m_perf_analyzer->setConfig(*sub);
} else {
m_perf_analyzer.reset();
}

if(auto *sub = config.subConfig("gui"))
m_gui.setConfig(*sub);
if(auto *lighting = config.subConfig("lighting"))
Expand Down Expand Up @@ -150,7 +158,7 @@ void LucidApp::saveConfig() const {
out.set("window_maximized", is_maximized);
out.set("show_stats", m_show_stats);
out.set("selected_stats_tab", m_selected_stats_tab);

out.set("show_perf_analyzer", !!m_perf_analyzer);
if(m_setup_idx != -1)
out.set("scene", m_setups[m_setup_idx]->name);
if(m_perf_analyzer)
Expand Down Expand Up @@ -214,8 +222,7 @@ bool LucidApp::updateViewport() {
Ex<void> LucidApp::updateRenderer() {
PERF_SCOPE();

bool do_update = !m_pbr_renderer || !m_simple_renderer || !m_lucid_renderer ||
m_lucid_renderer->opts() != m_lucid_opts;
bool do_update = m_lucid_renderer && m_lucid_renderer->opts() != m_lucid_opts;
if(updateViewport())
do_update = true;

Expand All @@ -235,20 +242,11 @@ Ex<void> LucidApp::updateRenderer() {
}

if(do_update) {
auto swap_chain = m_device->swapChain();
m_lucid_renderer.reset();
m_simple_renderer.reset();
m_pbr_renderer.reset();
m_path_tracer.reset();
m_device->waitForIdle();

m_pbr_renderer = EX_PASS(
construct<PbrRenderer>(m_device, *m_shader_compiler, m_viewport, swap_chain->format()));
m_simple_renderer = EX_PASS(construct<SimpleRenderer>(m_device, *m_shader_compiler,
m_viewport, swap_chain->format()));
m_lucid_renderer = EX_PASS(construct<LucidRenderer>(
*m_device, *m_shader_compiler, swap_chain->format(), m_lucid_opts, m_viewport.size()));

m_last_shader_update_time = m_last_time;
m_scene_frame_id = 0;
}
Expand All @@ -258,6 +256,20 @@ Ex<void> LucidApp::updateRenderer() {
m_rendering_mode = RenderingMode::simple;
}

auto swap_chain = m_device->swapChain();

if(m_rendering_mode == RenderingMode::pbr && !m_pbr_renderer)
m_pbr_renderer = EX_PASS(
construct<PbrRenderer>(m_device, *m_shader_compiler, m_viewport, swap_chain->format()));

if(isOneOf(m_rendering_mode, RenderingMode::simple, RenderingMode::mixed) && !m_simple_renderer)
m_simple_renderer = EX_PASS(construct<SimpleRenderer>(m_device, *m_shader_compiler,
m_viewport, swap_chain->format()));

if(isOneOf(m_rendering_mode, RenderingMode::lucid, RenderingMode::mixed) && !m_lucid_renderer)
m_lucid_renderer = EX_PASS(construct<LucidRenderer>(
*m_device, *m_shader_compiler, swap_chain->format(), m_lucid_opts, m_viewport.size()));

if(m_rendering_mode == RenderingMode::path_trace && !m_path_tracer) {
auto format = m_device->swapChain()->format();
m_path_tracer = EX_PASS(construct<PathTracer>(*m_device, *m_shader_compiler, format,
Expand Down

0 comments on commit 0c587e1

Please sign in to comment.