cgv
Loading...
Searching...
No Matches
spline_tube_renderer.h
1#pragma once
2
3#include "surface_renderer.h"
4
5#include "gl/lib_begin.h"
6
7namespace cgv { // @<
8 namespace render { // @<
9 class CGV_API spline_tube_renderer;
10
12
15 extern CGV_API spline_tube_renderer& ref_spline_tube_renderer(context& ctx, int ref_count_change = 0);
16
18 {
20 float radius_scale = 1.0f;
22 float radius = 1.0f;
23 };
24
27 {
28 protected:
30 bool has_radii = false;
32 bool has_tangents = false;
34 vec3 eye_pos = { 0.0f };
36 std::string get_default_prog_name() const override { return "spline_tube.glpr"; }
38 render_style* create_render_style() const override { return new spline_tube_render_style(); }
39 public:
41 void set_eye_pos(vec3 ep) { eye_pos = ep; }
43 void enable_attribute_array_manager(const context& ctx, attribute_array_manager& aam) override;
45 void disable_attribute_array_manager(const context& ctx, attribute_array_manager& aam) override;
47 template <typename T = float>
48 void set_radius_array(const context& ctx, const std::vector<T>& radii) { has_radii = true; set_attribute_array(ctx, "radius", radii); }
50 template <typename T = float>
51 void set_radius_array(const context& ctx, const T* radii, size_t nr_elements, unsigned stride_in_bytes = 0) { has_radii = true; set_attribute_array(ctx, "radius", radii, nr_elements, stride_in_bytes); }
53 void remove_radius_array(const context& ctx);
55 template <typename T = float>
56 void set_tangent_array(const context& ctx, const std::vector<T>& tangents) { has_tangents = true; set_attribute_array(ctx, "tangent", tangents); }
58 template <typename T = float>
59 void set_tangent_array(const context& ctx, const T* tangents, size_t nr_elements, unsigned stride_in_bytes = 0) { has_tangents = true; set_attribute_array(ctx, "tangent", tangents, nr_elements, stride_in_bytes); }
61 void remove_tangent_array(const context& ctx);
63 bool validate_attributes(const context& ctx) const override;
65 bool enable(context& ctx) override;
67 bool disable(context& ctx) override;
69 void draw(context& ctx, size_t start, size_t count,
70 bool use_strips = false, bool use_adjacency = false, uint32_t strip_restart_index = -1) override;
71 };
72
74 {
75 bool self_reflect(cgv::reflect::reflection_handler& rh);
76 };
78 }
79}
80
81#include <cgv/config/lib_end.h>
the self reflection handler is passed to the virtual self_reflect() method of cgv::base::base.
attribute array manager used to upload arrays to gpu
base class for all drawables, which is independent of the used rendering API.
Definition context.h:627
renderer that supports point splatting
render_style * create_render_style() const override
create and return the default render style
void set_eye_pos(vec3 ep)
set the eye position needed for rendering
std::string get_default_prog_name() const override
return the default shader program name
base classes for renderers that support surface rendering
spline_tube_renderer & ref_spline_tube_renderer(context &ctx, int ref_count_change)
reference to a singleton spline tube renderer that is shared among drawables
the cgv namespace
Definition print.h:11
this reflection traits implementation is used for external self_reflect implementations of instances ...
base class for all render styles
Definition renderer.h:16