From 2368cde54675f39e9b5a99880124503b3ae391e1 Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Sun, 21 Jan 2024 03:01:44 +0000 Subject: Replace tokens found with values from getIntegerv --- gfx/gl/shader.cpp | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/gfx/gl/shader.cpp b/gfx/gl/shader.cpp index b57dcd4..0f75817 100644 --- a/gfx/gl/shader.cpp +++ b/gfx/gl/shader.cpp @@ -1,8 +1,24 @@ #include "shader.h" +#include #include #include #include +namespace { + auto + getInt(GLenum e) + { + GLint i {}; + glGetIntegerv(e, &i); + return std::to_string(i); + } + + using LookUpFunction = std::string (*)(GLenum); + constexpr std::array, 1> LOOKUPS {{ + {"GL_MAX_GEOMETRY_OUTPUT_VERTICES", GL_MAX_GEOMETRY_OUTPUT_VERTICES, getInt}, + }}; +} + Shader::ShaderRef Shader::compile() const { @@ -13,7 +29,14 @@ Shader::compile() const if (lookups) { std::basic_string textMod {text}; for (const auto & match : ctre::range(textMod)) { - textMod.replace(match.begin(), match.end(), "255"); + if (const auto lookup = std::find_if(LOOKUPS.begin(), LOOKUPS.end(), + [&match](const auto & lookup) { + return std::get(lookup) == match; + }); + lookup != LOOKUPS.end()) { + const auto & [name, pname, getFunction] = *lookup; + textMod.replace(match.begin(), match.end(), getFunction(pname)); + } } source(textMod.c_str(), static_cast(textMod.length())); } -- cgit v1.2.3