Surface::renderWithColorReplace usava Screen::get().getCanvasArgb() i companys per a obtenir el buffer destí. S'introdueix una abstracció mínima: - source/core/rendering/canvas.hpp: struct Canvas amb pixels/width/ height i la fàbrica activeCanvas() que retorna el canvas actiu. - source/core/rendering/canvas.cpp: implementació que delega a Screen. Surface ara inclou canvas.hpp en lloc de screen.hpp i crida Rendering::activeCanvas(). L'indirecció permet, més endavant, empènyer canvases alternatius (off-screen, efectes) sense tocar Surface; ara mateix es comporta idèntic al codi anterior. Build + smoke 5s xvfb OK (exit 124). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
25 lines
921 B
C++
25 lines
921 B
C++
#pragma once
|
|
|
|
#include <cstdint>
|
|
|
|
// Abstracció mínima del destí de renderitzat CPU. Tots els blitters del
|
|
// projecte (Surface, els HUDs via Screen::fillRect, ...) emeten píxels en
|
|
// format ARGB8888 sobre una única superfície lògica que el backend GPU
|
|
// després transfereix a la textura "scene". L'accés va per la funció
|
|
// activeCanvas() en lloc de Screen::get() directament, per a que els
|
|
// consumidors no depenguen del cicle de vida de Screen ni del seu header.
|
|
namespace Rendering {
|
|
|
|
struct Canvas {
|
|
std::uint32_t* pixels{nullptr};
|
|
int width{0};
|
|
int height{0};
|
|
};
|
|
|
|
// Retorna el canvas actiu del joc. En aquesta fase del projecte n'hi ha
|
|
// sempre un i només un (el de Screen); en el futur, si cal renderitzar
|
|
// off-screen (miniatures, efectes), es podrà pushejar/popar per ací.
|
|
[[nodiscard]] auto activeCanvas() -> Canvas;
|
|
|
|
} // namespace Rendering
|