Graphics v0.0.0
A simple abstraction layer for the modern graphics APIs.
载入中...
搜索中...
未找到
RID.hpp
1// Copyright 2022 ShenMian
2// License(Apache-2.0)
3
4#pragma once
5
6#include <atomic>
7#include <cassert>
8#include <random>
9#include <set>
10
11class RID
12{
13public:
14 enum class State
15 {
16 Unloaded,
17 Loading,
18 Loaded
19 };
20
21 RID();
22
23 // RID(const RID&) = delete;
24
25 operator uint32_t() const;
26
27private:
28 uint32_t id_;
29 std::atomic<State> state_ = State::Unloaded;
30
31 inline static std::set<uint32_t> used_ids_;
32
33 inline static std::uniform_int_distribution<uint32_t> distrib_;
34 inline static std::mt19937 generator_ = std::mt19937(std::random_device()());
35};
36
37inline RID::RID()
38{
39 assert(used_ids_.size() <= std::numeric_limits<uint32_t>::max());
40#if 1
41 do
42 {
43 id_ = distrib_(generator_);
44 } while(used_ids_.contains(id_));
45#else
46 id = distrib(generator);
47#endif
48}
49
50inline RID::operator uint32_t() const
51{
52 return id_;
53}
Definition: RID.hpp:12