diff --git a/server/TracyTexture.cpp b/server/TracyTexture.cpp index a99bd14d..af2bb87f 100644 --- a/server/TracyTexture.cpp +++ b/server/TracyTexture.cpp @@ -2,6 +2,10 @@ #include "TracyTexture.hpp" +#ifndef COMPRESSED_RGB_S3TC_DXT1_EXT +# define COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 +#endif + namespace tracy { @@ -21,11 +25,11 @@ void FreeTexture( void* _tex ) glDeleteTextures( 1, &tex ); } -void UpdateTexture( void* _tex, const char* data, int w, int h ) +void UpdateTexture( void* _tex, const char* data, int w, int h, bool etc ) { auto tex = (GLuint)(intptr_t)_tex; glBindTexture( GL_TEXTURE_2D, tex ); - glCompressedTexImage2D( GL_TEXTURE_2D, 0, GL_COMPRESSED_RGB8_ETC2, w, h, 0, w * h / 2, data ); + glCompressedTexImage2D( GL_TEXTURE_2D, 0, etc ? GL_COMPRESSED_RGB8_ETC2 : COMPRESSED_RGB_S3TC_DXT1_EXT, w, h, 0, w * h / 2, data ); } } diff --git a/server/TracyTexture.hpp b/server/TracyTexture.hpp index 87e03f04..6f2f5e1d 100644 --- a/server/TracyTexture.hpp +++ b/server/TracyTexture.hpp @@ -6,7 +6,7 @@ namespace tracy void* MakeTexture(); void FreeTexture( void* tex ); -void UpdateTexture( void* tex, const char* data, int w, int h ); +void UpdateTexture( void* tex, const char* data, int w, int h, bool etc ); } diff --git a/server/TracyVersion.hpp b/server/TracyVersion.hpp index 9c5d747d..678f348f 100644 --- a/server/TracyVersion.hpp +++ b/server/TracyVersion.hpp @@ -7,7 +7,7 @@ namespace Version { enum { Major = 0 }; enum { Minor = 4 }; -enum { Patch = 9 }; +enum { Patch = 10 }; } } diff --git a/server/TracyView.cpp b/server/TracyView.cpp index 652b3d85..65863deb 100644 --- a/server/TracyView.cpp +++ b/server/TracyView.cpp @@ -1001,7 +1001,7 @@ void View::DrawFrames() if( fi != m_frameTexturePtr ) { if( !m_frameTexture ) m_frameTexture = MakeTexture(); - UpdateTexture( m_frameTexture, m_worker.UnpackFrameImage( *fi ), fi->w, fi->h ); + UpdateTexture( m_frameTexture, m_worker.UnpackFrameImage( *fi ), fi->w, fi->h, m_worker.HasEtc1FrameImages() ); m_frameTexturePtr = fi; } ImGui::Separator(); @@ -1409,7 +1409,7 @@ bool View::DrawZoneFrames( const FrameData& frames ) if( fi != m_frameTexturePtr ) { if( !m_frameTexture ) m_frameTexture = MakeTexture(); - UpdateTexture( m_frameTexture, m_worker.UnpackFrameImage( *fi ), fi->w, fi->h ); + UpdateTexture( m_frameTexture, m_worker.UnpackFrameImage( *fi ), fi->w, fi->h, m_worker.HasEtc1FrameImages() ); m_frameTexturePtr = fi; } ImGui::Separator(); @@ -9122,7 +9122,7 @@ void View::DrawPlayback() if( m_playback.currFrame != m_playback.frame ) { m_playback.currFrame = m_playback.frame; - UpdateTexture( m_playback.texture, m_worker.UnpackFrameImage( *fi ), fi->w, fi->h ); + UpdateTexture( m_playback.texture, m_worker.UnpackFrameImage( *fi ), fi->w, fi->h, m_worker.HasEtc1FrameImages() ); if( m_playback.sync ) { diff --git a/server/TracyWorker.cpp b/server/TracyWorker.cpp index 259cb4ce..0c22023a 100644 --- a/server/TracyWorker.cpp +++ b/server/TracyWorker.cpp @@ -4534,4 +4534,9 @@ const char* Worker::UnpackFrameImage( const FrameImage& image ) return m_frameImageBuffer; } +bool Worker::HasEtc1FrameImages() const +{ + return m_traceVersion <= FileVersion( 0, 4, 9 ); +} + } diff --git a/server/TracyWorker.hpp b/server/TracyWorker.hpp index ea5894ee..600e15fd 100644 --- a/server/TracyWorker.hpp +++ b/server/TracyWorker.hpp @@ -350,6 +350,7 @@ public: const char* PackFrameImage( const char* image, uint16_t w, uint16_t h, uint32_t& csz ); const char* UnpackFrameImage( const FrameImage& image ); + bool HasEtc1FrameImages() const; private: void Exec();