diff --git a/src/Lib/include/VkUtil/Shader.hpp b/src/Lib/include/VkUtil/Shader.hpp index 2764aa48f5003338fb0a6827d4440b72d3fcd0f0..87338a78a8fe8368e4a161dc42116d9195609516 100644 --- a/src/Lib/include/VkUtil/Shader.hpp +++ b/src/Lib/include/VkUtil/Shader.hpp @@ -80,6 +80,33 @@ namespace lib None, }; + /** + * @brief Makrodefinition für den Compiler. Es können Name und Wert angegeben werden. + */ + struct CompilerMacro + { + /** + * @brief Initialisiert eine neue Instanz der Compiler Macro Klasse. + * + * @param name Der Name. + * @param value Der Wert (optional) + */ + inline CompilerMacro(std::string name, std::string value = "") + : name(name), + value(value) + {} + + /** + * @brief Der Name des Makros, also der zu ersetzende Text. + */ + std::string name; + + /** + * @brief Der Wert des Makros. + */ + std::string value; + }; + /** * @brief Enthält Optionen für die Kompilierung eines Shaders. */ @@ -89,6 +116,11 @@ namespace lib * @brief Optimierungslevel. */ ShaderOptimizationLevel optimizationLevel = lib::IsDebug ? ShaderOptimizationLevel::Debug : ShaderOptimizationLevel::Performance; + + /** + * @brief Eine Auflistung von Makros, die beim Kompilieren definiert sein sollen. + */ + std::vector macros; }; /** diff --git a/src/Lib/src/Core/CgContext.Rasterization.cpp b/src/Lib/src/Core/CgContext.Rasterization.cpp index e6f17e4a32ec118b984f038a06f46c1c704948c4..b01e00058735bd304d7f3732581ee07a59613bfa 100644 --- a/src/Lib/src/Core/CgContext.Rasterization.cpp +++ b/src/Lib/src/Core/CgContext.Rasterization.cpp @@ -289,8 +289,7 @@ void lib::CgContext::CreateRasterizationFrameBuffers() }, this->swapChainImageFormat, vk::ImageUsageFlagBits::eSampled | - vk::ImageUsageFlagBits::eStorage | - vk::ImageUsageFlagBits::eColorAttachment, + vk::ImageUsageFlagBits::eStorage, vk::ImageLayout::eGeneral}; auto newTexture = new lib::Texture{this, diff --git a/src/Lib/src/VkUtil/CompileShader.cpp b/src/Lib/src/VkUtil/CompileShader.cpp index ec1569c60e202a3e935eaa8e8dcce2b2426db999..f1f9480a56f7e0d73c18c1d2c6870c558712c8a9 100644 --- a/src/Lib/src/VkUtil/CompileShader.cpp +++ b/src/Lib/src/VkUtil/CompileShader.cpp @@ -11,9 +11,8 @@ #include "Util/Logging.hpp" #include "Util/Io.hpp" - -using lib::log::Info; using lib::log::Error; +using lib::log::Info; using lib::log::Warning; namespace @@ -134,6 +133,11 @@ bool lib::CompileShader(const std::string &glsl, const lib::ShaderInfo &info, li options.SetTargetEnvironment(shaderc_target_env_vulkan, shaderc_env_version_vulkan_1_1); options.SetSourceLanguage(shaderc_source_language_glsl); + for (const auto ¯o : info.compileOptions.macros) + { + options.AddMacroDefinition(macro.name, macro.value); + } + switch (info.compileOptions.optimizationLevel) { case lib::ShaderOptimizationLevel::Debug: