#include "shadersource.h" #include #include #include #include "shader.h" ShaderSource::ShaderSource() { for(int i=0; i allowedStack; while (std::getline(ss, line)) { if(line.size() > 0 && line.at(0) == '#') { if(line.compare(0, 8, "#version") == 0) compiled.append(line+'\n'); else if(line.compare(0, 7, "#ifdef ") == 0) allowedStack.push_back(isDefined(line.substr(7), nbDefines, defines)); else if(line.compare(0, 8, "#ifndef ") == 0) allowedStack.push_back(!isDefined(line.substr(8), nbDefines, defines)); else if(line.compare("#endif") == 0) allowedStack.pop_back(); else if(line.compare("#else") == 0) allowedStack.back() = !allowedStack.back(); } else { bool ok = true; for(bool allowed : allowedStack) { if(!allowed) { ok = false; break; } } if(ok) compiled.append(line+'\n'); } } return compiled; }