Path SDL3 GPU amb PostFX passthrough; Screen amb init/shutdown explicit (v0.4.0)
This commit is contained in:
1 parent
0348acb0eb
commit
6c8ef9ff44
18 files changed
+14213
-38
No files matched your search
@@ -0,0 +1,63 @@
|
||||
#pragma once
|
||||
|
||||
#include <SDL3/SDL.h>
|
||||
|
||||
#include <cstdint>
|
||||
#include <string>
|
||||
|
||||
namespace Rendering {
|
||||
|
||||
// Paràmetres d'intensitat dels efectes PostFX. Amb tot a 0 el shader
|
||||
// actua com un passthrough. Els presets els omplen en fases futures.
|
||||
struct PostFXParams {
|
||||
float vignette{0.0F};
|
||||
float scanlines{0.0F};
|
||||
float chroma{0.0F};
|
||||
float mask{0.0F};
|
||||
float gamma{0.0F};
|
||||
float curvature{0.0F};
|
||||
float bleeding{0.0F};
|
||||
float flicker{0.0F};
|
||||
};
|
||||
|
||||
// Interfície abstracta per a backends de renderitzat per GPU.
|
||||
// Per ara, l'única implementació és SDL3GPUShader. Un backend
|
||||
// alternatiu (p.ex. OpenGL o dummy) podria afegir-se més endavant.
|
||||
class ShaderBackend {
|
||||
public:
|
||||
ShaderBackend() = default;
|
||||
virtual ~ShaderBackend() = default;
|
||||
|
||||
ShaderBackend(const ShaderBackend&) = delete;
|
||||
ShaderBackend(ShaderBackend&&) = delete;
|
||||
auto operator=(const ShaderBackend&) -> ShaderBackend& = delete;
|
||||
auto operator=(ShaderBackend&&) -> ShaderBackend& = delete;
|
||||
|
||||
// Crea device, pipeline, textura i sampler a partir de la finestra
|
||||
// i la resolució del canvas del joc. Retorna false si la GPU no
|
||||
// està disponible (el Screen farà fallback al SDL_Renderer).
|
||||
virtual auto init(SDL_Window* window, int game_width, int game_height) -> bool = 0;
|
||||
|
||||
// Copia píxels ARGB8888 des de CPU cap al buffer de transferència.
|
||||
virtual void uploadPixels(const std::uint32_t* pixels, int width, int height) = 0;
|
||||
|
||||
// Executa el pas de renderitzat (copy pass + PostFX → swapchain + present).
|
||||
virtual void render() = 0;
|
||||
|
||||
// Actualitza els uniforms de PostFX per al pròxim render().
|
||||
virtual void setPostFXParams(const PostFXParams& params) = 0;
|
||||
|
||||
// Canvia el mode de presentació (VSYNC/IMMEDIATE/MAILBOX) en calent.
|
||||
virtual void setVSync(bool vsync) = 0;
|
||||
|
||||
// Fixa el driver preferit (buit = automàtic). S'ha de cridar abans d'init().
|
||||
virtual void setPreferredDriver(const std::string& driver) = 0;
|
||||
|
||||
// Destrueix tots els recursos GPU (pipeline, textura, buffer, sampler, device).
|
||||
virtual void cleanup() = 0;
|
||||
|
||||
[[nodiscard]] virtual auto isReady() const -> bool = 0;
|
||||
[[nodiscard]] virtual auto getDriverName() const -> std::string = 0;
|
||||
};
|
||||
|
||||
} // namespace Rendering
|
||||
Reference in new issue
Block a user