cgv
Loading...
Searching...
No Matches
cgv::render::render_data_base< RendererType, RenderStyleType, ColorType > Class Template Referenceabstract

A base class for storing render data and style usable with the default renderers provided in the cgv::render namespace. More...

#include <render_data_base.h>

Inheritance diagram for cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >:
cgv::render::box_render_data_base< box_renderer, box_render_style, rgb > cgv::render::box_render_data_base< box_wire_renderer, box_wire_render_style, rgb > cgv::render::box_render_data_base< box_renderer, box_render_style, color< float, cgv::media::RGB, cgv::media::OPACITY > > cgv::render::cone_render_data< color< float, cgv::media::RGB, cgv::media::OPACITY > > cgv::render::rectangle_render_data< color< float, cgv::media::RGB, cgv::media::OPACITY > > cgv::render::sphere_render_data< color< float, cgv::media::RGB, cgv::media::OPACITY > > cgv::render::arrow_render_data< ColorType > cgv::render::box_render_data_base< RendererType, RenderStyleType, ColorType > cgv::render::cone_render_data< ColorType > cgv::render::ellipsoid_render_data< ColorType > cgv::render::line_render_data< ColorType > cgv::render::point_render_data< ColorType > cgv::render::rectangle_render_data< ColorType > cgv::render::sphere_render_data< ColorType > cgv::render::surfel_render_data< ColorType >

Public Member Functions

size_t size ()
 Return the number of stored positions.
 
bool empty () const
 Return whether this render data is empty.
 
void clear ()
 Clear the stored data and set state out of date.
 
void set_out_of_date ()
 Notify the render data about state changes.
 
size_t render_count ()
 Return the number of vertices that will be rendered.
 
const attribute_array_managerref_attribute_array_manager () const
 Constant access to the private attribute_array_manager.
 
bool init (context &ctx)
 Initialize the attribute array manager.
 
void destruct (context &ctx)
 Destruct the attribute array manager and decrease the reference count of the used renderer.
 
void early_transfer (context &ctx, RendererType &r)
 Perform a transfer of the stored data to the attribute_array right now.
 
bool enable (context &ctx, RendererType &r, const RenderStyleType &s)
 Enable the render data for rendering.
 
bool disable (context &ctx, RendererType &r)
 Disable the renderer and attribute_array.
 
void draw (context &ctx, renderer &r, unsigned offset=0, int count=-1)
 Draw the stored geometry using the given renderer.
 
void render (context &ctx, unsigned offset=0, int count=-1)
 Render the stored geometry.
 
void render (context &ctx, const RenderStyleType &s, unsigned offset=0, int count=-1)
 Render the stored geometry using the given style.
 
void render (context &ctx, RendererType &r, unsigned offset=0, int count=-1)
 Render the stored geometry using the given renderer.
 
void render (context &ctx, RendererType &r, const RenderStyleType &s, unsigned offset=0, int count=-1)
 Render the stored geometry using the given renderer and style.
 
void add_index (const uint32_t index)
 
void add_position (const vec3 &position)
 
void add_color (const ColorType &color)
 
void add (const vec3 &position, const ColorType &color)
 
void fill_colors (const ColorType &color)
 

Public Attributes

RenderStyleType style
 the default render style
 
std::vector< uint32_t > indices
 array of indices used for optional indexed rendering
 
std::vector< vec3positions
 array of positions
 
std::vector< ColorType > colors
 array of colors
 
cgv::data::optional< ColorType > const_color
 optional constant color used for all elements
 

Protected Member Functions

virtual RendererType & ref_renderer_singleton (context &ctx, int ref_count_change=0)=0
 Manage the singleton of the used renderer.
 
virtual bool transfer (context &ctx, RendererType &r)
 Transfers the data stored in members to the attribute array.
 
virtual void set_const_attributes (context &ctx, RendererType &r)
 Set constant vertex attributes if present.
 
template<typename T >
void fill (std::vector< T > &vector, const T &value)
 Template for filling a member array to the size of the render data.
 

Detailed Description

template<class RendererType, class RenderStyleType, typename ColorType = rgb>
class cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >

A base class for storing render data and style usable with the default renderers provided in the cgv::render namespace.

This class and its derivatives provide storage for typical vertex attributes used by the different renderers to enable simple handling of geometry data and rendering. Additionally, a customizable default style is provided. Per default, a reference to the singleton of the target renderer is used. The reference count is automatically increased and decreased by the init and destruct methods. Both the default style and renderer can be exchanged for user-provided ones.

Each derived class must specify the exact renderer and render style used and may add storage for vertex attributes according to the capabilities of its target renderer.

Data handling: Host side storage is provided through vector members and GPU side storage is managed through an attribte_array_manager. The data will only be uploaded to the attribute_array_manager when either enable or render is called and the state_out_of_date flag is set to true.

Vertex attributes are public and can be freely manipulated. It is up to the user to ensure the validity of the data. Additionally, the following methods are provided:

add_<attribute_name>(const <attribute_type>& value) --> Add a single value of the specified type to the attribute with the given name. Example: add_color(rgb(0.5f));

add(const <attribute_type_1>& value_1, const <attribute_type_2>& value_2) --> Add a single value of each given attribute of the specified type to the attribute with the given name. These methods provide syntactic sugar for quickly adding common attribute configurations. Example: add(position, color);

fill_<attribute_name>(const <attribute_type>& value) --> Fill the attribute of the given name with the given value until it has the same amount of entries as the positions array. Example: fill_colors(rgb(0.5f));

Derived classes may add more methods to reflect the capabilities of their target renderer and supported geometry properties:

add_segment_<attribute_name>(const <attribute_type>& value) --> Add two copies of the given value to the attribute of the specified name. This is used by, e.g., line-type geometries, to quickly add a single attribute value for start and end points. Example: add_segment_color(color_for_whole_segment);

Template Parameters
RendererTypeThe type of the used renderer. Must be derived from cgv::render::renderer.
renderStyleTypeThe type of the used render style. Must be supported by RendererType.
ColorTypeThe type used to represent colors. Must be cgv::render::rgb or cgv::render::rgba.

Definition at line 66 of file render_data_base.h.

Member Function Documentation

◆ add()

template<class RendererType , class RenderStyleType , typename ColorType = rgb>
void cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::add ( const vec3 position,
const ColorType &  color 
)
inline

Definition at line 362 of file render_data_base.h.

◆ add_color()

template<class RendererType , class RenderStyleType , typename ColorType = rgb>
void cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::add_color ( const ColorType &  color)
inline

Definition at line 358 of file render_data_base.h.

◆ add_index()

template<class RendererType , class RenderStyleType , typename ColorType = rgb>
void cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::add_index ( const uint32_t  index)
inline

Definition at line 350 of file render_data_base.h.

◆ add_position()

template<class RendererType , class RenderStyleType , typename ColorType = rgb>
void cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::add_position ( const vec3 position)
inline

Definition at line 354 of file render_data_base.h.

◆ clear()

template<class RendererType , class RenderStyleType , typename ColorType = rgb>
void cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::clear ( )
inline

◆ destruct()

template<class RendererType , class RenderStyleType , typename ColorType = rgb>
void cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::destruct ( context ctx)
inline

Destruct the attribute array manager and decrease the reference count of the used renderer.

Parameters
ctxThe GL context.

Definition at line 221 of file render_data_base.h.

References cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::ref_renderer_singleton().

Referenced by cgv::app::navigator::clear().

◆ disable()

template<class RendererType , class RenderStyleType , typename ColorType = rgb>
bool cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::disable ( context ctx,
RendererType &  r 
)
inline

Disable the renderer and attribute_array.

Parameters
ctxThe GL context.
rThe used renderer class instance.
Returns
True if disabling was successful.

Definition at line 271 of file render_data_base.h.

Referenced by cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::render().

◆ draw()

template<class RendererType , class RenderStyleType , typename ColorType = rgb>
void cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::draw ( context ctx,
renderer r,
unsigned  offset = 0,
int  count = -1 
)
inline

Draw the stored geometry using the given renderer.

This method must only be called after a successful call to enable. Afterwards, disable must be called.

If offset and count are not specified the full data range is rendered. Validates whether offset and count produce a valid range according to the value returned by render_data_base::render_count and clamps the count values if necessary.

Parameters
ctxThe GL context.
rThe used renderer class instance.
offsetThe vertex offset.
countThe vertex count.

Definition at line 291 of file render_data_base.h.

References cgv::render::renderer::draw(), and cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::render_count().

Referenced by cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::render().

◆ early_transfer()

template<class RendererType , class RenderStyleType , typename ColorType = rgb>
void cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::early_transfer ( context ctx,
RendererType &  r 
)
inline

Perform a transfer of the stored data to the attribute_array right now.

Only executed if state_out_of_date is true. Normally the transfer operation is performed when enable is called. However, sometimes it is necessary for the data to be stored in the attribute_array and hence in the GPU buffer before rendering, in order to be able to manipulate the data through, e.g., compute shaders.

Parameters
ctxThe GL context.
rThe used renderer class instance.

Definition at line 235 of file render_data_base.h.

References cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::transfer().

Referenced by cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::enable().

◆ empty()

template<class RendererType , class RenderStyleType , typename ColorType = rgb>
bool cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::empty ( ) const
inline

Return whether this render data is empty.

A render data is considered to be empty when the positions array is empty.

Returns
True if empty, false otherwise.

Definition at line 167 of file render_data_base.h.

References cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::positions.

◆ enable()

template<class RendererType , class RenderStyleType , typename ColorType = rgb>
bool cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::enable ( context ctx,
RendererType &  r,
const RenderStyleType &  s 
)
inline

Enable the render data for rendering.

Prepares the renderer to render using the attribute_array and given style. If state_out_of_date is true, the attribute_array is updated to reflect the stored data. Overrides the per-default used renderer and style.

Parameters
ctxThe GL context.
rThe used renderer class instance.
styleThe used render style.

Definition at line 251 of file render_data_base.h.

References cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::early_transfer(), cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::set_const_attributes(), cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::size(), and cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::transfer().

Referenced by cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::render().

◆ fill()

template<class RendererType , class RenderStyleType , typename ColorType = rgb>
template<typename T >
void cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::fill ( std::vector< T > &  vector,
const T &  value 
)
inlineprotected

Template for filling a member array to the size of the render data.

Fills the member array with copies of value up to the size of the positions array of this render data.

Template Parameters
TThe data type.
Parameters
vectorThe member array.
valueThe constant value used for padding.

Definition at line 138 of file render_data_base.h.

References cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::size().

◆ fill_colors()

template<class RendererType , class RenderStyleType , typename ColorType = rgb>
void cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::fill_colors ( const ColorType &  color)
inline

Definition at line 367 of file render_data_base.h.

◆ init()

template<class RendererType , class RenderStyleType , typename ColorType = rgb>
bool cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::init ( context ctx)
inline

Initialize the attribute array manager.

Parameters
ctxThe GL context.

Definition at line 214 of file render_data_base.h.

References cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::ref_renderer_singleton().

Referenced by cgv::app::navigator::init().

◆ ref_attribute_array_manager()

template<class RendererType , class RenderStyleType , typename ColorType = rgb>
const attribute_array_manager & cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::ref_attribute_array_manager ( ) const
inline

Constant access to the private attribute_array_manager.

Can be used to retrieve internals such as buffer handles.

Returns
A const reference to the attribute_array_manager.

Definition at line 208 of file render_data_base.h.

◆ ref_renderer_singleton()

template<class RendererType , class RenderStyleType , typename ColorType = rgb>
virtual RendererType & cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::ref_renderer_singleton ( context ctx,
int  ref_count_change = 0 
)
protectedpure virtual

Manage the singleton of the used renderer.

this mehtod needs to be implemented in derived classes.

Parameters
ctxThe GL context.
ref_count_changeThe amount by which to change the singleton reference count. Usually -1, 0 or 1.
Returns
A reference to the renderer sigleton.

Referenced by cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::destruct(), cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::init(), cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::render(), and cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::render().

◆ render() [1/4]

template<class RendererType , class RenderStyleType , typename ColorType = rgb>
void cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::render ( context ctx,
const RenderStyleType &  s,
unsigned  offset = 0,
int  count = -1 
)
inline

Render the stored geometry using the given style.

See draw for usage of offset and count.

Parameters
ctxThe GL context.
styleThe used render style.
offsetThe vertex offset.
countThe vertex count.

Definition at line 318 of file render_data_base.h.

References cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::ref_renderer_singleton(), and cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::render().

◆ render() [2/4]

template<class RendererType , class RenderStyleType , typename ColorType = rgb>
void cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::render ( context ctx,
RendererType &  r,
const RenderStyleType &  s,
unsigned  offset = 0,
int  count = -1 
)
inline

Render the stored geometry using the given renderer and style.

See draw for usage of offset and count.

Parameters
ctxThe GL context.
rThe used renderer class instance.
styleThe used render style.
offsetThe vertex offset.
countThe vertex count.

Definition at line 343 of file render_data_base.h.

References cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::disable(), cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::draw(), and cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::enable().

◆ render() [3/4]

template<class RendererType , class RenderStyleType , typename ColorType = rgb>
void cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::render ( context ctx,
RendererType &  r,
unsigned  offset = 0,
int  count = -1 
)
inline

Render the stored geometry using the given renderer.

See draw for usage of offset and count.

Parameters
ctxThe GL context.
rThe used renderer class instance.
offsetThe vertex offset.
countThe vertex count.

Definition at line 330 of file render_data_base.h.

References cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::render(), and cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::style.

◆ render() [4/4]

template<class RendererType , class RenderStyleType , typename ColorType = rgb>
void cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::render ( context ctx,
unsigned  offset = 0,
int  count = -1 
)
inline

◆ render_count()

template<class RendererType , class RenderStyleType , typename ColorType = rgb>
size_t cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::render_count ( )
inline

Return the number of vertices that will be rendered.

Returns the number of indices if indices is not empty and the number of positions otherwise.

Returns
The number of specified vertices.

Definition at line 196 of file render_data_base.h.

References cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::indices, and cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::positions.

Referenced by cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::draw().

◆ set_const_attributes()

template<class RendererType , class RenderStyleType , typename ColorType = rgb>
virtual void cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::set_const_attributes ( context ctx,
RendererType &  r 
)
inlineprotectedvirtual

Set constant vertex attributes if present.

Sets the supported vertex attributes to constant values if they are specified and if the respective arrays are empty. This enables to set, e. g., a single color for all elements without the need to fill the whole color array with the same value.

Parameters
ctxThe GL context.
rThe used renderer instance.

Definition at line 124 of file render_data_base.h.

References cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::colors, and cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::const_color.

Referenced by cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::enable(), and cgv::render::rectangle_render_data< ColorType >::set_const_attributes().

◆ set_out_of_date()

template<class RendererType , class RenderStyleType , typename ColorType = rgb>
void cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::set_out_of_date ( )
inline

Notify the render data about state changes.

Calling this method will result in the state_out_of_date flag being set to true and a call to transfer upon the next call to render or enable. This method shall never be called implicitly as a side effect of another member method, except clear, and must always be called explicitly after changing the stored data.

Definition at line 186 of file render_data_base.h.

◆ size()

template<class RendererType , class RenderStyleType , typename ColorType = rgb>
size_t cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::size ( )
inline

◆ transfer()

template<class RendererType , class RenderStyleType , typename ColorType = rgb>
virtual bool cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::transfer ( context ctx,
RendererType &  r 
)
inlineprotectedvirtual

Member Data Documentation

◆ colors

template<class RendererType , class RenderStyleType , typename ColorType = rgb>
std::vector<ColorType> cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::colors

◆ const_color

template<class RendererType , class RenderStyleType , typename ColorType = rgb>
cgv::data::optional<ColorType> cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::const_color

optional constant color used for all elements

Definition at line 154 of file render_data_base.h.

Referenced by cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::set_const_attributes().

◆ indices

template<class RendererType , class RenderStyleType , typename ColorType = rgb>
std::vector<uint32_t> cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::indices

◆ positions

◆ style

template<class RendererType , class RenderStyleType , typename ColorType = rgb>
RenderStyleType cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::style

The documentation for this class was generated from the following file: