GLSL Struct 1.4.0
glslstruct
Loading...
Searching...
No Matches
writer.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_GLSL_VULKAN_WRITER_HPP_
12 #define _GLSL_STRUCT_GLSL_VULKAN_WRITER_HPP_
13
14 #include <glslstruct/config.hpp>
15
17_GLSL_STRUCT_ERROR(
18 "This is only available for c++17 and greater and when types are not disabled with defined GLSL_STRUCT_DISABLE_TYPES!"
19);
20 #else
21
22 #include <glslstruct/struct/base_struct.hpp>
23 #include <glslstruct/writer/glsl/writer.hpp>
24
25/**
26 * @defgroup vulkan_writer Vulkan Writer
27 * @ingroup glslstruct
28 * @brief Converts glsl struct and layout to glsl code compatible with vulkan
29 * @details Example:
30 * @code{.cpp}
31 * // UBO
32 * layout (set = num, binding = num) uniform CameraData {
33 * mat4 projection;
34 * mat4 view;
35 * vec3 eyePos;
36 * } ubo;
37 *
38 * // SSBO
39 * struct Particle {
40 * vec4 position;
41 * vec4 velocity;
42 * };
43 *
44 * // here we can have std140 or std430 or scalar layout type
45 * // here we can also have qualifiers for SSBO
46 * layout(scalar, set = 0, binding = 1) readonly buffer ParticleBuffer {
47 * Particle particles[];
48 * } ssbo;
49 * @endcode
50 */
51
52namespace glslstruct {
53 /**
54 * @ingroup vulkan_writer Vulkan glsl code writer
55 * @brief struct to vulkan glsl writer
56 */
58 /// @brief glsl writer instance
60
61 /// @brief returns layout data string
62 [[nodiscard]] static std::string _get_layout_data(size_t set, size_t binding, std::string_view stdType = "");
63
64 public:
65 /// @brief default constructor
67
68 /// @brief appends struct with given name
69 void append_struct(std::string_view name, const struct_type& structType);
70
71 /// @brief appends struct with generated name
72 void append_struct(const struct_type& structType);
73
74 /// @brief appends uniform buffer
75 void append_uniform_buffer(size_t set, size_t binding, std::string_view name, std::string_view varName,
76 const std140_layout& layout);
77
78 /// @brief appends uniform buffer
79 void append_uniform_buffer(size_t set, size_t binding, std::string_view name, std::string_view varName,
80 const std140_struct& structValue);
81
82 /// @brief appends shader storage buffer
83 void append_shader_storage_buffer(size_t set, size_t binding, std::string_view name, std::string_view varName,
84 const std140_layout& layout, std::string_view qualifiers = "");
85
86 /// @brief appends shader storage buffer
87 void append_shader_storage_buffer(size_t set, size_t binding, std::string_view name, std::string_view varName,
88 const std430_layout& layout, std::string_view qualifiers = "");
89
90 /// @brief appends shader storage buffer
91 void append_shader_storage_buffer(size_t set, size_t binding, std::string_view name, std::string_view varName,
92 const scalar_layout& layout, std::string_view qualifiers = "");
93
94 /// @brief appends shader storage buffer
95 void append_shader_storage_buffer(size_t set, size_t binding, std::string_view name, std::string_view varName,
96 const std140_struct& structValue, std::string_view qualifiers = "");
97
98 /// @brief appends shader storage buffer
99 void append_shader_storage_buffer(size_t set, size_t binding, std::string_view name, std::string_view varName,
100 const std430_struct& structValue, std::string_view qualifiers = "");
101
102 /// @brief appends shader storage buffer
103 void append_shader_storage_buffer(size_t set, size_t binding, std::string_view name, std::string_view varName,
104 const scalar_struct& structValue, std::string_view qualifiers = "");
105
106 /// @brief returns result string
107 [[nodiscard]] const std::string& to_string() const noexcept;
108 };
109} // namespace glslstruct
110
111 #endif
112#endif
struct to vulkan glsl writer
Definition writer.hpp:57
void append_uniform_buffer(size_t set, size_t binding, std::string_view name, std::string_view varName, const std140_layout &layout)
appends uniform buffer
Definition writer.cpp:38
static std::string _get_layout_data(size_t set, size_t binding, std::string_view stdType="")
returns layout data string
Definition writer.cpp:25
utils::glsl_writer _writer
glsl writer instance
Definition writer.hpp:59
void append_struct(std::string_view name, const struct_type &structType)
appends struct with given name
Definition writer.cpp:32
void append_shader_storage_buffer(size_t set, size_t binding, std::string_view name, std::string_view varName, const std140_layout &layout, std::string_view qualifiers="")
appends shader storage buffer
Definition writer.cpp:48
void append_struct(const struct_type &structType)
appends struct with generated name
Definition writer.cpp:36
const std::string & to_string() const noexcept
returns result string
Definition writer.cpp:81
glsl_vulkan_writer()
default constructor
general glsl writer
Definition writer.hpp:120
#define _GLSL_STRUCT_HAS_TYPES
check if user not disabled type containers using GLSL_STRUCT_DISABLE_TYPES
Definition config.hpp:162
Definition writer.hpp:25
Main namespace of glslstruct library.
Definition scalar_layout_traits.hpp:23