58 const std::string &pngPath,
59 const std::string &vertexShaderPath =
"",
60 const std::string &fragmentShaderPath =
"");
71 const std::string &vertexShaderPath =
"",
72 const std::string &fragmentShaderPath =
"");
80 void updateCamera(uint32_t imageIndex,
const glm::mat4 &view,
const glm::mat4 &proj);
90 const glm::vec2 &size,
91 const glm::vec4 &color = glm::vec4(1.0f),
92 float rotationRadians = 0.0f);
99 void render(VkCommandBuffer cmd, uint32_t imageIndex);
136 [[nodiscard]]
bool loaded()
const {
return spriteLoaded; }
138 [[nodiscard]]
int getWidth()
const {
return spriteWidth; }
140 [[nodiscard]]
int getHeight()
const {
return spriteHeight; }
154 float rotationRadians = 0.0f;
159 glm::mat4 view{1.0f};
160 glm::mat4 proj{1.0f};
163 VkDevice device = VK_NULL_HANDLE;
164 VkPhysicalDevice physicalDevice = VK_NULL_HANDLE;
165 VkQueue graphicsQueue = VK_NULL_HANDLE;
166 VkCommandPool commandPool = VK_NULL_HANDLE;
167 VkPipelineCache pipelineCache = VK_NULL_HANDLE;
168 VkFormat colorAttachmentFormat = VK_FORMAT_UNDEFINED;
169 VkFormat depthAttachmentFormat = VK_FORMAT_UNDEFINED;
170 size_t imageCount = 0;
172 VkImage spriteImage = VK_NULL_HANDLE;
173 VkDeviceMemory spriteImageMemory = VK_NULL_HANDLE;
174 VkImageView spriteImageView = VK_NULL_HANDLE;
175 VkSampler spriteSampler = VK_NULL_HANDLE;
177 int spriteHeight = 0;
178 bool spriteLoaded =
false;
180 VkBuffer vertexBuffer = VK_NULL_HANDLE;
181 VkDeviceMemory vertexBufferMemory = VK_NULL_HANDLE;
182 VkBuffer indexBuffer = VK_NULL_HANDLE;
183 VkDeviceMemory indexBufferMemory = VK_NULL_HANDLE;
185 VkDescriptorSetLayout descriptorSetLayout = VK_NULL_HANDLE;
186 VkDescriptorPool descriptorPool = VK_NULL_HANDLE;
187 std::vector<VkDescriptorSet> descriptorSets;
189 std::vector<VkBuffer> cameraBuffers;
190 std::vector<VkDeviceMemory> cameraBufferMemory;
191 std::vector<void *> cameraBuffersMapped;
193 VkPipelineLayout pipelineLayout = VK_NULL_HANDLE;
194 VkPipeline pipeline = VK_NULL_HANDLE;
195 std::string vertexShaderPath;
196 std::string fragmentShaderPath;
197 bool depthTestEnabled =
true;
198 bool depthWriteEnabled =
false;
199 float alphaDiscardThreshold = 0.1f;
201 std::vector<DrawCmd> drawQueue;
204 void createQuadBuffers();
206 void createTexture(SDL_Surface *surface);
208 void createSampler();
210 void createDescriptorSetLayout();
212 void createCameraBuffers();
214 void destroyCameraBuffers();
216 void createDescriptorPool();
218 void createDescriptorSets();
220 void createPipeline();
222 void destroyPipeline();
224 void destroyTexture();
226 void destroyBuffers();
228 void destroyDescriptors();
238 void createBuffer(VkDeviceSize size,
239 VkBufferUsageFlags usage,
240 VkMemoryPropertyFlags properties,
242 VkDeviceMemory &bufferMemory)
const;
244 [[nodiscard]] uint32_t findMemoryType(uint32_t typeFilter, VkMemoryPropertyFlags properties)
const;
246 [[nodiscard]] VkCommandBuffer beginSingleTimeCommands()
const;
248 void endSingleTimeCommands(VkCommandBuffer commandBuffer)
const;
260 void createImage(uint32_t width,
263 VkImageTiling tiling,
264 VkImageUsageFlags usage,
265 VkMemoryPropertyFlags properties,
267 VkDeviceMemory &imageMemory)
const;
269 [[nodiscard]] VkImageView createImageView(VkImage image, VkFormat format)
const;
271 void transitionImageLayout(VkImage image, VkImageLayout oldLayout, VkImageLayout newLayout)
const;
273 void copyBufferToImage(VkBuffer buffer, VkImage image, uint32_t width, uint32_t height)
const;
275 [[nodiscard]] SDL_Surface *convertToRGBA(SDL_Surface *surface)
const;
277 [[nodiscard]] std::vector<char> readShaderFile(
const std::string &path)
const;