RealSense Cross Platform API
RealSense Cross-platform API
rs_processing_gl.hpp
Go to the documentation of this file.
1 // License: Apache 2.0. See LICENSE file in root directory.
2 // Copyright(c) 2017 RealSense, Inc. All Rights Reserved.
3 
4 #ifndef LIBREALSENSE_RS2_PROCESSING_GL_HPP
5 #define LIBREALSENSE_RS2_PROCESSING_GL_HPP
6 
7 #include <librealsense2/rs.hpp>
8 #include "rs_processing_gl.h"
9 
10 #include <memory>
11 
12 namespace rs2
13 {
14  namespace gl
15  {
16  class pointcloud;
17  class yuy_to_rgb;
18 
19  inline void shutdown_rendering()
20  {
21  rs2_error* e = nullptr;
23  error::handle(e);
24  }
25 
26 #ifdef _glfw3_h_
27  inline void init_rendering(bool use_glsl = true)
28  {
29  rs2_error* e = nullptr;
30 
31  glfw_binding binding{
32  nullptr,
33  &glfwWindowHint,
34  &glfwCreateWindow,
35  &glfwDestroyWindow,
36  &glfwMakeContextCurrent,
37  &glfwGetCurrentContext,
38  &glfwSwapInterval,
39  &glfwGetProcAddress
40  };
41 
42  rs2_gl_init_rendering_glfw(RS2_API_VERSION, binding, use_glsl ? 1 : 0, &e);
43  error::handle(e);
44  }
45 #else
46  inline void init_rendering(bool use_glsl = true)
47  {
48  rs2_error* e = nullptr;
49  rs2_gl_init_rendering(RS2_API_VERSION, use_glsl ? 1 : 0, &e);
50  error::handle(e);
51  }
52 #endif
53 
54  inline void init_processing(bool use_glsl = true)
55  {
56  rs2_error* e = nullptr;
57  rs2_gl_init_processing(RS2_API_VERSION, use_glsl ? 1 : 0, &e);
58  error::handle(e);
59  }
60 
61  inline void shutdown_processing()
62  {
63  rs2_error* e = nullptr;
65  error::handle(e);
66  }
67 
68 #ifdef _glfw3_h_
69  inline void init_processing(GLFWwindow* share_with, bool use_glsl = true)
70  {
71  rs2_error* e = nullptr;
72 
73  glfw_binding binding{
74  nullptr,
75  &glfwWindowHint,
76  &glfwCreateWindow,
77  &glfwDestroyWindow,
78  &glfwMakeContextCurrent,
79  &glfwGetCurrentContext,
80  &glfwSwapInterval,
81  &glfwGetProcAddress
82  };
83 
84  rs2_gl_init_processing_glfw(RS2_API_VERSION, share_with, binding, use_glsl ? 1 : 0, &e);
85  error::handle(e);
86  }
87 #endif
88 
93  class gpu_frame : public frame
94  {
95  public:
96  gpu_frame(const frame& f)
97  : frame(f)
98  {
99  rs2_error* e = nullptr;
100  if (!f || (rs2_gl_is_frame_extendable_to(f.get(), RS2_GL_EXTENSION_VIDEO_FRAME, &e) == 0 && !e))
101  {
102  reset();
103  }
104  error::handle(e);
105  }
106 
107  uint32_t get_texture_id(unsigned int id = 0) const
108  {
109  rs2_error * e = nullptr;
110  auto r = rs2_gl_frame_get_texture_id(get(), id, &e);
111  error::handle(e);
112  return r;
113  }
114  };
115 
121  {
122  public:
123  yuy_decoder() : rs2::yuy_decoder(init()) { }
124 
125  private:
126  std::shared_ptr<rs2_processing_block> init()
127  {
128  rs2_error* e = nullptr;
129  auto block = std::shared_ptr<rs2_processing_block>(
132  error::handle(e);
133 
134  // Redirect options API to the processing block
135  //options::operator=(pb);
136 
137  return block;
138  }
139  };
140 
146  {
147  public:
148  m420_decoder() : rs2::m420_decoder(init()) { }
149 
150  private:
151  std::shared_ptr<rs2_processing_block> init()
152  {
153  rs2_error* e = nullptr;
154  auto block = std::shared_ptr<rs2_processing_block>(
157  error::handle(e);
158 
159  // Redirect options API to the processing block
160  //options::operator=(pb);
161 
162  return block;
163  }
164  };
165 
171  {
172  public:
173  nv12_decoder() : rs2::nv12_decoder(init()) { }
174 
175  private:
176  std::shared_ptr<rs2_processing_block> init()
177  {
178  rs2_error* e = nullptr;
179  auto block = std::shared_ptr<rs2_processing_block>(
182  error::handle(e);
183 
184  return block;
185  }
186  };
187 
192  {
193  public:
194  y411_decoder() : rs2::y411_decoder( init() ) {}
195 
196  private:
197  static std::shared_ptr<rs2_processing_block> init()
198  {
199  rs2_error* e = nullptr;
200  auto block = std::shared_ptr<rs2_processing_block>(
203  error::handle(e);
204 
205  return block;
206  }
207  };
208 
213  class colorizer : public rs2::colorizer
214  {
215  public:
216  colorizer() : rs2::colorizer(init()) { }
217 
218  private:
219  std::shared_ptr<rs2_processing_block> init()
220  {
221  rs2_error* e = nullptr;
222  auto block = std::shared_ptr<rs2_processing_block>(
225  error::handle(e);
226 
227  return block;
228  }
229  };
230 
231  class uploader : public rs2::filter
232  {
233  public:
234  uploader() : rs2::filter(init()) { }
235 
236  private:
237  std::shared_ptr<rs2_processing_block> init()
238  {
239  rs2_error* e = nullptr;
240  auto block = std::shared_ptr<rs2_processing_block>(
243  error::handle(e);
244  return block;
245  }
246  };
247 
253  {
254  public:
255  pointcloud() : rs2::pointcloud(init()) {}
256 
257  pointcloud(rs2_stream stream, int index = 0)
258  : rs2::pointcloud(init())
259  {
260  set_option(RS2_OPTION_STREAM_FILTER, float(stream));
262  }
263 
264  private:
265  friend class context;
266 
267  std::shared_ptr<rs2_processing_block> init()
268  {
269  rs2_error* e = nullptr;
270 
271  auto block = std::shared_ptr<rs2_processing_block>(
274 
275  error::handle(e);
276 
277  return block;
278  }
279  };
280 
287  {
288  public:
289  camera_renderer() : rs2::filter(init()) {}
290 
291  void set_matrix(rs2_gl_matrix_type type, float* m4x4)
292  {
293  rs2_error* e = nullptr;
294  rs2_gl_set_matrix(get(), type, m4x4, &e);
295  error::handle(e);
296  }
297 
298  static const auto OPTION_MOUSE_X = rs2_option(RS2_OPTION_COUNT + 1);
299  static const auto OPTION_MOUSE_Y = rs2_option(RS2_OPTION_COUNT + 2);
302  static const auto OPTION_SELECTED = rs2_option(RS2_OPTION_COUNT + 5);
303  private:
304  friend class context;
305 
306  std::shared_ptr<rs2_processing_block> init()
307  {
308  rs2_error* e = nullptr;
309 
310  auto block = std::shared_ptr<rs2_processing_block>(
313 
314  error::handle(e);
315  return block;
316  }
317  };
318 
326  {
327  public:
329 
330  void set_matrix(rs2_gl_matrix_type type, float* m4x4)
331  {
332  rs2_error* e = nullptr;
333  rs2_gl_set_matrix(get(), type, m4x4, &e);
334  error::handle(e);
335  }
336 
337  static const auto OPTION_FILLED = rs2_option(RS2_OPTION_COUNT + 1);
338  static const auto OPTION_SHADED = rs2_option(RS2_OPTION_COUNT + 2);
339 
340  static const auto OPTION_MOUSE_X = rs2_option(RS2_OPTION_COUNT + 3);
341  static const auto OPTION_MOUSE_Y = rs2_option(RS2_OPTION_COUNT + 4);
343 
344  static const auto OPTION_PICKED_X = rs2_option(RS2_OPTION_COUNT + 6);
345  static const auto OPTION_PICKED_Y = rs2_option(RS2_OPTION_COUNT + 7);
346  static const auto OPTION_PICKED_Z = rs2_option(RS2_OPTION_COUNT + 8);
347 
348  static const auto OPTION_PICKED_ID = rs2_option(RS2_OPTION_COUNT + 9);
349  static const auto OPTION_SELECTED = rs2_option(RS2_OPTION_COUNT + 10);
351 
352  static const auto OPTION_NORMAL_X = rs2_option(RS2_OPTION_COUNT + 12);
353  static const auto OPTION_NORMAL_Y = rs2_option(RS2_OPTION_COUNT + 13);
354  static const auto OPTION_NORMAL_Z = rs2_option(RS2_OPTION_COUNT + 14);
355 
357 
358  private:
359  friend class context;
360 
361  std::shared_ptr<rs2_processing_block> init()
362  {
363  rs2_error* e = nullptr;
364 
365  auto block = std::shared_ptr<rs2_processing_block>(
368 
369  error::handle(e);
370  return block;
371  }
372  };
373 
376  class align : public rs2::align
377  {
378  public:
379  align(rs2_stream to) : rs2::align(init(to)) {}
380 
381  private:
382  friend class context;
383 
384  std::shared_ptr<rs2_processing_block> init(rs2_stream to)
385  {
386  rs2_error* e = nullptr;
387 
388  auto block = std::shared_ptr<rs2_processing_block>(
391 
392  error::handle(e);
393 
394  return block;
395  }
396  };
397  }
398 }
399 #endif // LIBREALSENSE_RS2_PROCESSING_GL_HPP
void init_processing(bool use_glsl=true)
Definition: rs_processing_gl.hpp:54
Definition: rs_option.h:138
rs2_processing_block * rs2_gl_create_colorizer(int api_version, rs2_error **error)
void rs2_gl_shutdown_processing(int api_version, rs2_error **error)
Definition: rs_frame.hpp:369
#define RS2_API_VERSION
Definition: rs.h:44
Definition: rs_processing_gl.hpp:120
static const auto OPTION_PICKED_ID
Definition: rs_processing_gl.hpp:348
static const auto OPTION_ORIGIN_PICKED
Definition: rs_processing_gl.hpp:350
rs2_option
Defines general configuration controls. These can generally be mapped to camera UVC controls...
Definition: rs_option.h:26
static const auto OPTION_NORMAL_X
Definition: rs_processing_gl.hpp:352
static const auto OPTION_MOUSE_Y
Definition: rs_processing_gl.hpp:341
void rs2_gl_init_rendering_glfw(int api_version, glfw_binding bindings, int use_glsl, rs2_error **error)
Definition: rs_processing.hpp:499
static const auto OPTION_NORMAL_Y
Definition: rs_processing_gl.hpp:353
Definition: rs_processing_gl.hpp:376
rs2_processing_block * rs2_gl_create_pointcloud_renderer(int api_version, rs2_error **error)
static const auto OPTION_MOUSE_Y
Definition: rs_processing_gl.hpp:299
pointcloud(rs2_stream stream, int index=0)
Definition: rs_processing_gl.hpp:257
void rs2_gl_shutdown_rendering(int api_version, rs2_error **error)
static const auto OPTION_NORMAL_Z
Definition: rs_processing_gl.hpp:354
Definition: rs_processing_gl.h:58
Definition: rs_context.hpp:11
static const auto OPTION_PICKED_Y
Definition: rs_processing_gl.hpp:345
Definition: rs_processing.hpp:528
int rs2_gl_is_frame_extendable_to(const rs2_frame *f, rs2_gl_extension extension_type, rs2_error **error)
Definition: rs_processing_gl.hpp:145
gpu_frame(const frame &f)
Definition: rs_processing_gl.hpp:96
rs2_processing_block * rs2_gl_create_yuy_decoder(int api_version, rs2_error **error)
void shutdown_processing()
Definition: rs_processing_gl.hpp:61
Definition: rs_context.hpp:96
Definition: rs_processing_gl.hpp:252
void reset()
Definition: rs_frame.hpp:637
void set_matrix(rs2_gl_matrix_type type, float *m4x4)
Definition: rs_processing_gl.hpp:291
Definition: rs_processing_gl.hpp:213
rs2_processing_block * rs2_gl_create_m420_decoder(int api_version, rs2_error **error)
Definition: rs_processing_gl.hpp:93
static const auto OPTION_PICKED_Z
Definition: rs_processing_gl.hpp:346
y411_decoder()
Definition: rs_processing_gl.hpp:194
Exposes RealSense processing-block functionality for GPU for C compilers.
void rs2_gl_set_matrix(rs2_processing_block *block, rs2_gl_matrix_type type, float *m4x4, rs2_error **error)
void set_matrix(rs2_gl_matrix_type type, float *m4x4)
Definition: rs_processing_gl.hpp:330
Definition: rs_processing_gl.hpp:191
uploader()
Definition: rs_processing_gl.hpp:234
pointcloud()
Definition: rs_processing_gl.hpp:255
void shutdown_rendering()
Definition: rs_processing_gl.hpp:19
Definition: rs_processing.hpp:560
align(rs2_stream to)
Definition: rs_processing_gl.hpp:379
Definition: rs_processing_gl.hpp:231
static const auto OPTION_SELECTED
Definition: rs_processing_gl.hpp:302
m420_decoder()
Definition: rs_processing_gl.hpp:148
static const auto OPTION_FILLED
Definition: rs_processing_gl.hpp:337
static const auto OPTION_MOUSE_X
Definition: rs_processing_gl.hpp:298
void rs2_delete_processing_block(rs2_processing_block *block)
Definition: rs_processing_gl.hpp:170
Definition: rs_processing.hpp:429
uint32_t get_texture_id(unsigned int id=0) const
Definition: rs_processing_gl.hpp:107
pointcloud_renderer()
Definition: rs_processing_gl.hpp:328
Definition: rs_processing_gl.h:24
void init_rendering(bool use_glsl=true)
Definition: rs_processing_gl.hpp:46
static void handle(rs2_error *e)
Definition: rs_types.hpp:167
static const auto OPTION_PICKED_X
Definition: rs_processing_gl.hpp:344
rs2_stream
Streams are different types of data provided by RealSense devices.
Definition: rs_sensor.h:47
static const auto OPTION_SELECTED
Definition: rs_processing_gl.hpp:349
static const auto OPTION_SCALE_FACTOR
Definition: rs_processing_gl.hpp:356
static const auto OPTION_SHADED
Definition: rs_processing_gl.hpp:338
Definition: rs_processing.hpp:360
static const auto OPTION_WAS_PICKED
Definition: rs_processing_gl.hpp:301
void rs2_gl_init_processing_glfw(int api_version, GLFWwindow *share_with, glfw_binding bindings, int use_glsl, rs2_error **error)
Definition: rs_option.h:73
Definition: rs_processing.hpp:810
rs2_processing_block * rs2_gl_create_camera_renderer(int api_version, rs2_error **error)
static const auto OPTION_MOUSE_PICK
Definition: rs_processing_gl.hpp:342
rs2_processing_block * rs2_gl_create_nv12_decoder(int api_version, rs2_error **error)
void rs2_gl_init_rendering(int api_version, int use_glsl, rs2_error **error)
Definition: rs_processing.hpp:766
rs2_processing_block * rs2_gl_create_uploader(int api_version, rs2_error **error)
rs2_processing_block * rs2_gl_create_y411_decoder(int api_version, rs2_error **error)
void set_option(rs2_option option, float value) const
Definition: rs_options.hpp:256
yuy_decoder()
Definition: rs_processing_gl.hpp:123
nv12_decoder()
Definition: rs_processing_gl.hpp:173
static const auto OPTION_MOUSE_PICK
Definition: rs_processing_gl.hpp:300
rs2_processing_block * rs2_gl_create_align(int api_version, rs2_stream to, rs2_error **error)
rs2_gl_matrix_type
Definition: rs_processing_gl.h:33
colorizer()
Definition: rs_processing_gl.hpp:216
Definition: rs_processing_gl.hpp:286
unsigned int rs2_gl_frame_get_texture_id(const rs2_frame *f, unsigned int id, rs2_error **error)
Definition: rs_processing.hpp:587
struct rs2_error rs2_error
Definition: rs_types.h:293
Definition: rs_processing_gl.hpp:325
rs2_processing_block * rs2_gl_create_pointcloud(int api_version, rs2_error **error)
rs2_frame * get() const
Definition: rs_frame.hpp:616
camera_renderer()
Definition: rs_processing_gl.hpp:289
struct GLFWwindow GLFWwindow
Definition: rs_processing_gl.h:43
static const auto OPTION_MOUSE_X
Definition: rs_processing_gl.hpp:340
void rs2_gl_init_processing(int api_version, int use_glsl, rs2_error **error)
Definition: rs_option.h:71