MCPcopy Create free account
hub / github.com/OpenNFS/OpenNFS / CullTrackBlocks

Method CullTrackBlocks

src/Renderer/Renderer.cpp:487–531  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

485}
486
487std::vector<int> Renderer::CullTrackBlocks(glm::vec3 oldWorldPosition, glm::vec3 worldPosition, int blockDrawDistance,
488 bool useNeighbourData) {
489 std::vector<int> activeTrackBlockIds;
490
491 // Basic Geometry Cull
492 if ((oldWorldPosition.x != worldPosition.x) || (oldWorldPosition.z != worldPosition.z)) {
493 float lowestDistanceSqr = FLT_MAX;
494 //Primitive Draw distance
495 for (auto &track_block : track->track_blocks) {
496 float distanceSqr = glm::length2(glm::distance(worldPosition, track_block.center));
497 if (distanceSqr < lowestDistanceSqr) {
498 closestBlockID = track_block.block_id;
499 lowestDistanceSqr = distanceSqr;
500 }
501 }
502 // If we have an NFS3 track loaded, use the provided neighbour data to work out which blocks to render
503 if ((track->tag == NFS_3 || track->tag == NFS_4) && useNeighbourData) {
504 for (int i = 0; i < 300; ++i) {
505 if (boost::get<shared_ptr<NFS3_4_DATA::TRACK>>(track->trackData)->trk[closestBlockID].nbdData[i].blk ==
506 -1) {
507 break;
508 } else {
509 activeTrackBlockIds.emplace_back(boost::get<shared_ptr<NFS3_4_DATA::TRACK>>(
510 track->trackData)->trk[closestBlockID].nbdData[i].blk);
511 }
512 }
513 } else {
514 // Use a draw distance value to return closestBlock +- drawDistance inclusive blocks
515 int wrapBlocks = 0;
516 for (int block_Idx = closestBlockID - blockDrawDistance;
517 block_Idx < closestBlockID + blockDrawDistance; ++block_Idx) {
518 if (block_Idx < 0) {
519 int activeBlock =
520 ((int) track->track_blocks.size() + (closestBlockID - blockDrawDistance)) + wrapBlocks++;
521 activeTrackBlockIds.emplace_back(activeBlock);
522 } else {
523 activeTrackBlockIds.emplace_back(block_Idx % track->track_blocks.size());
524 }
525 }
526 }
527 oldWorldPosition = worldPosition;
528 }
529 // Render far to near
530 return std::vector<int>(activeTrackBlockIds.rbegin(), activeTrackBlockIds.rend());
531}
532
533bool Renderer::DrawMenuBar() {
534 bool assetChange = false;

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected