cgv
slab_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 slab_renderer;
10 
12 
15  extern CGV_API slab_renderer& ref_slab_renderer(context& ctx, int ref_count_change = 0);
16 
24  struct CGV_API slab_render_style : public group_render_style
25  {
29  int tex_unit;
35  int tf_source_channel;
41  float step_size;
43  float opacity;
45  float falloff_mix;
49  float scale;
52  };
53 
55  class CGV_API slab_renderer : public group_renderer
56  {
57  protected:
71  render_style* create_render_style() const;
72  public:
74  slab_renderer();
76  void enable_attribute_array_manager(const context& ctx, attribute_array_manager& aam);
78  void disable_attribute_array_manager(const context& ctx, attribute_array_manager& aam);
80  void set_position_is_center(bool _position_is_center);
82  bool init(context& ctx);
84  bool enable(context& ctx);
86  template <typename T>
87  void set_extent(const context& ctx, const T& extent) { has_extents = true; ref_prog().set_attribute(ctx, ref_prog().get_attribute_location(ctx, "extent"), extent); }
89  template <typename T>
90  void set_extent_array(const context& ctx, const std::vector<T>& extents) { has_extents = true; set_attribute_array(ctx, ref_prog().get_attribute_location(ctx, "extent"), extents); }
92  template <typename T>
93  void set_extent_array(const context& ctx, const T* extents, size_t nr_elements, unsigned stride_in_bytes = 0) { has_extents = true; set_attribute_array(ctx, ref_prog().get_attribute_location(ctx, "extent"), extents, nr_elements, stride_in_bytes); }
95  template <typename T>
96  void set_box_array(const context& ctx, const std::vector<cgv::media::axis_aligned_box<T, 3> >& box) {
97  set_composed_attribute_array(ctx, ref_prog().get_attribute_location(ctx, "position"),
98  &box.front(), box.size(), box[0].get_min_pnt());
99  ref_composed_attribute_array(ctx, ref_prog().get_attribute_location(ctx, "extent"),
100  ref_prog().get_attribute_location(ctx, "position"), &box.front(), box.size(), box[0].get_max_pnt());
101  has_positions = true;
102  has_extents = true;
103  set_position_is_center(false);
104  }
106  template <typename T>
107  void set_box_array(const context& ctx, const cgv::media::axis_aligned_box<T, 3>* box, size_t count) {
108  set_composed_attribute_array(ctx, ref_prog().get_attribute_location(ctx, "position"),
109  box, count, box[0].get_min_pnt());
110  ref_composed_attribute_array(ctx, ref_prog().get_attribute_location(ctx, "extent"),
111  ref_prog().get_attribute_location(ctx, "position"), box, count, box[0].get_max_pnt());
112  has_positions = true;
113  has_extents = true;
114  set_position_is_center(false);
115  }
117  template <typename T>
118  void set_translation_array(const context& ctx, const std::vector<T>& translations) { has_translations = true; set_attribute_array(ctx, ref_prog().get_attribute_location(ctx, "translation"), translations); }
120  template <typename T>
121  void set_translation_array(const context& ctx, const T* translations, size_t nr_elements, unsigned stride) { has_translations = true; set_attribute_array(ctx, ref_prog().get_attribute_location(ctx, "translation"), translations, nr_elements, stride); }
123  template <typename T>
124  void set_rotation_array(const context& ctx, const std::vector<T>& rotations) { has_rotations = true; set_attribute_array(ctx, ref_prog().get_attribute_location(ctx, "rotation"), rotations); }
126  template <typename T>
127  void set_rotation_array(const context& ctx, const T* rotations, size_t nr_elements, unsigned stride) { has_rotations = true; set_attribute_array(ctx, ref_prog().get_attribute_location(ctx, "rotation"), rotations, nr_elements, stride); }
129  template <typename T>
130  void set_texture_index_array(const context& ctx, const std::vector<T>& texture_indices) {
131  has_texture_indices = true;
132  int loc = ref_prog().get_attribute_location(ctx, "texture_index");
133  set_attribute_array(ctx, loc, texture_indices);
134  }
136  template <typename T>
137  void set_texture_index_array(const context& ctx, const T* texture_indices, size_t nr_elements, unsigned stride_in_bytes = 0) { has_texture_indices = true; set_attribute_array(ctx, ref_prog().get_attribute_location(ctx, "texture_index"), texture_indices, nr_elements, stride_in_bytes); }
139  bool validate_attributes(const context& ctx) const;
141  bool disable(context& ctx);
143  void draw(context& ctx, size_t start, size_t count,
144  bool use_strips = false, bool use_adjacency = false, uint32_t strip_restart_index = -1);
145  };
146 
147  struct CGV_API slab_render_style_reflect : public slab_render_style
148  {
149  bool self_reflect(cgv::reflect::reflection_handler& rh);
150  };
151  extern CGV_API cgv::reflect::extern_reflection_traits<slab_render_style, slab_render_style_reflect> get_reflection_traits(const slab_render_style&);
152  }
153 }
154 
155 #include <cgv/config/lib_end.h>
cgv::render::slab_renderer::set_translation_array
void set_translation_array(const context &ctx, const std::vector< T > &translations)
template method to set the translations from a vector of vectors of type T, which should have 3 compo...
Definition: slab_renderer.h:118
cgv::render::render_style
base class for all render styles
Definition: renderer.h:16
cgv::render::slab_render_style::scale
float scale
compensates for the overall slab scale
Definition: slab_renderer.h:49
cgv::render::slab_renderer::position_is_center
bool position_is_center
whether position is slab center, if not it is lower left bottom corner
Definition: slab_renderer.h:67
cgv::render::slab_render_style::opacity
float opacity
multiplied to the input opacity value during rendering to change the overall opacity of the slabs
Definition: slab_renderer.h:43
cgv::render::slab_render_style
Definition: slab_renderer.h:25
cgv::render::slab_renderer::set_texture_index_array
void set_texture_index_array(const context &ctx, const T *texture_indices, size_t nr_elements, unsigned stride_in_bytes=0)
extent array specifies slab extends in case of position_is_center=true, otherwise the maximum point o...
Definition: slab_renderer.h:137
cgv::render::slab_render_style::falloff_mix
float falloff_mix
overall influence of the falloff
Definition: slab_renderer.h:45
cgv::render::group_render_style
Definition: group_renderer.h:15
cgv::render::slab_renderer::set_rotation_array
void set_rotation_array(const context &ctx, const std::vector< T > &rotations)
template method to set the rotation from a vector of quaternions of type T, which should have 4 compo...
Definition: slab_renderer.h:124
cgv::render::slab_renderer::has_thicknesses
bool has_thicknesses
store whether thickness array has been specified
Definition: slab_renderer.h:69
cgv::render::slab_render_style::use_transfer_function
bool use_transfer_function
whether to use a transfer function or interpret the luminance as alpha, initialized to false
Definition: slab_renderer.h:33
cgv::render::slab_renderer::set_extent
void set_extent(const context &ctx, const T &extent)
specify a single extent for all slabs
Definition: slab_renderer.h:87
cgv::render::slab_renderer::set_rotation_array
void set_rotation_array(const context &ctx, const T *rotations, size_t nr_elements, unsigned stride)
template method to set the rotation from a vector of quaternions of type T, which should have 4 compo...
Definition: slab_renderer.h:127
cgv::render::slab_render_style::tex_idx_offset
int tex_idx_offset
used to offset the texture index of each slab when specified
Definition: slab_renderer.h:37
cgv::render::attribute_array_manager
attribute array manager used to upload arrays to gpu
Definition: renderer.h:21
cgv::media::axis_aligned_box
Definition: axis_aligned_box.h:15
cgv::render::slab_render_style::falloff_strength
float falloff_strength
strength of the opacity falloff in the slabs normal direction
Definition: slab_renderer.h:47
cgv::reflect::reflection_handler
Definition: reflection_handler.h:63
cgv::render::slab_renderer::set_translation_array
void set_translation_array(const context &ctx, const T *translations, size_t nr_elements, unsigned stride)
template method to set the translations from a vector of vectors of type T, which should have 3 compo...
Definition: slab_renderer.h:121
cgv::render::slab_renderer::set_box_array
void set_box_array(const context &ctx, const cgv::media::axis_aligned_box< T, 3 > *box, size_t count)
specify box array directly. This sets position_is_center to false as well as position and extent arra...
Definition: slab_renderer.h:107
cgv::render::slab_renderer::has_texture_indices
bool has_texture_indices
whether array with per slab texture index has been specified
Definition: slab_renderer.h:65
cgv::render::slab_renderer::set_extent_array
void set_extent_array(const context &ctx, const std::vector< T > &extents)
extent array specifies slab extends in case of position_is_center=true, otherwise the maximum point o...
Definition: slab_renderer.h:90
cgv::render::slab_render_style::step_size
float step_size
constant step size for volume ray integration over all slabs
Definition: slab_renderer.h:41
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::slab_render_style::tex_idx_stride
int tex_idx_stride
multiplied to the texture index of each slab
Definition: slab_renderer.h:39
cgv::render::slab_renderer
renderer that supports point splatting
Definition: slab_renderer.h:56
cgv::render::slab_renderer::has_extents
bool has_extents
store whether extent array has been specified
Definition: slab_renderer.h:59
cgv::render::slab_renderer::set_extent_array
void set_extent_array(const context &ctx, const T *extents, size_t nr_elements, unsigned stride_in_bytes=0)
extent array specifies slab extends in case of position_is_center=true, otherwise the maximum point o...
Definition: slab_renderer.h:93
cgv::render::slab_render_style::thickness_scale
float thickness_scale
multiplied to the thickness, initialized to 1
Definition: slab_renderer.h:27
cgv::render::slab_render_style::tex_unit
int tex_unit
unit used to access the slab texture values, initialized to 0, must point to a 2d texture array
Definition: slab_renderer.h:29
cgv::render::slab_renderer::has_translations
bool has_translations
whether array with per slab translations has been specified
Definition: slab_renderer.h:61
cgv::render::slab_render_style::tf_tex_unit
int tf_tex_unit
unit used to access the volume transfer function texture, initialized to 1, must be a 1d texture
Definition: slab_renderer.h:31
cgv
the cgv namespace
Definition: vr_calib.cxx:9
cgv::render::slab_renderer::set_texture_index_array
void set_texture_index_array(const context &ctx, const std::vector< T > &texture_indices)
extent array specifies slab extends in case of position_is_center=true, otherwise the maximum point o...
Definition: slab_renderer.h:130
cgv::render::context
Definition: context.h:525
cgv::render::ref_slab_renderer
slab_renderer & ref_slab_renderer(context &ctx, int ref_count_change)
reference to a singleton slab renderer that is shared among drawables
Definition: slab_renderer.cxx:7
cgv::render::slab_renderer::has_rotations
bool has_rotations
whether array with per slab rotations has been specified
Definition: slab_renderer.h:63
cgv::render::slab_renderer::set_box_array
void set_box_array(const context &ctx, const std::vector< cgv::media::axis_aligned_box< T, 3 > > &box)
specify box array directly. This sets position_is_center to false as well as position and extent arra...
Definition: slab_renderer.h:96
cgv::render::group_renderer
abstract renderer class that provides functionality for grouping primitives
Definition: group_renderer.h:26