gtsam_points
Loading...
Searching...
No Matches
light_viewer_context.hpp
Go to the documentation of this file.
1#ifndef GUIK_LIGHT_VIEWER_CONTEXT_HPP
2#define GUIK_LIGHT_VIEWER_CONTEXT_HPP
3
4#include <mutex>
5#include <deque>
6#include <regex>
7#include <memory>
8#include <optional>
9#include <unordered_map>
10
11#include <glk/drawable.hpp>
12#include <glk/colormap.hpp>
14#include <guik/gl_canvas.hpp>
19
20namespace glk {
21class ThinLines;
22class PointCloudBuffer;
23} // namespace glk
24
25namespace guik {
26
27class AsyncLightViewerContext;
28class OrbitCameraControlXY;
29class OrbitCameraControlXZ;
30class TopDownCameraControl;
31class ArcBallCameraControl;
32class FPSCameraControl;
33
35public:
36 LightViewerContext(const std::string& context_name);
38
39 void draw_ui();
40 void draw_gl();
41
42 bool init_canvas(const Eigen::Vector2i& size);
43
44 void set_size(const Eigen::Vector2i& size);
45 void set_clear_color(const Eigen::Vector4f& color);
46
47 void set_pos(const Eigen::Vector2i& pos, ImGuiCond cond = ImGuiCond_FirstUseEver, ImGuiWindowFlags = 0);
48 void show();
49 void hide();
50
51 virtual void clear();
52 virtual void clear_text();
53 virtual void append_text(const std::string& text);
54 virtual void register_ui_callback(const std::string& name, const std::function<void()>& callback = 0);
55 void remove_ui_callback(const std::string& name);
56
59
64 void set_screen_effect(const std::shared_ptr<glk::ScreenEffect>& effect);
65 const std::shared_ptr<glk::ScreenEffect>& get_screen_effect() const;
66 void set_bg_texture(const std::shared_ptr<glk::Texture>& bg_texture);
67
68 void set_rainbow_range(const Eigen::Vector2f& minmax_z);
69 void set_rainbow_axis(const Eigen::Vector3f& axis);
70 void set_point_shape(float point_size = 1.0f, bool metric = true, bool circle = true);
71
75 void enable_partial_rendering(double clear_thresh = 1e-6);
77
79 bool info_buffer_enabled() const;
81
82 const glk::Texture& color_buffer() const;
83 const glk::Texture& depth_buffer() const;
85 const glk::Texture& info_buffer() const;
87
89 void clear_drawables(const std::function<bool(const std::string&)>& fn);
90
91 std::unordered_map<std::string, std::pair<ShaderSetting::Ptr, glk::Drawable::ConstPtr>>& get_drawables();
92
93 std::pair<ShaderSetting::Ptr, glk::Drawable::ConstPtr> find_drawable(const std::string& name);
94 void remove_drawable(const std::string& name);
95 void remove_drawable(const std::regex& regex);
96 void update_drawable(const std::string& name, const glk::Drawable::ConstPtr& drawable, const ShaderSetting& shader_setting = ShaderSetting());
97
99 void register_drawable_filter(const std::string& filter_name, const std::function<bool(const std::string&)>& filter = 0);
100 void remove_drawable_filter(const std::string& filter_name);
101
103
104 const std::shared_ptr<CameraControl>& get_camera_control() const;
105 const std::shared_ptr<ProjectionControl>& get_projection_control() const;
106 void set_camera_control(const std::shared_ptr<CameraControl>& camera_control);
107 void set_projection_control(const std::shared_ptr<ProjectionControl>& projection_control);
108
109 bool save_camera_settings(const std::string& path) const;
110 bool load_camera_settings(const std::string& path);
111
113 void lookat(const Eigen::Vector3f& pt);
114 template <typename Vector>
115 void lookat(const Vector& pt) {
116 const auto ptf = pt.eval().template cast<float>();
117 lookat(ptf);
118 }
119
120 std::shared_ptr<OrbitCameraControlXY> use_orbit_camera_control(double distance = 80.0, double theta = 0.0, double phi = -60.0f * M_PI / 180.0f);
121 std::shared_ptr<OrbitCameraControlXZ> use_orbit_camera_control_xz(double distance = 80.0, double theta = 0.0, double phi = 0.0);
122 std::shared_ptr<TopDownCameraControl> use_topdown_camera_control(double distance = 80.0, double theta = 0.0);
123 std::shared_ptr<ArcBallCameraControl> use_arcball_camera_control(double distance = 80.0, double theta = 0.0, double phi = -60.0f * M_PI / 180.0f);
124 std::shared_ptr<FPSCameraControl> use_fps_camera_control(double fovy_deg = 60.0);
125
127 Eigen::Vector2i canvas_tl() const { return canvas_rect_min; }
128 Eigen::Vector2i canvas_br() const { return canvas_rect_max; }
129 Eigen::Vector2i canvas_size() const { return canvas->size; }
130 Eigen::Matrix4f view_matrix() const { return canvas->camera_control->view_matrix(); }
131 Eigen::Matrix4f projection_matrix() const { return canvas->projection_control->projection_matrix(); }
132
133 Eigen::Vector4i pick_info(const Eigen::Vector2i& p, int window = 2) const;
134 float pick_depth(const Eigen::Vector2i& p, int window = 2) const;
135 Eigen::Vector3f unproject(const Eigen::Vector2i& p, float depth) const;
136 std::optional<Eigen::Vector3f> pick_point(int button = 0, int window = 2, Eigen::Vector4i* info = nullptr) const;
137
138 // Buffer read methods
139 std::vector<unsigned char> read_color_buffer() const;
140 std::vector<float> read_depth_buffer(bool real_scale = true);
141
142 bool save_color_buffer(const std::string& filename);
143 bool save_depth_buffer(const std::string& filename, bool real_scale = true);
144
145 // Async
147
148 // Utility methods to directly create and update drawables
149 // PointCloudBuffer
150 std::shared_ptr<glk::PointCloudBuffer> update_points(const std::string& name, const float* data, int stride, int num_points, const ShaderSetting& shader_setting);
151 template <typename Scalar, int Dim>
152 std::shared_ptr<glk::PointCloudBuffer> update_points(const std::string& name, const Eigen::Matrix<Scalar, Dim, 1>* points, int num_points, const ShaderSetting& shader_setting);
153
154 template <typename Scalar, int Dim, typename Allocator>
155 std::shared_ptr<glk::PointCloudBuffer>
156 update_points(const std::string& name, const std::vector<Eigen::Matrix<Scalar, Dim, 1>, Allocator>& points, const ShaderSetting& shader_setting);
157
158 // NormalDistributions
159 template <typename Scalar, int Dim>
161 const std::string& name,
162 const Eigen::Matrix<Scalar, Dim, 1>* points,
163 const Eigen::Matrix<Scalar, Dim, Dim>* covs,
164 int num_points,
165 float scale,
167
168 template <typename Scalar, int Dim, typename Alloc1, typename Alloc2>
170 const std::string& name,
171 const std::vector<Eigen::Matrix<Scalar, Dim, 1>, Alloc1>& points,
172 const std::vector<Eigen::Matrix<Scalar, Dim, Dim>, Alloc2>& covs,
173 float scale,
175
176 // ThinLines
177 std::shared_ptr<glk::ThinLines> update_thin_lines(
178 const std::string& name,
179 const float* vertices,
180 const float* colors,
181 int num_vertices,
182 const unsigned int* indices,
183 int num_indices,
184 bool line_strip,
186
187 template <typename Scalar, int Dim>
188 std::shared_ptr<glk::ThinLines>
189 update_thin_lines(const std::string& name, const Eigen::Matrix<Scalar, Dim, 1>* points, int num_points, bool line_strip, const ShaderSetting& shader_setting);
190
191 template <typename ScalarV, int DimV, typename ScalarC, int DimC>
192 std::shared_ptr<glk::ThinLines> update_thin_lines(
193 const std::string& name,
194 const Eigen::Matrix<ScalarV, DimV, 1>* points,
195 const Eigen::Matrix<ScalarC, DimC, 1>* colors,
196 int num_points,
197 bool line_strip,
199
200 template <typename ScalarV, int DimV, typename ScalarC, int DimC>
201 std::shared_ptr<glk::ThinLines> update_thin_lines(
202 const std::string& name,
203 const Eigen::Matrix<ScalarV, DimV, 1>* points,
204 const Eigen::Matrix<ScalarC, DimC, 1>* colors,
205 int num_points,
206 const unsigned int* indices,
207 int num_indices,
208 bool line_strip,
210
211 template <typename Point, typename Alloc>
212 std::shared_ptr<glk::ThinLines> update_thin_lines(const std::string& name, const std::vector<Point, Alloc>& points, bool line_strip, const ShaderSetting& shader_setting);
213
214 template <typename Point, typename Alloc>
215 std::shared_ptr<glk::ThinLines> update_thin_lines(
216 const std::string& name,
217 const std::vector<Point, Alloc>& points,
218 const std::vector<unsigned int>& indices,
219 bool line_strip,
221
222 template <typename Point, typename AllocP, typename Color, typename AllocC>
223 std::shared_ptr<glk::ThinLines> update_thin_lines(
224 const std::string& name,
225 const std::vector<Point, AllocP>& points,
226 const std::vector<Color, AllocC>& colors,
227 bool line_strip,
229
230 template <typename Point, typename AllocP, typename Color, typename AllocC>
231 std::shared_ptr<glk::ThinLines> update_thin_lines(
232 const std::string& name,
233 const std::vector<Point, AllocP>& points,
234 const std::vector<Color, AllocC>& colors,
235 const std::vector<unsigned int>& indices,
236 bool line_strip,
238
239 // Primitives
240 void update_icosahedron(const std::string& name, const ShaderSetting& shader_setting);
241 void update_sphere(const std::string& name, const ShaderSetting& shader_setting);
242 void update_cube(const std::string& name, const ShaderSetting& shader_setting);
243 void update_cone(const std::string& name, const ShaderSetting& shader_setting);
244 void update_frustum(const std::string& name, const ShaderSetting& shader_setting);
245 void update_coord(const std::string& name, const ShaderSetting& shader_setting);
246
247 void update_wire_icosahedron(const std::string& name, const ShaderSetting& shader_setting);
248 void update_wire_sphere(const std::string& name, const ShaderSetting& shader_setting);
249 void update_wire_cube(const std::string& name, const ShaderSetting& shader_setting);
250 void update_wire_cone(const std::string& name, const ShaderSetting& shader_setting);
251 void update_wire_frustum(const std::string& name, const ShaderSetting& shader_setting);
252
253protected:
254 std::string context_name;
255 Eigen::Vector2i canvas_rect_min;
256 Eigen::Vector2i canvas_rect_max;
257 std::unique_ptr<guik::GLCanvas> canvas;
259
263
265
266 std::unordered_map<std::string, std::function<bool(const std::string&)>> drawable_filters;
267 std::unordered_map<std::string, std::pair<ShaderSetting::Ptr, glk::Drawable::ConstPtr>> drawables;
268
269 std::mutex sub_texts_mutex;
270 std::deque<std::string> sub_texts;
271 std::unordered_map<std::string, std::function<void()>> sub_ui_callbacks;
272};
273
274// template methods
275// PointCloud
276template <typename Scalar, int Dim>
277std::shared_ptr<glk::PointCloudBuffer>
278LightViewerContext::update_points(const std::string& name, const Eigen::Matrix<Scalar, Dim, 1>* points, int num_points, const ShaderSetting& shader_setting) {
279 if constexpr (std::is_same<Scalar, float>::value) {
280 return update_points(name, reinterpret_cast<const float*>(points), sizeof(float) * Dim, num_points, shader_setting);
281 } else {
282 const auto points_3f = glk::convert_to_vector<float, 3, 1>(points, num_points);
283 return update_points(name, points_3f.data(), num_points, shader_setting);
284 }
285}
286
287template <typename Scalar, int Dim, typename Allocator>
288std::shared_ptr<glk::PointCloudBuffer>
289LightViewerContext::update_points(const std::string& name, const std::vector<Eigen::Matrix<Scalar, Dim, 1>, Allocator>& points, const ShaderSetting& shader_setting) {
290 return update_points(name, points.data(), points.size(), shader_setting);
291}
292
293// NormalDistributions
294template <typename Scalar, int Dim, typename Alloc1, typename Alloc2>
296 const std::string& name,
297 const std::vector<Eigen::Matrix<Scalar, Dim, 1>, Alloc1>& points,
298 const std::vector<Eigen::Matrix<Scalar, Dim, Dim>, Alloc2>& covs,
299 float scale,
300 const ShaderSetting& shader_setting) {
301 update_normal_dists(name, points.data(), covs.data(), points.size(), scale, shader_setting);
302}
303
304// ThinLines
305template <typename Scalar, int Dim>
306std::shared_ptr<glk::ThinLines>
307LightViewerContext::update_thin_lines(const std::string& name, const Eigen::Matrix<Scalar, Dim, 1>* points, int num_points, bool line_strip, const ShaderSetting& shader_setting) {
308 if constexpr (std::is_same<Scalar, float>::value && Dim == 3) {
309 return update_thin_lines(name, reinterpret_cast<const float*>(points), nullptr, num_points, nullptr, 0, line_strip, shader_setting);
310 } else {
311 const auto points_3f = glk::convert_to_vector<float, 3, 1>(points, num_points);
312 return update_thin_lines(name, points_3f.data(), num_points, line_strip, shader_setting);
313 }
314}
315
316template <typename ScalarV, int DimV, typename ScalarC, int DimC>
317std::shared_ptr<glk::ThinLines> LightViewerContext::update_thin_lines(
318 const std::string& name,
319 const Eigen::Matrix<ScalarV, DimV, 1>* points,
320 const Eigen::Matrix<ScalarC, DimC, 1>* colors,
321 int num_points,
322 bool line_strip,
323 const ShaderSetting& shader_setting) {
324 if constexpr (std::is_same<ScalarV, float>::value && DimV == 3 && std::is_same<ScalarC, float>::value && DimC == 4) {
325 return update_thin_lines(name, reinterpret_cast<const float*>(points), reinterpret_cast<const float*>(colors), num_points, nullptr, 0, line_strip, shader_setting);
326 } else {
327 const auto points_3f = glk::convert_to_vector<float, 3, 1>(points, num_points);
328 const auto colors_4f = glk::convert_to_vector<float, 4, 1>(colors, num_points);
329 return update_thin_lines(name, points_3f.data(), colors_4f.data(), num_points, line_strip, shader_setting);
330 }
331}
332
333template <typename ScalarV, int DimV, typename ScalarC, int DimC>
334std::shared_ptr<glk::ThinLines> LightViewerContext::update_thin_lines(
335 const std::string& name,
336 const Eigen::Matrix<ScalarV, DimV, 1>* points,
337 const Eigen::Matrix<ScalarC, DimC, 1>* colors,
338 int num_points,
339 const unsigned int* indices,
340 int num_indices,
341 bool line_strip,
342 const ShaderSetting& shader_setting) {
343 if constexpr (std::is_same<ScalarV, float>::value && DimV == 3 && std::is_same<ScalarC, float>::value && DimC == 4) {
344 return update_thin_lines(name, reinterpret_cast<const float*>(points), reinterpret_cast<const float*>(colors), num_points, indices, num_indices, line_strip, shader_setting);
345 } else {
346 const auto points_3f = glk::convert_to_vector<float, 3, 1>(points, num_points);
347 const auto colors_4f = glk::convert_to_vector<float, 4, 1>(colors, num_points);
348 return update_thin_lines(name, points_3f.data(), colors_4f.data(), num_points, indices, num_indices, line_strip, shader_setting);
349 }
350}
351
352template <typename Point, typename Alloc>
353std::shared_ptr<glk::ThinLines>
354LightViewerContext::update_thin_lines(const std::string& name, const std::vector<Point, Alloc>& points, bool line_strip, const ShaderSetting& shader_setting) {
355 return update_thin_lines(name, points.data(), points.size(), line_strip, shader_setting);
356}
357
358template <typename Point, typename Alloc>
359std::shared_ptr<glk::ThinLines> LightViewerContext::update_thin_lines(
360 const std::string& name,
361 const std::vector<Point, Alloc>& points,
362 const std::vector<unsigned int>& indices,
363 bool line_strip,
364 const ShaderSetting& shader_setting) {
365 return update_thin_lines(name, points.data(), static_cast<const Eigen::Vector4f*>(nullptr), points.size(), indices.data(), indices.size(), line_strip, shader_setting);
366}
367
368template <typename Point, typename AllocP, typename Color, typename AllocC>
369std::shared_ptr<glk::ThinLines> LightViewerContext::update_thin_lines(
370 const std::string& name,
371 const std::vector<Point, AllocP>& points,
372 const std::vector<Color, AllocC>& colors,
373 bool line_strip,
374 const ShaderSetting& shader_setting) {
375 return update_thin_lines(name, points.data(), colors.data(), points.size(), line_strip, shader_setting);
376}
377
378template <typename Point, typename AllocP, typename Color, typename AllocC>
379std::shared_ptr<glk::ThinLines> LightViewerContext::update_thin_lines(
380 const std::string& name,
381 const std::vector<Point, AllocP>& points,
382 const std::vector<Color, AllocC>& colors,
383 const std::vector<unsigned int>& indices,
384 bool line_strip,
385 const ShaderSetting& shader_setting) {
386 return update_thin_lines(name, points.data(), colors.data(), points.size(), indices.data(), indices.size(), line_strip, shader_setting);
387}
388
389} // namespace guik
390
391#endif
std::shared_ptr< const Drawable > ConstPtr
Definition drawable.hpp:15
Definition texture.hpp:10
Async interface to manipulate LightViewerContext. All OpenGL operations will be done in the viewer th...
Definition async_light_viewer_context.hpp:13
Definition gl_canvas.hpp:17
Definition light_viewer_context.hpp:34
void set_screen_effect(const std::shared_ptr< glk::ScreenEffect > &effect)
std::shared_ptr< TopDownCameraControl > use_topdown_camera_control(double distance=80.0, double theta=0.0)
void update_frustum(const std::string &name, const ShaderSetting &shader_setting)
std::mutex sub_texts_mutex
Definition light_viewer_context.hpp:269
bool normal_buffer_enabled() const
void remove_drawable(const std::string &name)
std::vector< unsigned char > read_color_buffer() const
std::optional< Eigen::Vector3f > pick_point(int button=0, int window=2, Eigen::Vector4i *info=nullptr) const
Eigen::Vector2i canvas_rect_min
Definition light_viewer_context.hpp:255
void clear_drawables(const std::function< bool(const std::string &)> &fn)
void lookat(const Eigen::Vector3f &pt)
Eigen::Matrix4f last_projection_view_matrix
Definition light_viewer_context.hpp:264
const guik::ShaderSetting & shader_setting() const
Definition light_viewer_context.hpp:58
Eigen::Matrix4f projection_matrix() const
Definition light_viewer_context.hpp:131
void set_pos(const Eigen::Vector2i &pos, ImGuiCond cond=ImGuiCond_FirstUseEver, ImGuiWindowFlags=0)
Eigen::Vector2i canvas_br() const
Definition light_viewer_context.hpp:128
AsyncLightViewerContext async()
std::shared_ptr< OrbitCameraControlXZ > use_orbit_camera_control_xz(double distance=80.0, double theta=0.0, double phi=0.0)
void update_icosahedron(const std::string &name, const ShaderSetting &shader_setting)
Eigen::Vector3f unproject(const Eigen::Vector2i &p, float depth) const
virtual void append_text(const std::string &text)
std::shared_ptr< glk::ThinLines > update_thin_lines(const std::string &name, const float *vertices, const float *colors, int num_vertices, const unsigned int *indices, int num_indices, bool line_strip, const ShaderSetting &shader_setting)
guik::GLCanvas & get_canvas()
std::shared_ptr< FPSCameraControl > use_fps_camera_control(double fovy_deg=60.0)
std::string context_name
Definition light_viewer_context.hpp:254
std::unordered_map< std::string, std::pair< ShaderSetting::Ptr, glk::Drawable::ConstPtr > > drawables
Definition light_viewer_context.hpp:267
void remove_drawable(const std::regex &regex)
Eigen::Vector4i pick_info(const Eigen::Vector2i &p, int window=2) const
const std::shared_ptr< glk::ScreenEffect > & get_screen_effect() const
const glk::Texture & info_buffer() const
void update_coord(const std::string &name, const ShaderSetting &shader_setting)
bool show_window
Definition light_viewer_context.hpp:260
std::shared_ptr< ArcBallCameraControl > use_arcball_camera_control(double distance=80.0, double theta=0.0, double phi=-60.0f *M_PI/180.0f)
void update_cone(const std::string &name, const ShaderSetting &shader_setting)
void set_size(const Eigen::Vector2i &size)
std::shared_ptr< glk::PointCloudBuffer > update_points(const std::string &name, const float *data, int stride, int num_points, const ShaderSetting &shader_setting)
void set_colormap(glk::COLORMAP colormap)
void update_sphere(const std::string &name, const ShaderSetting &shader_setting)
void set_point_shape(float point_size=1.0f, bool metric=true, bool circle=true)
std::deque< std::string > sub_texts
Definition light_viewer_context.hpp:270
bool save_depth_buffer(const std::string &filename, bool real_scale=true)
void update_wire_cube(const std::string &name, const ShaderSetting &shader_setting)
std::vector< float > read_depth_buffer(bool real_scale=true)
Eigen::Matrix4f view_matrix() const
Definition light_viewer_context.hpp:130
bool save_camera_settings(const std::string &path) const
Eigen::Vector2i canvas_tl() const
Definition light_viewer_context.hpp:127
std::unordered_map< std::string, std::function< void()> > sub_ui_callbacks
Definition light_viewer_context.hpp:271
virtual void clear_text()
void update_normal_dists(const std::string &name, const Eigen::Matrix< Scalar, Dim, 1 > *points, const Eigen::Matrix< Scalar, Dim, Dim > *covs, int num_points, float scale, const ShaderSetting &shader_setting)
std::shared_ptr< OrbitCameraControlXY > use_orbit_camera_control(double distance=80.0, double theta=0.0, double phi=-60.0f *M_PI/180.0f)
guik::ShaderSetting global_shader_setting
Definition light_viewer_context.hpp:258
void set_bg_texture(const std::shared_ptr< glk::Texture > &bg_texture)
void update_wire_cone(const std::string &name, const ShaderSetting &shader_setting)
bool partial_rendering_enabled() const
void update_cube(const std::string &name, const ShaderSetting &shader_setting)
void enable_xy_grid()
Definition light_viewer_context.hpp:61
guik::ShaderSetting & shader_setting()
Definition light_viewer_context.hpp:57
std::pair< ShaderSetting::Ptr, glk::Drawable::ConstPtr > find_drawable(const std::string &name)
void set_clear_color(const Eigen::Vector4f &color)
const glk::Texture & normal_buffer() const
void enable_partial_rendering(double clear_thresh=1e-6)
void set_camera_control(const std::shared_ptr< CameraControl > &camera_control)
std::unordered_map< std::string, std::pair< ShaderSetting::Ptr, glk::Drawable::ConstPtr > > & get_drawables()
std::unordered_map< std::string, std::function< bool(const std::string &)> > drawable_filters
Definition light_viewer_context.hpp:266
void update_drawable(const std::string &name, const glk::Drawable::ConstPtr &drawable, const ShaderSetting &shader_setting=ShaderSetting())
bool decimal_rendering
Definition light_viewer_context.hpp:262
Eigen::Vector2i canvas_rect_max
Definition light_viewer_context.hpp:256
bool load_camera_settings(const std::string &path)
float pick_depth(const Eigen::Vector2i &p, int window=2) const
void set_draw_xy_grid(bool draw_xy_grid)
void update_wire_icosahedron(const std::string &name, const ShaderSetting &shader_setting)
bool save_color_buffer(const std::string &filename)
void disable_xy_grid()
Definition light_viewer_context.hpp:60
bool draw_xy_grid
Definition light_viewer_context.hpp:261
const std::shared_ptr< ProjectionControl > & get_projection_control() const
LightViewerContext(const std::string &context_name)
bool init_canvas(const Eigen::Vector2i &size)
void remove_drawable_filter(const std::string &filter_name)
std::unique_ptr< guik::GLCanvas > canvas
Definition light_viewer_context.hpp:257
void update_wire_frustum(const std::string &name, const ShaderSetting &shader_setting)
void set_rainbow_range(const Eigen::Vector2f &minmax_z)
bool info_buffer_enabled() const
void lookat(const Vector &pt)
Definition light_viewer_context.hpp:115
const glk::Texture & depth_buffer() const
const glk::Texture & color_buffer() const
void update_wire_sphere(const std::string &name, const ShaderSetting &shader_setting)
void set_projection_control(const std::shared_ptr< ProjectionControl > &projection_control)
void set_rainbow_axis(const Eigen::Vector3f &axis)
const glk::Texture & dynamic_flag_buffer() const
void remove_ui_callback(const std::string &name)
Eigen::Vector2i canvas_size() const
Definition light_viewer_context.hpp:129
void register_drawable_filter(const std::string &filter_name, const std::function< bool(const std::string &)> &filter=0)
const std::shared_ptr< CameraControl > & get_camera_control() const
virtual void register_ui_callback(const std::string &name, const std::function< void()> &callback=0)
Definition async_buffer_copy.hpp:6
COLORMAP
Definition colormap.hpp:9
std::enable_if_t< needs_aligned_allocator< T >::value, std::shared_ptr< T > > make_shared(Args &&... args)
Definition make_shared.hpp:20
Definition drawable_container.hpp:9
Shader setting class that holds rendering settings.
Definition shader_setting.hpp:187