//========= Copyright © 1996-2005, Valve Corporation, All rights reserved. ============// // // Purpose: // // $NoKeywords: $ //=============================================================================// #ifndef IINCREMENTAL_H #define IINCREMENTAL_H #ifdef _WIN32 #pragma once #endif #include "mathlib/vector.h" #include "utlvector.h" typedef unsigned short IncrementalLightID; // Incremental lighting manager. class IIncremental { // IIncremental overrides. public: virtual ~IIncremental() {} // Sets up for incremental mode. The BSP file (in bsplib) should be loaded // already so it can detect if the incremental file is up to date. virtual bool Init( char const *pBSPFilename, char const *pIncrementalFilename ) = 0; // Prepare to light. You must call Init once, but then you can // do as many Prepare/AddLight/Finalize phases as you want. virtual bool PrepareForLighting() = 0; // Called every time light is added to a face. // NOTE: This is the ONLY threadsafe function in IIncremental. virtual void AddLightToFace( IncrementalLightID lightID, int iFace, int iSample, int lmSize, float dot, int iThread ) = 0; // Called when it's done applying light from the specified light to the specified face. virtual void FinishFace ( IncrementalLightID lightID, int iFace, int iThread ) = 0; // For each face that was changed during the lighting process, save out // new data for it in the incremental file. // Returns false if the incremental lighting isn't active. virtual bool Finalize() = 0; // Grows touched to a size of 'numfaces' and sets each byte to 0 or 1 telling // if the face's lightmap was updated in Finalize. virtual void GetFacesTouched( CUtlVector &touched ) = 0; // This saves the .r0 file and updates the lighting in the BSP file. virtual bool Serialize() = 0; }; extern IIncremental* GetIncremental(); #endif // IINCREMENTAL_H