Fix issues with technique parser

This commit is contained in:
Jan 2022-03-30 19:25:58 +02:00
parent 4a52f3304e
commit bdb782a679
3 changed files with 9 additions and 7 deletions

View File

@ -44,6 +44,7 @@ namespace IW4
explicit TechniqueCreator(IAssetLoadingManager* manager) explicit TechniqueCreator(IAssetLoadingManager* manager)
: m_manager(manager) : m_manager(manager)
{ {
m_passes.emplace_back();
} }
void AcceptNextPass() override void AcceptNextPass() override
@ -88,22 +89,22 @@ namespace IW4
bool AcceptShaderCodeArgument(techset::ShaderSelector shader, techset::ShaderArgument shaderArgument, techset::ShaderArgumentCodeSource source, std::string& errorMessage) override bool AcceptShaderCodeArgument(techset::ShaderSelector shader, techset::ShaderArgument shaderArgument, techset::ShaderArgumentCodeSource source, std::string& errorMessage) override
{ {
return false; return true;
} }
bool AcceptShaderLiteralArgument(techset::ShaderSelector shader, techset::ShaderArgument shaderArgument, techset::ShaderArgumentLiteralSource source, std::string& errorMessage) override bool AcceptShaderLiteralArgument(techset::ShaderSelector shader, techset::ShaderArgument shaderArgument, techset::ShaderArgumentLiteralSource source, std::string& errorMessage) override
{ {
return false; return true;
} }
bool AcceptShaderMaterialArgument(techset::ShaderSelector shader, techset::ShaderArgument shaderArgument, techset::ShaderArgumentMaterialSource source, std::string& errorMessage) override bool AcceptShaderMaterialArgument(techset::ShaderSelector shader, techset::ShaderArgument shaderArgument, techset::ShaderArgumentMaterialSource source, std::string& errorMessage) override
{ {
return false; return true;
} }
bool AcceptVertexStreamRouting(const std::string& destination, const std::string& source, std::string& errorMessage) override bool AcceptVertexStreamRouting(const std::string& destination, const std::string& source, std::string& errorMessage) override
{ {
return false; return true;
} }
}; };

View File

@ -99,6 +99,7 @@ namespace techset
const SimpleMatcherFactory create(this); const SimpleMatcherFactory create(this);
AddMatchers({ AddMatchers({
create.Identifier().Capture(CAPTURE_FIRST_TOKEN).NoConsume(),
create.Identifier().Capture(CAPTURE_SHADER_ARGUMENT), create.Identifier().Capture(CAPTURE_SHADER_ARGUMENT),
create.Optional(create.And({ create.Optional(create.And({
create.Char('['), create.Char('['),
@ -170,7 +171,6 @@ namespace techset
void ProcessMatch(TechniqueParserState* state, SequenceResult<SimpleParserValue>& result) const override void ProcessMatch(TechniqueParserState* state, SequenceResult<SimpleParserValue>& result) const override
{ {
assert(state->m_in_shader == true); assert(state->m_in_shader == true);
state->m_in_shader = false;
const auto& shaderArgumentNameToken = result.NextCapture(CAPTURE_SHADER_ARGUMENT); const auto& shaderArgumentNameToken = result.NextCapture(CAPTURE_SHADER_ARGUMENT);
@ -200,7 +200,8 @@ namespace techset
const std::vector<TechniqueParser::sequence_t*>& TechniqueShaderScopeSequences::GetSequences() const std::vector<TechniqueParser::sequence_t*>& TechniqueShaderScopeSequences::GetSequences()
{ {
static std::vector<TechniqueParser::sequence_t*> tests({ static std::vector<TechniqueParser::sequence_t*> tests({
new SequenceEndShader() new SequenceEndShader(),
new SequenceShaderArgument()
}); });
return tests; return tests;

View File

@ -23,7 +23,7 @@ bool TechniqueFileReader::ReadTechniqueDefinition() const
lexerConfig.m_emit_new_line_tokens = false; lexerConfig.m_emit_new_line_tokens = false;
lexerConfig.m_read_strings = true; lexerConfig.m_read_strings = true;
lexerConfig.m_read_integer_numbers = true; lexerConfig.m_read_integer_numbers = true;
lexerConfig.m_read_floating_point_numbers = true; lexerConfig.m_read_floating_point_numbers = false;
const auto lexer = std::make_unique<SimpleLexer>(m_comment_proxy.get(), std::move(lexerConfig)); const auto lexer = std::make_unique<SimpleLexer>(m_comment_proxy.get(), std::move(lexerConfig));
const auto parser = std::make_unique<TechniqueParser>(lexer.get(), m_acceptor); const auto parser = std::make_unique<TechniqueParser>(lexer.get(), m_acceptor);