1 #ifndef boxm2_ocl_depth_renderer_h_included_
2 #define boxm2_ocl_depth_renderer_h_included_
3 
4 #include <boxm2/boxm2_scene.h>
5 #include <vpgl/vpgl_camera_double_sptr.h>
6 #include <bocl/bocl_device.h>
7 #include <boxm2/ocl/boxm2_opencl_cache.h>
8 #include <vil/vil_image_view.h>
9 
10 class boxm2_ocl_depth_renderer
11 {
12   public:
13     boxm2_ocl_depth_renderer(const boxm2_scene_sptr& scene,
14                              const boxm2_opencl_cache_sptr& ocl_cache,
15                              const std::string& ident="");
16     ~boxm2_ocl_depth_renderer();
17 
18     bool render(vpgl_camera_double_sptr camera,
19                 unsigned ni,
20                 unsigned nj,
21                 float nearfactor=0.0f,
22                 float farfactor=1000000.0f);
23 
24     bool get_last_rendered(vil_image_view<float> &img);
25     bool get_last_vis(vil_image_view<float> &vis_img);
26 
27   private:
28     boxm2_scene_sptr scene_;
29     bocl_device_sptr device_;
30     boxm2_opencl_cache_sptr opencl_cache_;
31     std::string data_type_;
32     bool buffers_allocated_;
33     bool compile_kernels(const bocl_device_sptr& device);
34     bool cleanup_render_buffers();
35     bool allocate_render_buffers(int cl_ni, int cl_nj);
36 
37     bocl_kernel depth_kern_;
38     bocl_kernel depth_norm_kern_;
39 
40     bool render_success_;
41     vil_image_view<float> depth_img_;
42     vil_image_view<float> vis_img_;
43 
44     // persistant ocl and host buffers for efficiency
45     cl_int img_dim_buff_[4];
46     cl_float tnearfar_buff_[2];
47     cl_float output_buff_[100];
48     cl_uchar lookup_buff_[256];
49     cl_float subblk_dim_;
50 
51     cl_int prev_ni_;
52     cl_int prev_nj_;
53     cl_float* depth_buff_;
54     cl_float* vis_buff_;
55     cl_float* prob_buff_;
56     cl_float* var_buff_;
57     cl_float* t_infinity_buff_;
58 
59     cl_float* ray_origins_buff_;
60     cl_float* ray_directions_buff_;
61 
62     bocl_mem_sptr depth_image_;
63     bocl_mem_sptr vis_image_;
64     bocl_mem_sptr var_image_;
65     bocl_mem_sptr prob_image_;
66     bocl_mem_sptr t_infinity_image_;
67 
68     bocl_mem_sptr ray_origins_image_;
69     bocl_mem_sptr ray_directions_image_;
70 
71     bocl_mem_sptr img_dim_;
72     bocl_mem_sptr tnearfar_;
73     bocl_mem_sptr cl_output_;
74     bocl_mem_sptr lookup_;
75     bocl_mem_sptr cl_subblk_dim_;
76 };
77 
78 #endif
79