From 830ec6ac943652abef1659205953417af5d443ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Leclercq?= Date: Fri, 14 May 2021 02:09:25 +0200 Subject: [PATCH] Add a few helper functions --- include/Nazara/Graphics/MaterialSettings.hpp | 1 + include/Nazara/Graphics/MaterialSettings.inl | 5 +++++ include/Nazara/Shader/ShaderLangParser.hpp | 4 ++++ include/Nazara/Shader/ShaderLangParser.inl | 6 ++++++ src/Nazara/Shader/ShaderLangParser.cpp | 20 ++++++++++++++++++++ 5 files changed, 36 insertions(+) diff --git a/include/Nazara/Graphics/MaterialSettings.hpp b/include/Nazara/Graphics/MaterialSettings.hpp index 52c57f2af..9ea0fa54c 100644 --- a/include/Nazara/Graphics/MaterialSettings.hpp +++ b/include/Nazara/Graphics/MaterialSettings.hpp @@ -39,6 +39,7 @@ namespace Nz MaterialSettings(MaterialSettings&&) = delete; ~MaterialSettings() = default; + inline const Builder& GetBuilderData() const; inline const std::vector& GetConditions() const; inline std::size_t GetConditionIndex(const std::string_view& name) const; inline std::size_t GetPredefinedBindingIndex(PredefinedShaderBinding binding) const; diff --git a/include/Nazara/Graphics/MaterialSettings.inl b/include/Nazara/Graphics/MaterialSettings.inl index e88d6845e..e631e1509 100644 --- a/include/Nazara/Graphics/MaterialSettings.inl +++ b/include/Nazara/Graphics/MaterialSettings.inl @@ -54,6 +54,11 @@ namespace Nz m_pipelineLayout = Graphics::Instance()->GetRenderDevice().InstantiateRenderPipelineLayout(std::move(info)); } + inline auto MaterialSettings::GetBuilderData() const -> const Builder& + { + return m_data; + } + inline auto MaterialSettings::GetConditions() const -> const std::vector& { return m_data.conditions; diff --git a/include/Nazara/Shader/ShaderLangParser.hpp b/include/Nazara/Shader/ShaderLangParser.hpp index 24f6ca085..5baaf813a 100644 --- a/include/Nazara/Shader/ShaderLangParser.hpp +++ b/include/Nazara/Shader/ShaderLangParser.hpp @@ -11,6 +11,7 @@ #include #include #include +#include namespace Nz::ShaderLang { @@ -123,6 +124,9 @@ namespace Nz::ShaderLang Context* m_context; }; + + inline ShaderAst::StatementPtr Parse(const std::vector& tokens); + NAZARA_SHADER_API ShaderAst::StatementPtr Parse(const std::filesystem::path& sourcePath); } #include diff --git a/include/Nazara/Shader/ShaderLangParser.inl b/include/Nazara/Shader/ShaderLangParser.inl index 12db8d17d..a8f0ca69f 100644 --- a/include/Nazara/Shader/ShaderLangParser.inl +++ b/include/Nazara/Shader/ShaderLangParser.inl @@ -11,6 +11,12 @@ namespace Nz::ShaderLang m_context(nullptr) { } + + inline ShaderAst::StatementPtr Parse(const std::vector& tokens) + { + Parser parser; + return parser.Parse(tokens); + } } #include diff --git a/src/Nazara/Shader/ShaderLangParser.cpp b/src/Nazara/Shader/ShaderLangParser.cpp index 8ce1e1a50..d3978f8bb 100644 --- a/src/Nazara/Shader/ShaderLangParser.cpp +++ b/src/Nazara/Shader/ShaderLangParser.cpp @@ -1006,5 +1006,25 @@ namespace Nz::ShaderLang default: return -1; } } + + ShaderAst::StatementPtr Parse(const std::filesystem::path& sourcePath) + { + File file(sourcePath); + if (!file.Open(OpenMode_ReadOnly | OpenMode_Text)) + { + NazaraError("Failed to open \"" + sourcePath.generic_u8string() + '"'); + return {}; + } + std::size_t length = static_cast(file.GetSize()); + + std::vector source(length); + if (file.Read(&source[0], length) != length) + { + NazaraError("Failed to read program file"); + return {}; + } + + return Parse(Tokenize(std::string_view(reinterpret_cast(source.data()), source.size()))); + } }