跟着cherno手搓游戏引擎【26】Profile和Profile网页可视化
封装Profile:
Sandbox2D.h:ProfileResult结构体和ProfileResult容器,存储相应的信息
(图片来源网络,侵删)
#pragma once #include "YOTO.h" class Sandbox2D :public YOTO::Layer {public: Sandbox2D(); virtual ~Sandbox2D() = default; virtual void OnAttach()override; virtual void OnDetach()override; void OnUpdate(YOTO::Timestep ts)override; virtual void OnImGuiRender() override; void OnEvent(YOTO::Event& e)override; private: YOTO::OrthographicCameraController m_CameraController; YOTO::Ref m_FlatColorShader; YOTO::Ref m_SquareVA; YOTO::Refm_CheckerboardTexture; struct ProfileResult { const char* Name; float Time; }; std::vectorm_ProfileResults; glm::vec4 m_SquareColor = { 0.2f,0.3f,0.7f,1.0f }; };
Sandbox2D.cpp:实现timer并定义PROFILE_SCOPE使用(YT_PROFILE_SCOPE为网页可视化的内容,先放到这了)
#include "Sandbox2D.h" #include #include //#include #include #include #include template class Timer { public: Timer(const char* name, Fn&&func) :m_Name(name),m_Func(func),m_Stopped(false) { m_StartTimepoint = std::chrono::high_resolution_clock::now(); } ~Timer() { if (!m_Stopped) { Stop(); } } void Stop() { auto endTimepoint= std::chrono::high_resolution_clock::now(); long long start = std::chrono::time_point_cast(m_StartTimepoint).time_since_epoch().count(); long long end = std::chrono::time_point_cast(endTimepoint).time_since_epoch().count(); m_Stopped = true; float duration = (end - start)*0.001f; m_Func({m_Name,duration}); //std::cout
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。
还没有评论,来说两句吧...