/*
    QGLView
    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 GLTEXTUREMANAGER_H
#define GLTEXTUREMANAGER_H

#include <QOpenGLExtraFunctions>
#include <QDir>
#include <QMap>
#include <QFileInfo>
#include <QImage>


class TextureManager {
public:
	TextureManager(QOpenGLExtraFunctions * f_): f(f_) {}
	virtual ~TextureManager() {}

	static void addSearchPath(const QString & path) {if (!search_pathes.contains(path)) search_pathes << path;}
	static void clearSearchPathes() {search_pathes.clear();}
	static QStringList searchPathes() {return search_pathes;}
	static QString findFile(const QString & path);
	GLuint loadTexture(const QString & path, bool ownership = true, bool bump = false);
	GLuint loadTexture(const QImage & image, bool ownership = true, bool bump = false);
	QImage loadTextureImage(const QString & path, bool bump = false);
	void reloadTexture(GLuint tid, const QString & path);
	void reloadTexture(GLuint tid, const QImage & image);
	int    textureID   (const QString & path, bool bump = false) {return tex_ids[bump ? 1 : 0][path];}
	QImage textureImage(const QString & path, bool bump = false) {return tex_im [bump ? 1 : 0][path];}
	void addTexture(const QString & path) {tex_pathes << path;}
	bool loadTextures();
	void deleteTextures();
	void deleteTexture(const QString & name);
	void clearImageCache();

protected:
	static void convertToNormal(QImage & im);

	static QStringList search_pathes;

	QMap<QString, GLuint> tex_ids[2];
	QMap<QString, QImage> tex_im [2];
	QStringList tex_pathes;

	QOpenGLExtraFunctions * f;

};


#endif // GLTEXTUREMANAGER_H
