Files
Destrum/destrum/include/destrum/Graphics/RenderResources.h
T

81 lines
2.5 KiB
C++

#ifndef RENDER_RESOURCES_H
#define RENDER_RESOURCES_H
#include <destrum/Graphics/Caches/ImageCache.h>
#include <destrum/Graphics/Caches/MeshCache.h>
#include <destrum/Graphics/Caches/MaterialCache.h>
#include <destrum/Graphics/ids.h>
#include <destrum/Graphics/Util.h>
#include <filesystem>
#include <memory>
#include <string_view>
class GfxDevice;
class RenderResources {
public:
RenderResources();
RenderResources(const RenderResources&) = delete;
RenderResources& operator=(const RenderResources&) = delete;
void init(GfxDevice& gfxDevice);
void cleanup(GfxDevice& gfxDevice);
ImageID createImage(
GfxDevice& gfxDevice,
const vkutil::CreateImageInfo& createInfo,
const std::string& debugName = "",
void* pixelData = nullptr,
ImageID imageId = NULL_IMAGE_ID);
ImageID createDrawImage(
GfxDevice& gfxDevice,
VkFormat format,
glm::ivec2 size,
const std::string& debugName = "",
ImageID imageId = NULL_IMAGE_ID);
ImageID loadImageFromFile(
GfxDevice& gfxDevice,
const std::filesystem::path& path,
VkImageUsageFlags usage = VK_IMAGE_USAGE_SAMPLED_BIT,
bool mipMap = false,
TextureIntent intent = TextureIntent::ColorSrgb);
ImageID addImageToCache(GPUImage image);
// Imports a file-backed model and uploads its mesh/material resources.
// References are keyed as "source#subresource" in the resource caches.
void loadModelAsset(GfxDevice& gfxDevice, std::string_view sourceReference);
[[nodiscard]] const GPUImage& getImage(ImageID id) const;
[[nodiscard]] ImageID getWhiteTextureID() const { return whiteImageId; }
[[nodiscard]] ImageID getErrorTextureID() const { return errorImageId; }
BindlessSetManager& getBindlessSetManager();
VkDescriptorSetLayout getBindlessDescSetLayout() const;
const VkDescriptorSet& getBindlessDescSet() const;
void bindBindlessDescSet(VkCommandBuffer cmd, VkPipelineLayout layout) const;
MeshCache& meshes() { return *meshCache; }
const MeshCache& meshes() const { return *meshCache; }
MaterialCache& materials() { return *materialCache; }
const MaterialCache& materials() const { return *materialCache; }
private:
static uint32_t BytesPerTexel(VkFormat fmt);
std::unique_ptr<ImageCache> imageCache;
std::unique_ptr<MeshCache> meshCache;
std::unique_ptr<MaterialCache> materialCache;
ImageID whiteImageId{NULL_IMAGE_ID};
ImageID errorImageId{NULL_IMAGE_ID};
ImageID defaultNormalImageId{NULL_IMAGE_ID};
};
#endif