Counter Strike : Global Offensive Source Code
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.
|
|
//============ Copyright (c) Valve Corporation, All rights reserved. ============
//
// Classes to aid in transferring lightmap data (luxels) between BSPs.
//
//===============================================================================
#ifndef LIGHTMAPTRANSFER_H
#define LIGHTMAPTRANSFER_H
#if defined( COMPILER_MSVC )
#pragma once
#endif
#include "utlvector.h"
#include "mathlib/vector.h"
#include "mathlib/intvector3d.h"
#include "bspfile.h"
class CMemoryBSPFile;
//-----------------------------------------------------------------------------
// A class which acts as a spatial hash for lightmap values.
// Multiple source files can be processed into the hash such that every single
// lightmap sample has its own entry in the hash.
// This data can then be copied into the lightmap lump of a given BSP file.
//-----------------------------------------------------------------------------
class CLuxelHash { public: CLuxelHash( int nHashBucketCount );
//-----------------------------------------------------------------------------
// Adds all of the luxels in the source BSP file to a spatial hash.
// vOffset is the world-space translation to add to all coordinates in the
// source BSP file.
//-----------------------------------------------------------------------------
void AddSourceBSPFile( const CMemoryBSPFile *pSourceBSPFile, const Vector &vOffset );
//-----------------------------------------------------------------------------
// Copies lighting from the luxel hash into the target BSP file.
// Values which are not found are initialized to black.
//-----------------------------------------------------------------------------
void CopyLighting( CMemoryBSPFile *pTargetBSPFile ) const;
private: // nDataLength is the number of ColorRGBExp32 (4 bytes each) per luxel.
// This is typically 1 for lightmaps without bump light information, or 4 for those with.
void AddLuxel( const Vector &vPosition, const Vector &vNormal, const ColorRGBExp32 *pLuxelData, int nDataLength ); bool FindLuxel( const Vector &vPosition, const Vector &vNormal, const ColorRGBExp32 **ppLuxelData, int *pDataLength ) const;
void CopyFaceLighting( CMemoryBSPFile *pTargetBSPFile, int nFace ) const; void CopyWorldLights( CMemoryBSPFile *pTargetBSPFile ) const; // Hashes the position and returns a hash bucket index in the range [ 0, m_HashEntries.Count() )
int GetGridEntry( const IntVector3D &vIntegerPosition ) const;
struct LuxelHashEntry_t { Vector m_vPosition; Vector m_vNormal; int m_nDataStart; int m_nDataLength; int m_nNextEntryIndex; };
CUtlVector< ColorRGBExp32 > m_LuxelData; // Contiguous luxel data
CUtlVector< LuxelHashEntry_t > m_HashEntries; // Pool of hash entry linked list nodes, one per luxel
CUtlVector< dworldlight_t > m_WorldLightsLDR; CUtlVector< dworldlight_t > m_WorldLightsHDR;
CUtlVector< int > m_UniformGrid; // 3D grid of indices into a linked list of LuxelHashEntry_t (-1 means no entry)
};
#endif // LIGHTMAPTRANSFER_H
|