cgv
spline_tube_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 spline_tube_renderer;
10 
12 
15  extern CGV_API spline_tube_renderer& ref_spline_tube_renderer(context& ctx, int ref_count_change = 0);
16 
17  struct CGV_API spline_tube_render_style : public surface_render_style
18  {
20  float radius_scale;
22  float radius;
24  spline_tube_render_style();
25  };
26 
28  class CGV_API spline_tube_renderer : public surface_renderer
29  {
30  protected:
32  bool has_radii;
35 
36  vec3 eye_pos;
37 
39  render_style* create_render_style() const;
40  public:
41 
42 
43  void set_eye_pos(vec3 ep) { eye_pos = ep; }
44 
45 
49  void enable_attribute_array_manager(const context& ctx, attribute_array_manager& aam);
51  void disable_attribute_array_manager(const context& ctx, attribute_array_manager& aam);
53  bool init(context& ctx);
55  template <typename T = float>
56  void set_radius_array(const context& ctx, const std::vector<T>& radii) { has_radii = true; set_attribute_array(ctx, ref_prog().get_attribute_location(ctx, "radius"), radii); }
58  template <typename T = float>
59  void set_radius_array(const context& ctx, const T* radii, size_t nr_elements, unsigned stride_in_bytes = 0) { has_radii = true; set_attribute_array(ctx, ref_prog().get_attribute_location(ctx, "radius"), radii, nr_elements, stride_in_bytes); }
61  template <typename T = float>
62  void set_tangent_array(const context& ctx, const std::vector<T>& tangents) { has_tangents = true; set_attribute_array(ctx, ref_prog().get_attribute_location(ctx, "tangent"), tangents); }
64  template <typename T = float>
65  void set_tangent_array(const context& ctx, const T* tangents, size_t nr_elements, unsigned stride_in_bytes = 0) { has_tangents = true; set_attribute_array(ctx, ref_prog().get_attribute_location(ctx, "tangent"), tangents, nr_elements, stride_in_bytes); }
67  bool validate_attributes(const context& ctx) const;
69  bool enable(context& ctx);
71  bool disable(context& ctx);
73  void draw(context& ctx, size_t start, size_t count,
74  bool use_strips = false, bool use_adjacency = false, uint32_t strip_restart_index = -1);
75  };
76 
77  struct CGV_API spline_tube_render_style_reflect : public spline_tube_render_style
78  {
79  bool self_reflect(cgv::reflect::reflection_handler& rh);
80  };
81  extern CGV_API cgv::reflect::extern_reflection_traits<spline_tube_render_style, spline_tube_render_style_reflect> get_reflection_traits(const spline_tube_render_style&);
82  }
83 }
84 
85 #include <cgv/config/lib_end.h>
cgv::render::render_style
base class for all render styles
Definition: renderer.h:16
cgv::math::fvec< float, 3 >
cgv::render::spline_tube_renderer
renderer that supports point splatting
Definition: spline_tube_renderer.h:29
cgv::render::attribute_array_manager
attribute array manager used to upload arrays to gpu
Definition: renderer.h:21
cgv::render::ref_spline_tube_renderer
spline_tube_renderer & ref_spline_tube_renderer(context &ctx, int ref_count_change)
reference to a singleton spline tube renderer that is shared among drawables
Definition: spline_tube_renderer.cxx:7
cgv::reflect::reflection_handler
Definition: reflection_handler.h:63
cgv::render::spline_tube_renderer::has_radii
bool has_radii
whether radii are specified
Definition: spline_tube_renderer.h:32
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::spline_tube_renderer::has_tangents
bool has_tangents
whether tangents are specified
Definition: spline_tube_renderer.h:34
cgv::render::context
Definition: context.h:525