cgv
|
renderer that supports point splatting More...
#include <box_renderer.h>
Public Member Functions | |
box_renderer () | |
initializes position_is_center to true | |
void | enable_attribute_array_manager (const context &ctx, attribute_array_manager &aam) |
call this before setting attribute arrays to manage attribute array in given manager | |
void | disable_attribute_array_manager (const context &ctx, attribute_array_manager &aam) |
call this after last render/draw call to ensure that no other users of renderer change attribute arrays of given manager | |
void | set_position_is_center (bool _position_is_center) |
set the flag, whether the position is interpreted as the box center, true by default | |
bool | enable (context &ctx) |
enable box renderer | |
template<typename T > | |
void | set_extent (const context &ctx, const T &extent) |
specify a single extent for all boxes | |
template<typename T > | |
void | set_extent_array (const context &ctx, const std::vector< T > &extents) |
extent array specifies box extends in case of position_is_center=true, otherwise the maximum point of each box | |
template<typename T > | |
void | set_extent_array (const context &ctx, const T *extents, size_t nr_elements, unsigned stride_in_bytes=0) |
extent array specifies box extends in case of position_is_center=true, otherwise the maximum point of each box | |
void | remove_extent_array (const context &ctx) |
remove the extent attribute | |
template<typename T = float> | |
void | set_radius (const context &ctx, const T &radius) |
template<typename T = float> | |
void | set_radius_array (const context &ctx, const std::vector< T > &radii) |
template<typename T = float> | |
void | set_radius_array (const context &ctx, const T *radii, size_t nr_elements, unsigned stride_in_bytes=0) |
void | remove_radius_array (const context &ctx) |
remove the radius attribute | |
template<typename T > | |
void | set_secondary_color (const context &ctx, const T &color) |
templated method to set the secondary color attribute from a single color of type T | |
template<typename T > | |
void | set_secondary_color_array (const context &ctx, const std::vector< T > &colors) |
template method to set the secondary color attribute from a vector of colors of type T | |
template<typename T > | |
void | set_secondary_color_array (const context &ctx, const T *colors, size_t nr_elements, unsigned stride_in_bytes=0) |
template method to set the secondary color attribute from a vector of colors of type T | |
void | set_secondary_color_array (const context &ctx, type_descriptor element_type, const vertex_buffer &vbo, size_t offset_in_bytes, size_t nr_elements, unsigned stride_in_bytes=0) |
method to set the secondary color attribute from a vertex buffer object, the element type must be given as explicit template parameter | |
template<typename T > | |
void | set_secondary_color_array (const context &ctx, const vertex_buffer &vbo, size_t offset_in_bytes, size_t nr_elements, unsigned stride_in_bytes=0) |
template method to set the secondary color attribute from a vertex buffer object, the element type must be given as explicit template parameter | |
void | remove_secondary_color_array (const context &ctx) |
remove the secondary color attribute | |
template<typename T > | |
void | set_box (const context &ctx, const cgv::media::axis_aligned_box< T, 3 > &box) |
specify a single box. This sets position_is_center to false as well as position and extent attributes | |
template<typename T > | |
void | set_box_array (const context &ctx, const std::vector< cgv::media::axis_aligned_box< T, 3 > > &boxes) |
specify box array directly. This sets position_is_center to false as well as position and extent array | |
template<typename T > | |
void | set_box_array (const context &ctx, const cgv::media::axis_aligned_box< T, 3 > *boxes, size_t count) |
specify box array directly. This sets position_is_center to false as well as position and extent array | |
template<typename T > | |
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 components | |
template<typename T > | |
void | set_translation_array (const context &ctx, const T *translations, size_t nr_elements, unsigned stride_in_bytes=0) |
template method to set the translations from a vector of vectors of type T, which should have 3 components | |
void | remove_translation_array (const context &ctx) |
remove the translation attribute | |
template<typename T > | |
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 components | |
template<typename T > | |
void | set_rotation_array (const context &ctx, const T *rotations, size_t nr_elements, unsigned stride_in_bytes=0) |
template method to set the rotation from a vector of quaternions of type T, which should have 4 components | |
void | remove_rotation_array (const context &ctx) |
remove the rotation attribute | |
bool | disable (context &ctx) |
disable renderer | |
void | draw (context &ctx, size_t start, size_t count, bool use_strips=false, bool use_adjacency=false, uint32_t strip_restart_index=-1) |
Draw a range of vertices or indexed elements. | |
![]() | |
void | enable_attribute_array_manager (const context &ctx, attribute_array_manager &aam) |
call this before setting attribute arrays to manage attribute array in given manager | |
void | disable_attribute_array_manager (const context &ctx, attribute_array_manager &aam) |
call this after last render/draw call to ensure that no other users of renderer change attribute arrays of given manager | |
bool | enable (context &ctx) |
overload to activate group style | |
bool | disable (context &ctx) |
disable renderer | |
template<typename T > | |
void | set_normal (const context &ctx, const cgv::math::fvec< T, 3 > &normal) |
specify a single normal for all lines | |
template<typename T > | |
void | set_normal_array (const context &ctx, const std::vector< T > &normals) |
templated method to set the normal attribute array from a vector of normals of type T, which should have 3 components | |
template<typename T > | |
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 components | |
void | set_normal_array (const context &ctx, type_descriptor element_type, const vertex_buffer &vbo, size_t offset_in_bytes, size_t nr_elements, unsigned stride_in_bytes=0) |
method to set the normal attribute from a vertex buffer object, the element type must be given as explicit template parameter | |
template<typename T > | |
void | set_normal_array (const context &ctx, const vertex_buffer &vbo, size_t offset_in_bytes, size_t nr_elements, unsigned stride_in_bytes=0) |
template method to set the normal attribute from a vertex buffer object, the element type must be given as explicit template parameter | |
void | remove_normal_array (const context &ctx) |
remove the normal attribute | |
template<typename T > | |
void | set_texcoord (const context &ctx, const T &texcoord) |
templated method to set the texcoord attribute without array | |
template<typename T > | |
void | set_texcoord_array (const context &ctx, const std::vector< T > &texcoords) |
templated method to set the texcoord attribute array from a vector of texcoords of type T | |
template<typename T > | |
void | set_texcoord_array (const context &ctx, const T *texcoords, size_t nr_elements, unsigned stride_in_bytes=0) |
templated method to set the texcoord attribute from an array of texcoords of type T | |
void | set_texcoord_array (const context &ctx, type_descriptor element_type, const vertex_buffer &vbo, size_t offset_in_bytes, size_t nr_elements, unsigned stride_in_bytes=0) |
template method to set the texcoord attribute from a vertex buffer object, the element type must be given as explicit template parameter | |
template<typename T > | |
void | set_texcoord_array (const context &ctx, const vertex_buffer &vbo, size_t offset_in_bytes, size_t nr_elements, unsigned stride_in_bytes=0) |
template method to set the texcoord attribute from a vertex buffer object, the element type must be given as explicit template parameter | |
void | remove_texcoord_array (const context &ctx) |
remove the texcoord attribute | |
![]() | |
bool | validate_attributes (const context &ctx) const |
check additionally the group attributes | |
void | set_group_index_array (const context &ctx, const std::vector< unsigned > &group_indices) |
method to set the group index attribute | |
void | set_group_index_array (const context &ctx, const unsigned *group_indices, size_t nr_elements) |
method to set the group index attribute | |
void | set_group_index_array (const context &ctx, type_descriptor element_type, const vertex_buffer &vbo, size_t offset_in_bytes, size_t nr_elements, unsigned stride_in_bytes=0) |
method to set the group index attribute from a vertex buffer object, the element type must be given as explicit template parameter | |
template<typename T > | |
void | set_group_index_array (const context &ctx, const vertex_buffer &vbo, size_t offset_in_bytes, size_t nr_elements, unsigned stride_in_bytes=0) |
template method to set the group index color attribute from a vertex buffer object, the element type must be given as explicit template parameter | |
void | remove_group_index_array (const context &ctx) |
remove the group index attribute | |
template<typename T > | |
void | set_group_colors (const context &ctx, const std::vector< T > &colors) |
template method to set the group colors from a vector of colors of type T | |
template<typename T > | |
void | set_group_colors (const context &ctx, const T *colors, size_t nr_elements) |
template method to set the group colors from a vector of colors of type T | |
template<typename T > | |
void | set_group_translations (const context &ctx, const std::vector< T > &group_translations) |
template method to set the group translations from a vector of vectors of type T, which should have 3 components | |
template<typename T > | |
void | set_group_translations (const context &ctx, const T *group_translations, size_t nr_elements) |
template method to set the group translations from a vector of vectors of type T, which should have 3 components | |
template<typename T > | |
void | set_group_rotations (const context &ctx, const std::vector< T > &group_rotations) |
template method to set the group rotation from a vector of quaternions of type T, which should have 4 components | |
template<typename T > | |
void | set_group_rotations (const context &ctx, const T *group_rotations, size_t nr_elements) |
template method to set the group rotation from a vector of quaternions of type T, which should have 4 components | |
![]() | |
shader_define_map & | ref_defines () |
access to shader define map to update defines not handled by render style | |
shader_program & | ref_prog () |
derived renderer classes have access to shader program | |
void | set_prog (shader_program &one_shot_prog) |
set external shader program up to next call to disable() or render() | |
void | draw_impl (context &ctx, PrimitiveType pt, size_t start, size_t count, bool use_strips=false, bool use_adjacency=false, uint32_t strip_restart_index=-1) |
default implementation of draw method with support for indexed rendering and different primitive types | |
void | draw_impl_instanced (context &ctx, PrimitiveType type, size_t start, size_t count, size_t instance_count, bool use_strips=false, bool use_adjacency=false, uint32_t strip_restart_index=-1) |
default implementation of instanced draw method with support for indexed rendering and different primitive types | |
renderer () | |
construct and init attribute tracking flags | |
virtual | ~renderer () |
destructor deletes default renderer style | |
void | manage_singleton (context &ctx, const std::string &renderer_name, int &ref_count, int ref_count_change) |
used by derived classes to manage singletons | |
virtual void | set_attribute_array_manager (const context &ctx, attribute_array_manager *_aam_ptr=0) |
this function is deprecated, please use enable_attribute_array_manager() and disable_attribute_manager() instead | |
void | set_render_style (const render_style &rs) |
reference given render style | |
bool | build_program (context &ctx, shader_program &prog, const render_style &rs) |
build shader program for specific render style | |
virtual bool | init (context &ctx) |
call init() once before using renderer | |
template<typename T > | |
void | set_position (const context &ctx, const T &position) |
templated method to set the position attribute from a single position of type T | |
template<typename T > | |
void | set_position_array (const context &ctx, const std::vector< T > &positions) |
templated method to set the position attribute from a vector of positions of type T | |
template<typename T > | |
void | set_position_array (const context &ctx, const T *positions, size_t nr_elements, unsigned stride_in_bytes=0) |
templated method to set the position attribute from a vector of positions of type T | |
void | set_position_array (const context &ctx, type_descriptor element_type, const vertex_buffer &vbo, size_t offset_in_bytes, size_t nr_elements, unsigned stride_in_bytes) |
method to set the position attribute from a vertex buffer object | |
template<typename T > | |
void | set_position_array (const context &ctx, const vertex_buffer &vbo, size_t offset_in_bytes, size_t nr_elements, unsigned stride_in_bytes=0) |
template method to set the position attribute from a vertex buffer object, the element type must be given as explicit template parameter | |
void | remove_position_array (const context &ctx) |
remove the position attribute | |
template<typename T > | |
void | set_color (const context &ctx, const T &color) |
templated method to set the color attribute from a single color of type T | |
template<typename T > | |
void | set_color_array (const context &ctx, const std::vector< T > &colors) |
template method to set the color attribute from a vector of colors of type T | |
template<typename T > | |
void | set_color_array (const context &ctx, const T *colors, size_t nr_elements, unsigned stride_in_bytes=0) |
template method to set the color attribute from a vector of colors of type T | |
void | set_color_array (const context &ctx, type_descriptor element_type, const vertex_buffer &vbo, size_t offset_in_bytes, size_t nr_elements, unsigned stride_in_bytes=0) |
method to set the color attribute from a vertex buffer object, the element type must be given as explicit template parameter | |
template<typename T > | |
void | set_color_array (const context &ctx, const vertex_buffer &vbo, size_t offset_in_bytes, size_t nr_elements, unsigned stride_in_bytes=0) |
template method to set the color attribute from a vertex buffer object, the element type must be given as explicit template parameter | |
void | remove_color_array (const context &ctx) |
remove the color attribute | |
template<typename T > | |
bool | set_indices (const context &ctx, const std::vector< T > &indices, bool keep_on_cpu=false) |
Set the indices for indexed rendering from a vector. | |
template<typename T > | |
bool | set_indices (const context &ctx, const T *indices, size_t nr_indices, bool keep_on_cpu=false) |
Set the indices for indexed rendering from an array given as a pointer. | |
template<typename T > | |
bool | set_indices (const context &ctx, const vertex_buffer &vbo, size_t count) |
Set the indices for indexed rendering from a GPU buffer. | |
bool | has_indices () const |
return whether indices have been defined | |
void | remove_indices (const context &ctx) |
remove previously set indices | |
const vertex_buffer * | get_vertex_buffer_ptr (const context &ctx, const attribute_array_manager &aam, const std::string &attr_name) |
const vertex_buffer * | get_index_buffer_ptr (const attribute_array_manager &aam) |
bool | validate_and_enable (context &ctx) |
validate attributes and if successful, enable renderer | |
virtual bool | render (context &ctx, size_t start, size_t count, bool use_strips=false, bool use_adjacency=false, uint32_t strip_restart_index=-1) |
Convenience function that draws vertex or indexed element with this renderer. | |
virtual void | clear (const context &ctx) |
the clear function destructs the shader program | |
Protected Member Functions | |
render_style * | create_render_style () const |
overload to allow instantiation of box_renderer | |
bool | build_shader_program (context &ctx, shader_program &prog, const shader_define_map &defines) |
build box program | |
void | update_defines (shader_define_map &defines) |
overload to update the shader defines based on the current render style; only called if internal shader program is used | |
![]() | |
bool | has_aam () const |
check for attribute array manager | |
bool | has_attribute (const context &ctx, const std::string &name) |
check for attribute | |
const render_style * | get_style_ptr () const |
access to render style | |
bool | attributes_persist () const |
return whether attributes persist after a call to disable | |
template<typename T > | |
const T & | get_style () const |
access to style | |
int | get_prog_attribute_location (const context &ctx, const std::string &name, bool error_check=true) |
template<typename T > | |
bool | set_attribute_array (const context &ctx, const std::string &name, const T &array) |
template<typename T > | |
bool | set_attribute_array (const context &ctx, const std::string &name, const T *array_ptr, size_t nr_elements, unsigned stride) |
bool | set_attribute_array (const context &ctx, const std::string &name, type_descriptor element_type, const vertex_buffer &vbo, size_t offset_in_bytes, size_t nr_elements, unsigned stride_in_bytes) |
template<typename C , typename T > | |
bool | set_composed_attribute_array (const context &ctx, const std::string &name, const C *array_ptr, size_t nr_elements, const T &elem) |
in case that several attributes are stored interleaved, call this function for the first and ref_composed_attribute_array() for all others | |
template<typename C , typename T > | |
bool | ref_composed_attribute_array (const context &ctx, const std::string &name, const std::string &name_ref, const C *array_ptr, size_t nr_elements, const T &elem) |
in case that several attributes are stored interleaved, call set_composed_attribute_array() for the first and this function for all others | |
bool | remove_attribute_array (const context &ctx, const std::string &name) |
Protected Attributes | |
bool | has_extents |
store whether extent array has been specified | |
bool | has_radii |
store whether extent array has been specified | |
bool | has_secondary_colors |
whether secondary color or color array was set | |
bool | has_translations |
whether array with per box translations has been specified | |
bool | has_rotations |
whether array with per box rotations has been specified | |
bool | position_is_center |
whether position is box center, if not it is lower left bottom corner | |
![]() | |
bool | has_normals |
bool | has_texcoords |
bool | cull_per_primitive |
![]() | |
bool | has_group_indices |
bool | has_group_colors |
bool | has_group_translations |
bool | has_group_rotations |
![]() | |
bool | has_colors |
track whether color attribute is defined | |
bool | has_positions |
track whether position attribute is defined | |
renderer that supports point splatting
Definition at line 33 of file box_renderer.h.
cgv::render::box_renderer::box_renderer | ( | ) |
initializes position_is_center to true
Definition at line 27 of file box_renderer.cxx.
References has_extents, has_radii, has_rotations, has_secondary_colors, has_translations, and position_is_center.
|
protectedvirtual |
build box program
Reimplemented from cgv::render::renderer.
Definition at line 87 of file box_renderer.cxx.
References cgv::render::shader_program::build_program().
|
protectedvirtual |
overload to allow instantiation of box_renderer
Implements cgv::render::renderer.
Definition at line 22 of file box_renderer.cxx.
|
virtual |
disable renderer
Reimplemented from cgv::render::renderer.
Definition at line 111 of file box_renderer.cxx.
References cgv::render::renderer::attributes_persist(), cgv::render::surface_renderer::disable(), has_extents, has_radii, has_rotations, has_translations, and position_is_center.
Referenced by vr_test::draw().
|
virtual |
call this after last render/draw call to ensure that no other users of renderer change attribute arrays of given manager
Reimplemented from cgv::render::renderer.
Definition at line 52 of file box_renderer.cxx.
References cgv::render::surface_renderer::disable_attribute_array_manager(), has_extents, has_radii, has_rotations, has_secondary_colors, and has_translations.
|
virtual |
Draw a range of vertices or indexed elements.
Call this function only successful enabeling via validate_and_enable() or enable(). Capsulates glDrawArrays and glDrawElements calls. Overloaded implementations of specific renderers choose the to be used gl primitive type and whether to use an instanced draw call.
count | number of to be drawn vertices/elements |
start | index of first to be drawn vertex/element |
use_strips | whether to generate primitives in strips (only for line or triangle primitives) |
use_adjacency | whether to specify adjacency information (only for line or triangle primitives) |
strip_restart_index | extraorindary index used to mark end of strips (only for strip based drawing) Strip based drawing can be combined with the use of adjacency information. Default implementation uses triangle primitives. |
Reimplemented from cgv::render::renderer.
Definition at line 124 of file box_renderer.cxx.
References cgv::render::renderer::draw_impl().
Referenced by vr_test::draw().
|
virtual |
enable box renderer
Reimplemented from cgv::render::renderer.
Definition at line 92 of file box_renderer.cxx.
References cgv::render::surface_renderer::enable(), has_extents, has_radii, has_rotations, has_secondary_colors, has_translations, position_is_center, cgv::render::renderer::ref_prog(), cgv::render::shader_program::set_attribute(), and cgv::render::shader_program::set_uniform().
|
virtual |
call this before setting attribute arrays to manage attribute array in given manager
Reimplemented from cgv::render::renderer.
Definition at line 37 of file box_renderer.cxx.
References cgv::render::surface_renderer::enable_attribute_array_manager(), cgv::render::renderer::has_attribute(), has_extents, has_radii, has_rotations, has_secondary_colors, and has_translations.
void cgv::render::box_renderer::remove_extent_array | ( | const context & | ctx | ) |
void cgv::render::box_renderer::remove_radius_array | ( | const context & | ctx | ) |
void cgv::render::box_renderer::remove_rotation_array | ( | const context & | ctx | ) |
remove the rotation attribute
Definition at line 77 of file box_renderer.cxx.
References has_rotations.
void cgv::render::box_renderer::remove_secondary_color_array | ( | const context & | ctx | ) |
remove the secondary color attribute
Definition at line 69 of file box_renderer.cxx.
References has_secondary_colors.
void cgv::render::box_renderer::remove_translation_array | ( | const context & | ctx | ) |
remove the translation attribute
Definition at line 73 of file box_renderer.cxx.
References has_translations.
|
inline |
specify a single box. This sets position_is_center to false as well as position and extent attributes
Definition at line 105 of file box_renderer.h.
References cgv::media::axis_aligned_box< T, N >::get_max_pnt(), and cgv::media::axis_aligned_box< T, N >::get_min_pnt().
|
inline |
specify box array directly. This sets position_is_center to false as well as position and extent array
Definition at line 121 of file box_renderer.h.
|
inline |
specify box array directly. This sets position_is_center to false as well as position and extent array
Definition at line 112 of file box_renderer.h.
Referenced by vr_test::draw().
|
inline |
specify a single extent for all boxes
Definition at line 67 of file box_renderer.h.
|
inline |
extent array specifies box extends in case of position_is_center=true, otherwise the maximum point of each box
Definition at line 70 of file box_renderer.h.
|
inline |
extent array specifies box extends in case of position_is_center=true, otherwise the maximum point of each box
Definition at line 73 of file box_renderer.h.
void cgv::render::box_renderer::set_position_is_center | ( | bool | _position_is_center | ) |
set the flag, whether the position is interpreted as the box center, true by default
set the flag, whether the position is interpreted as the box center
Definition at line 82 of file box_renderer.cxx.
References position_is_center.
|
inline |
Definition at line 78 of file box_renderer.h.
|
inline |
Definition at line 81 of file box_renderer.h.
|
inline |
Definition at line 84 of file box_renderer.h.
|
inline |
template method to set the rotation from a vector of quaternions of type T, which should have 4 components
Definition at line 138 of file box_renderer.h.
Referenced by vr_test::draw().
|
inline |
template method to set the rotation from a vector of quaternions of type T, which should have 4 components
Definition at line 141 of file box_renderer.h.
|
inline |
templated method to set the secondary color attribute from a single color of type T
Definition at line 89 of file box_renderer.h.
|
inline |
template method to set the secondary color attribute from a vector of colors of type T
Definition at line 92 of file box_renderer.h.
|
inline |
template method to set the secondary color attribute from a vector of colors of type T
Definition at line 95 of file box_renderer.h.
|
inline |
template method to set the secondary color attribute from a vertex buffer object, the element type must be given as explicit template parameter
Definition at line 100 of file box_renderer.h.
References set_secondary_color_array().
Referenced by set_secondary_color_array().
|
inline |
template method to set the translations from a vector of vectors of type T, which should have 3 components
Definition at line 130 of file box_renderer.h.
Referenced by vr_test::draw().
|
inline |
template method to set the translations from a vector of vectors of type T, which should have 3 components
Definition at line 133 of file box_renderer.h.
|
protectedvirtual |
overload to update the shader defines based on the current render style; only called if internal shader program is used
Reimplemented from cgv::render::renderer.
Definition at line 138 of file box_renderer.cxx.
References cgv::render::box_render_style::rounding.
|
protected |
store whether extent array has been specified
Definition at line 37 of file box_renderer.h.
Referenced by box_renderer(), disable(), disable_attribute_array_manager(), enable(), enable_attribute_array_manager(), and remove_extent_array().
|
protected |
store whether extent array has been specified
Definition at line 39 of file box_renderer.h.
Referenced by box_renderer(), disable(), disable_attribute_array_manager(), enable(), enable_attribute_array_manager(), and remove_radius_array().
|
protected |
whether array with per box rotations has been specified
Definition at line 45 of file box_renderer.h.
Referenced by box_renderer(), disable(), disable_attribute_array_manager(), enable(), enable_attribute_array_manager(), and remove_rotation_array().
|
protected |
whether secondary color or color array was set
Definition at line 41 of file box_renderer.h.
Referenced by box_renderer(), disable_attribute_array_manager(), enable(), enable_attribute_array_manager(), and remove_secondary_color_array().
|
protected |
whether array with per box translations has been specified
Definition at line 43 of file box_renderer.h.
Referenced by box_renderer(), disable(), disable_attribute_array_manager(), enable(), enable_attribute_array_manager(), and remove_translation_array().
|
protected |
whether position is box center, if not it is lower left bottom corner
Definition at line 47 of file box_renderer.h.
Referenced by box_renderer(), disable(), enable(), and set_position_is_center().