Render captured canvas snapshots through renderer boundary
This commit is contained in:
@@ -5998,6 +5998,15 @@ int plan_canvas_document_snapshot(int argc, char** argv)
|
||||
bool ppi_export_ready = false;
|
||||
std::size_t ppi_export_bytes = 0;
|
||||
std::uint32_t ppi_export_dirty_faces = 0;
|
||||
bool renderer_upload_ready = false;
|
||||
std::size_t renderer_texture_count = 0;
|
||||
std::size_t renderer_transition_count = 0;
|
||||
std::uint64_t renderer_uploaded_bytes = 0;
|
||||
std::size_t renderer_face_payloads = 0;
|
||||
std::size_t renderer_composited_layer_faces = 0;
|
||||
std::size_t renderer_command_count = 0;
|
||||
std::size_t renderer_upload_command_count = 0;
|
||||
std::size_t renderer_transition_command_count = 0;
|
||||
if (save_report.can_export_ppi) {
|
||||
const auto exported = pp::app::export_document_canvas_save_snapshot_to_ppi(value);
|
||||
if (!exported) {
|
||||
@@ -6014,6 +6023,37 @@ int plan_canvas_document_snapshot(int argc, char** argv)
|
||||
ppi_export_ready = true;
|
||||
ppi_export_bytes = exported.value().bytes.size();
|
||||
ppi_export_dirty_faces = decoded.value().project.body.summary.dirty_face_count;
|
||||
|
||||
constexpr pp::paint::Rgba clear_color {};
|
||||
pp::renderer::RecordingRenderDevice render_device;
|
||||
const auto uploaded = pp::paint_renderer::upload_document_frame_faces(
|
||||
render_device,
|
||||
pp::paint_renderer::DocumentFrameUploadRequest {
|
||||
.document = &document,
|
||||
.frame_index = document.active_frame_index(),
|
||||
.clear_color = clear_color,
|
||||
});
|
||||
if (!uploaded) {
|
||||
print_error("plan-canvas-document-snapshot", uploaded.status().message);
|
||||
return 2;
|
||||
}
|
||||
|
||||
renderer_upload_ready = true;
|
||||
renderer_texture_count = uploaded.value().texture_count;
|
||||
renderer_transition_count = uploaded.value().transition_count;
|
||||
renderer_uploaded_bytes = uploaded.value().uploaded_bytes;
|
||||
renderer_face_payloads = uploaded.value().composite.face_payload_count;
|
||||
renderer_composited_layer_faces = uploaded.value().composite.composited_layer_face_count;
|
||||
const auto commands = render_device.commands();
|
||||
renderer_command_count = commands.size();
|
||||
for (const auto& command : commands) {
|
||||
if (command.kind == pp::renderer::RecordedRenderCommandKind::upload_texture) {
|
||||
++renderer_upload_command_count;
|
||||
}
|
||||
if (command.kind == pp::renderer::RecordedRenderCommandKind::transition_texture) {
|
||||
++renderer_transition_command_count;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
std::cout << "{\"ok\":true,\"command\":\"plan-canvas-document-snapshot\""
|
||||
@@ -6045,6 +6085,15 @@ int plan_canvas_document_snapshot(int argc, char** argv)
|
||||
<< "},\"ppiExport\":{\"ready\":" << json_bool(ppi_export_ready)
|
||||
<< ",\"bytes\":" << ppi_export_bytes
|
||||
<< ",\"dirtyFaces\":" << ppi_export_dirty_faces
|
||||
<< "},\"rendererUpload\":{\"ready\":" << json_bool(renderer_upload_ready)
|
||||
<< ",\"textures\":" << renderer_texture_count
|
||||
<< ",\"bytes\":" << renderer_uploaded_bytes
|
||||
<< ",\"transitions\":" << renderer_transition_count
|
||||
<< ",\"facePayloads\":" << renderer_face_payloads
|
||||
<< ",\"compositedLayerFaces\":" << renderer_composited_layer_faces
|
||||
<< ",\"commands\":" << renderer_command_count
|
||||
<< ",\"uploadCommands\":" << renderer_upload_command_count
|
||||
<< ",\"transitionCommands\":" << renderer_transition_command_count
|
||||
<< "}"
|
||||
<< "}}\n";
|
||||
return 0;
|
||||
|
||||
Reference in New Issue
Block a user