Overte C++ Documentation
interface/src/graphics/RenderEventHandler.h
1 //
2 // RenderEventHandler.h
3 //
4 // Created by Bradley Austin Davis on 29/6/2018.
5 // Copyright 2018 High Fidelity, Inc.
6 //
7 // Distributed under the Apache License, Version 2.0.
8 // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
9 //
10 #ifndef hifi_RenderEventHandler_h
11 #define hifi_RenderEventHandler_h
12 
13 #include <functional>
14 #include <QEvent>
15 #include <QElapsedTimer>
16 #include "gl/OffscreenGLCanvas.h"
17 
18 enum ApplicationEvent {
19  // Execute a lambda function
20  Lambda = QEvent::User + 1,
21  // Trigger the next render
22  Render,
23  // Trigger the next idle
24  Idle,
25 };
26 
27 class RenderEventHandler : public QObject {
28  using Parent = QObject;
29  Q_OBJECT
30 public:
31 
32  using CheckCall = std::function <bool()>;
33  using RenderCall = std::function <void()>;
34 
35  CheckCall _checkCall;
36  RenderCall _renderCall;
37 
38  RenderEventHandler(CheckCall checkCall, RenderCall renderCall);
39 
40  QElapsedTimer _lastTimeRendered;
41  std::atomic<bool> _pendingRenderEvent{ true };
42 
43  void resumeThread();
44 
45 private:
46  void initialize();
47 
48  void render();
49 
50  bool event(QEvent* event) override;
51 };
52 
53 #endif // #include hifi_RenderEventHandler_h