From 5e3bb454d50091e581d5d1d03af34e38277694b3 Mon Sep 17 00:00:00 2001 From: ladevieq Date: Thu, 12 Jan 2023 00:47:59 +0100 Subject: WIP new rendering api --- include/texture.hpp | 83 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 include/texture.hpp (limited to 'include/texture.hpp') diff --git a/include/texture.hpp b/include/texture.hpp new file mode 100644 index 0000000..aac7b69 --- /dev/null +++ b/include/texture.hpp @@ -0,0 +1,83 @@ +#include + +using VkImage = struct VkImage_T*; + +struct TextureDesc { + VkImageType type; + VkFormat format; + VkExtent size; + VkImageUsageFlags usages; +}; + +class Texture { + public: + Texture(const TextureDesc desc) + : description(desc) { + create_device_image(); + } + + // Texture(handle image_handle) { + // const auto& image = vkrenderer::api.get_image(image_handle); + // width = image.size.width; + // height = image.size.height; + // depth = image.size.depth; + + // device_image = image_handle; + // } + + // Texture(size_t width, size_t height, size_t depth, VkFormat format = VK_FORMAT_R8G8B8A8_UNORM, Sampler* texture_sampler = nullptr) + // : width(width), height(height), depth(depth) { + // sampler = texture_sampler; + // device_image = vkrenderer::api.create_image( + // { .width = (uint32_t)width, .height = (uint32_t)height, .depth = 1 }, + // format, + // VK_IMAGE_USAGE_STORAGE_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_SAMPLED_BIT); + // } + + void update(void* new_data) { + if (data == nullptr) { + free(data); + } + data = new_data; + + vkrenderer::queue_image_update(this); + } + + ~Texture() { + vkrenderer::api.destroy_image(device_image); + + if (data == nullptr) { + free(data); + } + } + + [[nodiscard]] size_t size() const { + const auto& image = vkrenderer::api.get_image(device_image); + return width * height * depth * pixel_size(image.format); + } + + static size_t pixel_size(VkFormat format) { + switch (format) { + case VK_FORMAT_R8G8B8A8_UNORM: + return 4; + default: + return 0; + } + } + + // Sampler* sampler = nullptr; + + private: + void create_device_image(); + + void* data = nullptr; + + size_t width = 0; + size_t height = 0; + size_t depth = 0; + + TextureDesc description; + + VmaAllocationInfo alloc_info; + VkImage device_image; +}; -- cgit v1.3