Vulkan Schnee 0.0.1 (22840dc8)
High-performance rendering engine
Loading...
Searching...
No Matches
AssetHandles.h
1#pragma once
2
3#include <cstddef>
4#include <cstdint>
5#include <functional>
6
7namespace Engine::Assets
8{
20 template <typename Tag>
22 {
24 uint32_t index = 0;
25
27 uint32_t generation = 0;
28
30 [[nodiscard]] bool isValid() const noexcept { return generation != 0; }
31
35 explicit operator bool() const noexcept { return isValid(); }
36
40 friend bool operator==(AssetHandle lhs, AssetHandle rhs) noexcept
41 {
42 return lhs.index == rhs.index && lhs.generation == rhs.generation;
43 }
44
48 friend bool operator!=(AssetHandle lhs, AssetHandle rhs) noexcept
49 {
50 return !(lhs == rhs);
51 }
52 };
53
60 {
61 template <typename Tag>
62 [[nodiscard]] constexpr operator AssetHandle<Tag>() const noexcept
63 {
64 return {};
65 }
66 };
67
69 inline constexpr NullAssetHandle Null{};
70
72 template <typename Tag>
74 {
78 std::size_t operator()(AssetHandle<Tag> handle) const noexcept
79 {
80 return (static_cast<std::size_t>(handle.index) << 32u) ^ handle.generation;
81 }
82 };
83
84 struct GltfHandleTag;
85 struct GltfRenderableHandleTag;
86 struct GeometryMeshHandleTag;
87 struct MaterialHandleTag;
88 struct Texture2DHandleTag;
89 struct CubemapTextureHandleTag;
90 struct RenderTargetTextureHandleTag;
91 struct FontAtlasTextureHandleTag;
92 struct AudioClipHandleTag;
93 struct SkeletalMeshHandleTag;
94 struct AnimationClipHandleTag;
95 struct SkinHandleTag;
96 struct SkeletonHandleTag;
97 struct FontHandleTag;
98
108
118
127
136
146
155
164
173
182
191
200
209
218
227} // namespace Engine::Assets
228
229namespace std
230{
234 template <typename Tag>
235 struct hash<Engine::Assets::AssetHandle<Tag>> : Engine::Assets::AssetHandleHash<Tag>
236 {
237 };
238} // namespace std
AssetHandle< GltfRenderableHandleTag > GltfRenderableHandle
Handle to one mesh-bearing node inside a glTF file.
AssetHandle< FontHandleTag > FontHandle
Handle to a font asset.
AssetHandle< SkeletalMeshHandleTag > SkeletalMeshHandle
Handle to skinned mesh geometry.
AssetHandle< CubemapTextureHandleTag > CubemapTextureHandle
Handle to a cubemap texture.
AssetHandle< Texture2DHandleTag > Texture2DHandle
Handle to a file-backed sampled 2D texture.
AssetHandle< GltfHandleTag > GltfHandle
Handle to a glTF container file.
AssetHandle< AnimationClipHandleTag > AnimationClipHandle
Handle to an animation clip.
AssetHandle< SkeletonHandleTag > SkeletonHandle
Handle to skeleton metadata.
AssetHandle< SkinHandleTag > SkinHandle
Handle to skin binding data.
AssetHandle< GeometryMeshHandleTag > GeometryMeshHandle
Handle to non-skinned mesh geometry.
constexpr NullAssetHandle Null
Null value assignable to any typed asset handle.
AssetHandle< AudioClipHandleTag > AudioClipHandle
Handle to audio clip asset data.
AssetHandle< FontAtlasTextureHandleTag > FontAtlasTextureHandle
Handle to the generated texture atlas backing a font.
AssetHandle< RenderTargetTextureHandleTag > RenderTargetTextureHandle
Handle to a renderer-created texture that render passes write into.
AssetHandle< MaterialHandleTag > MaterialHandle
Handle to a material payload.
STL namespace.
Allows handles to be used as unordered_map/set keys without losing the handle's type safety.
std::size_t operator()(AssetHandle< Tag > handle) const noexcept
Computes a hash from a handle's slot index and generation.
Stable typed reference into an asset registry store.
friend bool operator!=(AssetHandle lhs, AssetHandle rhs) noexcept
Compares two handles for inequality.
friend bool operator==(AssetHandle lhs, AssetHandle rhs) noexcept
Compares two handles by slot index and generation.
bool isValid() const noexcept
Returns true for any non-null handle, including one that may be stale for a store.
Explicit null value assignable to any typed asset handle.