GlSystem.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include "../OpenGL/RenderTarget.hpp"
5 #include <map>
6 
7 namespace iv
8 {
9 
10 class Game;
11 
14 class GlInfo
15 {
16 public:
17  GlInfo( Instance * inst );
18  Instance * instance() const;
19 
20  bool GlIsEnabled() const;
21  RenderTarget * render_target() const;
22 
23 private:
24  Instance * inst;
25 };
26 
29 class GlListener : public GlInfo
30 {
31 public:
32  GlListener( Instance * inst );
33  ~GlListener();
34 
35  virtual void GlEnable() = 0;
36  virtual void GlDisable() = 0;
37  virtual void GlDrop() = 0;
38 };
39 
42 class GlSystem : public System
43 {
44 public:
47  GlSystem( SystemContainer * sc, RenderTarget * rt, bool gl_enabled );
48  ~GlSystem();
49 
50  void gl_enable();
51  void gl_disable();
52  void gl_drop();
54 
57 
59  virtual std::string debug_name() const override { return "GlSystem"; }
61 
64 
69  void AddGlListener( GlListener * listener );
70  void RemoveGlListener( GlListener * listener );
71  bool GlIsEnabled() const;
72 
75  RenderTarget * render_target() const;
76 
78 
79 private:
80  void ApplyTargetGlEnabled();
81  void ListenersEnableGl( bool enable );
82 
83 private:
84  // target
85  RenderTarget * _render_target;
86 
87  // listeners
88  bool gl_listeners_iterating;
89  std::unordered_set< GlListener * > gl_listeners;
90 
91  // state
92  bool gl_enabled;
93 };
94 
95 }