MT Showcase SDK
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Pages
SnapshotCapture.hpp
1 #ifndef SNAPSHOTCAPTURE_HPP
2 #define SNAPSHOTCAPTURE_HPP
3 
4 #include <Radiant/BGThread.hpp>
5 #include <MultiWidgets/Widget.hpp>
6 #include <Valuable/Node.hpp>
7 
8 namespace Showcase {
9 
10  class SaveImageTask : public Radiant::Task, public Valuable::Node {
11  public:
12  typedef std::function<void (bool)> Callback;
13 
14  SaveImageTask(const QString& filename, Nimble::Size size, unsigned char* data, MultiWidgets::Widget& listener);
15  SaveImageTask(const QString& filename, Nimble::Size size, unsigned char* data, float downsample, Callback calback);
16  ~SaveImageTask();
17 
18  void doTask() OVERRIDE;
19  private:
20  QString m_filename;
21  unsigned char* m_data;
22  float m_downsample;
23  Nimble::Size m_size;
24  MultiWidgets::WidgetPtr m_listener;
25  Callback m_callback;
26  };
27  typedef std::shared_ptr<SaveImageTask> SaveImageTaskPtr;
28 
38  class Snapshot {
39  public:
40 
41  enum SnapshotState {
42  CAPTURE_PENDING,
43  CAPTURE_INITIALIZED,
44  CAPTURE_TAKEN,
45  CAPTURE_FINISHED
46  };
47 
48  Snapshot(const QString& filename, const Nimble::Size size, float scaleFactor = 1.f,
49  float downsample = 1.0f);
50  ~Snapshot();
51 
52  SaveImageTaskPtr saveToFile(MultiWidgets::Widget& listener);
53  SaveImageTaskPtr saveToFile(std::function<void (bool)> callback);
54 
55  SnapshotState getState() const { return m_state; }
56 
57  void initialize();
58 
59  void capture(Luminous::RenderContext & r);
60 
61  Luminous::FrameBuffer & getRenderTarget() { return m_renderTarget; }
62 
63  float getScaleFactor() const { return m_scaleFactor; }
64 
65  Nimble::Size getSnapshotSize() const { return m_snapshotSize; }
66 
67  private:
68  //these could be public methods but m_state would have to be checked and possibly reinitialized:
69  void setFrameBufferFormat(const Luminous::PixelFormat & format);
70  void setFrameBufferSize(const Nimble::Size& size);
71 
72  static const int BYTES_PER_PIXEL = 4;
73 
74  Luminous::FrameBuffer m_renderTarget;
75  Luminous::Texture m_framebuffer;
76  Luminous::RenderBuffer m_depthStencilBuffer;
77  Luminous::Program m_program;
78 
79  QString m_pathToSave;
80 
81  unsigned char * m_snapshotBuffer;
82  bool m_deleteBuffer;
83 
84  SnapshotState m_state;
85  Nimble::Size m_snapshotSize;
86  float m_scaleFactor;
87  float m_downsample;
88  };
89  typedef std::shared_ptr<Snapshot> SnapshotPtr;
90 
91 
92 }
93 
94 #endif // SNAPSHOTCAPTURE_HPP