cgv
surfel_renderer.h
1 #pragma once
2 
3 #include "surface_renderer.h"
4 
5 #include "gl/lib_begin.h"
6 
7 namespace cgv {
8  namespace render {
9  class CGV_API surfel_renderer;
10 
12 
15  extern CGV_API surfel_renderer& ref_surfel_renderer(context& ctx, int ref_count_change = 0);
16 
18  struct CGV_API surfel_render_style : public surface_render_style
19  {
20  /*@name point rendering attributes*/
22  float point_size;
29 
30  /*@name global point rendering options*/
32  float blend_width_in_pixel;
39  rgba halo_color;
48  };
49 
51  class CGV_API surfel_renderer : public surface_renderer
52  {
53  protected:
54  bool has_point_sizes;
55  bool has_group_point_sizes;
56  bool has_indexed_colors;
57  float reference_point_size;
58  float y_view_angle;
60  render_style* create_render_style() const;
61  public:
65  void enable_attribute_array_manager(const context& ctx, attribute_array_manager& aam);
67  void disable_attribute_array_manager(const context& ctx, attribute_array_manager& aam);
69  bool init(context& ctx);
71  void set_reference_point_size(float _reference_point_size);
73  void set_y_view_angle(float y_view_angle);
75  template <typename T = float>
76  void set_point_size_array(const context& ctx, const std::vector<T>& point_sizes) { has_point_sizes = true; set_attribute_array(ctx, ref_prog().get_attribute_location(ctx, "point_size"), point_sizes); }
78  template <typename T = unsigned, typename C = cgv::media::color<float, cgv::media::RGB, cgv::media::OPACITY> >
79  void set_indexed_color_array(const context& ctx, const std::vector<T>& color_indices, const std::vector<C>& palette) {
80  has_indexed_colors = true;
81  set_attribute_array(ctx, ref_prog().get_attribute_location(ctx, "color_index"), color_indices);
82  ref_prog().set_uniform_array(ctx, "palette", palette);
83  }
85  template <typename T = unsigned, typename C = cgv::media::color<float, cgv::media::RGB, cgv::media::OPACITY> >
86  void set_indexed_color_array(const context& ctx, T* color_index_ptr, size_t nr_elements, const std::vector<C>& palette, unsigned stride = 0) {
87  has_indexed_colors = true;
88  set_attribute_array(ctx, ref_prog().get_attribute_location(ctx, "color_index"), color_index_ptr, nr_elements, stride);
89  ref_prog().set_uniform_array(ctx, "palette", palette);
90  }
92  template <typename T = float>
93  void set_group_point_sizes(const context& ctx, const std::vector<T>& group_point_sizes) { has_group_point_sizes = true; ref_prog().set_uniform_array(ctx, "group_point_sizes", group_point_sizes); }
95  bool validate_attributes(const context& ctx) const;
97  bool enable(context& ctx);
99  bool disable(context& ctx);
101  void draw(context& ctx, size_t start, size_t count,
102  bool use_strips = false, bool use_adjacency = false, uint32_t strip_restart_index = -1);
103  };
104  struct CGV_API surfel_render_style_reflect : public surfel_render_style
105  {
106  bool self_reflect(cgv::reflect::reflection_handler& rh);
107  };
108  extern CGV_API cgv::reflect::extern_reflection_traits<surfel_render_style, surfel_render_style_reflect> get_reflection_traits(const surfel_render_style&);
109  }
110 }
111 
112 #include <cgv/config/lib_end.h>
cgv::render::render_style
base class for all render styles
Definition: renderer.h:16
cgv::render::ref_surfel_renderer
surfel_renderer & ref_surfel_renderer(context &ctx, int ref_count_change)
reference to a singleton surfel renderer that can be shared among drawables
Definition: surfel_renderer.cxx:7
cgv::render::surfel_render_style::orient_splats
bool orient_splats
set to true in constructor
Definition: surfel_renderer.h:43
cgv::render::surfel_render_style::halo_color_strength
float halo_color_strength
strength in [0,1] of halo color with respect to color of primitive
Definition: surfel_renderer.h:41
cgv::render::surface_render_style
Definition: surface_renderer.h:26
cgv::render::surfel_render_style::measure_point_size_in_pixel
bool measure_point_size_in_pixel
whether to measure point size in pixels or in world space relative to reference_pixel_size passed to ...
Definition: surfel_renderer.h:27
cgv::render::surfel_render_style::percentual_halo_width
float percentual_halo_width
set to 0 in constructor
Definition: surfel_renderer.h:37
cgv::render::surfel_render_style::halo_color
rgba halo_color
color of halo with opacity channel
Definition: surfel_renderer.h:39
cgv::render::attribute_array_manager
attribute array manager used to upload arrays to gpu
Definition: renderer.h:21
cgv::render::surfel_render_style::use_group_point_size
bool use_group_point_size
whether to use the
Definition: surfel_renderer.h:25
cgv::reflect::reflection_handler
Definition: reflection_handler.h:63
cgv::render::surfel_render_style
Definition: surfel_renderer.h:19
cgv::render::surfel_render_style::blend_points
bool blend_points
set to false in constructor
Definition: surfel_renderer.h:45
cgv::render::surfel_renderer
renderer that supports point splatting
Definition: surfel_renderer.h:52
cgv::render::surface_renderer
base classes for renderers that support surface rendering
Definition: surface_renderer.h:43
cgv::reflect::extern_reflection_traits
this reflection traits implementation is used for external self_reflect implementations of instances ...
Definition: reflect_extern.h:28
cgv
the cgv namespace
Definition: vr_calib.cxx:9
cgv::render::surfel_render_style::halo_width_in_pixel
float halo_width_in_pixel
set to 0 in constructor
Definition: surfel_renderer.h:35
cgv::render::context
Definition: context.h:525