Repository navigation
Expand file tree
/
Copy pathforay_basics.hpp
More file actions
89 lines (78 loc) · 7.13 KB
/
Copy pathforay_basics.hpp
File metadata and controls
89 lines (78 loc) · 7.13 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#pragma once
#include <memory>
#include <stdint.h>
#include <string>
#include <string_view>
#ifndef NDEBUG
#define FORAY_DEBUG 1
#endif
namespace foray {
/// @brief stdint.h style 32 bit floating point type alias (float)
using fp32_t = float;
/// @brief stdint.h style 64 bit floating point type alias (double)
using fp64_t = double;
/// @brief Simple types for supressing automatic definition of duplicating move constructors & operator
class NoMoveDefaults
{
public:
inline NoMoveDefaults() = default;
NoMoveDefaults(const NoMoveDefaults& other) = delete;
NoMoveDefaults(NoMoveDefaults&& other) = default;
NoMoveDefaults& operator=(const NoMoveDefaults& other) = delete;
};
/// @brief Simple type for forcing a type to be polymorphic
class Polymorphic
{
protected:
virtual void __makeMePolymorphic() {}
};
/// @brief Inflight frame count is the amount of frames 'in flight' aka frames recorded on the host before waiting for the device to finish rendering a previous frame.
inline constexpr uint32_t INFLIGHT_FRAME_COUNT = 2;
} // namespace foray
/// @brief Return value
#define FORAY_GETTER_V(member) \
inline auto Get##member() const \
{ \
return m##member; \
}
/// @brief set by passing a value
#define FORAY_SETTER_V(member) \
template <typename TIn> \
inline auto& Set##member(TIn value) \
{ \
m##member = value; \
return *this; \
}
/// @brief Return mutable reference
#define FORAY_GETTER_MR(member) \
inline auto& Get##member() \
{ \
return m##member; \
}
/// @brief Return constant reference
#define FORAY_GETTER_CR(member) \
inline const auto& Get##member() const \
{ \
return m##member; \
}
/// @brief set by passing a constant reference
#define FORAY_SETTER_R(member) \
template <typename TIn> \
inline auto& Set##member(const TIn& value) \
{ \
m##member = value; \
return *this; \
}
/// @brief Shorthand for mutable & constant reference getters
#define FORAY_GETTER_R(member) \
FORAY_GETTER_MR(member) \
FORAY_GETTER_CR(member)
/// @brief Getter+Setter shorthand for value types
#define FORAY_PROPERTY_V(member) \
FORAY_GETTER_V(member) \
FORAY_SETTER_V(member)
/// @brief Getter+Setter shorthand for reference types
#define FORAY_PROPERTY_R(member) \
FORAY_GETTER_MR(member) \
FORAY_GETTER_CR(member) \
FORAY_SETTER_R(member)