Skip to content

srcs__streaming__chunk_manager_cpp

Ishi_eenn edited this page May 19, 2026 · 2 revisions

srcs/streaming/chunk_manager.cpp

役割

プレイヤー周辺チャンクの生成、メッシュ構築、GPUアップロード、遠方チャンク破棄を管理する。地形生成はワーカースレッド、GPU処理はメインスレッドで行う。

関数一覧

  • rebuildModifiedBlock: 行 12-23
  • ChunkManager::ChunkManager: 行 28-40
  • ChunkManager::~ChunkManager: 行 42-47
  • ChunkManager::destroyAll: 行 49-53
  • ChunkManager::workerFunc: 行 58-84
  • ChunkManager::drainTerrainDone: 行 89-122
  • ChunkManager::processMeshQueue: 行 127-142
  • ChunkManager::update: 行 147-194
  • ChunkManager::setRenderDistance: 行 196-200
  • ChunkManager::loadRadius: 行 205-240
  • ChunkManager::buildMesh: 行 245-252
  • ChunkManager::uploadPending: 行 257-267
  • ChunkManager::evictIfOverBudget: 行 272-281
  • ChunkManager::rebuildChunkAt: 行 286-293

関数ごとの説明

rebuildModifiedBlock

  • 場所: 行 12-23
  • シグネチャ: static void rebuildModifiedBlock(int wx, int wz, ChunkManager& mgr)
  • 内容: 入力データから描画または処理に使う中間データを構築する。
  • 主な呼び出し: rebuildModifiedBlock(), floor(), rebuildChunkAt()

ChunkManager::ChunkManager

  • 場所: 行 28-40
  • シグネチャ: ChunkManager::ChunkManager(IWorld& world, IRenderer& renderer) : world_(world) , renderer_(renderer) , loaded_(MAX_LOADED_CHUNKS) , world_seed_(world.getSeed())
  • 内容: このファイルの責務に沿った補助処理を行う。
  • 主な呼び出し: max(), min(), hardware_concurrency(), reserve(), emplace_back(), fprintf(), thread()

ChunkManager::~ChunkManager

  • 場所: 行 42-47
  • シグネチャ: ChunkManager::~ChunkManager()
  • 内容: このファイルの責務に沿った補助処理を行う。
  • 主な呼び出し: ChunkManager(), store(), notify_all(), join(), destroyAll()

ChunkManager::destroyAll

  • 場所: 行 49-53
  • シグネチャ: void ChunkManager::destroyAll()
  • 内容: 確保済みのリソースを解放し、再利用されない状態にする。
  • 主な呼び出し: destroyAll(), forEach(), destroyChunkMesh()

ChunkManager::workerFunc

  • 場所: 行 58-84
  • シグネチャ: void ChunkManager::workerFunc()
  • 内容: 生成要求キューからChunkPosを取り出し、別スレッドでChunkを生成して完了キューへ渡す。
  • 主な呼び出し: workerFunc(), setSeed(), lock(), wait(), empty(), load(), front(), pop(), generate(), push()

ChunkManager::drainTerrainDone

  • 場所: 行 89-122
  • シグネチャ: void ChunkManager::drainTerrainDone()
  • 内容: このファイルの責務に沿った補助処理を行う。
  • 主な呼び出し: drainTerrainDone(), lock(), empty(), move(), front(), pop(), erase(), getChunk(), registerChunk(), put()

ChunkManager::processMeshQueue

  • 場所: 行 127-142
  • シグネチャ: void ChunkManager::processMeshQueue(int max_per_frame)
  • 内容: このファイルの責務に沿った補助処理を行う。
  • 主な呼び出し: processMeshQueue(), begin(), end(), erase(), getChunk(), contains(), buildMesh(), push()

ChunkManager::update

  • 場所: 行 147-194
  • シグネチャ: void ChunkManager::update(float playerX, float playerZ, uint64_t frame)
  • 内容: プレイヤー位置に応じて必要チャンクを要求し、完成済み地形の登録、メッシュ作成、GPUアップロード、遠方破棄を進める。
  • 主な呼び出し: update(), floor(), drainTerrainDone(), processMeshQueue(), loadRadius(), stepWater(), insert(), rebuildChunkAt(), uploadPending(), evictIfOverBudget()

手順:

  1. プレイヤーのワールド座標をチャンク座標へ変換する。
  2. 中心チャンク周辺のロード要求を作る。
  3. ワーカースレッドが生成したチャンクをWorldへ登録する。
  4. 登録済みでdirtyなチャンクをメッシュキューへ積む。
  5. 1フレームあたりの上限内でメッシュ構築とGPUアップロードを行う。
  6. ロード上限を超えた場合は遠いチャンクを破棄する。

ChunkManager::setRenderDistance

  • 場所: 行 196-200
  • シグネチャ: void ChunkManager::setRenderDistance(int rd)
  • 内容: 内部状態や対象データに新しい値を設定する。
  • 主な呼び出し: setRenderDistance()

ChunkManager::loadRadius

  • 場所: 行 205-240
  • シグネチャ: void ChunkManager::loadRadius(ChunkPos center)
  • 内容: 指定中心チャンクの周囲を走査し、未ロード/未要求のチャンクを生成キューへ追加する。
  • 主な呼び出し: loadRadius(), contains(), touch(), getChunk(), put(), destroyChunkMesh(), unregisterChunk(), insert(), count(), lock()

ChunkManager::buildMesh

  • 場所: 行 245-252
  • シグネチャ: void ChunkManager::buildMesh(Chunk* chunk)
  • 内容: 対象チャンクと隣接チャンクを集め、MeshBuilderでCPUメッシュを再構築する。
  • 主な呼び出し: buildMesh(), getChunk(), build()

ChunkManager::uploadPending

  • 場所: 行 257-267
  • シグネチャ: void ChunkManager::uploadPending(int max_per_frame)
  • 内容: このファイルの責務に沿った補助処理を行う。
  • 主な呼び出し: uploadPending(), empty(), front(), pop(), uploadChunkMesh()

ChunkManager::evictIfOverBudget

  • 場所: 行 272-281
  • シグネチャ: void ChunkManager::evictIfOverBudget()
  • 内容: このファイルの責務に沿った補助処理を行う。
  • 主な呼び出し: evictIfOverBudget(), size(), evictLRU(), destroyChunkMesh(), unregisterChunk()

ChunkManager::rebuildChunkAt

  • 場所: 行 286-293
  • シグネチャ: void ChunkManager::rebuildChunkAt(ChunkPos pos)
  • 内容: 入力データから描画または処理に使う中間データを構築する。
  • 主な呼び出し: rebuildChunkAt(), contains(), getChunk(), erase(), buildMesh(), push()

Clone this wiki locally