Font selector

This commit is contained in:
2026-05-22 17:22:57 +10:00
parent c5f0a9df0e
commit 283f38dddb
15 changed files with 276 additions and 34 deletions

View File

@@ -174,6 +174,65 @@ void SupportsTextParametersWithDeclaredFont()
Expect(result.reason.empty(), "supported text parameters should not report a rejection reason");
}
void SupportsTextParametersWithFontSelector()
{
ShaderPackage shaderPackage = MakeSinglePassPackage();
ShaderFontAsset roboto;
roboto.id = "roboto";
shaderPackage.fontAssets.push_back(roboto);
ShaderFontAsset mono;
mono.id = "mono";
shaderPackage.fontAssets.push_back(mono);
ShaderParameterDefinition fontSelector;
fontSelector.id = "font";
fontSelector.type = ShaderParameterType::Enum;
fontSelector.defaultEnumValue = "roboto";
fontSelector.enumOptions = { { "roboto", "Roboto" }, { "mono", "Mono" } };
shaderPackage.parameters.push_back(fontSelector);
ShaderParameterDefinition parameter;
parameter.id = "caption";
parameter.type = ShaderParameterType::Text;
parameter.fontId = "roboto";
parameter.fontParameterId = "font";
shaderPackage.parameters.push_back(parameter);
const RenderCadenceCompositor::ShaderSupportResult result =
RenderCadenceCompositor::CheckStatelessSinglePassShaderSupport(shaderPackage);
Expect(result.supported, "text parameters with font selector enum should be supported");
Expect(result.reason.empty(), "supported font selector text parameters should not report a rejection reason");
}
void RejectsTextParametersWithFontSelectorUnknownOption()
{
ShaderPackage shaderPackage = MakeSinglePassPackage();
ShaderFontAsset roboto;
roboto.id = "roboto";
shaderPackage.fontAssets.push_back(roboto);
ShaderParameterDefinition fontSelector;
fontSelector.id = "font";
fontSelector.type = ShaderParameterType::Enum;
fontSelector.defaultEnumValue = "roboto";
fontSelector.enumOptions = { { "roboto", "Roboto" }, { "missing", "Missing" } };
shaderPackage.parameters.push_back(fontSelector);
ShaderParameterDefinition parameter;
parameter.id = "caption";
parameter.type = ShaderParameterType::Text;
parameter.fontId = "roboto";
parameter.fontParameterId = "font";
shaderPackage.parameters.push_back(parameter);
const RenderCadenceCompositor::ShaderSupportResult result =
RenderCadenceCompositor::CheckStatelessSinglePassShaderSupport(shaderPackage);
Expect(!result.supported, "font selector enum options must reference declared font assets");
Expect(result.reason.find("unknown font asset") != std::string::npos, "font selector rejection mentions unknown font asset");
}
void BuildsDeclaredFontAtlasesDuringCatalogLoad()
{
std::string msdfReason;
@@ -217,6 +276,8 @@ int main()
RejectsTextureAssets();
RejectsTextParametersWithoutDeclaredFont();
SupportsTextParametersWithDeclaredFont();
SupportsTextParametersWithFontSelector();
RejectsTextParametersWithFontSelectorUnknownOption();
BuildsDeclaredFontAtlasesDuringCatalogLoad();
if (gFailures != 0)