cgv
|
base classes for renderers that support surface rendering More...
#include <surface_renderer.h>
Public Member Functions | |
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 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. | |
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 Attributes | |
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 | |
Additional Inherited Members | |
![]() | |
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 | |
virtual 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 | |
virtual bool | build_shader_program (context &ctx, shader_program &prog, const shader_define_map &defines) |
overload to build shader program based on the passed defines | |
template<typename T > | |
const T & | get_style () const |
access to style | |
virtual render_style * | create_render_style () const =0 |
virtual method that creates a default render 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) |
base classes for renderers that support surface rendering
Definition at line 44 of file surface_renderer.h.
cgv::render::surface_renderer::surface_renderer | ( | ) |
Definition at line 35 of file surface_renderer.cxx.
|
virtual |
disable renderer
Reimplemented from cgv::render::group_renderer.
Reimplemented in cgv::render::surfel_renderer.
Definition at line 123 of file surface_renderer.cxx.
References cgv::render::surface_render_style::culling_mode.
Referenced by cgv::render::arrow_renderer::disable(), cgv::render::box_renderer::disable(), cgv::render::cone_renderer::disable(), cgv::render::ellipsoid_renderer::disable(), cgv::render::rectangle_renderer::disable(), cgv::render::sphere_renderer::disable(), cgv::render::spline_tube_renderer::disable(), and cgv::render::surfel_renderer::disable().
|
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::group_renderer.
Reimplemented in cgv::render::surfel_renderer.
Definition at line 51 of file surface_renderer.cxx.
Referenced by cgv::render::arrow_renderer::disable_attribute_array_manager(), cgv::render::box_renderer::disable_attribute_array_manager(), cgv::render::cone_renderer::disable_attribute_array_manager(), cgv::render::ellipsoid_renderer::disable_attribute_array_manager(), cgv::render::rectangle_renderer::disable_attribute_array_manager(), cgv::render::sphere_renderer::disable_attribute_array_manager(), cgv::render::spline_tube_renderer::disable_attribute_array_manager(), and cgv::render::surfel_renderer::disable_attribute_array_manager().
|
virtual |
overload to activate group style
Reimplemented from cgv::render::group_renderer.
Reimplemented in cgv::render::surfel_renderer.
Definition at line 97 of file surface_renderer.cxx.
References cgv::render::surface_render_style::culling_mode, cgv::render::surface_render_style::illumination_mode, cgv::render::surface_render_style::map_color_to_material, cgv::render::surface_render_style::material, cgv::render::context::set_color(), cgv::render::context::set_material(), cgv::render::surface_render_style::surface_color, and cgv::render::surface_render_style::surface_opacity.
Referenced by cgv::render::arrow_renderer::enable(), cgv::render::box_renderer::enable(), cgv::render::cone_renderer::enable(), cgv::render::ellipsoid_renderer::enable(), cgv::render::rectangle_renderer::enable(), cgv::render::sphere_renderer::enable(), cgv::render::spline_tube_renderer::enable(), and cgv::render::surfel_renderer::enable().
|
virtual |
call this before setting attribute arrays to manage attribute array in given manager
Reimplemented from cgv::render::group_renderer.
Reimplemented in cgv::render::surfel_renderer.
Definition at line 42 of file surface_renderer.cxx.
Referenced by cgv::render::arrow_renderer::enable_attribute_array_manager(), cgv::render::box_renderer::enable_attribute_array_manager(), cgv::render::cone_renderer::enable_attribute_array_manager(), cgv::render::ellipsoid_renderer::enable_attribute_array_manager(), cgv::render::rectangle_renderer::enable_attribute_array_manager(), cgv::render::sphere_renderer::enable_attribute_array_manager(), cgv::render::spline_tube_renderer::enable_attribute_array_manager(), and cgv::render::surfel_renderer::enable_attribute_array_manager().
void cgv::render::surface_renderer::remove_normal_array | ( | const context & | ctx | ) |
remove the normal attribute
Definition at line 57 of file surface_renderer.cxx.
void cgv::render::surface_renderer::remove_texcoord_array | ( | const context & | ctx | ) |
remove the texcoord attribute
Definition at line 61 of file surface_renderer.cxx.
|
inline |
specify a single normal for all lines
Definition at line 62 of file surface_renderer.h.
|
inline |
templated method to set the normal attribute array from a vector of normals of type T, which should have 3 components
Definition at line 65 of file surface_renderer.h.
|
inline |
templated method to set the normal attribute from an array of normals of type T, which should have 3 components
Definition at line 68 of file surface_renderer.h.
|
inline |
template method to set the normal attribute from a vertex buffer object, the element type must be given as explicit template parameter
Definition at line 73 of file surface_renderer.h.
References set_normal_array().
Referenced by set_normal_array().
void cgv::render::surface_renderer::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
Definition at line 84 of file surface_renderer.cxx.
|
inline |
templated method to set the texcoord attribute without array
Definition at line 78 of file surface_renderer.h.
Referenced by cgv::render::rectangle_render_data< ColorType >::set_const_attributes().
|
inline |
templated method to set the texcoord attribute array from a vector of texcoords of type T
Definition at line 81 of file surface_renderer.h.
|
inline |
templated method to set the texcoord attribute from an array of texcoords of type T
Definition at line 84 of file surface_renderer.h.
|
inline |
template method to set the texcoord attribute from a vertex buffer object, the element type must be given as explicit template parameter
Definition at line 89 of file surface_renderer.h.
References set_texcoord_array().
Referenced by set_texcoord_array().
void cgv::render::surface_renderer::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
Definition at line 91 of file surface_renderer.cxx.
|
protected |
Definition at line 49 of file surface_renderer.h.
|
protected |
Definition at line 47 of file surface_renderer.h.
|
protected |
Definition at line 48 of file surface_renderer.h.