#pragma once

#include <GL/glew.h>
#include <string>
#include <glm/glm.hpp>

///////////////////////////////////////////////////////////////
//画像
///////////////////////////////////////////////////////////////
class Image {
public:
	
	Image();
	Image(const std::string &filename);
	virtual ~Image();
	
	void LoadFromFile(const std::string &filename);
	
	void Draw(
		const glm::vec2 &pos,
		const glm::vec2 &size,
		bool flipY = false,
		const glm::vec2 &texStart = glm::vec2(0.0f, 0.0f),
		const glm::vec2 &texSize = glm::vec2(1.0f, 1.0f)
	);
	
	int GetWidth() const {
		return Width;
	}
	int GetHeight() const {
		return Height;
	}
	
	GLuint GetTextureID() const {
		return TexID;
	}
	
protected:
	GLuint TexID;
	int Width, Height;
};




///////////////////////////////////////////////////////////////
//分割画像
//1枚のテクスチャ内に複数の画像が入っているようなテクスチャを扱う
///////////////////////////////////////////////////////////////
class ImageSplitted : public Image {
public:
	
	ImageSplitted();
	ImageSplitted(
		const std::string &filename,
		int splitX, int splitY
	);
	virtual ~ImageSplitted();
	
	void DrawSplitted(
		const glm::vec2 &pos,
		const glm::vec2 &size,
		int index,
		bool flipY = false
	);
	
	int GetSplitX() const {
		return SplitX;
	}
	int GetSplitY() const {
		return SplitY;
	}
	
	int GetSplittedWidth() const {
		return Width / SplitX;
	}
	int GetSplittedHeight() const {
		return Height / SplitY;
	}
	
protected:
	int SplitX, SplitY;
	
};

