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_OPENGL_WRITER_HPP_
12 #define _GLSL_STRUCT_GLSL_OPENGL_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 opengl_writer Opengl Writer
27 * @ingroup glslstruct
28 * @brief Converts glsl struct and layout to glsl code compatible with opengl
29 * @details Example:
30 * @code{.cpp}
31 * // UBO
32 * layout (std140, binding = 0) uniform CameraData {
33 * mat4 projection;
34 * mat4 view;
35 * vec3 eyePos;
36 * };
37 *
38 * // SSBO
39 * struct Particle {
40 * vec4 position;
41 * vec4 velocity;
42 * };
43 *
44 * // here we can have std140 or std430 layout type
45 * layout(std430, binding = 1) buffer ParticleBuffer {
46 * Particle particles[];
47 * };
48 * @endcode
49 */
50
51namespace glslstruct {
52 /**
53 * @ingroup opengl_writer OpenGL glsl code writer
54 * @brief struct to opengl glsl writer
55 */
57 /// @brief glsl writer instance
59
60 /// @brief returns layout data string
61 [[nodiscard]] static std::string _get_layout_data(size_t binding, std::string_view stdType);
62
63 public:
64 /// @brief default constructor
66
67 /// @brief appends struct with given name
68 void append_struct(std::string_view name, const struct_type& structType);
69
70 /// @brief appends struct with generated name
71 void append_struct(const struct_type& structType);
72
73 /// @brief appends uniform buffer
74 void append_uniform_buffer(size_t binding, std::string_view name, const std140_layout& layout);
75
76 /// @brief appends uniform buffer
77 void append_uniform_buffer(size_t binding, std::string_view name, const std140_struct& structValue);
78
79 /// @brief appends shader storage buffer
80 void append_shader_storage_buffer(size_t binding, std::string_view name, const std140_layout& layout);
81
82 /// @brief appends shader storage buffer
83 void append_shader_storage_buffer(size_t binding, std::string_view name, const std430_layout& layout);
84
85 /// @brief appends shader storage buffer
86 void append_shader_storage_buffer(size_t binding, std::string_view name, const std140_struct& structValue);
87
88 /// @brief appends shader storage buffer
89 void append_shader_storage_buffer(size_t binding, std::string_view name, const std430_struct& structValue);
90
91 /// @brief returns result string
92 [[nodiscard]] const std::string& to_string() const noexcept;
93 };
94} // namespace glslstruct
95
96 #endif
97#endif
struct to opengl glsl writer
Definition writer.hpp:56
void append_shader_storage_buffer(size_t binding, std::string_view name, const std140_layout &layout)
appends shader storage buffer
Definition writer.cpp:46
void append_struct(std::string_view name, const struct_type &structType)
appends struct with given name
Definition writer.cpp:31
static std::string _get_layout_data(size_t binding, std::string_view stdType)
returns layout data string
Definition writer.cpp:25
void append_struct(const struct_type &structType)
appends struct with generated name
Definition writer.cpp:35
utils::glsl_writer _writer
glsl writer instance
Definition writer.hpp:58
const std::string & to_string() const noexcept
returns result string
Definition writer.cpp:66
glsl_opengl_writer()
default constructor
void append_uniform_buffer(size_t binding, std::string_view name, const std140_layout &layout)
appends uniform buffer
Definition writer.cpp:37
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