GLSL Struct 1.4.0
glslstruct
Loading...
Searching...
No Matches
var_data.hpp
1/*
2 * glslstruct - a C++ library designed to easily represent GLSL's Uniform Buffer Objects (UBOs) and Shader Storage Buffer Objects (SSBOs) in C++.
3 *
4 * Licensed under the BSD 3-Clause License with Attribution Requirement.
5 * See the LICENSE file for details: https://github.com/MAIPA01/glslstruct/blob/main/LICENSE
6 *
7 * Copyright (c) 2025, Patryk Antosik (MAIPA01)
8 */
9
10#pragma once
11#ifndef _GLSL_STRUCT_STRUCT_ELEM_DATA_HPP_
12 #define _GLSL_STRUCT_STRUCT_ELEM_DATA_HPP_
13
14 #include <glslstruct/config.hpp>
15
17_GLSL_STRUCT_ERROR("This is only available for c++17 and greater!");
18 #else
19
20 #include <glslstruct/types.hpp>
21
22namespace glslstruct {
23 /**
24 * @brief container for all variable data
25 * @ingroup glslstruct
26 */
27 class var_data {
28 private:
29 friend struct std::hash<var_data>;
30
32 /// @brief type of variable
33 base_type_handle _type;
34 #else
35 /// @brief size of variable type
36 size_t _size;
37 #endif
38 /// @brief variable offset
39 size_t _offset;
40 /// @brief additional variable padding
41 size_t _padding;
42 /// @brief indicates if variable is in top level
43 bool _isTopLevel;
44
45 public:
47 /// @brief constructor with offset, var type and padding
48 var_data(size_t offset, const base_type_handle& type, bool isTopLevel, size_t padding) noexcept;
49 #else
50 /// @brief constructor with offset, var type size and padding
51 var_data(size_t offset, size_t size, bool isTopLevel, size_t padding) noexcept;
52 #endif
53 /// @brief default copy constructor
54 var_data(const var_data& other) noexcept;
55 /// @brief default move constructor
56 var_data(var_data&& other) noexcept;
57 /// @brief default destructor
58 ~var_data() noexcept;
59
60 /// @brief default copy assign operator
61 var_data& operator=(const var_data& other) noexcept;
62 /// @brief default move assign operator
63 var_data& operator=(var_data&& other) noexcept;
64
65 /// @brief padding setter
66 void set_padding(size_t padding) noexcept;
67 /// @brief sets top level
68 void set_is_top_level(bool topLevel) noexcept;
69
71 /// @brief returns type of variable
72 [[nodiscard]] const base_type_handle& get_type() const noexcept;
73 #endif
74 /// @brief returns var offset
75 [[nodiscard]] size_t get_offset() const noexcept;
76 /// @brief returns var total size (size + padding)
77 [[nodiscard]] size_t get_total_size() const noexcept;
78 /// @brief returns var size
79 [[nodiscard]] size_t get_size() const noexcept;
80 /// @brief returns var padding
81 [[nodiscard]] size_t get_padding() const noexcept;
82 /// @brief returns isTopLevel
83 [[nodiscard]] bool is_top_level() const noexcept;
84
85 /// @brief checks if this var_data is equal to other var_data
86 [[nodiscard]] bool operator==(const var_data& other) const noexcept;
87 /// @brief checks if this var_data is not equal to other var_data
88 [[nodiscard]] bool operator!=(const var_data& other) const noexcept;
89 };
90} // namespace glslstruct
91
92/**
93 * @brief std::hash overload for var_data
94 * @ingroup glsl_types
95 */
96template<>
97struct std::hash<glslstruct::var_data> {
98 [[nodiscard]] size_t operator()(const glslstruct::var_data& value) const noexcept;
99};
100 #endif
101#endif
#define _GLSL_STRUCT_HAS_CXX17
check if compiler has c++ version greater or equal to c++17
Definition config.hpp:130
#define _GLSL_STRUCT_HAS_TYPES
check if user not disabled type containers using GLSL_STRUCT_DISABLE_TYPES
Definition config.hpp:162