From f78774b97a84d47603d28530cb2d6a7636e9b41d Mon Sep 17 00:00:00 2001 From: Tobias Frisch <tfrisch@uni-koblenz.de> Date: Sun, 18 Jul 2021 20:32:06 +0200 Subject: [PATCH] [#100] F***ing stringstreams... Signed-off-by: Tobias Frisch <tfrisch@uni-koblenz.de> --- .../src/vkcv/shader/GLSLCompiler.cpp | 42 ++++++++++--------- 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/modules/shader_compiler/src/vkcv/shader/GLSLCompiler.cpp b/modules/shader_compiler/src/vkcv/shader/GLSLCompiler.cpp index b8cf7210..341e219f 100644 --- a/modules/shader_compiler/src/vkcv/shader/GLSLCompiler.cpp +++ b/modules/shader_compiler/src/vkcv/shader/GLSLCompiler.cpp @@ -212,8 +212,30 @@ namespace vkcv::shader { glslang::TShader shader (language); glslang::TProgram program; + std::string source (shaderSource); + + std::strstream defines; + for (const auto& define : m_defines) { + defines << "#define " << define.first << " " << define.second << std::endl; + } + + defines << '\0'; + + size_t pos = source.find("#version") + 8; + if (pos >= source.length()) { + pos = 0; + } + + const size_t epos = source.find_last_of("#extension", pos) + 10; + if (epos < source.length()) { + pos = epos; + } + + pos = source.find('\n', pos) + 1; + source = source.insert(pos, defines.str()); + const char *shaderStrings [1]; - shaderStrings[0] = shaderSource; + shaderStrings[0] = source.c_str(); shader.setStrings(shaderStrings, 1); @@ -224,11 +246,6 @@ namespace vkcv::shader { EShMsgSpvRules | EShMsgVulkanRules ); - - std::strstream defines; - for (const auto& define : m_defines) { - defines << "#define " << define.first << " " << define.second << std::endl; - } std::string preprocessedGLSL; @@ -243,19 +260,6 @@ namespace vkcv::shader { return false; } - size_t pos = preprocessedGLSL.find("#version") + 8; - if (pos >= preprocessedGLSL.length()) { - pos = 0; - } - - const size_t epos = preprocessedGLSL.find_last_of("#extension", pos) + 10; - if (epos < preprocessedGLSL.length()) { - pos = epos; - } - - pos = preprocessedGLSL.find('\n', pos) + 1; - preprocessedGLSL.insert(pos, defines.str(), defines.width()); - const char* preprocessedCString = preprocessedGLSL.c_str(); shader.setStrings(&preprocessedCString, 1); -- GitLab