mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2025-04-19 15:52:53 +00:00
Handle custom samplers
This commit is contained in:
parent
65c9267b06
commit
9990338130
@ -950,6 +950,15 @@ namespace IW4
|
||||
TEXTURE_SRC_CODE_COUNT
|
||||
};
|
||||
|
||||
enum CustomSamplers
|
||||
{
|
||||
CUSTOM_SAMPLER_REFLECTION_PROBE = 0x0,
|
||||
CUSTOM_SAMPLER_LIGHTMAP_PRIMARY = 0x1,
|
||||
CUSTOM_SAMPLER_LIGHTMAP_SECONDARY = 0x2,
|
||||
|
||||
CUSTOM_SAMPLER_COUNT
|
||||
};
|
||||
|
||||
struct CodeSamplerSource
|
||||
{
|
||||
const char* name;
|
||||
|
@ -507,6 +507,14 @@ namespace IW4
|
||||
};
|
||||
static_assert(std::extent_v<decltype(s_codeSamplerUpdateFreq)> == TEXTURE_SRC_CODE_COUNT);
|
||||
|
||||
inline MaterialTextureSource g_customSamplerSrc[]
|
||||
{
|
||||
TEXTURE_SRC_CODE_REFLECTION_PROBE, // CUSTOM_SAMPLER_REFLECTION_PROBE
|
||||
TEXTURE_SRC_CODE_LIGHTMAP_PRIMARY, // CUSTOM_SAMPLER_LIGHTMAP_PRIMARY
|
||||
TEXTURE_SRC_CODE_LIGHTMAP_SECONDARY // CUSTOM_SAMPLER_LIGHTMAP_SECONDARY
|
||||
};
|
||||
static_assert(std::extent_v<decltype(g_customSamplerSrc)> == CUSTOM_SAMPLER_COUNT);
|
||||
|
||||
static constexpr std::pair<uint32_t, const char*> KnownMaterialSource(const char* name)
|
||||
{
|
||||
return std::make_pair(Common::R_HashString(name, 0u), name);
|
||||
|
@ -131,7 +131,7 @@ namespace IW4
|
||||
|
||||
static MaterialUpdateFrequency GetUpdateFrequencyForArg(MaterialShaderArgument arg)
|
||||
{
|
||||
switch(arg.type)
|
||||
switch (arg.type)
|
||||
{
|
||||
case MTL_ARG_CODE_VERTEX_CONST:
|
||||
case MTL_ARG_CODE_PIXEL_CONST:
|
||||
@ -143,7 +143,7 @@ namespace IW4
|
||||
return s_codeConstUpdateFreq[arg.u.codeConst.index];
|
||||
|
||||
case MTL_ARG_CODE_PIXEL_SAMPLER:
|
||||
if(arg.u.codeSampler >= std::extent_v<decltype(s_codeSamplerUpdateFreq)>)
|
||||
if (arg.u.codeSampler >= std::extent_v<decltype(s_codeSamplerUpdateFreq)>)
|
||||
{
|
||||
assert(false);
|
||||
return MTL_UPDATE_RARELY;
|
||||
@ -1011,9 +1011,23 @@ namespace IW4
|
||||
stableArgCount++;
|
||||
break;
|
||||
case MTL_UPDATE_CUSTOM:
|
||||
{
|
||||
assert(arg.m_arg.type == MTL_ARG_CODE_PIXEL_SAMPLER);
|
||||
if (arg.m_arg.type == MTL_ARG_CODE_PIXEL_SAMPLER)
|
||||
{
|
||||
const auto customSampler = std::find(std::begin(g_customSamplerSrc), std::end(g_customSamplerSrc), arg.m_arg.u.codeSampler);
|
||||
assert(customSampler != std::end(g_customSamplerSrc));
|
||||
if (customSampler != std::end(g_customSamplerSrc))
|
||||
{
|
||||
const auto customSamplerIndex = customSampler - std::begin(g_customSamplerSrc);
|
||||
out.customSamplerFlags |= 1 << customSamplerIndex;
|
||||
}
|
||||
}
|
||||
}
|
||||
continue;
|
||||
default:
|
||||
assert(false);
|
||||
break;
|
||||
continue;
|
||||
}
|
||||
|
||||
out.args[argIndex++] = arg.m_arg;
|
||||
|
Loading…
x
Reference in New Issue
Block a user