| 478 | } |
| 479 | |
| 480 | [[nodiscard]] std::optional<core::Tensor> renderViewOnViewerThread( |
| 481 | const glm::mat3& rotation, |
| 482 | const glm::vec3& translation, |
| 483 | const int width, |
| 484 | const int height, |
| 485 | const float fov_degrees, |
| 486 | const PreviewReadback readback, |
| 487 | const std::optional<glm::vec3>& background_color_override, |
| 488 | const std::optional<bool> orthographic_override = std::nullopt, |
| 489 | const std::optional<float> ortho_scale_override = std::nullopt) { |
| 490 | if (width <= 0 || height <= 0 || !std::isfinite(fov_degrees) || fov_degrees <= 0.0f) { |
| 491 | return std::nullopt; |
| 492 | } |
| 493 | |
| 494 | auto* const viewer = get_visualizer(); |
| 495 | auto* const rendering_manager = viewer ? viewer->getRenderingManager() : nullptr; |
| 496 | auto* const scene_manager = viewer ? viewer->getSceneManager() : nullptr; |
| 497 | if (!rendering_manager || !scene_manager) { |
| 498 | return std::nullopt; |
| 499 | } |
| 500 | |
| 501 | std::shared_ptr<core::Tensor> image; |
| 502 | if (readback == PreviewReadback::UInt8Rgba) { |
| 503 | image = rendering_manager->renderPreviewImageRgba8( |
| 504 | scene_manager, |
| 505 | rotation, |
| 506 | translation, |
| 507 | lfs::rendering::vFovToFocalLength(fov_degrees), |
| 508 | width, |
| 509 | height, |
| 510 | orthographic_override, |
| 511 | ortho_scale_override); |
| 512 | } else if (readback == PreviewReadback::UInt8Rgb) { |
| 513 | image = rendering_manager->renderPreviewImageRgb8( |
| 514 | scene_manager, |
| 515 | rotation, |
| 516 | translation, |
| 517 | lfs::rendering::vFovToFocalLength(fov_degrees), |
| 518 | width, |
| 519 | height, |
| 520 | background_color_override, |
| 521 | orthographic_override, |
| 522 | ortho_scale_override); |
| 523 | } else { |
| 524 | image = rendering_manager->renderPreviewImage( |
| 525 | scene_manager, |
| 526 | rotation, |
| 527 | translation, |
| 528 | lfs::rendering::vFovToFocalLength(fov_degrees), |
| 529 | width, |
| 530 | height, |
| 531 | background_color_override, |
| 532 | orthographic_override, |
| 533 | ortho_scale_override); |
| 534 | } |
| 535 | if (readback != PreviewReadback::FloatRgb) { |
| 536 | rendering_manager->releasePreviewImageResources(); |
| 537 | } |
no test coverage detected