Skip to content

srcs__renderer__renderer_cpp

Ishi_eenn edited this page May 19, 2026 · 2 revisions

srcs/renderer/renderer.cpp

役割

OpenGL初期化、シェーダー/テクスチャ作成、チャンク/水/空/HUD/ミニマップ/タイトル画面の描画を担当する。

関数一覧

  • Renderer::~Renderer: 行 37-50
  • Renderer::init: 行 58-114
  • Renderer::drawTitleScreen: 行 119-121
  • Renderer::updateMinimap: 行 123-125
  • Renderer::drawMinimap: 行 127-129
  • Renderer::initHud: 行 142-169
  • Renderer::appendLine: 行 177-182
  • Renderer::appendDigit: 行 184-206
  • Renderer::appendNumber: 行 208-221
  • Renderer::appendLetter: 行 226-249
  • Renderer::appendSignedNumberLeft: 行 254-273
  • Renderer::drawHud: 行 280-349
  • Renderer::drawUnderwaterOverlay: 行 356-364
  • Renderer::uploadChunkMesh: 行 377-453
  • Renderer::destroyChunkMesh: 行 460-473
  • Renderer::beginFrame: 行 481-484
  • buildMVP: 行 496-510
  • setChunkLightingUniforms: 行 519-525
  • Renderer::drawChunk: 行 533-550
  • Renderer::drawChunkWater: 行 561-585
  • Renderer::drawSkybox: 行 594-602
  • Renderer::endFrame: 行 612-614
  • Renderer::onResize: 行 619-623
  • Renderer::setTimeOfDay: 行 642-716

関数ごとの説明

Renderer::~Renderer

  • 場所: 行 37-50
  • シグネチャ: Renderer::~Renderer()
  • 内容: 描画に必要な状態を設定し、対象を画面へ出力する。
  • 主な呼び出し: Renderer(), destroy(), glDeleteVertexArrays(), glDeleteBuffers()

Renderer::init

  • 場所: 行 58-114
  • シグネチャ: bool Renderer::init(GLFWwindow* window)
  • 内容: OpenGL状態、シェーダー、テクスチャアトラス、空、HUD、ミニマップ、タイトル画面を初期化する。
  • 主な呼び出し: init(), gladLoadGL(), glGetString(), glEnable(), glCullFace(), glBlendFunc(), load(), generate(), initHud()

手順:

  1. OpenGLの基本状態を設定する。
  2. チャンク、HUD、ミニマップ、空用のシェーダーを読み込む。
  3. テクスチャアトラスを生成し、シェーダーへsampler設定を行う。
  4. Skybox、HUD、Minimap、TitleScreenのリソースを作成する。
  5. 初期の時刻/太陽方向を設定する。

Renderer::drawTitleScreen

  • 場所: 行 119-121
  • シグネチャ: bool Renderer::drawTitleScreen(float dt)
  • 内容: 描画に必要な状態を設定し、対象を画面へ出力する。
  • 主な呼び出し: drawTitleScreen(), render()

Renderer::updateMinimap

  • 場所: 行 123-125
  • シグネチャ: void Renderer::updateMinimap(World& world, float px, float pz, float yaw_deg, float dt)
  • 内容: 現在の状態と入力に基づいて、次のフレーム用の状態へ更新する。
  • 主な呼び出し: updateMinimap(), update()

Renderer::drawMinimap

  • 場所: 行 127-129
  • シグネチャ: void Renderer::drawMinimap()
  • 内容: 描画に必要な状態を設定し、対象を画面へ出力する。
  • 主な呼び出し: drawMinimap(), draw()

Renderer::initHud

  • 場所: 行 142-169
  • シグネチャ: void Renderer::initHud()
  • 内容: 必要な状態や外部リソースを初期化する。
  • 主な呼び出し: initHud(), load(), glGenVertexArrays(), glGenBuffers(), glBindVertexArray(), glBindBuffer(), glBufferData(), glEnableVertexAttribArray(), glVertexAttribPointer()

Renderer::appendLine

  • 場所: 行 177-182
  • シグネチャ: void Renderer::appendLine(float* verts, int& count, float x0, float y0, float x1, float y1) const
  • 内容: このファイルの責務に沿った補助処理を行う。
  • 主な呼び出し: appendLine()

Renderer::appendDigit

  • 場所: 行 184-206
  • シグネチャ: void Renderer::appendDigit(float* verts, int& count, int digit, float left, float top, float w, float h) const
  • 内容: このファイルの責務に沿った補助処理を行う。
  • 主な呼び出し: appendDigit(), appendLine()

Renderer::appendNumber

  • 場所: 行 208-221
  • シグネチャ: void Renderer::appendNumber(float* verts, int& count, int value, float right, float top, float w, float h, float gap) const
  • 内容: このファイルの責務に沿った補助処理を行う。
  • 主な呼び出し: appendNumber(), snprintf(), appendDigit()

Renderer::appendLetter

  • 場所: 行 226-249
  • シグネチャ: void Renderer::appendLetter(float* verts, int& count, char letter, float left, float top, float w, float h) const
  • 内容: このファイルの責務に沿った補助処理を行う。
  • 主な呼び出し: appendLine()

Renderer::appendSignedNumberLeft

  • 場所: 行 254-273
  • シグネチャ: void Renderer::appendSignedNumberLeft(float* verts, int& count, int value, float left, float top, float w, float h, float gap) const
  • 内容: このファイルの責務に沿った補助処理を行う。
  • 主な呼び出し: snprintf(), appendLine(), appendDigit()

Renderer::drawHud

  • 場所: 行 280-349
  • シグネチャ: void Renderer::drawHud(int fps, int px, int py, int pz)
  • 内容: 画面中央の十字、FPS、プレイヤー座標をHUDとして描画する。
  • 主な呼び出し: drawHud(), appendLine(), data(), appendNumber(), appendLetter(), snprintf(), appendSignedNumberLeft(), glBindBuffer(), glBufferSubData(), glDisable()

手順:

  1. 入力値や現在状態を検査し、処理すべき条件を絞る。
  2. 対象範囲やキューをループで走査する。
  3. 計算結果を内部状態、配列、キュー、または対象オブジェクトへ反映する。
  4. OpenGL/GLFWのAPIを呼び、描画状態やGPUリソースを操作する。

Renderer::drawUnderwaterOverlay

  • 場所: 行 356-364
  • シグネチャ: void Renderer::drawUnderwaterOverlay()
  • 内容: 描画に必要な状態を設定し、対象を画面へ出力する。
  • 主な呼び出し: drawUnderwaterOverlay(), glDisable(), use(), setVec4(), glBindVertexArray(), glDrawArrays(), glEnable()

Renderer::uploadChunkMesh

  • 場所: 行 377-453
  • シグネチャ: void Renderer::uploadChunkMesh(Chunk* chunk)
  • 内容: CPU側のChunkメッシュをVAO/VBO/EBOにアップロードし、描画可能なGPUメッシュとして保持する。
  • 主な呼び出し: uploadChunkMesh(), empty(), destroyChunkMesh(), glGenVertexArrays(), glGenBuffers(), glBindVertexArray(), glBindBuffer(), glBufferData(), size(), data()

手順:

  1. 既存GPUメッシュがあれば破棄する。
  2. CPU側の頂点、不透明インデックス、水インデックスをまとめてGPUバッファへ転送する。
  3. Vertex構造体に合わせて頂点属性を設定する。
  4. 不透明と水のインデックス数を記録し、uploadedをtrueにする。

Renderer::destroyChunkMesh

  • 場所: 行 460-473
  • シグネチャ: void Renderer::destroyChunkMesh(Chunk* chunk)
  • 内容: 確保済みのリソースを解放し、再利用されない状態にする。
  • 主な呼び出し: destroyChunkMesh(), glDeleteVertexArrays(), glDeleteBuffers()

Renderer::beginFrame

  • 場所: 行 481-484
  • シグネチャ: void Renderer::beginFrame()
  • 内容: 1フレームの描画開始時に画面クリアと深度/カリングなどの状態を整える。
  • 主な呼び出し: beginFrame(), glClearColor(), glClear()

buildMVP

  • 場所: 行 496-510
  • シグネチャ: static glm::mat4 buildMVP(const Chunk* chunk, const float* view4x4, const float* proj4x4)
  • 内容: 入力データから描画または処理に使う中間データを構築する。
  • 主な呼び出し: translate(), mat4(), vec3(), make_mat4()

setChunkLightingUniforms

  • 場所: 行 519-525
  • シグネチャ: static void setChunkLightingUniforms(Shader& shader, const float sun_dir[3], float ambient, float sun_strength)
  • 内容: 内部状態や対象データに新しい値を設定する。
  • 主な呼び出し: setVec3(), setFloat()

Renderer::drawChunk

  • 場所: 行 533-550
  • シグネチャ: void Renderer::drawChunk(const Chunk* chunk, const float* view4x4, const float* proj4x4)
  • 内容: 不透明ブロックのチャンクメッシュを描画する。
  • 主な呼び出し: drawChunk(), buildMVP(), use(), setMat4(), value_ptr(), setChunkLightingUniforms(), bind(), setInt(), glBindVertexArray(), glDrawElements()

Renderer::drawChunkWater

  • 場所: 行 561-585
  • シグネチャ: void Renderer::drawChunkWater(const Chunk* chunk, const float* view4x4, const float* proj4x4)
  • 内容: 透明な水面用インデックスだけをブレンド付きで描画する。
  • 主な呼び出し: drawChunkWater(), buildMVP(), use(), setMat4(), value_ptr(), setChunkLightingUniforms(), bind(), setInt(), glDepthMask(), glBindVertexArray()

Renderer::drawSkybox

  • 場所: 行 594-602
  • シグネチャ: void Renderer::drawSkybox(const float* view3x3, const float* proj4x4)
  • 内容: 描画に必要な状態を設定し、対象を画面へ出力する。
  • 主な呼び出し: drawSkybox(), use(), setVec3(), draw()

Renderer::endFrame

  • 場所: 行 612-614
  • シグネチャ: void Renderer::endFrame()
  • 内容: バックバッファを表示側へ交換し、フレーム描画を完了する。
  • 主な呼び出し: endFrame(), glfwSwapBuffers()

Renderer::onResize

  • 場所: 行 619-623
  • シグネチャ: void Renderer::onResize(int w, int h)
  • 内容: このファイルの責務に沿った補助処理を行う。
  • 主な呼び出し: onResize(), glViewport()

Renderer::setTimeOfDay

  • 場所: 行 642-716
  • シグネチャ: void Renderer::setTimeOfDay(float t)
  • 内容: 内部状態や対象データに新しい値を設定する。
  • 主な呼び出し: setTimeOfDay(), sin(), cos(), sqrt(), clamp01(), lerpCol()

手順:

  1. 入力値や現在状態を検査し、処理すべき条件を絞る。
  2. 対象範囲やキューをループで走査する。
  3. 計算結果を内部状態、配列、キュー、または対象オブジェクトへ反映する。
  4. 処理結果または成功/失敗を呼び出し元へ返す。

Clone this wiki locally