#pragma once
/**
 * @file texture_atlas_types.h
 * @brief 纹理图集相关的基础类型定义
 */
#include "geometry/rect.h"

class rw_texture2d;
// 前向声明
class atlas_allocator;

/**
 * @enum allocation_strategy_t
 * @brief 纹理图集分配算法策略枚举
 */
enum class allocation_strategy_t {
	bin_packing,     ///< 二叉树分割算法
	grid,            ///< 网格分配算法
	skyline          ///< 天际线算法
};

/**
 * @struct atlas_region_t
 * @brief 表示纹理图集中的一个已分配区域
 */
struct atlas_region_t {
	int                         id;      ///< 区域唯一标识符
	rect_t<int32_t>             rect;    ///< 像素坐标中的矩形
	std::weak_ptr<rw_texture2d> texture; ///< 关联的纹理
	rect_uv                     uv_rect; ///< UV坐标中的矩形 (0-1范围)

	// 构造函数
	atlas_region_t() = default;

	atlas_region_t(const int in_region_id, const rect_t<int32_t>& in_r, const std::shared_ptr<rw_texture2d>& in_texture,
	               const rect_uv& in_uv) :
		id(in_region_id),
		rect(in_r),
		texture(in_texture),
		uv_rect(in_uv) {}
};
