X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fglsl%2Fsyntax.cpp;h=cb50fee18b79538c126482594a023ea8f3864001;hp=469ce5a602c2f22a464a5896c003c5aa209d29ef;hb=b89239e1d616f0c1d8e432b7df1eca149585cf5e;hpb=2e0ed3f7d23f09de7b4b09c2f132c316ce703d9a diff --git a/source/glsl/syntax.cpp b/source/glsl/syntax.cpp index 469ce5a6..cb50fee1 100644 --- a/source/glsl/syntax.cpp +++ b/source/glsl/syntax.cpp @@ -464,6 +464,37 @@ Module::Module(): shared(Stage::SHARED) { } + +string get_unused_variable_name(const Block &block, const string &base, const string &prefix_hint) +{ + string name = base; + + bool prefixed = false; + unsigned number = 1; + unsigned size_without_number = name.size(); + while(block.variables.count(name)) + { + if(!prefixed && !prefix_hint.empty()) + { + if(name.front()!='_') + name = "_"+name; + name = prefix_hint+name; + if(name.front()!='_') + name = "_"+name; + prefixed = true; + size_without_number = name.size(); + } + else + { + name.erase(size_without_number); + name += format("_%d", number); + ++number; + } + } + + return name; +} + } // namespace SL } // namespace GL } // namespace Msp