FCT
载入中...
搜索中...
未找到
Job.h
浏览该文件的文档.
1//
2// Created by Administrator on 2025/5/1.
3//
4
5#ifndef JOB_H
6#define JOB_H
7#include "PassResource.h"
8#include "ResourceLayout.h"
9#include "Vertex.h"
10#include "Mesh.h"
11
12namespace FCT {
13 class VertexShader;
14 class PixelShader;
15 class BlendState;
18
38
39 namespace RHI
40 {
41 class CommandBuffer;
42 }
43
44 enum class JobType
45 {
48 };
49 struct Job : RefCount
50 {
51 virtual JobType getType() const = 0;
52 virtual void submit(RHI::CommandBuffer* cmdBuf) = 0;
53 };
54
56 {
57 JobType getType() const override
58 {
60 }
63 std::vector<StaticMesh<uint16_t>*> meshes16;
64 std::vector<StaticMesh<uint32_t>*> meshes32;
65 std::vector<DynamicMesh<uint32_t>*> meshes32Dynamic;
66 std::vector<DynamicMesh<uint16_t>*> meshes16Dynamic;
70 : resource(nullptr)
71 , state(nullptr)
72 , needsUpdate(false)
73 , isCreated(false)
74 {
75 }
77 {
78 meshes16.push_back(mesh);
79 needsUpdate = true;
80 return *this;
81 }
83 {
84 meshes32.push_back(mesh);
85 needsUpdate = true;
86 return *this;
87 }
89 {
90 meshes32Dynamic.push_back(mesh);
91 needsUpdate = true;
92 return *this;
93 }
95 {
96 meshes16Dynamic.push_back(mesh);
97 needsUpdate = true;
98 return *this;
99 }
101 {
102 this->resource = resource;
103 return *this;
104 }
106 {
107 this->state = state;
108 return *this;
109 }
110 virtual void submit(RHI::CommandBuffer* cmdBuf)
111 {
112 for (auto& mesh : meshes16)
113 {
114 mesh->bind(cmdBuf);
115 mesh->draw(cmdBuf);
116 }
117 for (auto& mesh : meshes32)
118 {
119 mesh->bind(cmdBuf);
120 mesh->draw(cmdBuf);
121 }
122 for (auto& mesh : meshes32Dynamic)
123 {
124 mesh->bind(cmdBuf);
125 mesh->draw(cmdBuf);
126 }
127 for (auto& mesh : meshes16Dynamic)
128 {
129 mesh->bind(cmdBuf);
130 mesh->draw(cmdBuf);
131 }
132 }
133 };
134
135 struct SubmitJob : Job
136 {
137 JobType getType() const override
138 {
139 return JobType::Submit;
140 }
141 virtual void submit(RHI::CommandBuffer* cmdBuf)
142 {
143
144 }
145 };
146 struct ViewportJob : public SubmitJob
147 {
153 {
154 this->viewportLt = viewportLt;
155 this->viewportRb = viewportRb;
156 this->scissorLt = scissorLt;
157 this->scissorRb = scissorRb;
158 }
159 JobType getType() const override
160 {
161 return JobType::Submit;
162 }
163 virtual void submit(RHI::CommandBuffer* cmdBuf)
164 {
166 cmdBuf->scissor(scissorLt, scissorRb);
167 }
168 };
169}
170#endif //JOB_H
virtual void scissor(Vec2 lt, Vec2 rb)=0
virtual void viewport(Vec2 lt, Vec2 rb)=0
JobType
定义 Job.h:45
virtual JobType getType() const =0
virtual void submit(RHI::CommandBuffer *cmdBuf)=0
JobType getType() const override
定义 Job.h:137
virtual void submit(RHI::CommandBuffer *cmdBuf)
定义 Job.h:141
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< DynamicMesh< uint16_t > * > meshes16Dynamic
定义 Job.h:66
std::vector< StaticMesh< uint32_t > * > meshes32
定义 Job.h:64
std::vector< DynamicMesh< uint32_t > * > meshes32Dynamic
定义 Job.h:65
TraditionRenderJob & addMesh(StaticMesh< uint16_t > *mesh)
定义 Job.h:76
std::vector< StaticMesh< uint16_t > * > meshes16
定义 Job.h:63
TraditionRenderJob & addMesh(DynamicMesh< uint32_t > *mesh)
定义 Job.h:88
PassResource * resource
定义 Job.h:61
TraditionPipelineState * state
定义 Job.h:62
TraditionRenderJob & addMesh(StaticMesh< uint32_t > *mesh)
定义 Job.h:82
virtual void submit(RHI::CommandBuffer *cmdBuf)
定义 Job.h:110
JobType getType() const override
定义 Job.h:57
TraditionRenderJob & setPassResource(PassResource *resource)
定义 Job.h:100
TraditionRenderJob & setPipelineState(TraditionPipelineState *state)
定义 Job.h:105
TraditionRenderJob & addMesh(DynamicMesh< uint16_t > *mesh)
定义 Job.h:94
ViewportJob(Vec2 viewportLt, Vec2 viewportRb, Vec2 scissorLt, Vec2 scissorRb)
定义 Job.h:152
JobType getType() const override
定义 Job.h:159
virtual void submit(RHI::CommandBuffer *cmdBuf)
定义 Job.h:163