capture with renderdoc can be triggered from editor UI

This commit is contained in:
Mikulas Florek 2022-11-19 13:14:56 +01:00
parent a877c92366
commit 299dedfc6d
3 changed files with 26 additions and 5 deletions

View file

@ -4934,10 +4934,15 @@ struct StudioAppPlugin : StudioApp::IPlugin
void init() override
{
m_renderdoc_action.init(" Launch RenderDoc", "Launch RenderDoc", "launch_renderdoc", "", false);
m_renderdoc_action.func.bind<&StudioAppPlugin::launchRenderDoc>(this);
m_renderdoc_launch_action.init(" Launch RenderDoc", "Launch RenderDoc", "launch_renderdoc", "", false);
m_renderdoc_launch_action.func.bind<&StudioAppPlugin::launchRenderDoc>(this);
m_renderdoc_capture_action.init(" Capture with RenderDoc", "Capture with RenderDoc", "capture_renderdoc", "", false);
m_renderdoc_capture_action.func.bind<&StudioAppPlugin::captureRenderDoc>(this);
if (renderDocOption()) {
m_app.addToolAction(&m_renderdoc_action);
m_app.addToolAction(&m_renderdoc_launch_action);
m_app.addToolAction(&m_renderdoc_capture_action);
}
IAllocator& allocator = m_app.getAllocator();
@ -5003,6 +5008,7 @@ struct StudioAppPlugin : StudioApp::IPlugin
m_particle_emitter_property_plugin.m_particle_editor = m_particle_editor.get();
}
void captureRenderDoc() { m_scene_view.captureFrameRenderDoc(); }
void launchRenderDoc() { gpu::launchRenderDoc(); }
void showEnvironmentProbeGizmo(UniverseView& view, ComponentUID cmp) {
@ -5207,7 +5213,8 @@ struct StudioAppPlugin : StudioApp::IPlugin
~StudioAppPlugin()
{
m_app.removeAction(&m_renderdoc_action);
m_app.removeAction(&m_renderdoc_launch_action);
m_app.removeAction(&m_renderdoc_capture_action);
IAllocator& allocator = m_app.getAllocator();
@ -5246,7 +5253,8 @@ struct StudioAppPlugin : StudioApp::IPlugin
}
StudioApp& m_app;
Action m_renderdoc_action;
Action m_renderdoc_launch_action;
Action m_renderdoc_capture_action;
CompositeTextureEditor m_composite_texture_editor;
UniquePtr<ParticleEditor> m_particle_editor;
EditorUIRenderPlugin m_editor_ui_render_plugin;

View file

@ -1157,6 +1157,10 @@ void SceneView::onToolbar()
}
}
void SceneView::captureFrameRenderDoc() {
m_renderdoc_capture_request = true;
}
void SceneView::handleEvents() {
const bool handle_input = m_is_mouse_captured || (ImGui::IsItemHovered() && os::getFocused() == ImGui::GetWindowViewport()->PlatformHandle);
const os::Event* events = m_app.getEvents();
@ -1386,7 +1390,14 @@ void SceneView::onWindowGUI()
vp.h = (int)size.y;
m_view->setViewport(vp);
m_pipeline->setViewport(vp);
if (m_renderdoc_capture_request) {
m_pipeline->getRenderer().getDrawStream().startCapture();
}
m_pipeline->render(false);
if (m_renderdoc_capture_request) {
m_pipeline->getRenderer().getDrawStream().stopCapture();
m_renderdoc_capture_request = false;
}
m_view->m_draw_vertices.clear();
m_view->m_draw_cmds.clear();
m_view->inputFrame();

View file

@ -27,6 +27,7 @@ struct SceneView : StudioApp::GUIPlugin
explicit SceneView(StudioApp& app);
~SceneView();
void captureFrameRenderDoc();
void update(float time_delta) override;
void setUniverse(Universe* universe);
void onWindowGUI() override;
@ -84,6 +85,7 @@ private:
Shader* m_debug_shape_shader;
struct UniverseViewImpl* m_view;
bool m_renderdoc_capture_request = false;
bool m_is_measure_active = false;
bool m_is_measure_from_set = false;
DVec3 m_measure_to = {0, 0, 0};