mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2025-04-20 00:02:55 +00:00
Handle custom samplers
This commit is contained in:
parent
65c9267b06
commit
9990338130
@ -950,6 +950,15 @@ namespace IW4
|
|||||||
TEXTURE_SRC_CODE_COUNT
|
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
|
struct CodeSamplerSource
|
||||||
{
|
{
|
||||||
const char* name;
|
const char* name;
|
||||||
|
@ -507,6 +507,14 @@ namespace IW4
|
|||||||
};
|
};
|
||||||
static_assert(std::extent_v<decltype(s_codeSamplerUpdateFreq)> == TEXTURE_SRC_CODE_COUNT);
|
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)
|
static constexpr std::pair<uint32_t, const char*> KnownMaterialSource(const char* name)
|
||||||
{
|
{
|
||||||
return std::make_pair(Common::R_HashString(name, 0u), name);
|
return std::make_pair(Common::R_HashString(name, 0u), name);
|
||||||
|
@ -131,7 +131,7 @@ namespace IW4
|
|||||||
|
|
||||||
static MaterialUpdateFrequency GetUpdateFrequencyForArg(MaterialShaderArgument arg)
|
static MaterialUpdateFrequency GetUpdateFrequencyForArg(MaterialShaderArgument arg)
|
||||||
{
|
{
|
||||||
switch(arg.type)
|
switch (arg.type)
|
||||||
{
|
{
|
||||||
case MTL_ARG_CODE_VERTEX_CONST:
|
case MTL_ARG_CODE_VERTEX_CONST:
|
||||||
case MTL_ARG_CODE_PIXEL_CONST:
|
case MTL_ARG_CODE_PIXEL_CONST:
|
||||||
@ -143,7 +143,7 @@ namespace IW4
|
|||||||
return s_codeConstUpdateFreq[arg.u.codeConst.index];
|
return s_codeConstUpdateFreq[arg.u.codeConst.index];
|
||||||
|
|
||||||
case MTL_ARG_CODE_PIXEL_SAMPLER:
|
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);
|
assert(false);
|
||||||
return MTL_UPDATE_RARELY;
|
return MTL_UPDATE_RARELY;
|
||||||
@ -1011,9 +1011,23 @@ namespace IW4
|
|||||||
stableArgCount++;
|
stableArgCount++;
|
||||||
break;
|
break;
|
||||||
case MTL_UPDATE_CUSTOM:
|
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:
|
default:
|
||||||
assert(false);
|
assert(false);
|
||||||
break;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
out.args[argIndex++] = arg.m_arg;
|
out.args[argIndex++] = arg.m_arg;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user