2
0
mirror of https://github.com/AxioDL/metaforce.git synced 2025-12-20 12:59:12 +00:00

Integrate glslang AST compilation

This commit is contained in:
Jack Andersen
2016-01-14 11:12:29 -10:00
parent fa1937872d
commit 99ea94de39
5 changed files with 156 additions and 4 deletions

View File

@@ -6,6 +6,105 @@
static LogVisor::LogModule Log("HECL::Backend::GLSL");
static const TBuiltInResource DefaultBuiltInResource =
{
32,
6,
32,
32,
64,
4096,
64,
32,
80,
32,
4096,
32,
128,
8,
16,
16,
15,
-8,
7,
8,
65535,
65535,
65535,
1024,
1024,
64,
1024,
16,
8,
8,
1,
60,
64,
64,
128,
128,
8,
8,
8,
0,
0,
0,
0,
0,
8,
8,
16,
256,
1024,
1024,
64,
128,
128,
16,
1024,
4096,
128,
128,
16,
1024,
120,
32,
64,
16,
0,
0,
0,
0,
8,
8,
1,
0,
0,
0,
0,
1,
1,
16384,
4,
64,
8,
8,
4,
{
1,
1,
1,
1,
1,
1,
1,
1,
1
}
};
namespace HECL
{
namespace Backend
@@ -150,6 +249,20 @@ std::string GLSL::makeVert(const char* glslVer, unsigned col, unsigned uv, unsig
return retval + "}\n";
}
glslang::TShader GLSL::makeVertAST(const char* glslVer, unsigned col, unsigned uv, unsigned w,
unsigned s, unsigned tm) const
{
std::string src = makeVert(glslVer, col, uv, w, s, tm);
const char* strs[] = {src.data()};
int lens[] = {int(src.size())};
glslang::TShader ret(EShLangVertex);
ret.setStringsWithLengths(strs, lens, 1);
ret.parse(&DefaultBuiltInResource, 110, true, EShMsgDefault);
return ret;
}
std::string GLSL::makeFrag(const char* glslVer,
const ShaderFunction& lighting) const
{
@@ -191,6 +304,20 @@ std::string GLSL::makeFrag(const char* glslVer,
return retval + "}\n";
}
glslang::TShader GLSL::makeFragAST(const char* glslVer,
const ShaderFunction& lighting) const
{
std::string src = makeFrag(glslVer, lighting);
const char* strs[] = {src.data()};
int lens[] = {int(src.size())};
glslang::TShader ret(EShLangFragment);
ret.setStringsWithLengths(strs, lens, 1);
ret.parse(&DefaultBuiltInResource, 110, true, EShMsgDefault);
return ret;
}
std::string GLSL::makeFrag(const char* glslVer,
const ShaderFunction& lighting,
const ShaderFunction& post) const
@@ -241,6 +368,21 @@ std::string GLSL::makeFrag(const char* glslVer,
return retval + "}\n";
}
glslang::TShader GLSL::makeFragAST(const char* glslVer,
const ShaderFunction& lighting,
const ShaderFunction& post) const
{
std::string src = makeFrag(glslVer, lighting, post);
const char* strs[] = {src.data()};
int lens[] = {int(src.size())};
glslang::TShader ret(EShLangFragment);
ret.setStringsWithLengths(strs, lens, 1);
ret.parse(&DefaultBuiltInResource, 110, true, EShMsgDefault);
return ret;
}
}
namespace Runtime
{