feat: initial DX12 foundation framework

This commit is contained in:
SpecialX
2026-03-19 18:27:49 +08:00
commit 60f73b525d
70 changed files with 8993 additions and 0 deletions

View File

@@ -0,0 +1,83 @@
/**
* @file Transform.h
* @brief 变换组件数据结构与更新接口。
*/
#pragma once
#include "ComponentsCommon.h"
namespace XEngine::transform {
/**
* @brief 变换组件初始化参数。
*/
struct init_info
{
f32 position[3]{};
f32 rotation[4]{};
f32 scale[3]{1.f, 1.f, 1.f};
};
/**
* @brief 变换组件缓存更新标记位。
*/
struct component_flags
{
enum flags :u32 {
rotation = 0x01,
orientation = 0x02,
position = 0x04,
scale = 0x08,
all = rotation | orientation | position| scale
};
};
/**
* @brief 变换组件批量更新缓存项。
*/
struct component_cache
{
math::v4 rotation;
math::v3 orientation;
math::v3 position;
math::v3 scale;
transform_id id;
u32 flags;
};
/**
* @brief 获取实体的世界矩阵与逆世界矩阵。
* @param id 实体标识符。
* @param world 输出世界矩阵。
* @param inverse_world 输出逆世界矩阵。
*/
void get_transform_matrices(const game_entity::entity_id id, math::m4x4& world, math::m4x4& inverse_world);
/**
* @brief 为实体创建变换组件。
* @param info 变换初始化参数。
* @param entity 目标实体。
* @return 创建后的变换组件句柄。
*/
component create( init_info info, game_entity::entity entity);
/**
* @brief 移除变换组件。
* @param c 变换组件句柄。
*/
void remove(component c);
/**
* @brief 查询指定实体集合的变换更新标记。
* @param ids 实体标识符数组。
* @param count 实体数量。
* @param flags 输出标记数组。
*/
void get_update_component_flags(const game_entity::entity_id *const ids, u32 count, u8 *const flags);
/**
* @brief 批量提交变换缓存更新。
* @param cache 缓存数组首地址。
* @param count 缓存项数量。
*/
void update(const component_cache *const cache, u32 count);
}