ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
Renderer.h
Go to the documentation of this file.
1 // ----------------------------------------------------------------------------
2 // - CloudViewer: www.cloudViewer.org -
3 // ----------------------------------------------------------------------------
4 // Copyright (c) 2018-2024 www.cloudViewer.org
5 // SPDX-License-Identifier: MIT
6 // ----------------------------------------------------------------------------
7 
8 #pragma once
9 
10 #include <functional>
11 #include <memory>
12 
15 
16 namespace cloudViewer {
17 
18 namespace t {
19 namespace geometry {
20 class Image;
21 }
22 } // namespace t
23 
24 namespace geometry {
25 class Image;
26 }
27 
28 namespace core {
29 class Tensor;
30 }
31 
32 namespace visualization {
33 namespace rendering {
34 
35 class RenderToBuffer;
36 class Scene;
37 class View;
38 
40 public:
41  using ErrorCallback = std::function<void(
42  const ResourceLoadRequest&, const uint8_t, const std::string&)>;
43 
44  ResourceLoadRequest(const void* data, size_t data_size);
45  explicit ResourceLoadRequest(const char* path);
46 
47  ResourceLoadRequest(const void* data,
48  size_t data_size,
49  ErrorCallback error_callback);
50  ResourceLoadRequest(const char* path, ErrorCallback error_callback);
51 
52  const void* data_;
53  const size_t data_size_;
54  const std::string path_;
56 };
57 
58 class Renderer {
59 public:
60  virtual ~Renderer() = default;
61 
62  virtual SceneHandle CreateScene() = 0;
63  virtual Scene* GetScene(const SceneHandle& id) const = 0;
64  virtual void DestroyScene(const SceneHandle& id) = 0;
65 
66  virtual void SetClearColor(const Eigen::Vector4f& color) = 0;
67  virtual void UpdateSwapChain() = 0;
68  virtual void UpdateBitmapSwapChain(int width, int height) = 0;
69 
70  virtual void BeginFrame() = 0;
71  virtual void Draw() = 0;
72  // If using the Filament renderer this must be called *before* EndFrame()!
73  virtual void RequestReadPixels(
74  int width,
75  int height,
76  std::function<void(std::shared_ptr<core::Tensor>)> callback) = 0;
77  virtual void EndFrame() = 0;
78 
79  virtual void SetOnAfterDraw(std::function<void()> callback) = 0;
80 
81  virtual MaterialHandle AddMaterial(const ResourceLoadRequest& request) = 0;
83  const MaterialHandle& material) = 0;
86  const MaterialInstanceHandle& id) = 0;
87  virtual void RemoveMaterialInstance(const MaterialInstanceHandle& id) = 0;
88 
90  bool srgb = false) = 0;
92  const std::shared_ptr<geometry::Image> image,
93  bool srgb = false) = 0;
95  bool srgb = false) = 0;
96  virtual bool UpdateTexture(TextureHandle texture,
97  const std::shared_ptr<geometry::Image> image,
98  bool srgb) = 0;
99  virtual bool UpdateTexture(TextureHandle texture,
100  const t::geometry::Image& image,
101  bool srgb) = 0;
102 
103  virtual void RemoveTexture(const TextureHandle& id) = 0;
104 
106  const ResourceLoadRequest& request) = 0;
107  virtual void RemoveIndirectLight(const IndirectLightHandle& id) = 0;
108 
109  virtual SkyboxHandle AddSkybox(const ResourceLoadRequest& request) = 0;
110  virtual void RemoveSkybox(const SkyboxHandle& id) = 0;
111 
112  virtual std::shared_ptr<RenderToBuffer> CreateBufferRenderer() = 0;
113 
114  void RenderToImage(
115  View* view,
116  Scene* scene,
117  std::function<void(std::shared_ptr<geometry::Image>)> cb);
118 
119  // Returns a float image ranging from 0 (near plane) to 1 (far plane)
120  void RenderToDepthImage(
121  View* view,
122  Scene* scene,
123  std::function<void(std::shared_ptr<geometry::Image>)> cb,
124  bool z_in_view_space = false);
125 };
126 
127 } // namespace rendering
128 } // namespace visualization
129 } // namespace cloudViewer
std::shared_ptr< core::Tensor > image
std::function< void(std::shared_ptr< core::Tensor >)> callback
int width
int height
math::float4 color
The Image class stores image with customizable rows, cols, channels, dtype and device.
Definition: Image.h:29
virtual void RemoveMaterialInstance(const MaterialInstanceHandle &id)=0
virtual MaterialModifier & ModifyMaterial(const MaterialHandle &id)=0
virtual IndirectLightHandle AddIndirectLight(const ResourceLoadRequest &request)=0
void RenderToImage(View *view, Scene *scene, std::function< void(std::shared_ptr< geometry::Image >)> cb)
Definition: Renderer.cpp:68
virtual void DestroyScene(const SceneHandle &id)=0
virtual bool UpdateTexture(TextureHandle texture, const std::shared_ptr< geometry::Image > image, bool srgb)=0
virtual void SetClearColor(const Eigen::Vector4f &color)=0
virtual TextureHandle AddTexture(const t::geometry::Image &image, bool srgb=false)=0
virtual TextureHandle AddTexture(const ResourceLoadRequest &request, bool srgb=false)=0
virtual TextureHandle AddTexture(const std::shared_ptr< geometry::Image > image, bool srgb=false)=0
virtual void RemoveIndirectLight(const IndirectLightHandle &id)=0
virtual std::shared_ptr< RenderToBuffer > CreateBufferRenderer()=0
virtual void RemoveTexture(const TextureHandle &id)=0
virtual MaterialHandle AddMaterial(const ResourceLoadRequest &request)=0
virtual MaterialModifier & ModifyMaterial(const MaterialInstanceHandle &id)=0
virtual void RemoveSkybox(const SkyboxHandle &id)=0
virtual void SetOnAfterDraw(std::function< void()> callback)=0
virtual bool UpdateTexture(TextureHandle texture, const t::geometry::Image &image, bool srgb)=0
virtual SkyboxHandle AddSkybox(const ResourceLoadRequest &request)=0
virtual void UpdateBitmapSwapChain(int width, int height)=0
virtual void RequestReadPixels(int width, int height, std::function< void(std::shared_ptr< core::Tensor >)> callback)=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:95
virtual Scene * GetScene(const SceneHandle &id) const =0
virtual MaterialInstanceHandle AddMaterialInstance(const MaterialHandle &material)=0
std::function< void(const ResourceLoadRequest &, const uint8_t, const std::string &)> ErrorCallback
Definition: Renderer.h:42
ResourceLoadRequest(const void *data, size_t data_size)
Definition: Renderer.cpp:41
static const std::string path
Definition: PointCloud.cpp:59
Generic file read and write utility for python interface.