group2 0.1.0
CSE 125 Group 2
Loading...
Searching...
No Matches
Renderer.hpp
Go to the documentation of this file.
1#pragma once
2
3#include "Asset.hpp"
4#include "Camera.hpp"
5#include "renderer/Camera.hpp" // legacy Camera type required by IRenderer contract
7
8#include <SDL3/SDL.h>
9#include <SDL3/SDL_gpu.h>
10
11#include <glm/glm.hpp>
12#include <string>
13#include <vector>
14
15struct Vertex
16{
17 glm::vec3 position;
18 glm::vec3 normal;
19 glm::vec2 texUV;
20};
21
34class NewRenderer : public IRenderer
35{
36public:
37 [[nodiscard]] bool supports(RendererFeature feature) const override;
38
39 bool init(SDL_Window* window) override;
40 bool init(SDL_Window* window, SDL_GPUDevice* sharedDevice);
41 void drawFrame(glm::vec3 eye, float yaw, float pitch, float roll) override;
42 void quit() override;
43
44 // ---- Unimplemented IRenderer methods ----
45 // Marked as "not supported" via `supports()`. HybridRenderer never calls
46 // these, but they must exist for the class to be concrete.
47 [[nodiscard]] SDL_GPUDevice* getDevice() const override { return device_; }
48 [[nodiscard]] SDL_GPUShaderFormat getShaderFormat() const override { return shaderFormat_; }
49 [[nodiscard]] const Camera& getCamera() const override { return legacyCameraStub_; }
50
51 void setParticleSystem(ParticleSystem* /*ps*/) override {}
52 int loadSceneModel(const char* /*filename*/, glm::vec3 /*pos*/, float /*scale*/, bool /*flipUVs*/) override
53 {
54 return -1;
55 }
56 int uploadSceneModel(const LoadedModel& /*model*/) override { return -1; }
57 bool setVSync(bool /*enabled*/) override { return false; }
58 void updateModelMeshVertices(int /*modelIndex*/,
59 int /*meshIndex*/,
60 const ModelVertex* /*vertices*/,
61 Uint32 /*vertexCount*/) override
62 {}
63 void setEntityRenderList(std::vector<EntityRenderCmd> /*cmds*/) override {}
64 void setPointLights(std::vector<PointLight> /*lights*/) override {}
65 void setModelEmissive(int /*modelIndex*/, glm::vec4 /*emissiveFactor*/) override {}
66 void setWeaponViewmodel(const WeaponViewmodel& /*vm*/) override {}
67 void requestScreenshot(const std::string& /*path*/) override {}
68 [[nodiscard]] int modelCount() const override { return 0; }
69
70private:
71 SDL_Window* window_ = nullptr;
72 SDL_GPUDevice* device_ = nullptr;
73 SDL_GPUShaderFormat shaderFormat_ = SDL_GPU_SHADERFORMAT_INVALID;
74
75 bool ownsDevice_ = false;
76 bool ownsWindowClaim_ = false;
77
78 SDL_GPUGraphicsPipeline* geometryPipeline_ = nullptr;
79 SDL_GPUTexture* depthTexture_ = nullptr;
80
81 // Temp for single texture
82 SDL_GPUTexture* texture_ = nullptr;
83 SDL_GPUSampler* sampler_ = nullptr;
84
85 Uint32 depthWidth_ = 0;
86 Uint32 depthHeight_ = 0;
87
88 NewCamera camera_;
89 Camera legacyCameraStub_{};
90
91 bool initCommon();
92 bool createGeometryPipeline();
93 bool loadSceneAssets();
94 bool ensureDepthTexture(Uint32 width, Uint32 height);
95
96 void createMeshBuffers(MeshIdInt meshId);
97 void drawMesh(SDL_GPURenderPass* renderPass, const Asset::Mesh& mesh) const;
98};
uint32_t MeshIdInt
Definition Asset.hpp:14
Abstract renderer interface used by the hybrid dispatcher to route calls to either the legacy rendere...
RendererFeature
Stable identifiers for each dispatchable renderer method.
Definition IRenderer.hpp:31
Definition Camera.hpp:6
Abstract renderer contract.
Definition IRenderer.hpp:53
Definition Camera.hpp:6
Graphics-team's work-in-progress SDL3 GPU renderer.
Definition Renderer.hpp:35
void setModelEmissive(int, glm::vec4) override
Definition Renderer.hpp:65
void setEntityRenderList(std::vector< EntityRenderCmd >) override
Definition Renderer.hpp:63
int modelCount() const override
Definition Renderer.hpp:68
bool init(SDL_Window *window) override
Definition Renderer.cpp:26
void requestScreenshot(const std::string &) override
Definition Renderer.hpp:67
bool setVSync(bool) override
Definition Renderer.hpp:57
void quit() override
Definition Renderer.cpp:263
int loadSceneModel(const char *, glm::vec3, float, bool) override
Definition Renderer.hpp:52
void drawFrame(glm::vec3 eye, float yaw, float pitch, float roll) override
Definition Renderer.cpp:166
void setPointLights(std::vector< PointLight >) override
Definition Renderer.hpp:64
int uploadSceneModel(const LoadedModel &) override
Definition Renderer.hpp:56
bool supports(RendererFeature feature) const override
Return true iff this renderer implements the given feature.
Definition Renderer.cpp:14
SDL_GPUDevice * getDevice() const override
Definition Renderer.hpp:47
void setWeaponViewmodel(const WeaponViewmodel &) override
Definition Renderer.hpp:66
SDL_GPUShaderFormat getShaderFormat() const override
Definition Renderer.hpp:48
void updateModelMeshVertices(int, int, const ModelVertex *, Uint32) override
Definition Renderer.hpp:58
const Camera & getCamera() const override
Definition Renderer.hpp:49
void setParticleSystem(ParticleSystem *) override
Definition Renderer.hpp:51
Top-level particle system orchestrator.
Definition ParticleSystem.hpp:35
Definition Asset.hpp:36
Everything returned by loadModel().
Definition ModelLoader.hpp:76
One vertex in a loaded 3-D model (PBR-ready).
Definition ModelLoader.hpp:19
Definition Renderer.hpp:16
glm::vec3 position
Definition Renderer.hpp:17
glm::vec3 normal
Definition Renderer.hpp:18
glm::vec2 texUV
Definition Renderer.hpp:19
First-person weapon viewmodel descriptor sent per frame.
Definition RendererTypes.hpp:65