feat: Tracy profiler 接入(CPU 帧时间线)
- vendored tracy 子模块;TRACY_ENABLE 全局生效,宏关闭时零开销 - 插桩:Application::Run FrameMark(帧边界)、Renderer::Render、 SceneRenderer::BuildFrame(ZoneScopedN)+ GPUDriven Collect (ZoneNamedN——同作用域第二个 zone 不能用 ZoneScopedN,变量名 固定会重声明)、Scene::UpdateTransforms - 覆盖 CPU 侧关键路径:帧时间线 / 场景收集 / transform 重算 / 录制提交 - 用法:游戏运行时打开 Tracy GUI(release 下载)即自动连接(8086 端口)
This commit is contained in:
@@ -41,42 +41,39 @@ namespace Engine::ECS {
|
||||
// 层级(父子变换)留给后续的层级同步系统。
|
||||
struct TransformComponent {
|
||||
// ---- 读取 ----
|
||||
const glm::vec3& GetPosition() const { return m_position; }
|
||||
const glm::vec3& GetRotation() const { return m_rotation; } // 欧拉角(度)
|
||||
const glm::vec3& GetScale() const { return m_scale; }
|
||||
const glm::mat4& World() const { return m_world; } // 要求已由 UpdateTransforms 计算
|
||||
const glm::vec3& GetPosition() const { return m_Position; }
|
||||
const glm::vec3& GetRotation() const { return m_Rotation; } // 欧拉角(度)
|
||||
const glm::vec3& GetScale() const { return m_Scale; }
|
||||
const glm::mat4& World() const { return m_World; } // 要求已由 UpdateTransforms 计算
|
||||
|
||||
// ---- 写入(标脏,脏实体由 UpdateTransforms 重算)----
|
||||
TransformComponent& SetPosition(const glm::vec3& p) { if (m_position != p) { m_position = p; m_dirty = true; } return *this; }
|
||||
TransformComponent& SetRotation(const glm::vec3& r) { if (m_rotation != r) { m_rotation = r; m_dirty = true; } return *this; }
|
||||
TransformComponent& SetScale(const glm::vec3& s) { if (m_scale != s) { m_scale = s; m_dirty = true; } return *this; }
|
||||
TransformComponent& SetPosition(const glm::vec3& p) { if (m_Position != p) { m_Position = p; m_Dirty = true; } return *this; }
|
||||
TransformComponent& SetRotation(const glm::vec3& r) { if (m_Rotation != r) { m_Rotation = r; m_Dirty = true; } return *this; }
|
||||
TransformComponent& SetScale(const glm::vec3& s) { if (m_Scale != s) { m_Scale = s; m_Dirty = true; } return *this; }
|
||||
|
||||
// 便捷:原地修改单个欧拉角分量(度)
|
||||
TransformComponent& AddRotationY(f32 degY) { m_rotation.y += degY; m_dirty = true; return *this; }
|
||||
|
||||
bool IsDirty() const { return m_dirty; }
|
||||
bool IsDirty() const { return m_Dirty; }
|
||||
|
||||
// SRT 分量 → world 矩阵(T * R * S),清除脏标记。
|
||||
// 由 Scene::UpdateTransforms 调用(或层级系统),勿手动
|
||||
TransformComponent& Compose()
|
||||
{
|
||||
const glm::mat4 t = glm::translate(glm::mat4(1.0f), m_position);
|
||||
const glm::mat4 t = glm::translate(glm::mat4(1.0f), m_Position);
|
||||
const glm::mat4 r =
|
||||
glm::rotate(glm::mat4(1.0f), glm::radians(m_rotation.y), glm::vec3(0, 1, 0)) *
|
||||
glm::rotate(glm::mat4(1.0f), glm::radians(m_rotation.x), glm::vec3(1, 0, 0)) *
|
||||
glm::rotate(glm::mat4(1.0f), glm::radians(m_rotation.z), glm::vec3(0, 0, 1));
|
||||
const glm::mat4 s = glm::scale(glm::mat4(1.0f), m_scale);
|
||||
m_world = t * r * s;
|
||||
m_dirty = false;
|
||||
glm::rotate(glm::mat4(1.0f), glm::radians(m_Rotation.y), glm::vec3(0, 1, 0)) *
|
||||
glm::rotate(glm::mat4(1.0f), glm::radians(m_Rotation.x), glm::vec3(1, 0, 0)) *
|
||||
glm::rotate(glm::mat4(1.0f), glm::radians(m_Rotation.z), glm::vec3(0, 0, 1));
|
||||
const glm::mat4 s = glm::scale(glm::mat4(1.0f), m_Scale);
|
||||
m_World = t * r * s;
|
||||
m_Dirty = false;
|
||||
return *this;
|
||||
}
|
||||
|
||||
private:
|
||||
glm::vec3 m_position{0.0f};
|
||||
glm::vec3 m_rotation{0.0f};
|
||||
glm::vec3 m_scale{1.0f};
|
||||
glm::mat4 m_world{1.0f};
|
||||
bool m_dirty = true; // 出生即脏:首次 UpdateTransforms 计算 world
|
||||
glm::vec3 m_Position{0.0f};
|
||||
glm::vec3 m_Rotation{0.0f};
|
||||
glm::vec3 m_Scale{1.0f};
|
||||
glm::mat4 m_World{1.0f};
|
||||
bool m_Dirty = true; // 出生即脏:首次 UpdateTransforms 计算 world
|
||||
};
|
||||
|
||||
// 网格渲染体:引用共享的 Model 资产。
|
||||
|
||||
Reference in New Issue
Block a user