From 4348cc9581bfea05359485c5d2d074132d0271da Mon Sep 17 00:00:00 2001 From: Julian T Date: Thu, 6 Aug 2020 19:21:49 +0200 Subject: Renders scenes with a single hardcoded light and green objects --- app/rendercoord.hpp | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 app/rendercoord.hpp (limited to 'app/rendercoord.hpp') 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 + +#include +#include +#include +#include +#include +// 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 -- cgit v1.2.3