Application::getInstance() aus Renderer klassen entfernen #36

Closed
opened 2026-04-17 04:49:29 +00:00 by sebastian · 0 comments
Owner

Problem: MasterRenderer und TextRenderer rufen direkt Application::getInstance().getWindow().GetWidth/Height() auf. Das koppelt den Renderer an den Application-Singleton, macht Tests unmöglich und widerspricht der Planung zur Scene-Architektur

// MasterRenderer.cpp:
Application::getInstance().getWindow().GetWidth()

// TextRenderer.cpp:
Application::getInstance().getWindow().GetWidth()

Lösung: Dimensionen als Parameter übergeben. Dafür bietet sich ein schlankes RenderContext-Struct an:

// engine/renderer/RenderContext.h
struct RenderContext {
    int   screenWidth;
    int   screenHeight;
    float deltaTime;
};

MasterRenderer::render() und TextRenderer::renderGuiTexts() bekommen const RenderContext& übergeben:

masterRenderer->render(light, camera, renderContext);
textRenderer->renderGuiTexts(texts, renderContext);

Der Aufrufer (GameLayer::onUpdate() bzw. später GameScene) befüllt RenderContext aus der Fenstergröße – einmalig pro Frame, zentral.
Acceptance Criteria:

  • Kein Application::getInstance() in MasterRenderer, TextRenderer, Renderer, WorldSpriteRenderer
  • RenderContext wird vom Layer/Scene befüllt und durchgereicht
  • Compile-Test: kein #include "Application.h" mehr in Renderer-Klassen
Problem: MasterRenderer und TextRenderer rufen direkt Application::getInstance().getWindow().GetWidth/Height() auf. Das koppelt den Renderer an den Application-Singleton, macht Tests unmöglich und widerspricht der Planung zur Scene-Architektur ``` // MasterRenderer.cpp: Application::getInstance().getWindow().GetWidth() // TextRenderer.cpp: Application::getInstance().getWindow().GetWidth() ``` Lösung: Dimensionen als Parameter übergeben. Dafür bietet sich ein schlankes RenderContext-Struct an: ``` // engine/renderer/RenderContext.h struct RenderContext { int screenWidth; int screenHeight; float deltaTime; }; ``` MasterRenderer::render() und TextRenderer::renderGuiTexts() bekommen const RenderContext& übergeben: ``` masterRenderer->render(light, camera, renderContext); textRenderer->renderGuiTexts(texts, renderContext); ``` Der Aufrufer (GameLayer::onUpdate() bzw. später GameScene) befüllt RenderContext aus der Fenstergröße – einmalig pro Frame, zentral. Acceptance Criteria: - Kein Application::getInstance() in MasterRenderer, TextRenderer, Renderer, WorldSpriteRenderer - RenderContext wird vom Layer/Scene befüllt und durchgereicht - Compile-Test: kein #include "Application.h" mehr in Renderer-Klassen
sebastian added this to the RenderSystem Refactoring milestone 2026-04-17 04:49:29 +00:00
sebastian added the
refactoring
engine
labels 2026-04-17 04:49:29 +00:00
sebastian added this to the Dicewars project 2026-04-17 04:49:29 +00:00
Sign in to join this conversation.
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: sebastian/Dicewars-Siedler#36
No description provided.