-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrender_system.h
More file actions
80 lines (62 loc) · 2.32 KB
/
Copy pathrender_system.h
File metadata and controls
80 lines (62 loc) · 2.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
//
// Created by arrayJY on 2022/12/6.
//
#ifndef SPARROWENGINE_RENDER_SYSTEM_H
#define SPARROWENGINE_RENDER_SYSTEM_H
#include <memory>
#include <span>
#include <string>
#include <vector>
#include "RHI/rhi_struct.h"
#include "render_mesh.h"
namespace Sparrow {
class WindowSystem;
class RHI;
struct RenderSystemInitInfo {
std::shared_ptr<WindowSystem> windowSystem;
};
class RenderSystem {
public:
RenderSystem() = default;
void initialize(const RenderSystemInitInfo& initInfo);
void tick(float deltaTime);
private:
static std::vector<char> readFile(const std::string& filename);
std::shared_ptr<RHI> rhi;
std::tuple<std::unique_ptr<RHIBuffer>, std::unique_ptr<RHIDeviceMemory>>
createIndexBuffer(std::span<uint16_t> indices);
std::tuple<std::unique_ptr<RHIBuffer>, std::unique_ptr<RHIDeviceMemory>>
createVertexBuffer(std::span<struct Vertex> vertices);
std::tuple<std::vector<std::unique_ptr<RHIBuffer>>,
std::vector<std::unique_ptr<RHIDeviceMemory>>,
std::vector<void*>>
createUniformBuffers();
std::tuple<std::unique_ptr<RHIImage>,
std::unique_ptr<RHIImageView>,
std::unique_ptr<RHIDeviceMemory>>
createTextureImage();
void updateUniformBuffer(void* mappedMemory);
void recordCommandBuffer(RHICommandBuffer* commandBuffer);
RHIViewport viewport;
RHIRect2D scissor;
std::vector<Vertex> vertices;
std::vector<uint16_t> indices;
std::unique_ptr<RHIShader> vertexShader, fragmentShader;
std::unique_ptr<RHIDescriptorSetLayout> descriptorSetLayout;
std::vector<std::unique_ptr<RHIDescriptorSet>> descriptorSets;
std::unique_ptr<RHIRenderPass> renderPass;
std::unique_ptr<RHIPipelineLayout> piplineLayout;
std::vector<std::unique_ptr<RHIFramebuffer>> framebuffers;
std::unique_ptr<RHIPipeline> graphicsPipeline;
std::unique_ptr<RHIBuffer> indexBuffer, vertexBuffer;
std::unique_ptr<RHIDeviceMemory> indexBufferMemory, vertexBufferMemory;
std::vector<std::unique_ptr<RHIBuffer>> uniformBuffers;
std::vector<std::unique_ptr<RHIDeviceMemory>> uniformBufferMemories;
std::vector<void*> uniformBuffersMappedMemories;
std::unique_ptr<RHIImage> textureImage;
std::unique_ptr<RHIImageView> textureImageView;
std::unique_ptr<RHIDeviceMemory> textureImageMemory;
std::unique_ptr<RHISampler> textureSampler;
};
} // namespace Sparrow
#endif