1#include "box_renderer.h"
2#include <cgv_gl/gl/gl.h>
3#include <cgv_gl/gl/gl_tools.h>
9 static int ref_count = 0;
42 remove_attribute_array(ctx,
"extent");
46 remove_attribute_array(ctx,
"radius");
50 remove_attribute_array(ctx,
"secondary_color");
54 remove_attribute_array(ctx,
"translation");
58 remove_attribute_array(ctx,
"rotation");
75 const auto& brs = get_style<box_render_style>();
76 if (
ref_prog().get_uniform_location(ctx,
"default_radius") != -1)
78 if (
ref_prog().get_uniform_location(ctx,
"relative_anchor") != -1)
98 void box_renderer::draw(
context& ctx,
size_t start,
size_t count,
bool use_strips,
bool use_adjacency, uint32_t strip_restart_index)
100 draw_impl(ctx, PT_POINTS, start, count,
false,
false, -1);
124#include <cgv/gui/provider.h>
133 void* value_ptr,
const std::string& value_type,
134 const std::string& gui_type,
const std::string& options,
bool*)
153#include "gl/lib_begin.h"
base class for all classes that can be registered with support for dynamic properties (see also secti...
helper template for registration of gui creators
derive from this class to provide a gui to the current viewer
bool add_gui(const std::string &label, T &value, const std::string &gui_type="", const std::string &options="")
Add a composed gui of the given gui_type for the given value.
data::ref_ptr< control< T > > add_member_control(cgv::base::base *base_ptr, const std::string &label, T &value, const std::string &gui_type="", const std::string &options="", const std::string &align="\n")
add control with callback to cgv::base::on_set method on cgv::gui::control::value_change
the self reflection handler is passed to the virtual self_reflect() method of cgv::base::base.
bool reflect_base(B &base_ref)
reflect a base class with its members
bool reflect_member(const std::string &member_name, T &member_ref, bool hard_cast=false)
call this to reflect a member by member name and reference to the member.
attribute array manager used to upload arrays to gpu
renderer that supports point splatting
void update_shader_program_options(shader_compile_options &options) const override
update shader program compile options based on render style
bool has_translations
whether array with per box translations has been specified
void remove_translation_array(const context &ctx)
remove the translation attribute
bool disable(context &ctx) override
disable renderer
void disable_attribute_array_manager(const context &ctx, attribute_array_manager &aam) override
call this after last render/draw call to ensure that no other users of renderer change attribute arra...
bool has_rotations
whether array with per box rotations has been specified
void draw(context &ctx, size_t start, size_t count, bool use_strips=false, bool use_adjacency=false, uint32_t strip_restart_index=-1) override
Draw a range of vertices or indexed elements.
void remove_extent_array(const context &ctx)
remove the extent attribute
void remove_secondary_color_array(const context &ctx)
remove the secondary color attribute
bool has_radii
store whether extent array has been specified
void enable_attribute_array_manager(const context &ctx, attribute_array_manager &aam) override
call this before setting attribute arrays to manage attribute array in given manager
bool has_secondary_colors
whether secondary color or color array was set
bool enable(context &ctx) override
enable box renderer
bool position_is_center
whether position is box center, if not it is lower left bottom corner
void set_position_is_center(bool _position_is_center)
set the flag, whether the position is interpreted as the box center, true by default
void remove_rotation_array(const context &ctx)
remove the rotation attribute
void remove_radius_array(const context &ctx)
remove the radius attribute
bool has_extents
store whether extent array has been specified
base class for all drawables, which is independent of the used rendering API.
void manage_singleton(context &ctx, const std::string &renderer_name, int &ref_count, int ref_count_change)
used by derived classes to manage singletons
bool has_attribute(const context &ctx, const std::string &name)
check for attribute
shader_program & ref_prog()
derived renderer classes have access to shader program
bool attributes_persist() const
return whether attributes persist after a call to disable
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 type...
Stores preprocessor options used for conditionally compiling shader programs.
void define_macro_if_true(bool predicate, const std::string &identifier)
Conditionally define identifier as a macro with replacement text 1.
bool set_uniform(const context &ctx, const std::string &name, const T &value, bool generate_error=false)
Set the value of a uniform by name, where the type can be any of int, unsigned, float,...
bool set_attribute(const context &ctx, const std::string &name, const T &value)
set constant default value of a vertex attribute by attribute name, if name does not specify an attri...
void enable_attribute_array_manager(const context &ctx, attribute_array_manager &aam) override
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) override
call this after last render/draw call to ensure that no other users of renderer change attribute arra...
bool enable(context &ctx) override
overload to activate group style
bool disable(context &ctx) override
disable renderer
box_renderer & ref_box_renderer(context &ctx, int ref_count_change)
reference to a singleton box renderer that is shared among drawables
bool create(provider *p, const std::string &label, void *value_ptr, const std::string &value_type, const std::string &gui_type, const std::string &options, bool *)
attempt to create a gui and return whether this was successful
interface for gui creators
this reflection traits implementation is used for external self_reflect implementations of instances ...
boxes use surface render styles
vec3 default_extent
extent used in case extent array is not specified; defaults to (1,1,1)
vec3 relative_anchor
box anchor position relative to center that corresponds to the position attribute; defaults to (0,...
bool rounding
whether to use rounding of edges and corners (enabling re-compiles shader program)
float default_radius
radius used in case radius array is not specified
traits class with a static function get_name() of type const char* that returns the type name of the ...