RealSense Cross Platform API
RealSense Cross-platform API
Loading...
Searching...
No Matches
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
8#include "rs_processing_gl.h"
9
10#include <memory>
11
12namespace 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;
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);
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);
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);
59 }
60
61 inline void shutdown_processing()
62 {
63 rs2_error* e = nullptr;
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);
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:
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:
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
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
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
343
347
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
Definition rs_processing.hpp:767
Definition rs_processing.hpp:811
static void handle(rs2_error *e)
Definition rs_types.hpp:167
Definition rs_processing.hpp:361
filter(std::shared_ptr< rs2_processing_block > block, int queue_size=1)
Definition rs_processing.hpp:383
rs2_processing_block * get() const
Definition rs_processing.hpp:405
frame()
Definition rs_frame.hpp:375
rs2_frame * get() const
Definition rs_frame.hpp:616
friend class context
Definition rs_processing_gl.hpp:382
align(rs2_stream to)
Definition rs_processing_gl.hpp:379
static const auto OPTION_MOUSE_X
Definition rs_processing_gl.hpp:298
static const auto OPTION_SELECTED
Definition rs_processing_gl.hpp:302
static const auto OPTION_MOUSE_Y
Definition rs_processing_gl.hpp:299
camera_renderer()
Definition rs_processing_gl.hpp:289
friend class context
Definition rs_processing_gl.hpp:304
static const auto OPTION_MOUSE_PICK
Definition rs_processing_gl.hpp:300
void set_matrix(rs2_gl_matrix_type type, float *m4x4)
Definition rs_processing_gl.hpp:291
static const auto OPTION_WAS_PICKED
Definition rs_processing_gl.hpp:301
colorizer()
Definition rs_processing_gl.hpp:216
uint32_t get_texture_id(unsigned int id=0) const
Definition rs_processing_gl.hpp:107
gpu_frame(const frame &f)
Definition rs_processing_gl.hpp:96
m420_decoder()
Definition rs_processing_gl.hpp:148
nv12_decoder()
Definition rs_processing_gl.hpp:173
static const auto OPTION_PICKED_Z
Definition rs_processing_gl.hpp:346
static const auto OPTION_NORMAL_Y
Definition rs_processing_gl.hpp:353
static const auto OPTION_SELECTED
Definition rs_processing_gl.hpp:349
static const auto OPTION_NORMAL_X
Definition rs_processing_gl.hpp:352
static const auto OPTION_ORIGIN_PICKED
Definition rs_processing_gl.hpp:350
void set_matrix(rs2_gl_matrix_type type, float *m4x4)
Definition rs_processing_gl.hpp:330
static const auto OPTION_PICKED_Y
Definition rs_processing_gl.hpp:345
pointcloud_renderer()
Definition rs_processing_gl.hpp:328
static const auto OPTION_MOUSE_PICK
Definition rs_processing_gl.hpp:342
static const auto OPTION_MOUSE_X
Definition rs_processing_gl.hpp:340
static const auto OPTION_FILLED
Definition rs_processing_gl.hpp:337
friend class context
Definition rs_processing_gl.hpp:359
static const auto OPTION_NORMAL_Z
Definition rs_processing_gl.hpp:354
static const auto OPTION_MOUSE_Y
Definition rs_processing_gl.hpp:341
static const auto OPTION_PICKED_X
Definition rs_processing_gl.hpp:344
static const auto OPTION_PICKED_ID
Definition rs_processing_gl.hpp:348
static const auto OPTION_SHADED
Definition rs_processing_gl.hpp:338
static const auto OPTION_SCALE_FACTOR
Definition rs_processing_gl.hpp:356
Definition rs_processing_gl.hpp:253
pointcloud(rs2_stream stream, int index=0)
Definition rs_processing_gl.hpp:257
pointcloud()
Definition rs_processing_gl.hpp:255
friend class context
Definition rs_processing_gl.hpp:265
uploader()
Definition rs_processing_gl.hpp:234
y411_decoder()
Definition rs_processing_gl.hpp:194
yuy_decoder()
Definition rs_processing_gl.hpp:123
Definition rs_processing.hpp:529
Definition rs_processing.hpp:561
void set_option(rs2_option option, float value) const
Definition rs_options.hpp:256
Definition rs_processing.hpp:430
Definition rs_processing.hpp:588
Definition rs_processing.hpp:500
Definition rs_processing_gl.hpp:15
void shutdown_processing()
Definition rs_processing_gl.hpp:61
void init_processing(bool use_glsl=true)
Definition rs_processing_gl.hpp:54
void init_rendering(bool use_glsl=true)
Definition rs_processing_gl.hpp:46
void shutdown_rendering()
Definition rs_processing_gl.hpp:19
Definition rs_processing_gl.hpp:13
#define RS2_API_VERSION
Definition rs.h:44
rs2_option
Defines general configuration controls. These can generally be mapped to camera UVC controls,...
Definition rs_option.h:27
@ RS2_OPTION_STREAM_FILTER
Definition rs_option.h:71
@ RS2_OPTION_COUNT
Definition rs_option.h:138
@ RS2_OPTION_STREAM_INDEX_FILTER
Definition rs_option.h:73
void rs2_delete_processing_block(rs2_processing_block *block)
Exposes RealSense processing-block functionality for GPU for C compilers.
rs2_processing_block * rs2_gl_create_colorizer(int api_version, rs2_error **error)
unsigned int rs2_gl_frame_get_texture_id(const rs2_frame *f, unsigned int id, rs2_error **error)
@ RS2_GL_EXTENSION_VIDEO_FRAME
Definition rs_processing_gl.h:24
rs2_processing_block * rs2_gl_create_pointcloud(int api_version, rs2_error **error)
struct GLFWwindow GLFWwindow
Definition rs_processing_gl.h:43
void rs2_gl_init_rendering(int api_version, int use_glsl, rs2_error **error)
rs2_processing_block * rs2_gl_create_yuy_decoder(int api_version, rs2_error **error)
rs2_processing_block * rs2_gl_create_align(int api_version, rs2_stream to, rs2_error **error)
void rs2_gl_set_matrix(rs2_processing_block *block, rs2_gl_matrix_type type, float *m4x4, rs2_error **error)
rs2_processing_block * rs2_gl_create_camera_renderer(int api_version, rs2_error **error)
void rs2_gl_shutdown_rendering(int api_version, rs2_error **error)
void rs2_gl_shutdown_processing(int api_version, rs2_error **error)
rs2_gl_matrix_type
Definition rs_processing_gl.h:34
int rs2_gl_is_frame_extendable_to(const rs2_frame *f, rs2_gl_extension extension_type, rs2_error **error)
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)
rs2_processing_block * rs2_gl_create_m420_decoder(int api_version, rs2_error **error)
rs2_processing_block * rs2_gl_create_nv12_decoder(int api_version, rs2_error **error)
void rs2_gl_init_rendering_glfw(int api_version, glfw_binding bindings, int use_glsl, rs2_error **error)
void rs2_gl_init_processing(int api_version, int use_glsl, rs2_error **error)
void rs2_gl_init_processing_glfw(int api_version, GLFWwindow *share_with, glfw_binding bindings, int use_glsl, rs2_error **error)
rs2_processing_block * rs2_gl_create_pointcloud_renderer(int api_version, rs2_error **error)
rs2_stream
Streams are different types of data provided by RealSense devices.
Definition rs_sensor.h:48
struct rs2_error rs2_error
Definition rs_types.h:293
Definition rs_processing_gl.h:59