Renderer/GlslWriter: Add #version directive

This commit is contained in:
Lynix 2017-01-04 12:35:27 +01:00
parent d538a7ddf5
commit f487761940
2 changed files with 15 additions and 1 deletions

View File

@ -30,6 +30,8 @@ namespace Nz
void RegisterFunction(const String& name, ShaderAst::StatementPtr statement, std::initializer_list<ShaderAst::VariablePtr> parameters, ShaderAst::ExpressionType ret) override; void RegisterFunction(const String& name, ShaderAst::StatementPtr statement, std::initializer_list<ShaderAst::VariablePtr> parameters, ShaderAst::ExpressionType ret) override;
void RegisterVariable(ShaderAst::VariableType kind, const String& name, ShaderAst::ExpressionType type) override; void RegisterVariable(ShaderAst::VariableType kind, const String& name, ShaderAst::ExpressionType type) override;
void SetGlslVersion(unsigned int version);
void Write(const ShaderAst::AssignOp& node) override; void Write(const ShaderAst::AssignOp& node) override;
void Write(const ShaderAst::Branch& node) override; void Write(const ShaderAst::Branch& node) override;
void Write(const ShaderAst::BinaryOp& node) override; void Write(const ShaderAst::BinaryOp& node) override;
@ -69,6 +71,7 @@ namespace Nz
std::unordered_map<String, Function> m_functions; std::unordered_map<String, Function> m_functions;
Function* m_currentFunction; Function* m_currentFunction;
State* m_currentState; State* m_currentState;
unsigned int m_glslVersion;
}; };
} }

View File

@ -10,7 +10,8 @@ namespace Nz
{ {
GlslWriter::GlslWriter() : GlslWriter::GlslWriter() :
m_currentFunction(nullptr), m_currentFunction(nullptr),
m_currentState(nullptr) m_currentState(nullptr),
m_glslVersion(110)
{ {
} }
@ -25,6 +26,11 @@ namespace Nz
node->Register(*this); node->Register(*this);
// Header
Append("#version ");
AppendLine(String::Number(m_glslVersion));
AppendLine();
// Uniforms // Uniforms
if (state.m_uniforms.empty()) if (state.m_uniforms.empty())
{ {
@ -109,6 +115,11 @@ namespace Nz
} }
} }
void GlslWriter::SetGlslVersion(unsigned int version)
{
m_glslVersion = version;
}
void GlslWriter::Write(const ShaderAst::NodePtr& node) void GlslWriter::Write(const ShaderAst::NodePtr& node)
{ {
node->Visit(*this); node->Visit(*this);