81 lines
2.5 KiB
C++
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
|