image_framework_ymj/include/open3d/visualization/rendering/filament/FilamentRenderToBuffer.h
2024-12-06 16:25:16 +08:00

80 lines
2.3 KiB
C++
Executable File

// ----------------------------------------------------------------------------
// - Open3D: www.open3d.org -
// ----------------------------------------------------------------------------
// Copyright (c) 2018-2023 www.open3d.org
// SPDX-License-Identifier: MIT
// ----------------------------------------------------------------------------
#pragma once
#include "open3d/visualization/rendering/RenderToBuffer.h"
/// @cond
namespace filament {
class Engine;
class Renderer;
class Scene;
class SwapChain;
} // namespace filament
/// @endcond
namespace open3d {
namespace visualization {
namespace rendering {
class FilamentRenderer;
class FilamentScene;
class FilamentView;
class FilamentRenderToBuffer : public RenderToBuffer {
public:
// Use Renderer::CreateBufferRenderer to instantiate
// FilamentRenderToBuffer, unless you are NOT using
// open3d::visualization::gui or another FilamentRenderer instance.
explicit FilamentRenderToBuffer(filament::Engine& engine);
~FilamentRenderToBuffer() override;
void Configure(const View* view,
Scene* scene,
int width,
int height,
int n_channels,
bool depth_image,
BufferReadyCallback cb) override;
void SetDimensions(std::uint32_t width, std::uint32_t height) override;
View& GetView() override;
void Render() override;
// Renders the minimum necessary to get Filament to tick its rendering
// thread.
void RenderTick();
private:
friend class FilamentRenderer;
filament::Engine& engine_;
filament::Renderer* renderer_ = nullptr;
filament::SwapChain* swapchain_ = nullptr;
FilamentView* view_ = nullptr;
FilamentScene* scene_ = nullptr;
std::size_t width_ = 0;
std::size_t height_ = 0;
std::size_t n_channels_ = 0;
std::uint8_t* buffer_ = nullptr;
std::size_t buffer_size_ = 0;
bool depth_image_ = false;
BufferReadyCallback callback_;
bool frame_done_ = true;
bool pending_ = false;
static void ReadPixelsCallback(void* buffer, size_t size, void* user);
void CopySettings(const View* view);
};
} // namespace rendering
} // namespace visualization
} // namespace open3d