diff --git a/shadersource.cpp b/shadersource.cpp index 4910d10..5ec0e80 100644 --- a/shadersource.cpp +++ b/shadersource.cpp @@ -1,15 +1,31 @@ #include "shadersource.h" #include +#include #include "shader.h" -ShaderSource::ShaderSource(); +#include + +ShaderSource::ShaderSource() +{ + for(int i=0; i 0 && line.at(0) == '#') + { + if(line.compare(0, 8, "#version") == 0) + compiled.append(line+'\n'); + else if(line.compare(0, 7, "#ifdef ") == 0) + allowed = isDefined(line.substr(7), nbDefines, defines); + else if(line.compare(0, 8, "#ifndef ") == 0) + allowed = !isDefined(line.substr(8), nbDefines, defines); + else if(line.compare("#endif") == 0) + allowed = true; + else if(line.compare("#else") == 0) + allowed = !allowed; + } + else if(allowed) + compiled.append(line+'\n'); + } + std::cout << compiled << std::endl; + return compiled; } diff --git a/shadersource.h b/shadersource.h index 3ea302d..78512be 100644 --- a/shadersource.h +++ b/shadersource.h @@ -17,15 +17,16 @@ public: }; ShaderSource(); + ~ShaderSource(); void addSource(const char *source, SourceType type); Shader* compile(int nbDefines = 0, const char** defines = NULL); private: - char* sources[NB_TYPES]; + std::string* sources[NB_TYPES]; - void preprocess(std::string &source, int nbDefines, const char** defines); + std::string preprocess(std::string source, int nbDefines, const char** defines); }; #endif // SHADERSOURCE_H