fix(materialx): Correct package name casing and simplify token substitution handling

This commit is contained in:
2026-01-06 20:34:12 +00:00
parent d2fb15c76f
commit 828841e673
2 changed files with 17 additions and 52 deletions

View File

@@ -134,7 +134,7 @@ find_package(CLI11 CONFIG REQUIRED)
find_package(RapidJSON CONFIG REQUIRED)
find_package(EnTT CONFIG REQUIRED)
find_package(bgfx CONFIG REQUIRED)
find_package(MaterialX CONFIG REQUIRED)
find_package(materialx CONFIG REQUIRED)
find_package(Freetype CONFIG REQUIRED)
find_package(assimp CONFIG REQUIRED)
find_package(libzip CONFIG REQUIRED)
@@ -155,24 +155,22 @@ if(TARGET bimg::bimg)
endif()
set(SDL3CPP_MATERIALX_LIBS)
foreach(candidate IN ITEMS
MaterialX::MaterialX
materialx::MaterialX
MaterialX::MaterialXCore
MaterialX::MaterialXFormat
MaterialX::MaterialXGenShader
MaterialX::MaterialXGenGlsl
MaterialX::MaterialXRender
materialx::MaterialXCore
materialx::MaterialXFormat
materialx::MaterialXGenShader
materialx::MaterialXGenGlsl
materialx::MaterialXRender)
if(TARGET ${candidate})
list(APPEND SDL3CPP_MATERIALX_LIBS ${candidate})
endif()
endforeach()
if(TARGET materialx::materialx)
list(APPEND SDL3CPP_MATERIALX_LIBS materialx::materialx)
else()
foreach(candidate IN ITEMS
materialx::MaterialXCore
materialx::MaterialXFormat
materialx::MaterialXGenShader
materialx::MaterialXGenGlsl
materialx::MaterialXRender)
if(TARGET ${candidate})
list(APPEND SDL3CPP_MATERIALX_LIBS ${candidate})
endif()
endforeach()
endif()
if(SDL3CPP_MATERIALX_LIBS)
message(TRACE "MaterialX targets selected: ${SDL3CPP_MATERIALX_LIBS}")
list(APPEND SDL3CPP_RENDER_STACK_LIBS ${SDL3CPP_MATERIALX_LIBS})
endif()

View File

@@ -5,13 +5,11 @@
#include <MaterialXFormat/Util.h>
#include <MaterialXFormat/XmlIo.h>
#include <MaterialXGenGlsl/VkShaderGenerator.h>
#include <MaterialXGenHw/HwConstants.h>
#include <MaterialXGenShader/GenContext.h>
#include <MaterialXGenShader/Shader.h>
#include <MaterialXGenShader/Util.h>
#include <MaterialXRender/Util.h>
#include <array>
#include <algorithm>
#include <cctype>
#include <fstream>
@@ -155,44 +153,13 @@ unsigned int ResolveAiryFresnelIterationsFromOptions(const Options& options,
return defaultIterations;
}
mx::StringMap BuildTokenSubstitutionsWithFallback(const mx::ShaderGenerator& generator,
const std::string& stageLabel,
const std::shared_ptr<ILogger>& logger) {
auto substitutions = generator.getTokenSubstitutions();
struct TokenFallback {
std::string token;
std::string replacement;
};
const std::array<TokenFallback, 3> fallbackTokens = {{
{mx::HW::T_TEX_SAMPLER_SIGNATURE, mx::HW::TEX_SAMPLER_SIGNATURE},
{mx::HW::T_TEX_SAMPLER_SAMPLER2D, mx::HW::TEX_SAMPLER_SAMPLER2D},
{mx::HW::T_CLOSURE_DATA_CONSTRUCTOR, mx::HW::CLOSURE_DATA_CONSTRUCTOR}
}};
for (const auto& fallback : fallbackTokens) {
auto it = substitutions.find(fallback.token);
if (it == substitutions.end() || it->second.empty()) {
substitutions[fallback.token] = fallback.replacement;
if (logger) {
logger->Trace("MaterialXShaderGenerator", "Generate",
"tokenSubstitution fallback stage=" + stageLabel +
", token=" + fallback.token +
", value=" + fallback.replacement);
}
}
}
return substitutions;
}
void ApplyTokenSubstitutions(const mx::ShaderGenerator& generator,
std::string& source,
const std::string& stageLabel,
unsigned int airyIterations,
const std::shared_ptr<ILogger>& logger) {
auto tokensBefore = CollectMaterialXTokens(source);
mx::StringMap substitutions = BuildTokenSubstitutionsWithFallback(generator, stageLabel, logger);
mx::StringMap substitutions = generator.getTokenSubstitutions();
mx::tokenSubstitution(substitutions, source);
auto tokensAfter = CollectMaterialXTokens(source);