group2 0.1.0
CSE 125 Group 2
Loading...
Searching...
No Matches
NewRenderer.hpp
Go to the documentation of this file.
1
3
4#pragma once
5
6#include "Asset.hpp"
7#include "Camera.hpp"
8#include "renderer/Camera.hpp" // legacy Camera type required by IRenderer contract
10
11#include <SDL3/SDL.h>
12#include <SDL3/SDL_gpu.h>
13
14#include <glm/glm.hpp>
15#include <string>
16#include <vector>
17
18struct Vertex
19{
20 glm::vec3 position;
21 glm::vec3 normal;
22 glm::vec2 texUV;
23};
24
37class NewRenderer : public IRenderer
38{
39public:
40 [[nodiscard]] bool supports(RendererFeature feature) const override;
41
42 bool init(SDL_Window* window) override;
43 bool init(SDL_Window* window, SDL_GPUDevice* sharedDevice);
44 void drawFrame(glm::vec3 eye, float yaw, float pitch, float roll) override;
45 void quit() override;
46
47 // Unimplemented IRenderer methods
48 // Marked as "not supported" via `supports()`. HybridRenderer never calls
49 // these, but they must exist for the class to be concrete.
50 [[nodiscard]] SDL_GPUDevice* getDevice() const override { return device_; }
51 [[nodiscard]] SDL_GPUShaderFormat getShaderFormat() const override { return shaderFormat_; }
52 [[nodiscard]] const Camera& getCamera() const override { return legacyCameraStub_; }
53
54 void setParticleSystem(ParticleSystem* /*ps*/) override {}
55 int loadSceneModel(const char* /*filename*/,
56 glm::vec3 /*pos*/,
57 float /*scale*/,
58 bool /*flipUVs*/,
59 const std::string& /*excludeNodesContaining*/ = "") override;
60 int uploadSceneModel(const LoadedModel& /*model*/) override { return -1; }
61 bool setVSync(bool /*enabled*/) override { return false; }
62 void updateModelMeshVertices(int /*modelIndex*/,
63 int /*meshIndex*/,
64 const ModelVertex* /*vertices*/,
65 Uint32 /*vertexCount*/) override
66 {}
67 void setEntityRenderList(std::vector<EntityRenderCmd> /*cmds*/) override {}
68 void setPointLights(std::vector<PointLight> /*lights*/) override {}
69 void setModelEmissive(int /*modelIndex*/, glm::vec4 /*emissiveFactor*/) override {}
70 void setModelScenePass(int /*modelIndex*/, bool /*drawInScene*/) override {}
71 void setWeaponViewmodel(const WeaponViewmodel& /*vm*/) override {}
72 void requestScreenshot(const std::string& /*path*/) override {}
73 [[nodiscard]] int modelCount() const override { return 0; }
74 void setHudTexture(SDL_GPUTexture* /*hudOutput*/) override {}
75
76private:
77 SDL_Window* window_ = nullptr;
78 SDL_GPUDevice* device_ = nullptr;
79 SDL_GPUShaderFormat shaderFormat_ = SDL_GPU_SHADERFORMAT_INVALID;
80
81 bool ownsDevice_ = false;
82 bool ownsWindowClaim_ = false;
83
84 SDL_GPUGraphicsPipeline* geometryPipeline_ = nullptr;
85 SDL_GPUTexture* depthTexture_ = nullptr;
86
87 // Temp for single texture
88 SDL_GPUTexture* texture_ = nullptr;
89 SDL_GPUSampler* sampler_ = nullptr;
90
91 Uint32 depthWidth_ = 0;
92 Uint32 depthHeight_ = 0;
93
96
99 bool initCommon();
100
104
107 bool loadSceneAssets();
108
113 bool ensureDepthTexture(Uint32 width, Uint32 height);
114
117 void createMeshBuffers(MeshIdInt meshId);
118
120
124 void drawMesh(SDL_GPURenderPass* renderPass, const Asset::Mesh& mesh) const;
125};
GPU asset types and global registries for the new renderer.
uint32_t MeshIdInt
Definition Asset.hpp:18
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
First-person camera managing view and projection matrices.
Definition Camera.hpp:10
Abstract renderer contract.
Definition IRenderer.hpp:54
Camera for the new renderer, combining view and projection into one matrix.
Definition Camera.hpp:10
Graphics-team's work-in-progress SDL3 GPU renderer.
Definition NewRenderer.hpp:38
SDL_GPUTexture * texture_
Definition NewRenderer.hpp:88
void setModelEmissive(int, glm::vec4) override
Definition NewRenderer.hpp:69
NewCamera camera_
Definition NewRenderer.hpp:94
void setEntityRenderList(std::vector< EntityRenderCmd >) override
Definition NewRenderer.hpp:67
int modelCount() const override
Definition NewRenderer.hpp:73
Uint32 depthHeight_
Definition NewRenderer.hpp:92
SDL_Window * window_
Definition NewRenderer.hpp:77
void drawMesh(SDL_GPURenderPass *renderPass, const Asset::Mesh &mesh) const
Bind a mesh's buffers and issue an indexed draw call.
Definition NewRenderer.cpp:259
bool ownsWindowClaim_
Definition NewRenderer.hpp:82
bool ensureDepthTexture(Uint32 width, Uint32 height)
(Re-)create the depth texture if the viewport size changed.
Definition NewRenderer.cpp:275
SDL_GPUSampler * sampler_
Definition NewRenderer.hpp:89
bool init(SDL_Window *window) override
Definition NewRenderer.cpp:31
void requestScreenshot(const std::string &) override
Definition NewRenderer.hpp:72
bool setVSync(bool) override
Definition NewRenderer.hpp:61
void createLegacyMeshBuffers(MeshIdInt meshId)
Definition NewRenderer.cpp:343
void quit() override
Definition NewRenderer.cpp:294
bool initCommon()
Shared initialisation called by both init() overloads.
Definition NewRenderer.cpp:77
int loadSceneModel(const char *, glm::vec3, float, bool, const std::string &="") override
Load a model and return its index in the renderer's models list.
Definition NewRenderer.cpp:359
void setHudTexture(SDL_GPUTexture *) override
Set the HUD overlay texture to blit after tone mapping.
Definition NewRenderer.hpp:74
void drawFrame(glm::vec3 eye, float yaw, float pitch, float roll) override
Definition NewRenderer.cpp:180
void setPointLights(std::vector< PointLight >) override
Definition NewRenderer.hpp:68
int uploadSceneModel(const LoadedModel &) override
Definition NewRenderer.hpp:60
bool supports(RendererFeature feature) const override
Return true iff this renderer implements the given feature.
Definition NewRenderer.cpp:18
SDL_GPUDevice * getDevice() const override
Definition NewRenderer.hpp:50
void setWeaponViewmodel(const WeaponViewmodel &) override
Definition NewRenderer.hpp:71
SDL_GPUGraphicsPipeline * geometryPipeline_
Definition NewRenderer.hpp:84
SDL_GPUShaderFormat getShaderFormat() const override
Definition NewRenderer.hpp:51
Uint32 depthWidth_
Definition NewRenderer.hpp:91
bool loadSceneAssets()
Load models via AssetLoader and upload their mesh buffers to the GPU.
Definition NewRenderer.cpp:135
bool ownsDevice_
Definition NewRenderer.hpp:81
void updateModelMeshVertices(int, int, const ModelVertex *, Uint32) override
Definition NewRenderer.hpp:62
void createMeshBuffers(MeshIdInt meshId)
Allocate GPU vertex and index buffers for the given mesh.
Definition NewRenderer.cpp:164
bool createGeometryPipeline()
Build the geometry graphics pipeline from vertex/fragment shaders.
Definition NewRenderer.cpp:109
const Camera & getCamera() const override
Definition NewRenderer.hpp:52
void setParticleSystem(ParticleSystem *) override
Definition NewRenderer.hpp:54
SDL_GPUTexture * depthTexture_
Definition NewRenderer.hpp:85
Camera legacyCameraStub_
Definition NewRenderer.hpp:95
void setModelScenePass(int, bool) override
Override whether a model is drawn during the scene pass (static world geometry) or only via EntityRen...
Definition NewRenderer.hpp:70
SDL_GPUDevice * device_
Definition NewRenderer.hpp:78
SDL_GPUShaderFormat shaderFormat_
Definition NewRenderer.hpp:79
Top-level particle system orchestrator.
Definition ParticleSystem.hpp:35
Camera class for the new renderer with combined view-projection matrix.
First-person camera with perspective projection and Vulkan-convention matrices.
A single mesh: CPU-side vertex/index data plus GPU buffer info.
Definition Asset.hpp:44
Everything returned by loadModel().
Definition ModelLoader.hpp:76
One vertex in a loaded 3-D model (PBR-ready).
Definition ModelLoader.hpp:19
Definition NewRenderer.hpp:19
glm::vec3 position
Definition NewRenderer.hpp:20
glm::vec3 normal
Definition NewRenderer.hpp:21
glm::vec2 texUV
Definition NewRenderer.hpp:22
First-person weapon viewmodel descriptor sent per frame.
Definition RendererTypes.hpp:64