diff --git a/server/TracyView.cpp b/server/TracyView.cpp index 2f100b11..b15f1de0 100644 --- a/server/TracyView.cpp +++ b/server/TracyView.cpp @@ -419,6 +419,8 @@ View::View( const char* addr, ImFont* fixedWidth, SetTitleCallback stcb ) assert( s_instance == nullptr ); s_instance = this; + m_frameTexture = MakeTexture(); + InitTextEditor(); } @@ -436,6 +438,8 @@ View::View( FileRead& f, ImFont* fixedWidth, SetTitleCallback stcb ) m_notificationTime = 4; m_notificationText = std::string( "Trace loaded in " ) + TimeToString( m_worker.GetLoadTime() ); + m_frameTexture = MakeTexture(); + InitTextEditor(); SetViewToLastFrames(); } @@ -447,6 +451,8 @@ View::~View() if( m_compare.loadThread.joinable() ) m_compare.loadThread.join(); if( m_saveThread.joinable() ) m_saveThread.join(); + FreeTexture( m_frameTexture ); + assert( s_instance != nullptr ); s_instance = nullptr; } @@ -1640,6 +1646,15 @@ bool View::DrawZoneFrames( const FrameData& frames ) ImGui::TextUnformatted( GetFrameText( frames, i, ftime, m_worker.GetFrameOffset() ) ); ImGui::Separator(); TextFocused( "Time from start of program:", TimeToString( m_worker.GetFrameBegin( frames, i ) - m_worker.GetTimeBegin() ) ); + auto fi = m_worker.GetFrameImage( frames, i ); + if( fi ) + { + if( fi != m_frameTexturePtr ) + { + UpdateTexture( m_frameTexture, fi->ptr, fi->w, fi->h ); + } + ImGui::Image( m_frameTexture, ImVec2( fi->w, fi->h ) ); + } ImGui::EndTooltip(); if( ImGui::IsMouseClicked( 2 ) ) diff --git a/server/TracyView.hpp b/server/TracyView.hpp index 57e371c7..06b93d61 100644 --- a/server/TracyView.hpp +++ b/server/TracyView.hpp @@ -11,6 +11,7 @@ #include "TracyBuzzAnim.hpp" #include "TracyDecayValue.hpp" +#include "TracyTexture.hpp" #include "TracyVector.hpp" #include "TracyWorker.hpp" #include "tracy_flat_hash_map.hpp" @@ -326,6 +327,9 @@ private: std::atomic m_saveThreadState { SaveThreadState::Inert }; std::thread m_saveThread; + void* m_frameTexture; + void* m_frameTexturePtr = nullptr; + struct FindZone { enum : uint64_t { Unselected = std::numeric_limits::max() - 1 }; enum class GroupBy : int { Thread, UserText, Callstack };