Trim recording loop and retain async worker state
This commit is contained in:
47
src/app.cpp
47
src/app.cpp
@@ -473,11 +473,6 @@ void App::draw(float dt)
|
||||
|
||||
void App::update(float dt)
|
||||
{
|
||||
static std::mutex mutex;
|
||||
|
||||
// avoid multiple threads to update the scene
|
||||
//std::lock_guard<std::mutex> lock(mutex);
|
||||
|
||||
const auto update_plan = pp::app::plan_app_frame_update(redraw, animate);
|
||||
if (!update_plan.update_frame)
|
||||
return;
|
||||
@@ -646,6 +641,33 @@ void App::rec_export(std::string path)
|
||||
LOG("Recording export action failed: %s", status.message);
|
||||
}
|
||||
|
||||
namespace
|
||||
{
|
||||
template <typename CanvasDocument>
|
||||
void encode_recording_frame(
|
||||
App& app,
|
||||
pp::app::RecordingWorkerIterationPlan const& plan,
|
||||
Canvas* legacy_canvas,
|
||||
CanvasDocument* canvas_document,
|
||||
CanvasEncoder* encoder)
|
||||
{
|
||||
if (plan.clear_dirty_stroke)
|
||||
canvas_document->m_dirty_stroke = false;
|
||||
|
||||
PBO equirect = legacy_canvas->m_layers_merge.gen_equirect_pbo(encoder->frame_size());
|
||||
std::this_thread::yield();
|
||||
|
||||
ImageRef img;
|
||||
img.create(equirect.width, equirect.height, equirect.map());
|
||||
encoder->encode(img);
|
||||
equirect.unmap();
|
||||
LOG("rec frame encoded");
|
||||
|
||||
if (plan.update_frame_label)
|
||||
app.update_rec_frames();
|
||||
}
|
||||
}
|
||||
|
||||
void App::rec_loop()
|
||||
{
|
||||
BT_SetTerminate();
|
||||
@@ -665,20 +687,7 @@ void App::rec_loop()
|
||||
break;
|
||||
|
||||
if (plan.encode_frame && legacy_canvas && canvas_document && encoder)
|
||||
{
|
||||
if (plan.clear_dirty_stroke)
|
||||
canvas_document->m_dirty_stroke = false;
|
||||
PBO equirect = legacy_canvas->m_layers_merge.gen_equirect_pbo(
|
||||
encoder->frame_size());
|
||||
std::this_thread::yield();
|
||||
ImageRef img;
|
||||
img.create(equirect.width, equirect.height, equirect.map());
|
||||
encoder->encode(img);
|
||||
equirect.unmap();
|
||||
LOG("rec frame encoded");
|
||||
if (plan.update_frame_label)
|
||||
update_rec_frames();
|
||||
}
|
||||
encode_recording_frame(*this, plan, legacy_canvas, canvas_document, encoder);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user