libVFRendering  0.14.0

A vector field rendering library
VectorSphereRenderer.hxx
1 #ifndef VFRENDERING_VECTOR_SPHERE_RENDERER_HXX
2 #define VFRENDERING_VECTOR_SPHERE_RENDERER_HXX
3 
4 #include <VFRendering/VectorFieldRenderer.hxx>
5 
6 namespace VFRendering {
7 
9 public:
10  enum Option {
11  POINT_SIZE_RANGE = 400,
12  INNER_SPHERE_RADIUS,
13  USE_SPHERE_FAKE_PERSPECTIVE
14  };
15 
16  VectorSphereRenderer(const View& view, const VectorField& vf);
17  virtual ~VectorSphereRenderer();
18  virtual void draw(float aspect_ratio) override;
19  virtual void optionsHaveChanged(const std::vector<int>& changed_options) override;
20 
21 protected:
22  virtual void update(bool keep_geometry) override;
23 
24 private:
25  void updateShaderProgram();
26  void initialize();
27 
28  bool m_is_initialized = false;
29  unsigned int m_sphere_points_program = 0;
30  unsigned int m_sphere_points_vao = 0;
31  unsigned int m_sphere_points_positions_vbo = 0;
32  unsigned int m_sphere_points_directions_vbo = 0;
33  unsigned int m_sphere_background_program = 0;
34  unsigned int m_sphere_background_vao = 0;
35  unsigned int m_sphere_background_vbo = 0;
36  unsigned int m_num_instances = 0;
37 };
38 
39 namespace Utilities {
40 template<>
41 struct Options::Option<VectorSphereRenderer::Option::POINT_SIZE_RANGE> {
42  glm::vec2 default_value = {1.0f, 4.0f};
43 };
44 
45 template<>
46 struct Options::Option<VectorSphereRenderer::Option::INNER_SPHERE_RADIUS> {
47  float default_value = 0.95f;
48 };
49 
50 template<>
51 struct Options::Option<VectorSphereRenderer::Option::USE_SPHERE_FAKE_PERSPECTIVE> {
52  bool default_value = true;
53 };
54 }
55 }
56 
57 #endif
VFRendering::VectorSphereRenderer
Definition: VectorSphereRenderer.hxx:8
VFRendering::VectorField
Definition: VectorField.hxx:16
VFRendering::VectorFieldRenderer
Definition: VectorFieldRenderer.hxx:13
VFRendering::View
Definition: View.hxx:23