SPARK  0.1.0
A general purpose game engine written in C++.
Loading...
Searching...
No Matches
VulkanFactory.h
1#pragma once
2
3#include "spark/render/GraphicsFactory.h"
4#include "spark/render/vk/Export.h"
5#include "spark/render/vk/VulkanBuffer.h"
6#include "spark/render/vk/VulkanDescriptorLayout.h"
7#include "spark/render/vk/VulkanImage.h"
8#include "spark/render/vk/VulkanIndexBuffer.h"
9#include "spark/render/vk/VulkanVertexBuffer.h"
10
11namespace spark::render::vk
12{
16 class SPARK_RENDER_VK_EXPORT VulkanFactory final : public GraphicsFactory<VulkanDescriptorLayout, IVulkanBuffer, IVulkanVertexBuffer, IVulkanIndexBuffer, IVulkanImage,
17 IVulkanSampler>
18 {
19 public:
24 explicit VulkanFactory(const VulkanDevice& device);
25 ~VulkanFactory() override;
26
27 VulkanFactory(const VulkanFactory& other) = delete;
28 VulkanFactory(VulkanFactory&& other) noexcept = delete;
29 VulkanFactory& operator=(const VulkanFactory& other) = delete;
30 VulkanFactory& operator=(VulkanFactory&& other) noexcept = delete;
31
33 [[nodiscard]] std::unique_ptr<IVulkanBuffer> createBuffer(BufferType type,
34 BufferUsage usage,
35 std::size_t element_size,
36 unsigned elements,
37 bool allow_write) const override;
38
40 [[nodiscard]] std::unique_ptr<IVulkanBuffer> createBuffer(const std::string& name,
41 BufferType type,
42 BufferUsage usage,
43 std::size_t element_size,
44 unsigned elements,
45 bool allow_write) const override;
46
48 [[nodiscard]] std::unique_ptr<IVulkanVertexBuffer> createVertexBuffer(const VulkanVertexBufferLayout& layout, BufferUsage usage, unsigned elements) const override;
49
51 [[nodiscard]] std::unique_ptr<IVulkanVertexBuffer> createVertexBuffer(const std::string& name,
52 const VulkanVertexBufferLayout& layout,
53 BufferUsage usage,
54 unsigned elements) const override;
55
57 [[nodiscard]] std::unique_ptr<IVulkanIndexBuffer> createIndexBuffer(const VulkanIndexBufferLayout& layout, BufferUsage usage, unsigned elements) const override;
58
60 [[nodiscard]] std::unique_ptr<IVulkanIndexBuffer> createIndexBuffer(const std::string& name,
61 const VulkanIndexBufferLayout& layout,
62 BufferUsage usage,
63 unsigned elements) const override;
64
66 [[nodiscard]] std::unique_ptr<IVulkanImage> createAttachment(Format format, const math::Vector2<unsigned>& size, MultiSamplingLevel samples) const override;
67
69 [[nodiscard]] std::unique_ptr<IVulkanImage> createAttachment(const std::string& name,
70 Format format,
71 const math::Vector2<unsigned>& size,
72 MultiSamplingLevel samples) const override;
73
75 [[nodiscard]] std::unique_ptr<IVulkanImage> createTexture(Format format,
76 const math::Vector3<unsigned>& size,
77 ImageDimensions dimension,
78 unsigned levels,
79 unsigned layers,
80 MultiSamplingLevel samples,
81 bool allow_write) const override;
82
84 [[nodiscard]] std::unique_ptr<IVulkanImage> createTexture(const std::string& name,
85 Format format,
86 const math::Vector3<unsigned>& size,
87 ImageDimensions dimension,
88 unsigned levels,
89 unsigned layers,
90 MultiSamplingLevel samples,
91 bool allow_write) const override;
92
94 [[nodiscard]] std::vector<std::unique_ptr<IVulkanImage>> createTextures(std::size_t elements,
95 Format format,
96 const math::Vector3<unsigned>& size,
97 ImageDimensions dimension,
98 unsigned layers,
99 unsigned levels,
100 MultiSamplingLevel samples,
101 bool allow_write) const override;
102
104 [[nodiscard]] std::unique_ptr<IVulkanSampler> createSampler(FilterMode mag_filter,
105 FilterMode min_filter,
106 BorderMode border_u,
107 BorderMode border_v,
108 BorderMode border_w,
109 MipMapMode mip_map_mode,
110 float mip_map_bias,
111 float max_lod,
112 float min_lod,
113 float anisotropy) const override;
114
116 [[nodiscard]] std::unique_ptr<IVulkanSampler> createSampler(const std::string& name,
117 FilterMode mag_filter,
118 FilterMode min_filter,
119 BorderMode border_u,
120 BorderMode border_v,
121 BorderMode border_w,
122 MipMapMode mip_map_mode,
123 float mip_map_bias,
124 float max_lod,
125 float min_lod,
126 float anisotropy) const override;
127
129 [[nodiscard]] std::vector<std::unique_ptr<IVulkanSampler>> createSamplers(std::size_t elements,
130 FilterMode mag_filter,
131 FilterMode min_filter,
132 BorderMode border_u,
133 BorderMode border_v,
134 BorderMode border_w,
135 MipMapMode mip_map_mode,
136 float mip_map_bias,
137 float max_lod,
138 float min_lod,
139 float anisotropy) const override;
140
141 private:
142 struct Impl;
143 std::unique_ptr<Impl> m_impl;
144 };
145}
A vector with two components.
Definition Vector2.h:13
A vector with three components.
Definition Vector3.h:13
Describes a factory that creates objects for a IGraphicsDevice.
Definition GraphicsFactory.h:516
Vulkan implementation of IGraphicsDevice.
Definition VulkanDevice.h:25
Vulkan implementation of IGraphicsFactory.
Definition VulkanFactory.h:18
Implements IIndexBufferLayout for Vulkan.
Definition VulkanIndexBufferLayout.h:12
Implements IVertexBufferLayout for Vulkan.
Definition VulkanVertexBufferLayout.h:14
Definition VulkanFactory.cpp:12