FCT
载入中...
搜索中...
未找到
Device.h
浏览该文件的文档.
1//
2// Created by Administrator on 2025/7/27.
3//
4
5#ifndef DEVICE_H
6#define DEVICE_H
7#include <type_traits>
8
9namespace FCT {
10 class VertexShader;
11 class PixelShader;
12 class Image;
14 class MutilBufferImage;
15 class DescriptorPool;
17 class BlendState;
18 class Sampler;
19 class PassResource;
20 class SemaphorePool;
21 class FencePool;
22
23 namespace RHI {
25 class VertexShader;
26 class PixelShader;
27 class ConstBuffer;
28 class InputLayout;
29 class Image;
30 class Swapchain;
31 class PassGroup;
32 class Pass;
33 class Fence;
34 class Semaphore;
35 class CommandPool;
36 class VertexBuffer;
37 class IndexBuffer;
38 class DescriptorPool;
39 class RenderTargetView;
40 class DepthStencilView;
41 class TextureView;
43 {
44
45 };
46 }
47
61
62 class Device
63 {
64 public:
65 virtual ~Device() = default;
74 virtual RHI::Image* newRhiImage() = 0;
77 virtual RHI::Pass* newRhiPass() = 0;
78 virtual RHI::Fence* newRhiFence() = 0;
88 virtual BlendState* newBlendState() = 0;
89 virtual Sampler* newSampler() = 0;
92 virtual FencePool* newFencePool() = 0;
93 template <typename T>
95 {
96 if constexpr (std::is_same_v<T, VertexShader>)
97 return newVertexShader();
98 else if constexpr (std::is_same_v<T, PixelShader>)
99 return newPixelShader();
100 else if constexpr (std::is_same_v<T, RHI::VertexShader>)
101 return newRhiVertexShader();
102 else if constexpr (std::is_same_v<T, RHI::PixelShader>)
103 return newRhiPixelShader();
104 else if constexpr (std::is_same_v<T, RHI::ConstBuffer>)
105 return newRhiConstBuffer();
106 else if constexpr (std::is_same_v<T, RHI::InputLayout>)
107 return newRhiInputLayout();
108 else if constexpr (std::is_same_v<T, Image>)
109 return newSingleBufferImage();
110 else if constexpr (std::is_same_v<T, SingleBufferImage>)
111 return newSingleBufferImage();
112 else if constexpr (std::is_same_v<T, MutilBufferImage>)
113 return newMutilBufferImage();
114 else if constexpr (std::is_same_v<T, RHI::Image>)
115 return newRhiImage();
116 else if constexpr (std::is_same_v<T, RHI::Swapchain>)
117 return newRhiSwapchain();
118 else if constexpr (std::is_same_v<T, RHI::PassGroup>)
119 return newRhiPassGroup();
120 else if constexpr (std::is_same_v<T, RHI::Pass>)
121 return newRhiPass();
122 else if constexpr (std::is_same_v<T, RHI::Fence>)
123 return newRhiFence();
124 else if constexpr (std::is_same_v<T, RHI::Semaphore>)
125 return newRhiSemaphore();
126 else if constexpr (std::is_same_v<T, RHI::CommandPool>)
127 return newRhiCommandPool();
128 else if constexpr (std::is_same_v<T, RHI::VertexBuffer>)
129 return newRhiVertexBuffer();
130 else if constexpr (std::is_same_v<T, RHI::IndexBuffer>)
131 return newRhiIndexBuffer();
132 else if constexpr (std::is_same_v<T, RHI::DescriptorPool>)
133 return newRhiDescriptorPool();
134 else if constexpr (std::is_same_v<T, RHI::RenderTargetView>)
135 return newRhiRenderTargetView();
136 else if constexpr (std::is_same_v<T, RHI::DepthStencilView>)
137 return newRhiDepthStencilView();
138 else if constexpr (std::is_same_v<T, RHI::TextureView>)
139 return newRhiTextureView();
140 else if constexpr (std::is_same_v<T, RasterizationState>)
141 return newRasterizationState();
142 else if constexpr (std::is_same_v<T, BlendState>)
143 return newBlendState();
144 else if constexpr (std::is_same_v<T, Sampler>)
145 return newSampler();
146 else if constexpr (std::is_same_v<T, PassResource>)
147 return newPassResource();
148 else if constexpr (std::is_same_v<T, SemaphorePool>)
149 return newSemaphorePool();
150 else if constexpr (std::is_same_v<T, FencePool>)
151 return newFencePool();
152 return nullptr;
153 }
154 protected:
155 };
156}
157
158#endif //DEVICE_H
virtual VertexShader * newVertexShader()=0
virtual RHI::Semaphore * newRhiSemaphore()=0
virtual RHI::IndexBuffer * newRhiIndexBuffer()=0
virtual BlendState * newBlendState()=0
virtual RHI::Swapchain * newRhiSwapchain()=0
virtual RHI::InputLayout * newRhiInputLayout()=0
virtual PassResource * newPassResource()=0
virtual RHI::TextureView * newRhiTextureView()=0
virtual Sampler * newSampler()=0
virtual RHI::PixelShader * newRhiPixelShader()=0
virtual RHI::DescriptorPool * newRhiDescriptorPool()=0
virtual RHI::Image * newRhiImage()=0
virtual SemaphorePool * newSemaphorePool()=0
T * createResource()
virtual RHI::Fence * newRhiFence()=0
virtual RasterizationState * newRasterizationState()=0
virtual MutilBufferImage * newMutilBufferImage()=0
virtual RHI::PassGroup * newRhiPassGroup()=0
virtual RHI::RenderTargetView * newRhiRenderTargetView()=0
virtual SingleBufferImage * newSingleBufferImage()=0
virtual RHI::DepthStencilView * newRhiDepthStencilView()=0
virtual RHI::Pass * newRhiPass()=0
virtual PixelShader * newPixelShader()=0
virtual RHI::ConstBuffer * newRhiConstBuffer()=0
virtual RHI::VertexShader * newRhiVertexShader()=0
virtual RHI::VertexBuffer * newRhiVertexBuffer()=0
virtual FencePool * newFencePool()=0
virtual ~Device()=default
virtual RHI::CommandPool * newRhiCommandPool()=0
通过这个命名空间即可知道可以创建哪些资源
FCT::SingleBufferImage SingleBufferImage
FCT::PixelShader PixelShader
FCT::VertexShader VertexShader
FCT::MutilBufferImage MutilBufferImage