Font selector
This commit is contained in:
@@ -8,6 +8,29 @@
|
||||
|
||||
namespace RenderCadenceCompositor
|
||||
{
|
||||
namespace
|
||||
{
|
||||
const ShaderParameterDefinition* FindParameterDefinition(const ShaderPackage& shaderPackage, const std::string& parameterId)
|
||||
{
|
||||
for (const ShaderParameterDefinition& parameter : shaderPackage.parameters)
|
||||
{
|
||||
if (parameter.id == parameterId)
|
||||
return ¶meter;
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
bool HasFontAsset(const ShaderPackage& shaderPackage, const std::string& fontId)
|
||||
{
|
||||
for (const ShaderFontAsset& fontAsset : shaderPackage.fontAssets)
|
||||
{
|
||||
if (fontAsset.id == fontId)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
ShaderSupportResult CheckStatelessSinglePassShaderSupport(const ShaderPackage& shaderPackage)
|
||||
{
|
||||
if (shaderPackage.passes.empty())
|
||||
@@ -27,20 +50,24 @@ ShaderSupportResult CheckStatelessSinglePassShaderSupport(const ShaderPackage& s
|
||||
if (parameter.type != ShaderParameterType::Text)
|
||||
continue;
|
||||
|
||||
if (parameter.fontId.empty())
|
||||
if (parameter.fontId.empty() && parameter.fontParameterId.empty())
|
||||
return { false, "Text parameter '" + parameter.id + "' must reference a declared font asset." };
|
||||
|
||||
bool hasFontAsset = false;
|
||||
for (const ShaderFontAsset& fontAsset : shaderPackage.fontAssets)
|
||||
if (!parameter.fontId.empty() && !HasFontAsset(shaderPackage, parameter.fontId))
|
||||
return { false, "Text parameter '" + parameter.id + "' references unknown font asset '" + parameter.fontId + "'." };
|
||||
|
||||
if (!parameter.fontParameterId.empty())
|
||||
{
|
||||
if (fontAsset.id == parameter.fontId)
|
||||
const ShaderParameterDefinition* fontParameter = FindParameterDefinition(shaderPackage, parameter.fontParameterId);
|
||||
if (fontParameter == nullptr || fontParameter->type != ShaderParameterType::Enum)
|
||||
return { false, "Text parameter '" + parameter.id + "' references unknown font enum parameter '" + parameter.fontParameterId + "'." };
|
||||
|
||||
for (const ShaderParameterOption& option : fontParameter->enumOptions)
|
||||
{
|
||||
hasFontAsset = true;
|
||||
break;
|
||||
if (!HasFontAsset(shaderPackage, option.value))
|
||||
return { false, "Font enum parameter '" + fontParameter->id + "' references unknown font asset '" + option.value + "'." };
|
||||
}
|
||||
}
|
||||
if (!hasFontAsset)
|
||||
return { false, "Text parameter '" + parameter.id + "' references unknown font asset '" + parameter.fontId + "'." };
|
||||
}
|
||||
|
||||
bool writesLayerOutput = false;
|
||||
@@ -102,6 +129,7 @@ std::string ShaderPackageFingerprint(const ShaderPackage& shaderPackage)
|
||||
{
|
||||
source << "param:" << parameter.id << ":" << static_cast<int>(parameter.type) << ":"
|
||||
<< parameter.label << ":" << parameter.description << ":" << parameter.fontId << ":"
|
||||
<< parameter.fontParameterId << ":"
|
||||
<< parameter.defaultTextValue << ":" << parameter.defaultBoolean << ":"
|
||||
<< parameter.defaultEnumValue << ":" << parameter.maxLength << "\n";
|
||||
for (double value : parameter.defaultNumbers)
|
||||
|
||||
Reference in New Issue
Block a user