cgv
point_renderer.h
1 #pragma once
2 
3 #include "group_renderer.h"
4 
5 #include "gl/lib_begin.h"
6 
7 namespace cgv {
8  namespace render {
9  class CGV_API point_renderer;
10 
12 
15  extern CGV_API point_renderer& ref_point_renderer(context& ctx, int ref_count_change = 0);
16 
18  struct CGV_API point_render_style : public group_render_style
19  {
20  /*@name point rendering attributes*/
22  float point_size;
31 
32  /*@name global point rendering options*/
34  float default_depth_offset;
50  };
51 
53  class CGV_API point_renderer : public group_renderer
54  {
55  protected:
56  bool has_point_sizes;
57  bool has_group_point_sizes;
58  bool has_indexed_colors;
59  bool has_depth_offsets;
60  float reference_point_size;
61  float y_view_angle;
63  render_style* create_render_style() const;
64  public:
68  void enable_attribute_array_manager(const context& ctx, attribute_array_manager& aam);
70  void disable_attribute_array_manager(const context& ctx, attribute_array_manager& aam);
72  bool init(context& ctx);
74  void set_reference_point_size(float _reference_point_size);
76  void set_y_view_angle(float y_view_angle);
78  template <typename T = float>
79  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); }
81  template <typename T = float>
82  void set_depth_offset_array(const context& ctx, const std::vector<T>& depth_offsets) { has_depth_offsets = true; set_attribute_array(ctx, ref_prog().get_attribute_location(ctx, "depth_offset"), depth_offsets); }
84  template <typename T = unsigned, typename C = cgv::media::color<float,cgv::media::RGB,cgv::media::OPACITY> >
85  void set_indexed_color_array(const context& ctx, const std::vector<T>& color_indices, const std::vector<C>& palette) {
86  has_indexed_colors = true;
87  set_attribute_array(ctx, ref_prog().get_attribute_location(ctx, "color_index"), color_indices);
88  ref_prog().set_uniform_array(ctx, "palette", palette);
89  }
91  template <typename T = float>
92  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); }
94  bool validate_attributes(const context& ctx) const;
96  bool enable(context& ctx);
98  bool disable(context& ctx);
100  void draw(context& ctx, size_t start, size_t count,
101  bool use_strips = false, bool use_adjacency = false, uint32_t strip_restart_index = -1);
102  };
103  struct CGV_API point_render_style_reflect : public point_render_style
104  {
105  bool self_reflect(cgv::reflect::reflection_handler& rh);
106  };
107  extern CGV_API cgv::reflect::extern_reflection_traits<point_render_style, point_render_style_reflect> get_reflection_traits(const point_render_style&);
108  }
109 }
110 
111 #include <cgv/config/lib_end.h>
cgv::render::render_style
base class for all render styles
Definition: renderer.h:16
cgv::render::point_render_style::percentual_halo_width
float percentual_halo_width
set to 0 in constructor
Definition: point_renderer.h:41
cgv::render::point_render_style::halo_color
rgba halo_color
color of halo with opacity channel
Definition: point_renderer.h:43
cgv::render::group_render_style
Definition: group_renderer.h:15
cgv::render::ref_point_renderer
point_renderer & ref_point_renderer(context &ctx, int ref_count_change)
reference to a singleton point renderer that can be shared among drawables
Definition: point_renderer.cxx:8
cgv::render::point_render_style::halo_color_strength
float halo_color_strength
strength in [0,1] of halo color with respect to color of primitive
Definition: point_renderer.h:45
cgv::render::attribute_array_manager
attribute array manager used to upload arrays to gpu
Definition: renderer.h:21
cgv::media::color< float, cgv::media::RGB, cgv::media::OPACITY >
cgv::reflect::reflection_handler
Definition: reflection_handler.h:63
cgv::render::point_render_style::screen_aligned
bool screen_aligned
whether to span point splat in screen aligned coordinate system
Definition: point_renderer.h:29
cgv::render::point_render_style
Definition: point_renderer.h:19
cgv::render::point_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: point_renderer.h:27
cgv::render::point_renderer
renderer that supports point splatting
Definition: point_renderer.h:54
cgv::render::point_render_style::blend_width_in_pixel
float blend_width_in_pixel
set to 1 in constructor
Definition: point_renderer.h:37
cgv::render::point_render_style::blend_points
bool blend_points
set to true in constructor
Definition: point_renderer.h:47
cgv::render::point_render_style::halo_width_in_pixel
float halo_width_in_pixel
set to 0 in constructor
Definition: point_renderer.h:39
cgv::reflect::extern_reflection_traits
this reflection traits implementation is used for external self_reflect implementations of instances ...
Definition: reflect_extern.h:28
cgv::render::point_renderer::set_depth_offset_array
void set_depth_offset_array(const context &ctx, const std::vector< T > &depth_offsets)
set per point depth offsets
Definition: point_renderer.h:82
cgv::render::point_render_style::use_group_point_size
bool use_group_point_size
whether to use the
Definition: point_renderer.h:25
cgv
the cgv namespace
Definition: vr_calib.cxx:9
cgv::render::context
Definition: context.h:525
cgv::render::group_renderer
abstract renderer class that provides functionality for grouping primitives
Definition: group_renderer.h:26