cgv
rounded_cone_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 rounded_cone_renderer;
10 
12 
15  extern CGV_API rounded_cone_renderer& ref_rounded_cone_renderer(context& ctx, int ref_count_change = 0);
16 
17  struct CGV_API rounded_cone_render_style : public surface_render_style
18  {
20  float radius_scale;
22  float radius;
23 
24  bool enable_ambient_occlusion;
25  float ao_offset;
26  float ao_distance;
27  float ao_strength;
28 
29  vec3 tex_offset;
30  vec3 tex_scaling;
31  vec3 tex_coord_scaling;
32  float texel_size;
33  float cone_angle_factor;
34  std::vector<vec3> sample_dirs;
36  rounded_cone_render_style();
37  };
38 
40  class CGV_API rounded_cone_renderer : public surface_renderer
41  {
42  protected:
43  bool has_radii;
45  std::string shader_defines;
47  render_style* create_render_style() const;
48  public:
52  void enable_attribute_array_manager(const context& ctx, attribute_array_manager& aam);
54  void disable_attribute_array_manager(const context& ctx, attribute_array_manager& aam);
56  bool init(context& ctx);
58  std::string build_define_string();
60  bool build_shader(context& ctx, std::string defines = "");
62  bool enable(context& ctx);
64  template <typename T = float>
65  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); }
67  template <typename T = float>
68  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); }
70  bool validate_attributes(const context& ctx) const;
72  bool disable(context& ctx);
74  void draw(context& ctx, size_t start, size_t count,
75  bool use_strips = false, bool use_adjacency = false, uint32_t strip_restart_index = -1);
76  };
77 
78  struct CGV_API rounded_cone_render_style_reflect : public rounded_cone_render_style
79  {
80  bool self_reflect(cgv::reflect::reflection_handler& rh);
81  };
82  extern CGV_API cgv::reflect::extern_reflection_traits<rounded_cone_render_style, rounded_cone_render_style_reflect> get_reflection_traits(const rounded_cone_render_style&);
83  }
84 }
85 
86 #include <cgv/config/lib_end.h>
cgv::render::render_style
base class for all render styles
Definition: renderer.h:16
cgv::render::attribute_array_manager
attribute array manager used to upload arrays to gpu
Definition: renderer.h:21
cgv::render::ref_rounded_cone_renderer
rounded_cone_renderer & ref_rounded_cone_renderer(context &ctx, int ref_count_change)
reference to a singleton rounded cone renderer that is shared among drawables
Definition: rounded_cone_renderer.cxx:7
cgv::reflect::reflection_handler
Definition: reflection_handler.h:63
cgv::render::rounded_cone_renderer
renderer that supports raycasting of rounded cones
Definition: rounded_cone_renderer.h:41
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::render::rounded_cone_renderer::shader_defines
std::string shader_defines
whether the shader should be rebuilt after a define update
Definition: rounded_cone_renderer.h:45
cgv
the cgv namespace
Definition: vr_calib.cxx:9
cgv::render::context
Definition: context.h:525