|
cgv
|
Abstract base class for all renderers that manage a render data and the rendering process. More...
#include <renderer.h>
Public Member Functions | |
| shader_compile_options & | ref_shader_options () |
| access to shader program compile options to update settings 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 | enable_attribute_array_manager (const context &ctx, attribute_array_manager &aam) |
| call this before setting attribute arrays to manage attribute array in given manager | |
| virtual 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 | |
| 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) |
| virtual bool | validate_attributes (const context &ctx) const |
| call to validate, whether essential position attribute is defined | |
| bool | validate_and_enable (context &ctx) |
| validate attributes and if successful, enable renderer | |
| virtual bool | enable (context &ctx) |
| enables 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 | disable (context &ctx) |
| disable 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 | |
| bool | has_aam () const |
| check for attribute array manager | |
| bool | has_attribute (const context &ctx, const std::string &name) |
| check for attribute | |
| virtual render_style * | create_render_style () const =0 |
| implement this method to create a default render style | |
| 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_shader_program_options (shader_compile_options &options) const |
| overload to update the shader program compile options 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_compile_options &options) const |
| overload to change default behaviour and build a custom shader program based on the passed options | |
| virtual std::string | get_default_prog_name () const =0 |
| implement this method to return the name of the default shader program; return an empty string if the renderer handles program creation on its own | |
| 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_colors = false |
| track whether color attribute is defined | |
| bool | has_positions = false |
| track whether position attribute is defined | |
Abstract base class for all renderers that manage a render data and the rendering process.
Render data is managed through buffer objects and fed into the rendering pipeline via an attribute array object. Render data management is done either with vertex array pointers or with an attribute array manager that manages buffers and one attribute array object. The rendering process is configured via a configuration values stored in a renderer specific render style, from which shader program defines, default attribute values and uniform values are derived. Besides standard compiler defines, a custom mechanism similar to macros called snippets is provided mostly for compute shader usage and configured in specialized renderers.
Rendering Process is decomposed into
Rendering Process convenience functions are
External program can be used by setting it with the set_prog() function. For this a pointer to the external program is stored and used to resolve attribute indices and for successive draw calls until the first call to disable(), what is also called when the render() function is used. Thereafter the pointer is cleared and the own shader program set as active again. If an external program should be used multiple times, it needs to be set again with set_prog() after each call to disable() or render(). The user has to make sure that the external program exists till the next disable() or render() call using it.
Shader program attribute indices are determined from the own or external shader program via predefinded names, e.g. "position" and "color" for the attributes handled by the renderer class, during calls to set_position(), set_position_array(), set_color(), set_color_array(). Thus make sure if you use an external program to set the attributes after calling the set_prog() function.
Attributes persist similar to external program usage only until the next disable() or render() function call. In compatibility attribute array points are used to transfer attribute data to the gpu which can be done assynchronuously and in parallel to draw calls. For this to work, the user has to ensure that the CPU side attribute array data persists will the last draw() call using it. To store attribute data for multiple draw calls persistently in gpu buffers, an external attribute array manager can be used and enabled or disabled with the enable_attribute_manager() and disable_attribute_manager() functions. In core profile a default attribute array manager is constructed in case no external manager is provided. In this case, the attributes are still cleared after each calls to diable() or render() but the CPU side attribute data objects can be destructed before the draw calls. The context object ctx allows to check for core profile via the member ctx.core_profile.
Render styles of concrete renderers inherit the abstract class render_style that has a virtual destructor. The renderer class manages a default render style and supports setting an external render style with the set_render_style() function.
Definition at line 74 of file renderer.h.
| cgv::render::renderer::renderer | ( | ) |
construct and init attribute tracking flags
Definition at line 9 of file renderer.cxx.
|
virtual |
destructor deletes default renderer style
Definition at line 34 of file renderer.cxx.
|
inlineprotected |
return whether attributes persist after a call to disable
Definition at line 120 of file renderer.h.
Referenced by cgv::render::group_renderer::disable(), cgv::render::arrow_renderer::disable(), cgv::render::box_renderer::disable(), cgv::render::box_wire_renderer::disable(), cgv::render::cone_renderer::disable(), cgv::render::ellipsoid_renderer::disable(), cgv::render::line_renderer::disable(), cgv::render::point_renderer::disable(), cgv::render::rectangle_renderer::disable(), cgv::render::sphere_renderer::disable(), cgv::render::spline_tube_renderer::disable(), cgv::render::surface_renderer::disable(), and cgv::render::surfel_renderer::disable().
| bool cgv::render::renderer::build_program | ( | context & | ctx, |
| shader_program & | prog, | ||
| const render_style & | rs | ||
| ) |
build shader program for specific render style
Definition at line 145 of file renderer.cxx.
References build_shader_program(), and update_shader_program_options().
|
protectedvirtual |
overload to change default behaviour and build a custom shader program based on the passed options
Reimplemented in cgv::render::surface_renderer.
Definition at line 40 of file renderer.cxx.
References cgv::render::shader_program::build_program(), and get_default_prog_name().
Referenced by build_program(), cgv::render::surface_renderer::build_shader_program(), enable(), and init().
|
virtual |
the clear function destructs the shader program
Reimplemented in cgv::render::cone_renderer, and cgv::render::volume_renderer.
Definition at line 348 of file renderer.cxx.
Referenced by cgv::app::transformation_gizmo::clear(), cgv::app::navigator::clear(), cgv::render::cone_renderer::clear(), cgv::render::volume_renderer::clear(), and manage_singleton().
|
protectedpure virtual |
implement this method to create a default render style
Implemented in cgv::render::arrow_renderer, cgv::render::box_renderer, cgv::render::box_wire_renderer, cgv::render::cone_renderer, cgv::render::ellipsoid_renderer, cgv::render::line_renderer, cgv::render::normal_renderer, cgv::render::point_renderer, cgv::render::rectangle_renderer, cgv::render::sphere_renderer, cgv::render::spline_tube_renderer, cgv::render::surfel_renderer, and cgv::render::volume_renderer.
Referenced by get_style_ptr(), and init().
|
virtual |
disable renderer
Reimplemented in cgv::render::group_renderer, cgv::render::arrow_renderer, cgv::render::box_renderer, cgv::render::box_wire_renderer, cgv::render::cone_renderer, cgv::render::ellipsoid_renderer, cgv::render::line_renderer, cgv::render::point_renderer, cgv::render::rectangle_renderer, cgv::render::sphere_renderer, cgv::render::spline_tube_renderer, cgv::render::surface_renderer, cgv::render::surfel_renderer, and cgv::render::volume_renderer.
Definition at line 229 of file renderer.cxx.
References cgv::render::shader_compile_options::clear(), and cgv::render::context_config::core_profile.
Referenced by cgv::render::group_renderer::disable(), and cgv::render::volume_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 in cgv::render::group_renderer, cgv::render::arrow_renderer, cgv::render::box_renderer, cgv::render::box_wire_renderer, cgv::render::cone_renderer, cgv::render::ellipsoid_renderer, cgv::render::line_renderer, cgv::render::point_renderer, cgv::render::rectangle_renderer, cgv::render::sphere_renderer, cgv::render::spline_tube_renderer, cgv::render::surface_renderer, and cgv::render::surfel_renderer.
Definition at line 62 of file renderer.cxx.
References cgv::render::context_config::core_profile, has_colors, and has_positions.
Referenced by cgv::render::volume_renderer::clear(), cgv::render::group_renderer::disable_attribute_array_manager(), and set_attribute_array_manager().
|
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 in cgv::render::arrow_renderer, cgv::render::box_renderer, cgv::render::box_wire_renderer, cgv::render::cone_renderer, cgv::render::ellipsoid_renderer, cgv::render::line_renderer, cgv::render::normal_renderer, cgv::render::point_renderer, cgv::render::rectangle_renderer, cgv::render::sphere_renderer, cgv::render::spline_tube_renderer, cgv::render::surfel_renderer, and cgv::render::volume_renderer.
Definition at line 336 of file renderer.cxx.
Referenced by cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::draw().
| void cgv::render::renderer::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
Definition at line 252 of file renderer.cxx.
References cgv::type::info::get_type_size(), and cgv::render::VBT_INDICES.
Referenced by cgv::render::arrow_renderer::draw(), cgv::render::box_renderer::draw(), cgv::render::box_wire_renderer::draw(), cgv::render::cone_renderer::draw(), cgv::render::ellipsoid_renderer::draw(), cgv::render::line_renderer::draw(), cgv::render::normal_renderer::draw(), cgv::render::point_renderer::draw(), cgv::render::rectangle_renderer::draw(), cgv::render::sphere_renderer::draw(), cgv::render::spline_tube_renderer::draw(), and cgv::render::surfel_renderer::draw().
| void cgv::render::renderer::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
Definition at line 294 of file renderer.cxx.
References cgv::type::info::get_type_size(), and cgv::render::VBT_INDICES.
|
virtual |
enables renderer
if internal program is used, first update defines with update_defines() and rebuild program if it changed due updating or external modification via ref_defines()
Reimplemented in cgv::render::group_renderer, cgv::render::arrow_renderer, cgv::render::box_renderer, cgv::render::box_wire_renderer, cgv::render::cone_renderer, cgv::render::ellipsoid_renderer, cgv::render::line_renderer, cgv::render::normal_renderer, cgv::render::point_renderer, cgv::render::rectangle_renderer, cgv::render::sphere_renderer, cgv::render::spline_tube_renderer, cgv::render::surface_renderer, cgv::render::surfel_renderer, and cgv::render::volume_renderer.
Definition at line 203 of file renderer.cxx.
References build_shader_program(), cgv::render::shader_program::destruct(), cgv::render::render_component::is_created(), and update_shader_program_options().
Referenced by cgv::render::group_renderer::enable(), cgv::render::volume_renderer::enable(), and validate_and_enable().
|
virtual |
call this before setting attribute arrays to manage attribute array in given manager
Reimplemented in cgv::render::group_renderer, cgv::render::arrow_renderer, cgv::render::box_renderer, cgv::render::box_wire_renderer, cgv::render::cone_renderer, cgv::render::ellipsoid_renderer, cgv::render::line_renderer, cgv::render::point_renderer, cgv::render::rectangle_renderer, cgv::render::sphere_renderer, cgv::render::spline_tube_renderer, cgv::render::surface_renderer, and cgv::render::surfel_renderer.
Definition at line 53 of file renderer.cxx.
References has_attribute(), has_colors, and has_positions.
Referenced by cgv::render::group_renderer::enable_attribute_array_manager(), cgv::render::volume_renderer::init(), and set_attribute_array_manager().
|
protectedpure virtual |
implement this method to return the name of the default shader program; return an empty string if the renderer handles program creation on its own
Implemented in cgv::render::arrow_renderer, cgv::render::box_renderer, cgv::render::box_wire_renderer, cgv::render::cone_renderer, cgv::render::ellipsoid_renderer, cgv::render::line_renderer, cgv::render::normal_renderer, cgv::render::point_renderer, cgv::render::rectangle_renderer, cgv::render::sphere_renderer, cgv::render::spline_tube_renderer, cgv::render::surfel_renderer, and cgv::render::volume_renderer.
Referenced by build_shader_program().
|
inline |
Returns a pointer to the vertex buffer of type element buffer holding the indices for indexed rendering as managed by the attribute array manager. Returns nullptr if the buffer or attribute array manager does not exist. Take caution when manipulating the buffer.
Definition at line 337 of file renderer.h.
References cgv::render::attribute_array_manager::get_buffer_ptr().
|
inlineprotected |
Definition at line 144 of file renderer.h.
|
inlineprotected |
access to style
Definition at line 138 of file renderer.h.
|
protected |
access to render style
Definition at line 157 of file renderer.cxx.
References create_render_style().
Referenced by cgv::render::group_renderer::validate_attributes().
|
inline |
Returns a pointer to the vertex buffer of the given attribute name as managed by the attribute array manager. Returns nullptr if the buffer or attribute array manager does not exist. Take caution when manipulating the buffer.
Definition at line 331 of file renderer.h.
References cgv::render::attribute_array_manager::get_buffer_ptr().
|
inlineprotected |
check for attribute array manager
Definition at line 112 of file renderer.h.
|
protected |
check for attribute
Definition at line 48 of file renderer.cxx.
References cgv::render::attribute_array_manager::has_attribute().
Referenced by cgv::render::group_renderer::enable_attribute_array_manager(), enable_attribute_array_manager(), cgv::render::arrow_renderer::enable_attribute_array_manager(), cgv::render::box_renderer::enable_attribute_array_manager(), cgv::render::box_wire_renderer::enable_attribute_array_manager(), cgv::render::cone_renderer::enable_attribute_array_manager(), cgv::render::ellipsoid_renderer::enable_attribute_array_manager(), cgv::render::line_renderer::enable_attribute_array_manager(), cgv::render::point_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(), cgv::render::surface_renderer::enable_attribute_array_manager(), and cgv::render::surfel_renderer::enable_attribute_array_manager().
|
inline |
return whether indices have been defined
Definition at line 321 of file renderer.h.
References cgv::render::attribute_array_manager::has_index_buffer().
Referenced by remove_indices().
|
virtual |
call init() once before using renderer
creates default render style and builds shader program based on defines that can be configured with ref_defines() before calling init(). Reconfiguring defines after init() causes rebuild of shader program in enable() function.
Reimplemented in cgv::render::line_renderer, cgv::render::rectangle_renderer, and cgv::render::volume_renderer.
Definition at line 172 of file renderer.cxx.
References build_shader_program(), cgv::render::context_config::core_profile, create_render_style(), and update_shader_program_options().
Referenced by cgv::app::transformation_gizmo::init(), cgv::app::navigator::init(), cgv::render::line_renderer::init(), cgv::render::rectangle_renderer::init(), cgv::render::volume_renderer::init(), and manage_singleton().
| void cgv::render::renderer::manage_singleton | ( | context & | ctx, |
| const std::string & | renderer_name, | ||
| int & | ref_count, | ||
| int | ref_count_change | ||
| ) |
used by derived classes to manage singletons
Definition at line 10 of file renderer.cxx.
References clear(), cgv::render::context::error(), and init().
Referenced by cgv::render::ref_arrow_renderer(), cgv::render::ref_box_renderer(), cgv::render::ref_box_wire_renderer(), cgv::render::ref_cone_renderer(), cgv::render::ref_ellipsoid_renderer(), cgv::render::ref_normal_renderer(), cgv::render::ref_point_renderer(), cgv::render::ref_rectangle_renderer(), cgv::render::ref_sphere_renderer(), cgv::render::ref_spline_tube_renderer(), cgv::render::ref_surfel_renderer(), and cgv::render::ref_volume_renderer().
|
inlineprotected |
in case that several attributes are stored interleaved, call set_composed_attribute_array() for the first and this function for all others
Definition at line 188 of file renderer.h.
|
inline |
derived renderer classes have access to shader program
Definition at line 129 of file renderer.h.
Referenced by cgv::render::group_renderer::enable(), cgv::render::arrow_renderer::enable(), cgv::render::box_renderer::enable(), cgv::render::box_wire_renderer::enable(), cgv::render::cone_renderer::enable(), cgv::render::ellipsoid_renderer::enable(), cgv::render::line_renderer::enable(), cgv::render::normal_renderer::enable(), cgv::render::point_renderer::enable(), cgv::render::rectangle_renderer::enable(), cgv::render::sphere_renderer::enable(), cgv::render::spline_tube_renderer::enable(), cgv::render::surface_renderer::enable(), cgv::render::surfel_renderer::enable(), cgv::render::volume_renderer::enable(), cgv::render::line_renderer::init(), and cgv::render::rectangle_renderer::set_textured_rectangle().
|
inline |
access to shader program compile options to update settings not handled by render style
Definition at line 127 of file renderer.h.
|
protected |
Definition at line 88 of file renderer.cxx.
| void cgv::render::renderer::remove_color_array | ( | const context & | ctx | ) |
| void cgv::render::renderer::remove_indices | ( | const context & | ctx | ) |
remove previously set indices
Definition at line 118 of file renderer.cxx.
References has_indices().
| void cgv::render::renderer::remove_position_array | ( | const context & | ctx | ) |
remove the position attribute
Definition at line 105 of file renderer.cxx.
References has_positions.
|
virtual |
Convenience function that draws vertex or indexed element with this renderer.
This function effectively calls validate_and_enable(), draw() and disable(), passes its parameters to draw and returns the result of validate_and_enable(). draw() and disable() are only executed if validate_and_enable() succeeds. For performance reasons this function should not be used for several successive draw calls due to the unnecessary enabling and disabling between render calls. Typically, this function does not need to be overloaded by specific renderers.
Definition at line 341 of file renderer.cxx.
Referenced by vr_test::draw(), cgv::render::gl::gl_implicit_surface_drawable_base::draw_implicit_surface(), and vr_view_interactor::draw_vr_kits().
|
inlineprotected |
Definition at line 154 of file renderer.h.
|
inlineprotected |
Definition at line 164 of file renderer.h.
|
protected |
Definition at line 78 of file renderer.cxx.
|
virtual |
this function is deprecated, please use enable_attribute_array_manager() and disable_attribute_manager() instead
Definition at line 71 of file renderer.cxx.
References disable_attribute_array_manager(), and enable_attribute_array_manager().
|
inline |
templated method to set the color attribute from a single color of type T
Definition at line 244 of file renderer.h.
|
inline |
template method to set the color attribute from a vector of colors of type T
Definition at line 247 of file renderer.h.
Referenced by vr_test::draw(), and vr_view_interactor::draw_vr_kits().
|
inline |
template method to set the color attribute from a vector of colors of type T
Definition at line 250 of file renderer.h.
|
inline |
template method to set the color attribute from a vertex buffer object, the element type must be given as explicit template parameter
Definition at line 255 of file renderer.h.
References set_color_array().
Referenced by set_color_array().
| void cgv::render::renderer::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
Definition at line 109 of file renderer.cxx.
References has_colors.
|
inlineprotected |
in case that several attributes are stored interleaved, call this function for the first and ref_composed_attribute_array() for all others
Definition at line 177 of file renderer.h.
|
inline |
Set the indices for indexed rendering from a vector.
If an attribute array manager is enabled and keep_on_cpu is false (default), create GPU index buffer and transfer indices into it.
| T | index type must be uint8_t, uint16_t, or uint32_t |
| ctx | opengl context in which indexed rendering takes place |
| indices | vector of indices |
| keep_on_cpu | flag whether indices should be kept in CPU memory |
Definition at line 269 of file renderer.h.
|
inline |
Set the indices for indexed rendering from an array given as a pointer.
If an attribute array manager is enabled and keep_on_cpu is false (default), create GPU index buffer and transfer indices into it.
| T | index type must be uint8_t, uint16_t, or uint32_t |
| ctx | opengl context in which indexed rendering takes place |
| indices | pointer to array containing the indices |
| nr_indices | number of indices in the array |
| keep_on_cpu | flag whether indices should be kept in CPU memory |
Definition at line 290 of file renderer.h.
|
inline |
Set the indices for indexed rendering from a GPU buffer.
If an attribute array manager is enabled its index buffer is removed through this call.
| T | index type must be uint8_t, uint16_t, or uint32_t |
| ctx | opengl context in which indexed rendering takes place |
| vbo | GPU buffer |
| count | number of indices in the GPU buffer |
Definition at line 311 of file renderer.h.
|
inline |
templated method to set the position attribute from a single position of type T
Definition at line 228 of file renderer.h.
|
inline |
templated method to set the position attribute from a vector of positions of type T
Definition at line 231 of file renderer.h.
Referenced by cgv::render::gl::gl_implicit_surface_drawable_base::draw_implicit_surface(), and cgv::render::volume_renderer::init().
|
inline |
templated method to set the position attribute from a vector of positions of type T
Definition at line 234 of file renderer.h.
|
inline |
template method to set the position attribute from a vertex buffer object, the element type must be given as explicit template parameter
Definition at line 239 of file renderer.h.
References set_position_array().
Referenced by set_position_array().
| void cgv::render::renderer::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
Definition at line 100 of file renderer.cxx.
References has_positions.
| void cgv::render::renderer::set_prog | ( | shader_program & | one_shot_prog | ) |
set external shader program up to next call to disable() or render()
set external shader program for successive draw call only
Definition at line 167 of file renderer.cxx.
| void cgv::render::renderer::set_render_style | ( | const render_style & | rs | ) |
reference given render style
Definition at line 139 of file renderer.cxx.
Referenced by vr_test::draw(), cgv::render::gl::gl_implicit_surface_drawable_base::draw_implicit_surface(), and vr_view_interactor::draw_vr_kits().
|
inlineprotectedvirtual |
overload to update the shader program compile options based on the current render style; only called if internal shader program is used
Reimplemented in cgv::render::box_renderer, cgv::render::cone_renderer, cgv::render::group_renderer, cgv::render::surface_renderer, and cgv::render::volume_renderer.
Definition at line 122 of file renderer.h.
Referenced by build_program(), enable(), init(), and cgv::render::group_renderer::update_shader_program_options().
| bool cgv::render::renderer::validate_and_enable | ( | context & | ctx | ) |
validate attributes and if successful, enable renderer
Definition at line 196 of file renderer.cxx.
References enable(), and validate_attributes().
Referenced by vr_test::draw().
|
virtual |
call to validate, whether essential position attribute is defined
Reimplemented in cgv::render::group_renderer, cgv::render::arrow_renderer, cgv::render::cone_renderer, cgv::render::ellipsoid_renderer, cgv::render::normal_renderer, cgv::render::point_renderer, cgv::render::rectangle_renderer, cgv::render::sphere_renderer, cgv::render::spline_tube_renderer, cgv::render::surfel_renderer, and cgv::render::volume_renderer.
Definition at line 129 of file renderer.cxx.
References cgv::render::context::error(), and has_positions.
Referenced by validate_and_enable(), cgv::render::group_renderer::validate_attributes(), and cgv::render::volume_renderer::validate_attributes().
|
mutableprotected |
track whether color attribute is defined
Definition at line 140 of file renderer.h.
Referenced by disable_attribute_array_manager(), cgv::render::line_renderer::enable(), cgv::render::point_renderer::enable(), cgv::render::surface_renderer::enable(), cgv::render::surfel_renderer::enable(), enable_attribute_array_manager(), remove_color_array(), set_color_array(), cgv::render::point_renderer::validate_attributes(), and cgv::render::surfel_renderer::validate_attributes().
|
mutableprotected |
track whether position attribute is defined
Definition at line 142 of file renderer.h.
Referenced by disable_attribute_array_manager(), enable_attribute_array_manager(), remove_position_array(), set_position_array(), cgv::render::rectangle_renderer::set_textured_rectangle(), and validate_attributes().