mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2025-04-20 00:02:55 +00:00
Add more details about material semantic and samplerState
This commit is contained in:
parent
2114b761b0
commit
ce22a2fea6
@ -627,6 +627,31 @@ namespace IW4
|
|||||||
water_t* water;
|
water_t* water;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum SamplerStateBits_e
|
||||||
|
{
|
||||||
|
SAMPLER_FILTER_SHIFT = 0x0,
|
||||||
|
SAMPLER_FILTER_NEAREST = 0x1,
|
||||||
|
SAMPLER_FILTER_LINEAR = 0x2,
|
||||||
|
SAMPLER_FILTER_ANISO2X = 0x3,
|
||||||
|
SAMPLER_FILTER_ANISO4X = 0x4,
|
||||||
|
SAMPLER_FILTER_MASK = 0x7,
|
||||||
|
|
||||||
|
SAMPLER_MIPMAP_SHIFT = 0x3,
|
||||||
|
SAMPLER_MIPMAP_DISABLED = 0x0,
|
||||||
|
SAMPLER_MIPMAP_NEAREST = 0x8,
|
||||||
|
SAMPLER_MIPMAP_LINEAR = 0x10,
|
||||||
|
SAMPLER_MIPMAP_COUNT = 0x3,
|
||||||
|
SAMPLER_MIPMAP_MASK = 0x18,
|
||||||
|
|
||||||
|
SAMPLER_CLAMP_U_SHIFT = 0x5,
|
||||||
|
SAMPLER_CLAMP_V_SHIFT = 0x6,
|
||||||
|
SAMPLER_CLAMP_W_SHIFT = 0x7,
|
||||||
|
SAMPLER_CLAMP_U = 0x20,
|
||||||
|
SAMPLER_CLAMP_V = 0x40,
|
||||||
|
SAMPLER_CLAMP_W = 0x80,
|
||||||
|
SAMPLER_CLAMP_MASK = 0xE0,
|
||||||
|
};
|
||||||
|
|
||||||
struct MaterialTextureDef
|
struct MaterialTextureDef
|
||||||
{
|
{
|
||||||
unsigned int nameHash;
|
unsigned int nameHash;
|
||||||
@ -2247,29 +2272,6 @@ namespace IW4
|
|||||||
FxElemDef* elemDefs;
|
FxElemDef* elemDefs;
|
||||||
};
|
};
|
||||||
|
|
||||||
enum SamplerStateBits_e
|
|
||||||
{
|
|
||||||
SAMPLER_FILTER_SHIFT = 0x0,
|
|
||||||
SAMPLER_FILTER_NEAREST = 0x1,
|
|
||||||
SAMPLER_FILTER_LINEAR = 0x2,
|
|
||||||
SAMPLER_FILTER_ANISO2X = 0x3,
|
|
||||||
SAMPLER_FILTER_ANISO4X = 0x4,
|
|
||||||
SAMPLER_FILTER_MASK = 0x7,
|
|
||||||
SAMPLER_MIPMAP_SHIFT = 0x3,
|
|
||||||
SAMPLER_MIPMAP_DISABLED = 0x0,
|
|
||||||
SAMPLER_MIPMAP_NEAREST = 0x8,
|
|
||||||
SAMPLER_MIPMAP_LINEAR = 0x10,
|
|
||||||
SAMPLER_MIPMAP_COUNT = 0x3,
|
|
||||||
SAMPLER_MIPMAP_MASK = 0x18,
|
|
||||||
SAMPLER_CLAMP_U_SHIFT = 0x5,
|
|
||||||
SAMPLER_CLAMP_V_SHIFT = 0x6,
|
|
||||||
SAMPLER_CLAMP_W_SHIFT = 0x7,
|
|
||||||
SAMPLER_CLAMP_U = 0x20,
|
|
||||||
SAMPLER_CLAMP_V = 0x40,
|
|
||||||
SAMPLER_CLAMP_W = 0x80,
|
|
||||||
SAMPLER_CLAMP_MASK = 0xE0,
|
|
||||||
};
|
|
||||||
|
|
||||||
struct GfxLightImage
|
struct GfxLightImage
|
||||||
{
|
{
|
||||||
GfxImage* image;
|
GfxImage* image;
|
||||||
|
@ -18,6 +18,16 @@ namespace IW4
|
|||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <size_t S>
|
||||||
|
json ArrayEntry(const char* (&a)[S], const size_t index)
|
||||||
|
{
|
||||||
|
assert(index < S);
|
||||||
|
if (index < S)
|
||||||
|
return a[index];
|
||||||
|
|
||||||
|
return json{};
|
||||||
|
}
|
||||||
|
|
||||||
json BuildComplexTableJson(complex_s* complexTable, const size_t count)
|
json BuildComplexTableJson(complex_s* complexTable, const size_t count)
|
||||||
{
|
{
|
||||||
auto jArray = json::array();
|
auto jArray = json::array();
|
||||||
@ -58,8 +68,50 @@ namespace IW4
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
json BuildSamplerStateJson(unsigned char samplerState)
|
||||||
|
{
|
||||||
|
static const char* samplerFilterNames[]
|
||||||
|
{
|
||||||
|
"none",
|
||||||
|
"nearest",
|
||||||
|
"linear",
|
||||||
|
"aniso2x",
|
||||||
|
"aniso4x"
|
||||||
|
};
|
||||||
|
static const char* samplerMipmapNames[]
|
||||||
|
{
|
||||||
|
"disabled",
|
||||||
|
"nearest",
|
||||||
|
"linear"
|
||||||
|
};
|
||||||
|
|
||||||
|
return json{
|
||||||
|
{"filter", ArrayEntry(samplerFilterNames, (samplerState & SAMPLER_FILTER_MASK) >> SAMPLER_FILTER_SHIFT)},
|
||||||
|
{"mipmap", ArrayEntry(samplerMipmapNames, (samplerState & SAMPLER_MIPMAP_MASK) >> SAMPLER_MIPMAP_SHIFT)},
|
||||||
|
{"clampU", (samplerState & SAMPLER_CLAMP_U) ? true : false},
|
||||||
|
{"clampV", (samplerState & SAMPLER_CLAMP_V) ? true : false},
|
||||||
|
{"clampW", (samplerState & SAMPLER_CLAMP_W) ? true : false},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
json BuildTextureTableJson(MaterialTextureDef* textureTable, const size_t count)
|
json BuildTextureTableJson(MaterialTextureDef* textureTable, const size_t count)
|
||||||
{
|
{
|
||||||
|
static const char* semanticNames[]
|
||||||
|
{
|
||||||
|
"2d",
|
||||||
|
"function",
|
||||||
|
"colorMap",
|
||||||
|
"detailMap",
|
||||||
|
"unused2",
|
||||||
|
"normalMap",
|
||||||
|
"unused3",
|
||||||
|
"unused4",
|
||||||
|
"specularMap",
|
||||||
|
"unused5",
|
||||||
|
"unused6",
|
||||||
|
"waterMap"
|
||||||
|
};
|
||||||
|
|
||||||
auto jArray = json::array();
|
auto jArray = json::array();
|
||||||
|
|
||||||
if (textureTable)
|
if (textureTable)
|
||||||
@ -67,9 +119,11 @@ namespace IW4
|
|||||||
for (auto index = 0u; index < count; index++)
|
for (auto index = 0u; index < count; index++)
|
||||||
{
|
{
|
||||||
const auto& entry = textureTable[index];
|
const auto& entry = textureTable[index];
|
||||||
|
assert(entry.semantic < std::extent_v<decltype(semanticNames)>);
|
||||||
|
|
||||||
json jEntry = {
|
json jEntry = {
|
||||||
{"samplerState", entry.samplerState},
|
{"samplerState", BuildSamplerStateJson(entry.samplerState)},
|
||||||
{"semantic", entry.semantic}
|
{"semantic", ArrayEntry(semanticNames, entry.semantic)}
|
||||||
};
|
};
|
||||||
|
|
||||||
const auto knownMaterialSourceName = knownMaterialSourceNames.find(entry.nameHash);
|
const auto knownMaterialSourceName = knownMaterialSourceNames.find(entry.nameHash);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user