vkmEngine 1.0.0
A C++ game engine · vkmengine.com
Loading...
Searching...
No Matches
async_load_queue.h
1#pragma once
2
3#include <cstdint>
4#include <mutex>
5#include <vector>
6
7#include "resource/asset/mesh_asset.h"
8#include "resource/asset/texture_asset.h"
9
10namespace Vkm::Engine {
11
19template<typename Asset>
21 Handle<Asset> handle;
23 uint64_t assetUid = 0;
25 Asset decoded;
26};
27
28using MeshLoadCompletion = LoadCompletion<MeshAsset>;
29using TextureLoadCompletion = LoadCompletion<TextureAsset>;
30
36class AsyncLoadQueue {
37 public:
38 ~AsyncLoadQueue() = default;
39
40 AsyncLoadQueue(const AsyncLoadQueue& other) = delete;
41 AsyncLoadQueue& operator=(const AsyncLoadQueue& other) = delete;
42
43 AsyncLoadQueue(AsyncLoadQueue && other) = delete;
44 AsyncLoadQueue& operator=(AsyncLoadQueue && other) = delete;
45
46 public:
47 static AsyncLoadQueue& get();
48
49 void pushTexture(TextureLoadCompletion completion);
50 void pushMesh(MeshLoadCompletion completion);
51
59 std::vector<TextureLoadCompletion> drainTextures();
60 std::vector<MeshLoadCompletion> drainMeshes();
61
62 private:
63 AsyncLoadQueue() = default;
64
65 private:
66 std::mutex m_mutex;
67 std::vector<TextureLoadCompletion> m_textures;
68 std::vector<MeshLoadCompletion> m_meshes;
69};
70
71} // namespace Vkm::Engine
std::vector< TextureLoadCompletion > drainTextures()
Move every pending completion out under one lock; main thread only.
Opaque, type-safe handle for resources, distinguished by ResourceType.
Definition resource_handle.h:16
One finished decode, landed on the main thread into the asset it was requested for.
Definition async_load_queue.h:20
MeshAsset decoded
Definition async_load_queue.h:25
uint64_t assetUid
Definition async_load_queue.h:23