FCT
载入中...
搜索中...
未找到
OldRenderGraph.h
浏览该文件的文档.
1//
2// Created by Administrator on 2025/4/5.
3//
4
5#ifndef OLDRENDERGRAPH_H
6#define OLDRENDERGRAPH_H
7#include "../ThirdParty.h"
9namespace FCT
10{
11 class MutilBufferImage;
12 struct Job;
13 class OldPass;
14 class Window;
15 class Context;
16 namespace RHI
17 {
18 class Pass;
19 }
20
25
27 std::string name;
30 std::string target[8];
31 std::string depthStencil;
32 std::vector<std::string> textures;
34 {
35 pass = nullptr;
36 rhiPass = nullptr;
37 }
38 };
39
40 enum class PassGraphEdgeType {
42 };
43
47
48
50 std::string name;
51 };
54 ParentChild,//指向child
55 };
59 /*
60 *1.分配CmdBuf
61 *2.给Pass分组
62 *3.给每个pass创建rhiPass,并给每个组创建passGroup
63 */
64 using PassGraphType = boost::adjacency_list<
65 boost::vecS, // 外部边列表
66 boost::vecS, // 外部顶点列表
67 boost::bidirectionalS, // 双向图
68 PassGraphVertex, // 顶点属性
69 PassGraphEdge // 边属性
70 >;
71 using ResourceGraphType = boost::adjacency_list<
72 boost::vecS, // 外部边列表
73 boost::vecS, // 外部顶点列表
74 boost::bidirectionalS, // 双向图
75 ResourceGraphVertex, // 顶点属性
76 ResourceGraphEdge // 边属性
77 >;
78
79
80 class OldRenderGraph : public RefCount
81 {
82 protected:
85 {
86 ImageUsages usage;
87 uint32_t width;
88 uint32_t height;
90 bool isWnd;
100 };
113 std::unordered_map<std::string, WindowImageResource> m_windowImageResources;
114 std::unordered_map<std::string, WindowDepthStencilResource> m_windowDepthStencilResources;
115 std::unordered_map<std::string, Image*> m_images;
116 std::unordered_map<Window*,std::string> m_windowBackBufferNames;
117 std::unordered_map<Window*,std::string> m_windowDepthStencilNames;
118 std::vector<Window*> m_bindedWindows;
119 std::unordered_map<std::string,ImageResourceDesc> m_imageResourceDescs;
120 std::unordered_map<std::string, PassGraphType::vertex_descriptor> m_passVertex;
121 std::unordered_map<std::string, TextureElement> m_textureLayouts;
122 std::unordered_map<std::string, ResourceGraphType::vertex_descriptor> m_resourceVertices;
123 std::vector<RHI::PassGroup*> m_passGroups;
124 std::vector<MutilBufferImage*> m_needUpdataFramesIndexImages;
127 uint8_t slot = 0;
128 };
132 std::vector<PassGraphType::vertex_descriptor> sortedPasses;
133 std::vector<std::vector<PassGraphType::vertex_descriptor>> passGroups;
134 };
136 public:
137 Image* getResourceImage(std::string name)
138 {
139 auto it = m_images.find(name);
140 if (it!= m_images.end())
141 {
142 return it->second;
143 }
144 return nullptr;
145 }
147 void addPass(const std::string& name, OldPass* pass);
148 void addWindowResource(Window* wnd);
149 void submit(Job* job,std::string name);
150 //显式依赖
151 void addPassDenpendency(const std::string& from,const std::string& to);
152 void bindOutputImage(const std::string& name, std::string image,uint8_t slot = 0);
153 void bindTextureImage(std::string name, std::string image, uint32_t width = 0, uint32_t height = 0, Samples samples =
155 void bindDepthStencil(const char* name, std::string image);
156 void bindOutput(const char* name, Window* wnd, uint8_t slot = 0);
158 //推导出各个image的大小,从固定大小的 /窗口 的
159 //对于可能没有孤立的无法推导的 如果 一个单独的 pass,什么都没 连,然后输出了一个image,image还没有指定大小, 给予256*256
160 void generateImageGraph();
161 void computeSize();
162 void updateFrameIndices();
163 void saveExecutionOrder(const std::vector<PassGraphType::vertex_descriptor>& sortedPasses,
164 const std::vector<std::vector<PassGraphType::vertex_descriptor>>& passGroups);
165 //从shaderGenreate获取resoureLayout,如果没有,就创建并添加新的resoureLayout
167 void compile();
169 bool isPassWritingToResource(const std::string& passName, const std::string& resourceName);
170 bool isPassReadingFromResource(const std::string& passName, const std::string& resourceName);
171 void execute(RHI::CommandBuffer* cmdBuf);
172 void printExecutionOrder();
173 void printResourceInfo();
174 std::vector<std::string> getPassTargetToWnd(Window* wnd);
175
176 OldPass* getPassByName(const std::string& name)
177 {
178 auto it = m_passVertex.find(name);
179 if (it!= m_passVertex.end()) {
180 return m_passGraph[it->second].pass;
181 }
182 return nullptr;
183 }
184
185 std::string formatToString(Format format);
186 void updateResource();
187 void swapJobQueue();
188 };
189
190}
191#endif //RENDERGRAPH_H
std::vector< RHI::PassGroup * > m_passGroups
std::unordered_map< std::string, WindowImageResource > m_windowImageResources
bool isPassWritingToResource(const std::string &passName, const std::string &resourceName)
void execute(RHI::CommandBuffer *cmdBuf)
void addPass(const std::string &name, OldPass *pass)
void bindTextureImage(std::string name, std::string image, uint32_t width=0, uint32_t height=0, Samples samples=Samples::sample_undefined)
void bindOutputImage(const std::string &name, std::string image, uint8_t slot=0)
void addWindowResource(Window *wnd)
std::string formatToString(Format format)
std::vector< std::string > getPassTargetToWnd(Window *wnd)
bool isPassReadingFromResource(const std::string &passName, const std::string &resourceName)
std::unordered_map< std::string, Image * > m_images
std::unordered_map< std::string, WindowDepthStencilResource > m_windowDepthStencilResources
std::unordered_map< std::string, ResourceGraphType::vertex_descriptor > m_resourceVertices
std::vector< Window * > m_bindedWindows
std::vector< MutilBufferImage * > m_needUpdataFramesIndexImages
void saveExecutionOrder(const std::vector< PassGraphType::vertex_descriptor > &sortedPasses, const std::vector< std::vector< PassGraphType::vertex_descriptor > > &passGroups)
std::unordered_map< std::string, PassGraphType::vertex_descriptor > m_passVertex
void bindOutput(const char *name, Window *wnd, uint8_t slot=0)
std::unordered_map< std::string, ImageResourceDesc > m_imageResourceDescs
void bindDepthStencil(const char *name, std::string image)
ResourceGraphType m_resourceGraph
void addPassDenpendency(const std::string &from, const std::string &to)
OldPass * getPassByName(const std::string &name)
void submit(Job *job, std::string name)
Image * getResourceImage(std::string name)
ExecutionOrder m_executionOrder
std::unordered_map< std::string, TextureElement > m_textureLayouts
std::unordered_map< Window *, std::string > m_windowDepthStencilNames
std::unordered_map< Window *, std::string > m_windowBackBufferNames
boost::adjacency_list< boost::vecS, boost::vecS, boost::bidirectionalS, ResourceGraphVertex, ResourceGraphEdge > ResourceGraphType
boost::adjacency_list< boost::vecS, boost::vecS, boost::bidirectionalS, PassGraphVertex, PassGraphEdge > PassGraphType
std::vector< PassGraphType::vertex_descriptor > sortedPasses
std::vector< std::vector< PassGraphType::vertex_descriptor > > passGroups
PassGraphEdgeType type
std::vector< std::string > textures
ResourceGraphEdgeType type