You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
119 lines
4.0 KiB
119 lines
4.0 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose : Singleton manager for color correction on the client |
|
// |
|
// $NoKeywords: $ |
|
//===========================================================================// |
|
|
|
#include "cbase.h" |
|
#include "tier0/vprof.h" |
|
#include "colorcorrectionmgr.h" |
|
|
|
|
|
//------------------------------------------------------------------------------ |
|
// Singleton access |
|
//------------------------------------------------------------------------------ |
|
static CColorCorrectionMgr s_ColorCorrectionMgr; |
|
CColorCorrectionMgr *g_pColorCorrectionMgr = &s_ColorCorrectionMgr; |
|
|
|
|
|
//------------------------------------------------------------------------------ |
|
// Constructor |
|
//------------------------------------------------------------------------------ |
|
CColorCorrectionMgr::CColorCorrectionMgr() |
|
{ |
|
m_nActiveWeightCount = 0; |
|
} |
|
|
|
|
|
//------------------------------------------------------------------------------ |
|
// Creates, destroys color corrections |
|
//------------------------------------------------------------------------------ |
|
ClientCCHandle_t CColorCorrectionMgr::AddColorCorrection( const char *pName, const char *pFileName ) |
|
{ |
|
if ( !pFileName ) |
|
{ |
|
pFileName = pName; |
|
} |
|
|
|
CMatRenderContextPtr pRenderContext( g_pMaterialSystem ); |
|
ColorCorrectionHandle_t ccHandle = pRenderContext->AddLookup( pName ); |
|
if ( ccHandle ) |
|
{ |
|
pRenderContext->LockLookup( ccHandle ); |
|
pRenderContext->LoadLookup( ccHandle, pFileName ); |
|
pRenderContext->UnlockLookup( ccHandle ); |
|
} |
|
else |
|
{ |
|
Warning("Cannot find color correction lookup file: '%s'\n", pFileName ); |
|
} |
|
|
|
return (ClientCCHandle_t)ccHandle; |
|
} |
|
|
|
void CColorCorrectionMgr::RemoveColorCorrection( ClientCCHandle_t h ) |
|
{ |
|
if ( h != INVALID_CLIENT_CCHANDLE ) |
|
{ |
|
CMatRenderContextPtr pRenderContext( g_pMaterialSystem ); |
|
ColorCorrectionHandle_t ccHandle = (ColorCorrectionHandle_t)h; |
|
pRenderContext->RemoveLookup( ccHandle ); |
|
} |
|
} |
|
|
|
|
|
//------------------------------------------------------------------------------ |
|
// Modify color correction weights |
|
//------------------------------------------------------------------------------ |
|
void CColorCorrectionMgr::SetColorCorrectionWeight( ClientCCHandle_t h, float flWeight ) |
|
{ |
|
if ( h != INVALID_CLIENT_CCHANDLE ) |
|
{ |
|
CMatRenderContextPtr pRenderContext( g_pMaterialSystem ); |
|
ColorCorrectionHandle_t ccHandle = (ColorCorrectionHandle_t)h; |
|
pRenderContext->SetLookupWeight( ccHandle, flWeight ); |
|
|
|
// FIXME: NOTE! This doesn't work if the same handle has |
|
// its weight set twice with no intervening calls to ResetColorCorrectionWeights |
|
// which, at the moment, is true |
|
if ( flWeight != 0.0f ) |
|
{ |
|
++m_nActiveWeightCount; |
|
} |
|
} |
|
} |
|
|
|
void CColorCorrectionMgr::ResetColorCorrectionWeights() |
|
{ |
|
VPROF_("ResetColorCorrectionWeights", 2, VPROF_BUDGETGROUP_OTHER_UNACCOUNTED, false, 0); |
|
// FIXME: Where should I put this? It needs to happen prior to SimulateEntities() |
|
// which is where the client thinks for c_colorcorrection + c_colorcorrectionvolumes |
|
// update the color correction weights. |
|
CMatRenderContextPtr pRenderContext( g_pMaterialSystem ); |
|
pRenderContext->ResetLookupWeights(); |
|
m_nActiveWeightCount = 0; |
|
} |
|
|
|
void CColorCorrectionMgr::SetResetable( ClientCCHandle_t h, bool bResetable ) |
|
{ |
|
// NOTE: Setting stuff to be not resettable doesn't work when in queued mode |
|
// because the logic that sets m_nActiveWeightCount to 0 in ResetColorCorrectionWeights |
|
// is no longer valid when stuff is not resettable. |
|
Assert( bResetable || !g_pMaterialSystem->GetThreadMode() == MATERIAL_SINGLE_THREADED ); |
|
if ( h != INVALID_CLIENT_CCHANDLE ) |
|
{ |
|
CMatRenderContextPtr pRenderContext( g_pMaterialSystem ); |
|
ColorCorrectionHandle_t ccHandle = (ColorCorrectionHandle_t)h; |
|
pRenderContext->SetResetable( ccHandle, bResetable ); |
|
} |
|
} |
|
|
|
|
|
//------------------------------------------------------------------------------ |
|
// Is color correction active? |
|
//------------------------------------------------------------------------------ |
|
bool CColorCorrectionMgr::HasNonZeroColorCorrectionWeights() const |
|
{ |
|
return ( m_nActiveWeightCount != 0 ); |
|
}
|
|
|