Open3D (C++ API)  0.19.0
Renderer.h
Go to the documentation of this file.
1 // ----------------------------------------------------------------------------
2 // - Open3D: www.open3d.org -
3 // ----------------------------------------------------------------------------
4 // Copyright (c) 2018-2024 www.open3d.org
5 // SPDX-License-Identifier: MIT
6 // ----------------------------------------------------------------------------
7 
8 #pragma once
9 
10 #include <memory>
11 
14 
15 namespace open3d {
16 
17 namespace t {
18 namespace geometry {
19 class Image;
20 }
21 } // namespace t
22 
23 namespace geometry {
24 class Image;
25 }
26 
27 namespace core {
28 class Tensor;
29 }
30 
31 namespace visualization {
32 namespace rendering {
33 
34 class RenderToBuffer;
35 class Scene;
36 class View;
37 
39 public:
40  using ErrorCallback = std::function<void(
41  const ResourceLoadRequest&, const uint8_t, const std::string&)>;
42 
43  ResourceLoadRequest(const void* data, size_t data_size);
44  explicit ResourceLoadRequest(const char* path);
45 
46  ResourceLoadRequest(const void* data,
47  size_t data_size,
48  ErrorCallback error_callback);
49  ResourceLoadRequest(const char* path, ErrorCallback error_callback);
50 
51  const void* data_;
52  const size_t data_size_;
53  const std::string path_;
55 };
56 
58 
59 class Renderer {
60 public:
61  virtual ~Renderer() = default;
62 
63  virtual SceneHandle CreateScene() = 0;
64  virtual Scene* GetScene(const SceneHandle& id) const = 0;
65  virtual void DestroyScene(const SceneHandle& id) = 0;
66 
67  virtual void SetClearColor(const Eigen::Vector4f& color) = 0;
68  virtual void UpdateSwapChain() = 0;
69  virtual void UpdateBitmapSwapChain(int width, int height) = 0;
70 
71  virtual void BeginFrame() = 0;
72  virtual void Draw() = 0;
73  // If using the Filament renderer this must be called *before* EndFrame()!
74  virtual void RequestReadPixels(
75  int width,
76  int height,
77  std::function<void(std::shared_ptr<core::Tensor>)> callback) = 0;
78  virtual void EndFrame() = 0;
79 
80  virtual void SetOnAfterDraw(std::function<void()> callback) = 0;
81 
82  virtual MaterialHandle AddMaterial(const ResourceLoadRequest& request) = 0;
84  const MaterialHandle& material) = 0;
87  const MaterialInstanceHandle& id) = 0;
88  virtual void RemoveMaterialInstance(const MaterialInstanceHandle& id) = 0;
89 
91  bool srgb = false) = 0;
93  const std::shared_ptr<geometry::Image> image,
94  bool srgb = false) = 0;
96  bool srgb = false) = 0;
97  virtual bool UpdateTexture(TextureHandle texture,
98  const std::shared_ptr<geometry::Image> image,
99  bool srgb) = 0;
100  virtual bool UpdateTexture(TextureHandle texture,
101  const t::geometry::Image& image,
102  bool srgb) = 0;
103 
104  virtual void RemoveTexture(const TextureHandle& id) = 0;
105 
107  const ResourceLoadRequest& request) = 0;
108  virtual void RemoveIndirectLight(const IndirectLightHandle& id) = 0;
109 
110  virtual SkyboxHandle AddSkybox(const ResourceLoadRequest& request) = 0;
111  virtual void RemoveSkybox(const SkyboxHandle& id) = 0;
112 
113  virtual std::shared_ptr<RenderToBuffer> CreateBufferRenderer() = 0;
114 
117 
118  void RenderToImage(
119  View* view,
120  Scene* scene,
121  std::function<void(std::shared_ptr<geometry::Image>)> cb);
122 
123  // Returns a float image ranging from 0 (near plane) to 1 (far plane)
124  void RenderToDepthImage(
125  View* view,
126  Scene* scene,
127  std::function<void(std::shared_ptr<geometry::Image>)> cb,
128  bool z_in_view_space = false);
129 };
130 
131 } // namespace rendering
132 } // namespace visualization
133 } // namespace open3d
std::shared_ptr< core::Tensor > image
Definition: FilamentRenderer.cpp:183
std::function< void(std::shared_ptr< core::Tensor >)> callback
Definition: FilamentRenderer.cpp:182
math::float4 color
Definition: LineSetBuffers.cpp:45
double t
Definition: SurfaceReconstructionPoisson.cpp:172
The Image class stores image with customizable rows, cols, channels, dtype and device.
Definition: Image.h:29
Definition: MaterialModifier.h:107
virtual void RemoveMaterialInstance(const MaterialInstanceHandle &id)=0
virtual void RemoveTexture(const TextureHandle &id)=0
virtual void RemoveIndirectLight(const IndirectLightHandle &id)=0
virtual TextureHandle AddTexture(const ResourceLoadRequest &request, bool srgb=false)=0
virtual void RequestReadPixels(int width, int height, std::function< void(std::shared_ptr< core::Tensor >)> callback)=0
virtual bool UpdateTexture(TextureHandle texture, const t::geometry::Image &image, bool srgb)=0
virtual std::shared_ptr< RenderToBuffer > CreateBufferRenderer()=0
virtual void SetClearColor(const Eigen::Vector4f &color)=0
virtual Scene * GetScene(const SceneHandle &id) const =0
virtual SkyboxHandle AddSkybox(const ResourceLoadRequest &request)=0
virtual void RemoveSkybox(const SkyboxHandle &id)=0
virtual IndirectLightHandle AddIndirectLight(const ResourceLoadRequest &request)=0
void RenderToDepthImage(View *view, Scene *scene, std::function< void(std::shared_ptr< geometry::Image >)> cb, bool z_in_view_space=false)
Definition: Renderer.cpp:94
virtual TextureHandle AddTexture(const t::geometry::Image &image, bool srgb=false)=0
virtual bool UpdateTexture(TextureHandle texture, const std::shared_ptr< geometry::Image > image, bool srgb)=0
virtual MaterialModifier & ModifyMaterial(const MaterialHandle &id)=0
virtual void DestroyScene(const SceneHandle &id)=0
virtual MaterialModifier & ModifyMaterial(const MaterialInstanceHandle &id)=0
virtual void UpdateBitmapSwapChain(int width, int height)=0
virtual MaterialInstanceHandle AddMaterialInstance(const MaterialHandle &material)=0
virtual MaterialHandle AddMaterial(const ResourceLoadRequest &request)=0
virtual RenderingType GetBackendType()=0
Return if the rendering backend is OpenGL, Vulkan or Metal.
virtual TextureHandle AddTexture(const std::shared_ptr< geometry::Image > image, bool srgb=false)=0
void RenderToImage(View *view, Scene *scene, std::function< void(std::shared_ptr< geometry::Image >)> cb)
Definition: Renderer.cpp:67
virtual void SetOnAfterDraw(std::function< void()> callback)=0
const void * data_
Definition: Renderer.h:51
const size_t data_size_
Definition: Renderer.h:52
std::function< void(const ResourceLoadRequest &, const uint8_t, const std::string &)> ErrorCallback
Definition: Renderer.h:41
ResourceLoadRequest(const void *data, size_t data_size)
Definition: Renderer.cpp:40
ErrorCallback error_callback_
Definition: Renderer.h:54
const std::string path_
Definition: Renderer.h:53
int width
Definition: FilePCD.cpp:52
int height
Definition: FilePCD.cpp:53
const char const char value recording_handle imu_sample void
Definition: K4aPlugin.cpp:250
const char const char value recording_handle imu_sample recording_handle uint8_t data
Definition: K4aPlugin.cpp:269
RenderingType
Definition: Renderer.h:57
Definition: PinholeCameraIntrinsic.cpp:16