/*
    QGL TonemappingProc
    Ivan Pelipenko peri4ko@yandex.ru

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

#ifndef TONEMAPPING_PROC_H
#define TONEMAPPING_PROC_H

#include "glframebuffer_mipmap.h"

#include <QThread>


class QGLENGINE_CORE_EXPORT TonemappingProc: public QThread {
	friend class Renderer;
	friend class QGLView;

public:
	TonemappingProc(Renderer * rend);
	virtual ~TonemappingProc();

	void init();
	void resize();
	void prepareSum();
	void renderSum(Framebuffer & fbo_src, int index);

	bool process();
	float frameMax();

protected:
	void timerEvent(QTimerEvent * e) override;
	void run() override;
	float calcHistogram(const QVector<QVector4D> & data);

private:
	Renderer * r;
	QMutex mutex;
	QVector<QVector4D> last_data;
	QVector<float> last_max;
	float frame_max, cur_max;
	bool need_render_sum, enabled;
	std::atomic_bool exit_;
	int timer_tone, timer_delim;
	Framebuffer fbo_1x1;
	FramebufferMipmap fbomm;
	QOpenGLShaderProgram * shader_sum;
	Buffer buffer_vbo;
	GLenum vbo_vao;
};

#endif // RENDERER_H
