Vulkan Schnee 0.0.1
High-performance rendering engine
Loading...
Searching...
No Matches
AssetHandles.h
Go to the documentation of this file.
1#pragma once
2
3#include <cstddef>
4#include <cstdint>
5#include <functional>
6
7namespace Engine::Assets
8{
9 template <typename Tag>
11 {
12 uint32_t index = 0;
13 uint32_t generation = 0;
14
15 [[nodiscard]] bool isValid() const noexcept { return generation != 0; }
16 explicit operator bool() const noexcept { return isValid(); }
17
18 friend bool operator==(AssetHandle lhs, AssetHandle rhs) noexcept
19 {
20 return lhs.index == rhs.index && lhs.generation == rhs.generation;
21 }
22
23 friend bool operator!=(AssetHandle lhs, AssetHandle rhs) noexcept
24 {
25 return !(lhs == rhs);
26 }
27 };
28
29 template <typename Tag>
31 {
32 std::size_t operator()(AssetHandle<Tag> handle) const noexcept
33 {
34 return (static_cast<std::size_t>(handle.index) << 32u) ^ handle.generation;
35 }
36 };
37
38 struct GltfHandleTag;
39 struct GltfRenderableHandleTag;
40 struct GeometryMeshHandleTag;
41 struct MaterialHandleTag;
42 struct Texture2DHandleTag;
43 struct CubemapTextureHandleTag;
44 struct RenderTargetTextureHandleTag;
45 struct FontAtlasTextureHandleTag;
46 struct AudioClipHandleTag;
47 struct SkeletalMeshHandleTag;
48 struct AnimationClipHandleTag;
49 struct SkinHandleTag;
50 struct SkeletonHandleTag;
51 struct FontHandleTag;
52
67} // namespace Engine::Assets
68
69namespace std
70{
71 template <typename Tag>
72 struct hash<Engine::Assets::AssetHandle<Tag>> : Engine::Assets::AssetHandleHash<Tag>
73 {
74 };
75} // namespace std
AssetHandle< GltfRenderableHandleTag > GltfRenderableHandle
AssetHandle< FontHandleTag > FontHandle
AssetHandle< SkeletalMeshHandleTag > SkeletalMeshHandle
AssetHandle< CubemapTextureHandleTag > CubemapTextureHandle
AssetHandle< Texture2DHandleTag > Texture2DHandle
AssetHandle< GltfHandleTag > GltfHandle
AssetHandle< AnimationClipHandleTag > AnimationClipHandle
AssetHandle< SkeletonHandleTag > SkeletonHandle
AssetHandle< SkinHandleTag > SkinHandle
AssetHandle< GeometryMeshHandleTag > GeometryMeshHandle
AssetHandle< AudioClipHandleTag > AudioClipHandle
AssetHandle< FontAtlasTextureHandleTag > FontAtlasTextureHandle
AssetHandle< RenderTargetTextureHandleTag > RenderTargetTextureHandle
AssetHandle< MaterialHandleTag > MaterialHandle
STL namespace.
std::size_t operator()(AssetHandle< Tag > handle) const noexcept
friend bool operator!=(AssetHandle lhs, AssetHandle rhs) noexcept
friend bool operator==(AssetHandle lhs, AssetHandle rhs) noexcept
bool isValid() const noexcept