diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /common/vgui/vgui_budgethistorypanel.cpp | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'common/vgui/vgui_budgethistorypanel.cpp')
| -rw-r--r-- | common/vgui/vgui_budgethistorypanel.cpp | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/common/vgui/vgui_budgethistorypanel.cpp b/common/vgui/vgui_budgethistorypanel.cpp new file mode 100644 index 0000000..e9b42fd --- /dev/null +++ b/common/vgui/vgui_budgethistorypanel.cpp @@ -0,0 +1,136 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +//=============================================================================// + +#include "vgui_basebudgetpanel.h" +#include "vgui_budgethistorypanel.h" +#include <vgui/ISurface.h> +#include "tier0/vprof.h" +#include "convar.h" + +// memdbgon must be the last include file in a .cpp file!!! +#include "tier0/memdbgon.h" + +ConVar budget_show_history( "budget_show_history", "1", FCVAR_ARCHIVE, "turn history graph off and on. . good to turn off on low end" ); +ConVar budget_history_numsamplesvisible( "budget_history_numsamplesvisible", "100", FCVAR_ARCHIVE, "number of samples to draw in the budget history window. The lower the better as far as rendering overhead of the budget panel" ); + +CBudgetHistoryPanel::CBudgetHistoryPanel( CBaseBudgetPanel *pParent, const char *pPanelName ) : + BaseClass( pParent, pPanelName ) +{ + m_pBudgetPanel = pParent; + + m_nSamplesPerGroup = 0; + SetProportional( false ); + SetKeyBoardInputEnabled( false ); + SetMouseInputEnabled( false ); + SetVisible( true ); + SetPaintBackgroundEnabled( false ); + SetBgColor( Color( 0, 0, 0, 255 ) ); + + // For some reason, vgui::Frame likes to set the minimum size to (128,66) and we may want to get smaller. + SetMinimumSize( 0, 0 ); +} + +CBudgetHistoryPanel::~CBudgetHistoryPanel() +{ +} + +void CBudgetHistoryPanel::Paint() +{ + if( m_nSamplesPerGroup == 0 ) + { + // SetData hasn't been called yet. + return; + } + if( !budget_show_history.GetBool() ) + { + return; + } + + int width, height; + GetSize( width, height ); + + int startID = m_nSampleOffset - width; + while( startID < 0 ) + { + startID += m_nSamplesPerGroup; + } + int endID = startID + width; + int numSamplesVisible = budget_history_numsamplesvisible.GetInt(); + int xOffset = 0; + if( endID - startID > numSamplesVisible ) + { + xOffset = ( endID - numSamplesVisible ) - startID; + startID = endID - numSamplesVisible; + } + static CUtlVector<vgui::IntRect> s_Rects; + static CUtlVector<float> s_CurrentHeight; + s_Rects.EnsureCount( ( endID - startID ) ); + s_CurrentHeight.EnsureCount( endID - startID ); + memset( &s_CurrentHeight[0], 0, sizeof( float ) * ( endID - startID ) ); + int j; + float ooRangeMaxMinusMin = 1.0f / ( m_fRangeMax - m_fRangeMin ); + for( j = 0; j < m_nGroups; j++ ) + { + int i; + for( i = startID; i < endID; i++ ) + { + int sampleOffset = i % m_nSamplesPerGroup; + int left = i - startID + xOffset; + int right = left + 1; + float &curHeight = s_CurrentHeight[i - startID]; + int bottom = ( curHeight - m_fRangeMin ) * ooRangeMaxMinusMin * height; + curHeight += m_pData[sampleOffset + m_nSamplesPerGroup * j]; + int top = ( curHeight - m_fRangeMin ) * ooRangeMaxMinusMin * height; + bottom = height - bottom - 1; + top = height - top - 1; + vgui::IntRect& rect = s_Rects[( i - startID )]; + rect.x0 = left; + rect.x1 = right; + rect.y0 = top; + rect.y1 = bottom; + } + + int red, green, blue, alpha; + m_pBudgetPanel->GetConfigData().m_BudgetGroupInfo[j].m_Color.GetColor( red, green, blue, alpha ); + + vgui::surface()->DrawSetColor( red, green, blue, alpha ); + vgui::surface()->DrawFilledRectArray( &s_Rects[0], endID - startID ); + } + + for ( int i=0; i < m_pBudgetPanel->GetConfigData().m_HistoryLabelValues.Count(); i++ ) + { + DrawBudgetLine( m_pBudgetPanel->GetConfigData().m_HistoryLabelValues[i] ); + } +} + +// Only call this from Paint!!!!! +void CBudgetHistoryPanel::DrawBudgetLine( float val ) +{ + int width, height; + GetSize( width, height ); + double y = ( val - m_fRangeMin ) * ( 1.0f / ( m_fRangeMax - m_fRangeMin ) ) * height; + int bottom = ( int )( height - y - 1 + .5 ); + int top = ( int )( height - y - 1 - .5 ); + vgui::surface()->DrawSetColor( 0, 0, 0, 255 ); + vgui::surface()->DrawFilledRect( 0, top-1, width, bottom+1 ); + vgui::surface()->DrawSetColor( 255, 255, 255, 255 ); + vgui::surface()->DrawFilledRect( 0, top, width, bottom ); +} + + +void CBudgetHistoryPanel::SetData( double *pData, int nGroups, int nSamplesPerGroup, int nSampleOffset ) +{ + m_pData = pData; + m_nGroups = nGroups; + m_nSamplesPerGroup = nSamplesPerGroup; + m_nSampleOffset = nSampleOffset; +} + +void CBudgetHistoryPanel::SetRange( float fMin, float fMax ) +{ + m_fRangeMin = fMin; + m_fRangeMax = fMax; +} |