source-engine/utils/vrad/iincremental.h

72 lines
1.9 KiB
C
Raw Normal View History

2020-04-22 16:56:21 +00:00
//========= 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