1#include "Shading/GLSLHandler.h"
7#include <unordered_map>
10static std::string dashes =
"---------------------------";
12#define DASHIT(x) dashes + x + dashes
15GLSLUniform::GLSLUniform(std::string name, std::string type, std::string value)
16 :name(name), type(type),
value(
value), comment(
"")
20GLSLUniform::~GLSLUniform()
24std::string GLSLUniform::GenerateGLSL()
27 c <<
"uniform " << type <<
" " << name;
36 if(comment.size() > 0)
38 c <<
" // " << comment;
44GLSLMacro::GLSLMacro(std::string name, std::string value, std::string comment)
49GLSLMacro::~GLSLMacro()
53std::string GLSLMacro::GenerateGLSL()
57 if(comment.size() > 0)
59 c <<
"// " << comment <<
"\n";
62 c <<
"#define " << name <<
" " << value;
66GLSLLine::GLSLLine(std::string line, std::string comment)
67 : line(line), comment(comment)
75std::string GLSLLine::GenerateGLSL()
80 if(comment.size() > 0)
82 c <<
" // " << comment;
88GLSLSSBO::GLSLSSBO(std::string name, std::string binding, std::string comment)
89 :name(name), binding(binding), comment(comment)
100 lines.push_back(line);
103std::string GLSLSSBO::GenerateGLSL()
107 if(comment.size() > 0)
109 c <<
"// " << comment <<
"\n";
112 c <<
"layout(std430, binding = " << binding <<
") buffer " << name <<
"\n";
117 c <<
"\t" << line.GenerateGLSL() <<
"\n";
124GLSLFunction::GLSLFunction(std::string name, std::string params, std::string returnType)
125 : name(name), returnType(returnType), params(params), comment(
"")
130GLSLFunction::~GLSLFunction()
134std::string GLSLFunction::GenerateGLSL()
138 if(comment.size() > 0)
140 c << comment <<
"\n";
143 c << returnType <<
" " << name <<
"(" << params <<
")" <<
"\n";
148 c <<
"\t" << line.GenerateGLSL() <<
"\n";
155void GLSLFunction::AddLine(
GLSLLine line)
157 lines.push_back(line);
160GLSLHandler::GLSLHandler(std::string name)
165GLSLHandler::~GLSLHandler()
169std::string GLSLHandler::GenerateGLSL()
173 c <<
"#version " << version <<
"\n\n";
174 c <<
"// This code has benn generated by TerraForge3D Shader Generator\n";
175 c <<
"// Shader Name : " << name <<
"\n";
178 if(topLines.size() > 0)
180 c <<
"// " << DASHIT(
"MISC") <<
"\n";
184 c << line.GenerateGLSL() <<
"\n";
190 if(macros.size() > 0)
192 c <<
"// " << DASHIT(
"MACROS") <<
"\n";
196 c << macro.GenerateGLSL() <<
"\n";
204 c <<
"// " << DASHIT(
"SSBOS") <<
"\n";
208 c << ssbo.GenerateGLSL() <<
"\n";
214 if(uniforms.size() > 0)
216 c <<
"//" << DASHIT(
"UNIFORMS") <<
"\n";
220 c << uniform.GenerateGLSL() <<
"\n";
226 if(functions.size() > 0)
228 c <<
"//" << DASHIT(
"FUNCTIONS") <<
"\n";
232 c <<
"// " << function.name <<
"\n";
233 c << function.GenerateGLSL() <<
"\n\n";
241void GLSLHandler::AddTopLine(
GLSLLine line)
243 topLines.push_back(line);
248 uniforms.push_back(uniform);
251void GLSLHandler::AddMacro(
GLSLMacro macro)
253 macros.push_back(macro);
256void GLSLHandler::AddSSBO(
GLSLSSBO ssbo)
258 ssbos.push_back(ssbo);
263 if(!HasFunction(function.name))
265 functions.push_back(function);
266 functionNames.push_back(function.name);
270bool GLSLHandler::HasFunction(std::string name)
272 return std::find(functionNames.begin(), functionNames.end(), name) != functionNames.end();
275void GLSLHandler::Clear()
279 functionNames.clear();
@ value
the parser finished reading a JSON value