#include "render_window.h"

Eigen::Matrix4f mirage_window::create_screen_to_dci_matrix(float in_screen_width, float in_screen_height) {
	// 创建一个单位矩阵
	Eigen::Matrix4f matrix = Eigen::Matrix4f::Identity();

	// 缩放因子
	const float scale_x = 2.0f / in_screen_width;
	const float scale_y = -2.0f / in_screen_height;  // Y轴翻转，因为窗口坐标系Y轴向下

	// 平移因子
	constexpr float translate_x = -1.0f;
	constexpr float translate_y = 1.0f;

	// 设置缩放
	matrix(0, 0) = scale_x;
	matrix(1, 1) = scale_y;

	// 设置平移
	matrix(0, 3) = translate_x;
	matrix(1, 3) = translate_y;

	return matrix;
}

Eigen::Matrix4f mirage_window::create_screen_to_dci_matrix() const {
	const auto size = get_window_frame_size();
	return create_screen_to_dci_matrix(size.x(), size.y());
}
