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