cgv
|
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>
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_manager & | ref_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< vec3 > | positions |
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. | |
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);
RendererType | The type of the used renderer. Must be derived from cgv::render::renderer. |
renderStyleType | The type of the used render style. Must be supported by RendererType. |
ColorType | The type used to represent colors. Must be cgv::render::rgb or cgv::render::rgba. |
Definition at line 66 of file render_data_base.h.
|
inline |
Definition at line 362 of file render_data_base.h.
|
inline |
Definition at line 358 of file render_data_base.h.
|
inline |
Definition at line 350 of file render_data_base.h.
|
inline |
Definition at line 354 of file render_data_base.h.
|
inline |
Clear the stored data and set state out of date.
Definition at line 172 of file render_data_base.h.
References cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::colors, cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::indices, and cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::positions.
|
inline |
Destruct the attribute array manager and decrease the reference count of the used renderer.
ctx | The 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().
|
inline |
Disable the renderer and attribute_array.
ctx | The GL context. |
r | The used renderer class instance. |
Definition at line 271 of file render_data_base.h.
Referenced by cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::render().
|
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.
ctx | The GL context. |
r | The used renderer class instance. |
offset | The vertex offset. |
count | The 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().
|
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.
ctx | The GL context. |
r | The 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().
|
inline |
Return whether this render data is empty.
A render data is considered to be empty when the positions array is empty.
Definition at line 167 of file render_data_base.h.
References cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::positions.
|
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.
ctx | The GL context. |
r | The used renderer class instance. |
style | The 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().
|
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.
T | The data type. |
vector | The member array. |
value | The 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().
|
inline |
Definition at line 367 of file render_data_base.h.
|
inline |
Initialize the attribute array manager.
ctx | The 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().
|
inline |
Constant access to the private attribute_array_manager.
Can be used to retrieve internals such as buffer handles.
Definition at line 208 of file render_data_base.h.
|
protectedpure virtual |
Manage the singleton of the used renderer.
this mehtod needs to be implemented in derived classes.
ctx | The GL context. |
ref_count_change | The amount by which to change the singleton reference count. Usually -1, 0 or 1. |
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().
|
inline |
Render the stored geometry using the given style.
See draw for usage of offset and count.
ctx | The GL context. |
style | The used render style. |
offset | The vertex offset. |
count | The 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().
|
inline |
Render the stored geometry using the given renderer and style.
See draw for usage of offset and count.
ctx | The GL context. |
r | The used renderer class instance. |
style | The used render style. |
offset | The vertex offset. |
count | The 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().
|
inline |
Render the stored geometry using the given renderer.
See draw for usage of offset and count.
ctx | The GL context. |
r | The used renderer class instance. |
offset | The vertex offset. |
count | The 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.
|
inline |
Render the stored geometry.
See draw for usage of offset and count.
ctx | The GL context. |
offset | The vertex offset. |
count | The vertex count. |
Definition at line 306 of file render_data_base.h.
References cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::ref_renderer_singleton(), cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::render(), and cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::style.
Referenced by cgv::app::navigator::finish_draw(), cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::render(), cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::render(), and cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::render().
|
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.
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().
|
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.
ctx | The GL context. |
r | The 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().
|
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.
|
inline |
Return the number of stored positions.
Definition at line 158 of file render_data_base.h.
References cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::positions.
Referenced by cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::enable(), cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::fill(), cgv::render::ellipsoid_render_data< ColorType >::transfer(), and cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::transfer().
|
inlineprotectedvirtual |
Transfers the data stored in members to the attribute array.
ctx | The GL context. |
r | The used renderer instance. |
Reimplemented in cgv::render::box_render_data_base< RendererType, RenderStyleType, ColorType >.
Definition at line 85 of file render_data_base.h.
References cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::colors, cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::indices, cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::positions, and cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::size().
Referenced by cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::early_transfer(), cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::enable(), cgv::render::arrow_render_data< ColorType >::transfer(), cgv::render::cone_render_data< ColorType >::transfer(), cgv::render::ellipsoid_render_data< ColorType >::transfer(), cgv::render::line_render_data< ColorType >::transfer(), cgv::render::point_render_data< ColorType >::transfer(), cgv::render::rectangle_render_data< ColorType >::transfer(), cgv::render::box_render_data_base< RendererType, RenderStyleType, ColorType >::transfer(), cgv::render::sphere_render_data< ColorType >::transfer(), and cgv::render::surfel_render_data< ColorType >::transfer().
std::vector<ColorType> cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::colors |
array of colors
Definition at line 152 of file render_data_base.h.
Referenced by cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::clear(), cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::set_const_attributes(), and cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::transfer().
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().
std::vector<uint32_t> cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::indices |
array of indices used for optional indexed rendering
Definition at line 148 of file render_data_base.h.
Referenced by cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::clear(), cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::render_count(), and cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::transfer().
std::vector<vec3> cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::positions |
array of positions
Definition at line 150 of file render_data_base.h.
Referenced by cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::clear(), cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::empty(), cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::render_count(), cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::size(), and cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::transfer().
RenderStyleType cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::style |
the default render style
Definition at line 145 of file render_data_base.h.
Referenced by cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::render(), and cgv::render::render_data_base< RendererType, RenderStyleType, ColorType >::render().