calibration_tools_v1.0/lidar_driver/include/open3d/visualization/rendering/RenderToBuffer.h

65 lines
2.1 KiB
C
Raw Permalink Normal View History

2025-02-20 10:45:17 +08:00
// ----------------------------------------------------------------------------
// - Open3D: www.open3d.org -
// ----------------------------------------------------------------------------
// Copyright (c) 2018-2023 www.open3d.org
// SPDX-License-Identifier: MIT
// ----------------------------------------------------------------------------
#pragma once
#include <cstdint>
#include <functional>
#include <memory>
namespace open3d {
namespace visualization {
namespace rendering {
class Scene;
class View;
class RenderToBuffer {
public:
struct Buffer {
std::size_t width = 0;
std::size_t height = 0;
std::size_t n_channels = 0;
const std::uint8_t* bytes = nullptr;
std::size_t size = 0;
};
using BufferReadyCallback = std::function<void(const Buffer&)>;
virtual ~RenderToBuffer() = default;
// Sets a callback that will be called after rendering is finished
// and after the BufferReadyCallback from Configure() is finished.
// This callback can be used to deallocate the object. In particular,
// SetCleanupCallback([](RenderToBuffer *self) { delete self; });
// is valid.
void SetCleanupCallback(std::function<void(RenderToBuffer*)> cb) {
cleanup_callback_ = cb;
}
// BufferReadyCallback does not need to free Buffer::bytes.
// It should also not cache the pointer.
virtual void Configure(const View* view,
Scene* scene,
int width,
int height,
int n_channels,
bool depth_image,
BufferReadyCallback cb) = 0;
virtual void SetDimensions(std::uint32_t width, std::uint32_t height) = 0;
virtual View& GetView() = 0;
virtual void Render() = 0;
protected:
std::function<void(RenderToBuffer*)> cleanup_callback_;
};
} // namespace rendering
} // namespace visualization
} // namespace open3d