INtial text again

This commit is contained in:
2026-05-20 16:26:36 +10:00
parent 081364e764
commit e43ac21b2f
12 changed files with 608 additions and 15 deletions

View File

@@ -1,6 +1,7 @@
#pragma once
#include "ShaderTypes.h"
#include "FontAtlasBuilder.h"
#include <map>
#include <string>
@@ -24,4 +25,5 @@ struct RuntimeShaderArtifact
std::string message;
std::vector<ShaderParameterDefinition> parameterDefinitions;
std::map<std::string, ShaderParameterValue> parameterValues;
std::vector<RenderCadenceCompositor::FontAtlasBuildOutput> fontAtlases;
};

View File

@@ -112,6 +112,17 @@ RuntimeSlangShaderBuild RuntimeSlangShaderCompiler::BuildShader(const std::strin
return build;
}
RenderCadenceCompositor::FontAtlasBuildConfig fontConfig;
fontConfig.repoRoot = repoRoot;
RenderCadenceCompositor::FontAtlasBuilder fontAtlasBuilder(fontConfig);
std::vector<RenderCadenceCompositor::FontAtlasBuildOutput> fontAtlasOutputs;
if (!fontAtlasBuilder.BuildPackageFontAtlases(shaderPackage, fontAtlasOutputs, error))
{
build.succeeded = false;
build.message = error.empty() ? "Font atlas build failed." : error;
return build;
}
ShaderCompiler compiler(
repoRoot,
runtimeBuildDir / (shaderId + ".wrapper.slang"),
@@ -144,6 +155,7 @@ RuntimeSlangShaderBuild RuntimeSlangShaderCompiler::BuildShader(const std::strin
build.artifact.shaderId = shaderPackage.id;
build.artifact.displayName = shaderPackage.displayName;
build.artifact.parameterDefinitions = shaderPackage.parameters;
build.artifact.fontAtlases = std::move(fontAtlasOutputs);
if (!build.artifact.passes.empty())
build.artifact.fragmentShaderSource = build.artifact.passes.front().fragmentShaderSource;
build.artifact.message = shaderPackage.displayName + " Slang compile completed in " + std::to_string(milliseconds) + " ms.";

View File

@@ -21,13 +21,25 @@ ShaderSupportResult CheckStatelessSinglePassShaderSupport(const ShaderPackage& s
if (!shaderPackage.textureAssets.empty())
return { false, "RenderCadenceCompositor does not load shader texture assets yet; texture-backed shaders need a CPU-prepared asset handoff first." };
if (!shaderPackage.fontAssets.empty())
return { false, "RenderCadenceCompositor does not load shader font assets yet; text shaders need a CPU-prepared asset handoff first." };
for (const ShaderParameterDefinition& parameter : shaderPackage.parameters)
{
if (parameter.type == ShaderParameterType::Text)
return { false, "RenderCadenceCompositor currently skips text parameters because they require per-shader text texture storage." };
if (parameter.type != ShaderParameterType::Text)
continue;
if (parameter.fontId.empty())
return { false, "Text parameter '" + parameter.id + "' must reference a declared font asset." };
bool hasFontAsset = false;
for (const ShaderFontAsset& fontAsset : shaderPackage.fontAssets)
{
if (fontAsset.id == parameter.fontId)
{
hasFontAsset = true;
break;
}
}
if (!hasFontAsset)
return { false, "Text parameter '" + parameter.id + "' references unknown font asset '" + parameter.fontId + "'." };
}
bool writesLayerOutput = false;