1 #ifndef SNAPSHOTCAPTURE_HPP
2 #define SNAPSHOTCAPTURE_HPP
4 #include <Radiant/BGThread.hpp>
5 #include <MultiWidgets/Widget.hpp>
6 #include <Valuable/Node.hpp>
10 class SaveImageTask :
public Radiant::Task,
public Valuable::Node {
12 typedef std::function<void (bool)> Callback;
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);
18 void doTask() OVERRIDE;
21 unsigned char* m_data;
24 MultiWidgets::WidgetPtr m_listener;
27 typedef std::shared_ptr<SaveImageTask> SaveImageTaskPtr;
48 Snapshot(
const QString& filename,
const Nimble::Size size,
float scaleFactor = 1.f,
49 float downsample = 1.0f);
52 SaveImageTaskPtr saveToFile(MultiWidgets::Widget& listener);
53 SaveImageTaskPtr saveToFile(std::function<
void (
bool)> callback);
55 SnapshotState getState()
const {
return m_state; }
59 void capture(Luminous::RenderContext & r);
61 Luminous::FrameBuffer & getRenderTarget() {
return m_renderTarget; }
63 float getScaleFactor()
const {
return m_scaleFactor; }
65 Nimble::Size getSnapshotSize()
const {
return m_snapshotSize; }
69 void setFrameBufferFormat(
const Luminous::PixelFormat & format);
70 void setFrameBufferSize(
const Nimble::Size& size);
72 static const int BYTES_PER_PIXEL = 4;
74 Luminous::FrameBuffer m_renderTarget;
75 Luminous::Texture m_framebuffer;
76 Luminous::RenderBuffer m_depthStencilBuffer;
77 Luminous::Program m_program;
81 unsigned char * m_snapshotBuffer;
84 SnapshotState m_state;
85 Nimble::Size m_snapshotSize;
89 typedef std::shared_ptr<Snapshot> SnapshotPtr;
94 #endif // SNAPSHOTCAPTURE_HPP