mirror of
https://github.com/johndoe6345789/SDL3CPlusPlus.git
synced 2026-04-24 21:55:09 +00:00
fix(materialx): Correct package name casing and simplify token substitution handling
This commit is contained in:
@@ -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()
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user