diff options
Diffstat (limited to 'app/rendercoord.hpp')
-rw-r--r-- | app/rendercoord.hpp | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/app/rendercoord.hpp b/app/rendercoord.hpp new file mode 100644 index 0000000..6aa8698 --- /dev/null +++ b/app/rendercoord.hpp @@ -0,0 +1,61 @@ +#ifndef RENDER_THREAD_H +#define RENDER_THREAD_H + +#include "draw.hpp" +#include <render.hpp> + +#include <qobject.h> +#include <qrgb.h> +#include <qthread.h> +#include <qsemaphore.h> +#include <vector> +// https://doc.qt.io/archives/qt-4.8/qt-threads-mandelbrot-example.html + +class RenderThread : public QThread { + Q_OBJECT + + public: + RenderThread(Renderer r, QObject *parent = nullptr, unsigned id = 0); + + // Returns 0 if successful or 1 if busy + int render(QRgb *buffer, unsigned samples); + + signals: + void done(unsigned workerid); + + protected: + void run(); + + QSemaphore m_lock; + + QRgb *m_writebuffer; + unsigned m_samples; + + Renderer m_render; + + // Value in here means work is to be done + QSemaphore m_work; + unsigned m_id; +}; + +class RenderCoordinator : public QObject { + Q_OBJECT + + public: + RenderCoordinator(QObject *parent, DrawWidget &target, Renderer r); + void setSamples(unsigned samples); + void render(); + + public slots: + void workerDone(unsigned workerid); + + private: + DrawWidget &m_target; + + Renderer m_renderer; + RenderThread m_worker; + + unsigned m_samples; +}; + +#endif |