diff options
| author | Jørgen P. Tjernø <[email protected]> | 2013-12-02 19:31:46 -0800 |
|---|---|---|
| committer | Jørgen P. Tjernø <[email protected]> | 2013-12-02 19:46:31 -0800 |
| commit | f56bb35301836e56582a575a75864392a0177875 (patch) | |
| tree | de61ddd39de3e7df52759711950b4c288592f0dc /sp/src/utils/vrad/samplehash.cpp | |
| parent | Mark some more files as text. (diff) | |
| download | source-sdk-2013-f56bb35301836e56582a575a75864392a0177875.tar.xz source-sdk-2013-f56bb35301836e56582a575a75864392a0177875.zip | |
Fix line endings. WHAMMY.
Diffstat (limited to 'sp/src/utils/vrad/samplehash.cpp')
| -rw-r--r-- | sp/src/utils/vrad/samplehash.cpp | 460 |
1 files changed, 230 insertions, 230 deletions
diff --git a/sp/src/utils/vrad/samplehash.cpp b/sp/src/utils/vrad/samplehash.cpp index fb35d351..09bc94ec 100644 --- a/sp/src/utils/vrad/samplehash.cpp +++ b/sp/src/utils/vrad/samplehash.cpp @@ -1,230 +1,230 @@ -//========= Copyright Valve Corporation, All rights reserved. ============//
-//
-// Purpose:
-//
-// $NoKeywords: $
-//
-//=============================================================================//
-
-#include "vrad.h"
-#include "lightmap.h"
-
-#define SAMPLEHASH_NUM_BUCKETS 65536
-#define SAMPLEHASH_GROW_SIZE 0
-#define SAMPLEHASH_INIT_SIZE 0
-
-int samplesAdded = 0;
-int patchSamplesAdded = 0;
-static unsigned short g_PatchIterationKey = 0;
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-bool SampleData_CompareFunc( SampleData_t const &src1, SampleData_t const &src2 )
-{
- return ( ( src1.x == src2.x ) &&
- ( src1.y == src2.y ) &&
- ( src1.z == src2.z ) );
-}
-
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-unsigned int SampleData_KeyFunc( SampleData_t const &src )
-{
- return ( src.x + src.y + src.z );
-}
-
-
-CUtlHash<SampleData_t> g_SampleHashTable( SAMPLEHASH_NUM_BUCKETS,
- SAMPLEHASH_GROW_SIZE,
- SAMPLEHASH_INIT_SIZE,
- SampleData_CompareFunc, SampleData_KeyFunc );
-
-
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-UtlHashHandle_t SampleData_Find( sample_t *pSample )
-{
- SampleData_t sampleData;
- sampleData.x = ( int )( pSample->pos.x / SAMPLEHASH_VOXEL_SIZE ) * 100;
- sampleData.y = ( int )( pSample->pos.y / SAMPLEHASH_VOXEL_SIZE ) * 10;
- sampleData.z = ( int )( pSample->pos.z / SAMPLEHASH_VOXEL_SIZE );
-
- return g_SampleHashTable.Find( sampleData );
-}
-
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-UtlHashHandle_t SampleData_InsertIntoHashTable( sample_t *pSample, SampleHandle_t sampleHandle )
-{
- SampleData_t sampleData;
- sampleData.x = ( int )( pSample->pos.x / SAMPLEHASH_VOXEL_SIZE ) * 100;
- sampleData.y = ( int )( pSample->pos.y / SAMPLEHASH_VOXEL_SIZE ) * 10;
- sampleData.z = ( int )( pSample->pos.z / SAMPLEHASH_VOXEL_SIZE );
-
- UtlHashHandle_t handle = g_SampleHashTable.AllocEntryFromKey( sampleData );
-
- SampleData_t *pSampleData = &g_SampleHashTable.Element( handle );
- pSampleData->x = sampleData.x;
- pSampleData->y = sampleData.y;
- pSampleData->z = sampleData.z;
- pSampleData->m_Samples.AddToTail( sampleHandle );
-
- samplesAdded++;
-
- return handle;
-}
-
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-UtlHashHandle_t SampleData_AddSample( sample_t *pSample, SampleHandle_t sampleHandle )
-{
-
- // find the key -- if it doesn't exist add new sample data to the
- // hash table
- UtlHashHandle_t handle = SampleData_Find( pSample );
- if( handle == g_SampleHashTable.InvalidHandle() )
- {
- handle = SampleData_InsertIntoHashTable( pSample, sampleHandle );
- }
- else
- {
- SampleData_t *pSampleData = &g_SampleHashTable.Element( handle );
- pSampleData->m_Samples.AddToTail( sampleHandle );
-
- samplesAdded++;
- }
-
- return handle;
-}
-
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-void SampleData_Log( void )
-{
- if( g_bLogHashData )
- {
- g_SampleHashTable.Log( "samplehash.txt" );
- }
-}
-
-
-//=============================================================================
-//=============================================================================
-//
-// PatchSample Functions
-//
-//=============================================================================
-//=============================================================================
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-bool PatchSampleData_CompareFunc( PatchSampleData_t const &src1, PatchSampleData_t const &src2 )
-{
- return ( ( src1.x == src2.x ) &&
- ( src1.y == src2.y ) &&
- ( src1.z == src2.z ) );
-}
-
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-unsigned int PatchSampleData_KeyFunc( PatchSampleData_t const &src )
-{
- return ( src.x + src.y + src.z );
-}
-
-
-CUtlHash<PatchSampleData_t> g_PatchSampleHashTable( SAMPLEHASH_NUM_BUCKETS,
- SAMPLEHASH_GROW_SIZE,
- SAMPLEHASH_INIT_SIZE,
- PatchSampleData_CompareFunc, PatchSampleData_KeyFunc );
-
-void GetPatchSampleHashXYZ( const Vector &vOrigin, int &x, int &y, int &z )
-{
- x = ( int )( vOrigin.x / SAMPLEHASH_VOXEL_SIZE );
- y = ( int )( vOrigin.y / SAMPLEHASH_VOXEL_SIZE );
- z = ( int )( vOrigin.z / SAMPLEHASH_VOXEL_SIZE );
-}
-
-
-unsigned short IncrementPatchIterationKey()
-{
- if ( g_PatchIterationKey == 0xFFFF )
- {
- g_PatchIterationKey = 1;
- for ( int i=0; i < g_Patches.Count(); i++ )
- g_Patches[i].m_IterationKey = 0;
- }
- else
- {
- g_PatchIterationKey++;
- }
- return g_PatchIterationKey;
-}
-
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-void PatchSampleData_AddSample( CPatch *pPatch, int ndxPatch )
-{
- int patchSampleMins[3], patchSampleMaxs[3];
-
-#if defined( SAMPLEHASH_USE_AREA_PATCHES )
- GetPatchSampleHashXYZ( pPatch->mins, patchSampleMins[0], patchSampleMins[1], patchSampleMins[2] );
- GetPatchSampleHashXYZ( pPatch->maxs, patchSampleMaxs[0], patchSampleMaxs[1], patchSampleMaxs[2] );
-#else
- // If not using area patches, just use the patch's origin to add it to the voxels.
- GetPatchSampleHashXYZ( pPatch->origin, patchSampleMins[0], patchSampleMins[1], patchSampleMins[2] );
- memcpy( patchSampleMaxs, patchSampleMins, sizeof( patchSampleMaxs ) );
-#endif
-
- // Make sure mins are smaller than maxs so we don't iterate for 4 bil.
- Assert( patchSampleMins[0] <= patchSampleMaxs[0] && patchSampleMins[1] <= patchSampleMaxs[1] && patchSampleMins[2] <= patchSampleMaxs[2] );
- patchSampleMins[0] = min( patchSampleMins[0], patchSampleMaxs[0] );
- patchSampleMins[1] = min( patchSampleMins[1], patchSampleMaxs[1] );
- patchSampleMins[2] = min( patchSampleMins[2], patchSampleMaxs[2] );
-
- int iterateCoords[3];
- for ( iterateCoords[0]=patchSampleMins[0]; iterateCoords[0] <= patchSampleMaxs[0]; iterateCoords[0]++ )
- {
- for ( iterateCoords[1]=patchSampleMins[1]; iterateCoords[1] <= patchSampleMaxs[1]; iterateCoords[1]++ )
- {
- for ( iterateCoords[2]=patchSampleMins[2]; iterateCoords[2] <= patchSampleMaxs[2]; iterateCoords[2]++ )
- {
- // find the key -- if it doesn't exist add new sample data to the
- // hash table
- PatchSampleData_t iteratePatch;
- iteratePatch.x = iterateCoords[0] * 100;
- iteratePatch.y = iterateCoords[1] * 10;
- iteratePatch.z = iterateCoords[2];
-
- UtlHashHandle_t handle = g_PatchSampleHashTable.Find( iteratePatch );
- if( handle == g_PatchSampleHashTable.InvalidHandle() )
- {
- UtlHashHandle_t handle = g_PatchSampleHashTable.AllocEntryFromKey( iteratePatch );
-
- PatchSampleData_t *pPatchData = &g_PatchSampleHashTable.Element( handle );
- pPatchData->x = iteratePatch.x;
- pPatchData->y = iteratePatch.y;
- pPatchData->z = iteratePatch.z;
- pPatchData->m_ndxPatches.AddToTail( ndxPatch );
-
- patchSamplesAdded++;
- }
- else
- {
- PatchSampleData_t *pPatchData = &g_PatchSampleHashTable.Element( handle );
- pPatchData->m_ndxPatches.AddToTail( ndxPatch );
-
- patchSamplesAdded++;
- }
- }
- }
- }
-}
-
+//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +// +//=============================================================================// + +#include "vrad.h" +#include "lightmap.h" + +#define SAMPLEHASH_NUM_BUCKETS 65536 +#define SAMPLEHASH_GROW_SIZE 0 +#define SAMPLEHASH_INIT_SIZE 0 + +int samplesAdded = 0; +int patchSamplesAdded = 0; +static unsigned short g_PatchIterationKey = 0; + +//----------------------------------------------------------------------------- +//----------------------------------------------------------------------------- +bool SampleData_CompareFunc( SampleData_t const &src1, SampleData_t const &src2 ) +{ + return ( ( src1.x == src2.x ) && + ( src1.y == src2.y ) && + ( src1.z == src2.z ) ); +} + + +//----------------------------------------------------------------------------- +//----------------------------------------------------------------------------- +unsigned int SampleData_KeyFunc( SampleData_t const &src ) +{ + return ( src.x + src.y + src.z ); +} + + +CUtlHash<SampleData_t> g_SampleHashTable( SAMPLEHASH_NUM_BUCKETS, + SAMPLEHASH_GROW_SIZE, + SAMPLEHASH_INIT_SIZE, + SampleData_CompareFunc, SampleData_KeyFunc ); + + + +//----------------------------------------------------------------------------- +//----------------------------------------------------------------------------- +UtlHashHandle_t SampleData_Find( sample_t *pSample ) +{ + SampleData_t sampleData; + sampleData.x = ( int )( pSample->pos.x / SAMPLEHASH_VOXEL_SIZE ) * 100; + sampleData.y = ( int )( pSample->pos.y / SAMPLEHASH_VOXEL_SIZE ) * 10; + sampleData.z = ( int )( pSample->pos.z / SAMPLEHASH_VOXEL_SIZE ); + + return g_SampleHashTable.Find( sampleData ); +} + + +//----------------------------------------------------------------------------- +//----------------------------------------------------------------------------- +UtlHashHandle_t SampleData_InsertIntoHashTable( sample_t *pSample, SampleHandle_t sampleHandle ) +{ + SampleData_t sampleData; + sampleData.x = ( int )( pSample->pos.x / SAMPLEHASH_VOXEL_SIZE ) * 100; + sampleData.y = ( int )( pSample->pos.y / SAMPLEHASH_VOXEL_SIZE ) * 10; + sampleData.z = ( int )( pSample->pos.z / SAMPLEHASH_VOXEL_SIZE ); + + UtlHashHandle_t handle = g_SampleHashTable.AllocEntryFromKey( sampleData ); + + SampleData_t *pSampleData = &g_SampleHashTable.Element( handle ); + pSampleData->x = sampleData.x; + pSampleData->y = sampleData.y; + pSampleData->z = sampleData.z; + pSampleData->m_Samples.AddToTail( sampleHandle ); + + samplesAdded++; + + return handle; +} + + +//----------------------------------------------------------------------------- +//----------------------------------------------------------------------------- +UtlHashHandle_t SampleData_AddSample( sample_t *pSample, SampleHandle_t sampleHandle ) +{ + + // find the key -- if it doesn't exist add new sample data to the + // hash table + UtlHashHandle_t handle = SampleData_Find( pSample ); + if( handle == g_SampleHashTable.InvalidHandle() ) + { + handle = SampleData_InsertIntoHashTable( pSample, sampleHandle ); + } + else + { + SampleData_t *pSampleData = &g_SampleHashTable.Element( handle ); + pSampleData->m_Samples.AddToTail( sampleHandle ); + + samplesAdded++; + } + + return handle; +} + + +//----------------------------------------------------------------------------- +//----------------------------------------------------------------------------- +void SampleData_Log( void ) +{ + if( g_bLogHashData ) + { + g_SampleHashTable.Log( "samplehash.txt" ); + } +} + + +//============================================================================= +//============================================================================= +// +// PatchSample Functions +// +//============================================================================= +//============================================================================= + +//----------------------------------------------------------------------------- +//----------------------------------------------------------------------------- +bool PatchSampleData_CompareFunc( PatchSampleData_t const &src1, PatchSampleData_t const &src2 ) +{ + return ( ( src1.x == src2.x ) && + ( src1.y == src2.y ) && + ( src1.z == src2.z ) ); +} + + +//----------------------------------------------------------------------------- +//----------------------------------------------------------------------------- +unsigned int PatchSampleData_KeyFunc( PatchSampleData_t const &src ) +{ + return ( src.x + src.y + src.z ); +} + + +CUtlHash<PatchSampleData_t> g_PatchSampleHashTable( SAMPLEHASH_NUM_BUCKETS, + SAMPLEHASH_GROW_SIZE, + SAMPLEHASH_INIT_SIZE, + PatchSampleData_CompareFunc, PatchSampleData_KeyFunc ); + +void GetPatchSampleHashXYZ( const Vector &vOrigin, int &x, int &y, int &z ) +{ + x = ( int )( vOrigin.x / SAMPLEHASH_VOXEL_SIZE ); + y = ( int )( vOrigin.y / SAMPLEHASH_VOXEL_SIZE ); + z = ( int )( vOrigin.z / SAMPLEHASH_VOXEL_SIZE ); +} + + +unsigned short IncrementPatchIterationKey() +{ + if ( g_PatchIterationKey == 0xFFFF ) + { + g_PatchIterationKey = 1; + for ( int i=0; i < g_Patches.Count(); i++ ) + g_Patches[i].m_IterationKey = 0; + } + else + { + g_PatchIterationKey++; + } + return g_PatchIterationKey; +} + + +//----------------------------------------------------------------------------- +//----------------------------------------------------------------------------- +void PatchSampleData_AddSample( CPatch *pPatch, int ndxPatch ) +{ + int patchSampleMins[3], patchSampleMaxs[3]; + +#if defined( SAMPLEHASH_USE_AREA_PATCHES ) + GetPatchSampleHashXYZ( pPatch->mins, patchSampleMins[0], patchSampleMins[1], patchSampleMins[2] ); + GetPatchSampleHashXYZ( pPatch->maxs, patchSampleMaxs[0], patchSampleMaxs[1], patchSampleMaxs[2] ); +#else + // If not using area patches, just use the patch's origin to add it to the voxels. + GetPatchSampleHashXYZ( pPatch->origin, patchSampleMins[0], patchSampleMins[1], patchSampleMins[2] ); + memcpy( patchSampleMaxs, patchSampleMins, sizeof( patchSampleMaxs ) ); +#endif + + // Make sure mins are smaller than maxs so we don't iterate for 4 bil. + Assert( patchSampleMins[0] <= patchSampleMaxs[0] && patchSampleMins[1] <= patchSampleMaxs[1] && patchSampleMins[2] <= patchSampleMaxs[2] ); + patchSampleMins[0] = min( patchSampleMins[0], patchSampleMaxs[0] ); + patchSampleMins[1] = min( patchSampleMins[1], patchSampleMaxs[1] ); + patchSampleMins[2] = min( patchSampleMins[2], patchSampleMaxs[2] ); + + int iterateCoords[3]; + for ( iterateCoords[0]=patchSampleMins[0]; iterateCoords[0] <= patchSampleMaxs[0]; iterateCoords[0]++ ) + { + for ( iterateCoords[1]=patchSampleMins[1]; iterateCoords[1] <= patchSampleMaxs[1]; iterateCoords[1]++ ) + { + for ( iterateCoords[2]=patchSampleMins[2]; iterateCoords[2] <= patchSampleMaxs[2]; iterateCoords[2]++ ) + { + // find the key -- if it doesn't exist add new sample data to the + // hash table + PatchSampleData_t iteratePatch; + iteratePatch.x = iterateCoords[0] * 100; + iteratePatch.y = iterateCoords[1] * 10; + iteratePatch.z = iterateCoords[2]; + + UtlHashHandle_t handle = g_PatchSampleHashTable.Find( iteratePatch ); + if( handle == g_PatchSampleHashTable.InvalidHandle() ) + { + UtlHashHandle_t handle = g_PatchSampleHashTable.AllocEntryFromKey( iteratePatch ); + + PatchSampleData_t *pPatchData = &g_PatchSampleHashTable.Element( handle ); + pPatchData->x = iteratePatch.x; + pPatchData->y = iteratePatch.y; + pPatchData->z = iteratePatch.z; + pPatchData->m_ndxPatches.AddToTail( ndxPatch ); + + patchSamplesAdded++; + } + else + { + PatchSampleData_t *pPatchData = &g_PatchSampleHashTable.Element( handle ); + pPatchData->m_ndxPatches.AddToTail( ndxPatch ); + + patchSamplesAdded++; + } + } + } + } +} + |