/*
    QGL RendererSelection
    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 RENDERER_SELECTION_H
#define RENDERER_SELECTION_H

#include "renderer_service.h"

#include <QHash>


class QGLENGINE_CORE_EXPORT RendererSelection {
	friend class QGLView;
	friend class MouseController;
	friend class Renderer;
	friend class RendererService;

public:
	RendererSelection(Renderer * r_);
	virtual ~RendererSelection();

	void init(int width, int height);
	void resize(int width, int height);

protected:
	enum SelectionBufferRole {
		sbrSrcHover,
		sbrSrcSelect,
		sbrHovered,
		sbrSelected,
		sbrHoveredFXAA,
		sbrSelectedFXAA,
	};

	void generateObjectsID(Scene & scene);
	void renderSelection(Scene & scene);
	void renderSelectionFrame();
	void drawSelection(Framebuffer & fbo_out, int index_out = 0);

private:
	Renderer * r;
	Framebuffer fbo_selection;
	Mesh * sel_frame;
	float line_thick_, scale_;
	QVector<uchar> cur_selections_;
	QHash<uint, ObjectBase *> ids;
	QHash<uint, ObjectBase *> aim_ids;
	uint id_hover;
};

#endif // RENDERER_selection_H
