cgv
line_renderer.h
1 #pragma once
2 
3 #include "group_renderer.h"
4 #include <cgv/media/color.h>
5 
6 #include "gl/lib_begin.h"
7 
8 namespace cgv { // @<
9  namespace render { // @<
10 
12  struct CGV_API line_render_style : public group_render_style
13  {
14  // default values for program attributes
15 
24 
25  // influence on opengl state
26  bool blend_lines;
27  protected:
28  friend class line_renderer;
29  mutable GLboolean is_blend;
30  mutable GLint blend_src, blend_dst;
31  public:
32  // vertex shader uniforms
33 
42 
43  // geometry shader uniforms
44 
51 
52  // fragment shader uniforms
53 
58  };
59 
61  class CGV_API line_renderer : public group_renderer
62  {
63  protected:
64  bool has_normals;
65  bool has_line_widths;
66  bool has_depth_offsets;
68  render_style* create_render_style() const;
69  public:
71  line_renderer();
73  bool enable(context& ctx);
75  bool disable(context& ctx);
77  void enable_attribute_array_manager(const context& ctx, attribute_array_manager& aam);
79  void disable_attribute_array_manager(const context& ctx, attribute_array_manager& aam);
81  bool init(context& ctx);
83  template <typename T>
84  void set_normal(const context& ctx, const cgv::math::fvec<T,3>& normal) { has_normals = true; ref_prog().set_attribute(ctx, ref_prog().get_attribute_location(ctx, "normal"), normal); }
86  template <typename T>
87  void set_normal_array(const context& ctx, const std::vector<T>& normals) { has_normals = true; set_attribute_array(ctx, ref_prog().get_attribute_location(ctx, "normal"), normals); }
89  template <typename T>
90  void set_normal_array(const context& ctx, const T* normals, size_t nr_elements, unsigned stride_in_bytes = 0) { has_normals = true; set_attribute_array(ctx, ref_prog().get_attribute_location(ctx, "normal"), normals, nr_elements, stride_in_bytes); }
92  template <typename T>
93  void set_line_width(const context& ctx, const T& line_width) { has_line_widths = true; ref_prog().set_attribute(ctx, ref_prog().get_attribute_location(ctx, "line_width"), line_width); }
95  template <typename T>
96  void set_line_width_array(const context& ctx, const std::vector<T>& line_widths) { has_line_widths = true; set_attribute_array(ctx, ref_prog().get_attribute_location(ctx, "line_width"), line_widths); }
98  template <typename T>
99  void set_line_width_array(const context& ctx, const T* line_widths, size_t nr_elements, unsigned stride_in_bytes = 0) { has_line_widths = true; set_attribute_array(ctx, ref_prog().get_attribute_location(ctx, "line_width"), line_widths, nr_elements, stride_in_bytes); }
101  template <typename T>
102  void set_depth_offset(const context& ctx, const T& depth_offset) { has_depth_offsets = true; ref_prog().set_attribute(ctx, ref_prog().get_attribute_location(ctx, "depth_offset"), depth_offset); }
104  template <typename T>
105  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); }
107  template <typename T>
108  void set_depth_offset_array(const context& ctx, const T* depth_offsets, size_t nr_elements, unsigned stride_in_bytes = 0) { has_depth_offsets = true; set_attribute_array(ctx, ref_prog().get_attribute_location(ctx, "depth_offset"), depth_offsets, nr_elements, stride_in_bytes); }
110  void draw(context& ctx, size_t start, size_t count,
111  bool use_strips = false, bool use_adjacency = false, uint32_t strip_restart_index = -1);
112  };
114  extern CGV_API line_renderer& ref_line_renderer(context& ctx, int ref_count_change = 0);
116  struct CGV_API line_render_style_reflect : public line_render_style
117  {
118  bool self_reflect(cgv::reflect::reflection_handler& rh);
119  };
120  extern CGV_API cgv::reflect::extern_reflection_traits<line_render_style, line_render_style_reflect> get_reflection_traits(const line_render_style&);
121  }
122 }
123 
124 #include <cgv/config/lib_end.h>
cgv::render::render_style
base class for all render styles
Definition: renderer.h:16
cgv::render::line_render_style::default_line_width
float default_line_width
default line width for case when "line_width" attribute is not set
Definition: line_renderer.h:23
cgv::render::line_renderer::set_depth_offset_array
void set_depth_offset_array(const context &ctx, const T *depth_offsets, size_t nr_elements, unsigned stride_in_bytes=0)
depth_offset array specifies box extends in case of position_is_center=true, otherwise the maximum po...
Definition: line_renderer.h:108
cgv::render::line_render_style::measure_line_width_in_pixel
bool measure_line_width_in_pixel
whether to measure line width in pixels - otherwise in eye space relative to reference_line_width
Definition: line_renderer.h:46
cgv::math::fvec< T, 3 >
cgv::render::group_render_style
Definition: group_renderer.h:15
cgv::render::line_render_style::blend_width_in_pixel
float blend_width_in_pixel
blend with in pixels used for line smoothing
Definition: line_renderer.h:50
cgv::render::line_renderer::set_line_width_array
void set_line_width_array(const context &ctx, const std::vector< T > &line_widths)
line_width array specifies box extends in case of position_is_center=true, otherwise the maximum poin...
Definition: line_renderer.h:96
cgv::render::line_renderer::set_normal
void set_normal(const context &ctx, const cgv::math::fvec< T, 3 > &normal)
specify a single normal for all lines
Definition: line_renderer.h:84
cgv::render::line_renderer::set_normal_array
void set_normal_array(const context &ctx, const std::vector< T > &normals)
templated method to set the normal attribute from a vector of normals of type T, which should have 3 ...
Definition: line_renderer.h:87
cgv::render::line_render_style::reference_line_width
float reference_line_width
reference line width multiplied to line width if measure_line_width_in_pixel is false
Definition: line_renderer.h:48
cgv::render::line_renderer
renderer that supports point splatting
Definition: line_renderer.h:62
cgv::render::line_render_style::default_normal
vec3 default_normal
default normal for case when "normal" attribute is not set
Definition: line_renderer.h:17
cgv::render::line_render_style::screen_aligned
bool screen_aligned
whether to span line splat in screen aligned coordinate system
Definition: line_renderer.h:41
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::render::line_renderer::set_line_width_array
void set_line_width_array(const context &ctx, const T *line_widths, size_t nr_elements, unsigned stride_in_bytes=0)
line_width array specifies box extends in case of position_is_center=true, otherwise the maximum poin...
Definition: line_renderer.h:99
cgv::render::line_render_style::default_depth_offset
float default_depth_offset
default depth offset for case when "depth_offset" attribute is not set
Definition: line_renderer.h:21
cgv::reflect::reflection_handler
Definition: reflection_handler.h:63
cgv::render::line_render_style::percentual_halo_width
float percentual_halo_width
halo width in percent of line width
Definition: line_renderer.h:39
cgv::render::line_renderer::set_depth_offset_array
void set_depth_offset_array(const context &ctx, const std::vector< T > &depth_offsets)
depth_offset array specifies box extends in case of position_is_center=true, otherwise the maximum po...
Definition: line_renderer.h:105
cgv::render::line_render_style
Definition: line_renderer.h:13
cgv::render::line_render_style::halo_width_in_pixel
float halo_width_in_pixel
halo width in pixel
Definition: line_renderer.h:37
cgv::render::line_renderer::set_normal_array
void set_normal_array(const context &ctx, const T *normals, size_t nr_elements, unsigned stride_in_bytes=0)
templated method to set the normal attribute from an array of normals of type T, which should have 3 ...
Definition: line_renderer.h:90
cgv::render::line_render_style::default_color
rgba default_color
default color for case when "color" attribute is not set
Definition: line_renderer.h:19
cgv::render::line_render_style::halo_color
rgba halo_color
halo color
Definition: line_renderer.h:35
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::line_renderer::set_depth_offset
void set_depth_offset(const context &ctx, const T &depth_offset)
specify a single depth_offset for all lines
Definition: line_renderer.h:102
cgv::render::line_render_style::halo_color_strength
float halo_color_strength
parameter in [0,1] to mix line color with halo color
Definition: line_renderer.h:55
cgv
the cgv namespace
Definition: vr_calib.cxx:9
cgv::render::line_renderer::set_line_width
void set_line_width(const context &ctx, const T &line_width)
specify a single line_width for all lines
Definition: line_renderer.h:93
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