This repository has been archived on 2024-06-13. You can view files and clone it, but cannot push or open issues or pull requests.
2020-08-04 13:13:01 -04:00

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