FCT
载入中...
搜索中...
未找到
TraditionRenderPass.h
浏览该文件的文档.
1//
2// Created by Administrator on 2025/5/1.
3//
4#include "./Pass.h"
5#ifndef TRADITIONRENDERPASS_H
6#define TRADITIONRENDERPASS_H
7namespace FCT
8{
9
11{
12protected:
14 {
15 std::vector<TraditionRenderJob*> m_traditionRenderJobs;
16 std::vector<SubmitJob*> m_submitJobs;
17 void clear()
18 {
19 for (auto& job : m_traditionRenderJobs)
20 {
21 job->release();
22 }
23 for (auto& job : m_submitJobs)
24 {
25 job->release();
26 }
28 m_submitJobs.clear();
29 }
33 std::map<TraditionPipelineState*,RHI::RasterizationPipeline*> m_pipelineStates;
34public:
42 {
43 job->addRef();
44 m_currentQueue->m_submitJobs.push_back(job);
45 }
47 {
48 job->addRef();
49 m_currentQueue->m_traditionRenderJobs.push_back(job);
50 }
51 void updateResource() override
52 {
53 std::set<PassResource*> resources;
54 for (auto& job : m_submitQueue->m_traditionRenderJobs)
55 {
56 resources.insert(job->resource);
57 }
58 for (auto& res : resources)
59 {
61 }
62 }
63 void submit(RHI::CommandBuffer* cmdBuf) override
64 {
65 m_pass->beginSubmit(cmdBuf);
66 for (auto& job : m_submitQueue->m_submitJobs)
67 {
68 job->submit(cmdBuf);
69 }
70 for (auto& job : m_submitQueue->m_traditionRenderJobs)
71 {
72 auto pipeline = getOrCreateTraditionPipeline(job->state);
73 cmdBuf->bindPipieline(pipeline);
74 job->resource->bind(cmdBuf,pipeline);
75 job->submit(cmdBuf);
76 }
77 m_pass->endSubmit();
78 }
80 {
81 auto it = m_pipelineStates.find(state);
82 if (it!= m_pipelineStates.end())
83 return it->second;
84 auto pipeline = m_ctx->createTraditionPipeline();
85 pipeline->pixelLayout(state->pixelLayout);
86 pipeline->vertexLayout(state->vertexLayout);
87 pipeline->resourceLayout(state->resourceLayout);
88 pipeline->addResources(state->vertexShader);
89 pipeline->addResources(state->pixelShader);
90 pipeline->addResources(state->blendState);
91 pipeline->addResources(state->rasterizationState);
92 pipeline->addResources(state->depthStencilState);
93 pipeline->bindPass(m_pass);
94 pipeline->create();
95 m_pipelineStates[state] = pipeline;
96 return pipeline;
97 }
98 void swapJobQueue() override
99 {
100 std::swap(m_submitQueue, m_currentQueue);
101 m_currentQueue->clear();
102 }
103 void submit(Job* job) override
104 {
105 switch (job->getType())
106 {
108 submitJob(static_cast<TraditionRenderJob*>(job));
109 break;
110 case JobType::Submit:
111 submitJob(static_cast<SubmitJob*>(job));
112 break;
113 default:
114 break;
115 }
116 }
117};
118}
119#endif //TRADITIONRENDERPASS_H
RHI::Pass * m_pass
定义 Pass.h:30
RenderGraphPassResourceAddCallback m_addResourceCallback
定义 Pass.h:31
Context * m_ctx
定义 Pass.h:27
virtual void bindPipieline(RasterizationPipeline *pipeline)=0
std::map< TraditionPipelineState *, RHI::RasterizationPipeline * > m_pipelineStates
TraditionRenderJobQueue * m_submitQueue
struct FCT::TraditionRenderPass::TraditionRenderJobQueue m_jobQueues[2]
RHI::RasterizationPipeline * getOrCreateTraditionPipeline(TraditionPipelineState *state)
TraditionRenderJobQueue * m_currentQueue
void submit(RHI::CommandBuffer *cmdBuf) override
void submitJob(TraditionRenderJob *job)
virtual JobType getType() const =0
VertexShader * vertexShader
定义 Job.h:32
DepthStencilState * depthStencilState
定义 Job.h:36
PixelShader * pixelShader
定义 Job.h:33
RasterizationState * rasterizationState
定义 Job.h:35
ResourceLayout resourceLayout
定义 Job.h:31
std::vector< TraditionRenderJob * > m_traditionRenderJobs