MCPcopy Create free account
hub / github.com/TorqueGameEngines/Torque3D / getBinRange

Method getBinRange

Engine/source/scene/sceneContainer.cpp:1381–1446  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1379//-----------------------------------------------------------------------------
1380
1381void SceneContainer::getBinRange( const F32 min, const F32 max, U32& minBin, U32& maxBin )
1382{
1383 AssertFatal(max >= min, avar("Error, bad range in getBinRange. min: %f, max: %f", min, max));
1384
1385 if ((max - min) >= (SceneContainer::csmTotalBinSize - SceneContainer::csmBinSize))
1386 {
1387 F32 minCoord = mFmod(min, SceneContainer::csmTotalBinSize);
1388 if (minCoord < 0.0f)
1389 {
1390 minCoord += SceneContainer::csmTotalBinSize;
1391
1392 // This is truly lame, but it can happen. There must be a better way to
1393 // deal with this.
1394 if (minCoord == SceneContainer::csmTotalBinSize)
1395 minCoord = SceneContainer::csmTotalBinSize - 0.01f;
1396 }
1397
1398 AssertFatal(minCoord >= 0.0 && minCoord < SceneContainer::csmTotalBinSize, "Bad minCoord");
1399
1400 minBin = U32(minCoord / SceneContainer::csmBinSize);
1401 AssertFatal(minBin < SceneContainer::csmNumBins, avar("Error, bad clipping! (%g, %d)", minCoord, minBin));
1402
1403 maxBin = minBin + (SceneContainer::csmNumBins - 1);
1404 return;
1405 }
1406 else
1407 {
1408
1409 F32 minCoord = mFmod(min, SceneContainer::csmTotalBinSize);
1410
1411 if (minCoord < 0.0f)
1412 {
1413 minCoord += SceneContainer::csmTotalBinSize;
1414
1415 // This is truly lame, but it can happen. There must be a better way to
1416 // deal with this.
1417 if (minCoord == SceneContainer::csmTotalBinSize)
1418 minCoord = SceneContainer::csmTotalBinSize - 0.01f;
1419 }
1420 AssertFatal(minCoord >= 0.0 && minCoord < SceneContainer::csmTotalBinSize, "Bad minCoord");
1421
1422 F32 maxCoord = mFmod(max, SceneContainer::csmTotalBinSize);
1423 if (maxCoord < 0.0f) {
1424 maxCoord += SceneContainer::csmTotalBinSize;
1425
1426 // This is truly lame, but it can happen. There must be a better way to
1427 // deal with this.
1428 if (maxCoord == SceneContainer::csmTotalBinSize)
1429 maxCoord = SceneContainer::csmTotalBinSize - 0.01f;
1430 }
1431 AssertFatal(maxCoord >= 0.0 && maxCoord < SceneContainer::csmTotalBinSize, "Bad maxCoord");
1432
1433 minBin = U32(minCoord / SceneContainer::csmBinSize);
1434 maxBin = U32(maxCoord / SceneContainer::csmBinSize);
1435 AssertFatal(minBin < SceneContainer::csmNumBins, avar("Error, bad clipping(min)! (%g, %d)", maxCoord, minBin));
1436 AssertFatal(minBin < SceneContainer::csmNumBins, avar("Error, bad clipping(max)! (%g, %d)", maxCoord, maxBin));
1437
1438 // MSVC6 seems to be generating some bad floating point code around

Callers

nothing calls this directly

Calls 3

avarFunction · 0.85
mFmodFunction · 0.85
U32Enum · 0.70

Tested by

no test coverage detected