5#include <SDL3/SDL_gpu.h>
13#include <unordered_map>
65 [[
nodiscard]] std::expected<MeshGPUUploadPlan, MeshGPUError>
74 std::shared_ptr<const data::HmdTextureImage>
source;
102 std::unordered_map<std::uint64_t, MeshGPUTextureResource>
textures;
103 std::shared_ptr<const data::MeshRuntimeAsset>
source;
138 [[
nodiscard]] std::expected<const MeshGPUResource*, MeshGPUError>
139 resolve(std::shared_ptr<const data::MeshRuntimeAsset> asset);
142 [[
nodiscard]] std::expected<const MeshGPUResource*, MeshGPUError>
176 [[
nodiscard]] std::expected<const MeshGPUResource*, MeshGPUError>
177 resolveImpl(std::shared_ptr<const data::MeshRuntimeAsset> asset,
bool coexist);
179 std::unordered_map<const data::MeshRuntimeAsset*, MeshGPUResource> resources_;
180 std::uint64_t resolvedOrder_{};
181 std::unordered_map<std::uint64_t, MeshGPUDynamicVertexResource> dynamicVertices_;
182 std::vector<std::shared_ptr<const data::MeshRuntimeAsset>> retainedStaticAssets_;
bool retainStaticAssets(std::vector< std::shared_ptr< const data::MeshRuntimeAsset > > assets) noexcept
MeshGPUCache(const MeshGPUCache &)=delete
MeshGPUCache & operator=(MeshGPUCache &&)=delete
SDL_GPUDevice * device() const noexcept
std::size_t size() const noexcept
const MeshGPUDynamicVertexResource * findDynamic(std::uint64_t key) const noexcept
void erase(data::DataId id) noexcept
const MeshGPUResource * find(data::DataId id) const noexcept
std::expected< const MeshGPUDynamicVertexResource *, MeshGPUError > resolveDynamicVertices(std::uint64_t key, std::shared_ptr< const data::MeshRuntimeAsset > asset, std::shared_ptr< const data::MeshRenderData > renderData)
void prune(std::span< const data::DataId > activeIds) noexcept
MeshGPUCache(MeshGPUCache &&)=delete
void pruneAssets(std::span< const data::MeshRuntimeAsset *const > activeAssets) noexcept
void pruneDynamicVertices(std::span< const std::uint64_t > activeKeys) noexcept
std::expected< const MeshGPUResource *, MeshGPUError > resolveForScene(std::shared_ptr< const data::MeshRuntimeAsset > asset)
static constexpr std::size_t MaximumRetainedStaticAssets
std::expected< const MeshGPUResource *, MeshGPUError > resolve(std::shared_ptr< const data::MeshRuntimeAsset > asset)
std::size_t dynamicSize() const noexcept
MeshGPUCache & operator=(const MeshGPUCache &)=delete
std::expected< MeshGPUUploadPlan, MeshGPUError > makeMeshGPUUploadPlan(const data::MeshRenderData &renderData)
@ CommandBufferCreationFailed
@ DynamicTopologyMismatch
@ VertexBufferCreationFailed
@ TransferBufferCreationFailed
@ UnsupportedTextureFormat
@ IndexBufferCreationFailed
std::shared_ptr< const data::MeshRenderData > sourceRenderData
std::shared_ptr< const data::MeshRuntimeAsset > sourceAsset
std::uint32_t vertexCount
SDL_GPUBuffer * vertexBuffer
data::ModernTextureBinding source
std::vector< MeshGPUModernTextureResource > modernTextures
std::uint64_t lastResolvedOrder
std::shared_ptr< const data::MeshRuntimeAsset > source
SDL_GPUBuffer * indexBuffer
std::uint32_t vertexCount
SDL_GPUBuffer * vertexBuffer
std::unordered_map< std::uint64_t, MeshGPUTextureResource > textures
const MeshGPUModernTextureResource * modernTexture(const data::ModernTextureBinding &binding) const noexcept
SDL_GPUTexture * texture(std::uint64_t key) const noexcept
std::shared_ptr< const data::HmdTextureImage > source
std::vector< MeshGPUVertex > vertices
std::uint32_t transferBytes
std::vector< std::uint32_t > indices
std::uint32_t vertexBytes