Virtual Testbed
Ship dynamics simulator for extreme conditions
ApplicationBase.hh
1 #ifndef VTESTBED_GUI_APPLICATIONBASE_HH
2 #define VTESTBED_GUI_APPLICATIONBASE_HH
3 
4 #include <vtestbed/config/opencl.hh>
5 #include <vtestbed/core/macros.hh>
6 #include <vtestbed/core/policy.hh>
7 #include <vtestbed/gui/MagnumImgui/MagnumImGui.h>
8 #include <vtestbed/gui/types.hh>
9 #include <vtestbed/ini/ini_settings.hh>
10 
11 #if defined(VTB_WITH_OPENCL)
12 #include <vtestbed/opencl/opencl.hh>
13 #endif
14 
15 VTB_WARNING_IGNORE_PUSH("-Wnon-virtual-dtor")
16 
17 namespace vtb {
18 
19  namespace gui {
20 
21  class ApplicationBase: public Application {
22 
23  public:
24  using Policy = vtb::core::Policy;
26  #if defined(VTB_WITH_OPENCL)
27  using opencl_context_type = vtb::opencl::Context;
28  #endif
29 
30  private:
31  settings_type _settings, _colors;
32  #if defined(VTB_WITH_OPENCL)
33  opencl_context_type _opencl_context;
34  #endif
35  Scene3D _scene;
36  Object3D* _cameraObject;
37  Camera3D* _camera;
38  Float _cameraTranslationDelta{10.f};
39  Float _cameraDistanceToObject{200.f};
40  Vector2i _previousMousePosition;
41  Policy _policy = Policy::OpenMP;
42 
43  public:
44  ApplicationBase(const Arguments& args, const Configuration& conf);
45  virtual ~ApplicationBase() {}
46 
47  inline settings_type* settings_ptr() { return &this->_settings; }
48  inline settings_type* colors_ptr() { return &this->_colors; }
49  inline const settings_type& settings() const { return this->_settings; }
50  inline settings_type& settings() { return this->_settings; }
51  inline Policy policy() const { return this->_policy; }
52  #if defined(VTB_WITH_OPENCL)
53  inline opencl_context_type* opencl_context() { return &this->_opencl_context; }
54  inline const opencl_context_type* opencl_context() const { return &this->_opencl_context; }
55  #endif
56 
57  private:
58  void initSettings();
59  void initLocale();
60  void initOpenGL(const Configuration& conf);
61  void initSharing();
62  void initOpenCL();
63  void initCamera();
64  void resetCamera();
65  void cameraTranslation(KeyEvent& event);
66  void cameraRotation(MouseMoveEvent& event);
67 
68  protected:
69 
70  void initImGui(MagnumImGui& imgui);
71  void enableDebugOutput();
72  inline Scene3D* scene() { return &this->_scene; }
73  inline const Scene3D* scene() const { return &this->_scene; }
74  inline Camera3D* camera() { return this->_camera; }
75  inline const Camera3D* camera() const { return this->_camera; }
76  inline Object3D* cameraObject() { return this->_cameraObject; }
77  inline const Object3D* cameraObject() const { return this->_cameraObject; }
78 
79  inline void
80  setCameraTranslationDelta(Float rhs) {
81  this->_cameraTranslationDelta = rhs;
82  }
83 
84  void viewportEvent(const Vector2i& size) override;
85  void keyPressEvent(KeyEvent& event) override;
86  void mouseMoveEvent(MouseMoveEvent& event) override;
87 
88  inline void
89  mousePressEvent(MouseEvent& event) override {
90  this->_previousMousePosition = event.position();
91  }
92 
93  inline void keyReleaseEvent(KeyEvent& event) override {}
94  inline void mouseReleaseEvent(MouseEvent& event) override {}
95  inline void mouseScrollEvent(MouseScrollEvent& event) override {}
96  inline void textInputEvent(TextInputEvent& event) override {}
97 
98  };
99 
100  }
101 
102 }
103 
104 VTB_WARNING_POP
105 
106 #endif // vim:filetype=cpp
Main namespace.
Definition: convert.hh:9