61 lines
2.0 KiB
C++
61 lines
2.0 KiB
C++
//========= Copyright 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<unsigned char> &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
|