Dump known material argument hashes

This commit is contained in:
Jan
2022-04-09 19:07:24 +02:00
parent 13c5ea2986
commit 7d2ca46cb1
8 changed files with 507 additions and 61 deletions

View File

@ -61,18 +61,26 @@ namespace techset
}).Tag(TAG_CODE);
}
static std::unique_ptr<matcher_t> LiteralValueMatchers(const SimpleMatcherFactory& create)
{
return create.Or({
create.FloatingPoint(),
create.Integer()
}).Capture(CAPTURE_LITERAL_VALUE);
}
static std::unique_ptr<matcher_t> LiteralMatchers(const SimpleMatcherFactory& create)
{
return create.And({
create.Keyword("float4"),
create.Char('('),
create.FloatingPoint().Capture(CAPTURE_LITERAL_VALUE),
LiteralValueMatchers(create),
create.Char(','),
create.FloatingPoint().Capture(CAPTURE_LITERAL_VALUE),
LiteralValueMatchers(create),
create.Char(','),
create.FloatingPoint().Capture(CAPTURE_LITERAL_VALUE),
LiteralValueMatchers(create),
create.Char(','),
create.FloatingPoint().Capture(CAPTURE_LITERAL_VALUE),
LiteralValueMatchers(create),
create.Char(')'),
}).Tag(TAG_LITERAL);
}
@ -142,7 +150,14 @@ namespace techset
{
float value[4];
for (float& i : value)
i = static_cast<float>(result.NextCapture(CAPTURE_LITERAL_VALUE).FloatingPointValue());
{
const auto& literalValueToken = result.NextCapture(CAPTURE_LITERAL_VALUE);
if (literalValueToken.m_type == SimpleParserValueType::FLOATING_POINT)
i = static_cast<float>(literalValueToken.FloatingPointValue());
else
i = static_cast<float>(literalValueToken.IntegerValue());
}
const ShaderArgumentLiteralSource source(value);
std::string errorMessage;
@ -174,16 +189,17 @@ namespace techset
const auto& shaderArgumentNameToken = result.NextCapture(CAPTURE_SHADER_ARGUMENT);
size_t index = 0u;
ShaderArgument arg;
if (result.HasNextCapture(CAPTURE_SHADER_INDEX))
{
const auto& shaderArgumentIndexToken = result.NextCapture(CAPTURE_SHADER_INDEX);
if (shaderArgumentIndexToken.IntegerValue() < 0)
throw ParsingException(shaderArgumentIndexToken.GetPos(), "Index cannot be negative");
index = static_cast<size_t>(shaderArgumentIndexToken.IntegerValue());
const auto index = static_cast<size_t>(shaderArgumentIndexToken.IntegerValue());
arg = ShaderArgument(shaderArgumentNameToken.IdentifierValue(), index);
}
ShaderArgument arg(shaderArgumentNameToken.IdentifierValue(), index);
else
arg = ShaderArgument(shaderArgumentNameToken.IdentifierValue());
const auto typeTag = result.NextTag();
assert(typeTag == TAG_CODE || typeTag == TAG_LITERAL || typeTag == TAG_MATERIAL);

View File

@ -3,12 +3,21 @@
using namespace techset;
ShaderArgument::ShaderArgument()
: m_argument_index(0u)
: m_argument_index_specified(false),
m_argument_index(0u)
{
}
ShaderArgument::ShaderArgument(std::string argumentName)
: m_argument_name(std::move(argumentName)),
m_argument_index_specified(false),
m_argument_index(0u)
{
}
ShaderArgument::ShaderArgument(std::string argumentName, const size_t argumentIndex)
: m_argument_name(std::move(argumentName)),
m_argument_index_specified(true),
m_argument_index(argumentIndex)
{
}

View File

@ -15,9 +15,11 @@ namespace techset
{
public:
std::string m_argument_name;
bool m_argument_index_specified;
size_t m_argument_index;
ShaderArgument();
explicit ShaderArgument(std::string argumentName);
ShaderArgument(std::string argumentName, size_t argumentIndex);
};