mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2025-04-19 15:52:53 +00:00
Example material stencil values and blendfunc
This commit is contained in:
parent
cc2f0ca487
commit
638b659a48
@ -555,33 +555,44 @@ namespace IW3
|
|||||||
{
|
{
|
||||||
GFXS0_SRCBLEND_RGB_SHIFT = 0x0,
|
GFXS0_SRCBLEND_RGB_SHIFT = 0x0,
|
||||||
GFXS0_SRCBLEND_RGB_MASK = 0xF,
|
GFXS0_SRCBLEND_RGB_MASK = 0xF,
|
||||||
|
|
||||||
GFXS0_DSTBLEND_RGB_SHIFT = 0x4,
|
GFXS0_DSTBLEND_RGB_SHIFT = 0x4,
|
||||||
GFXS0_DSTBLEND_RGB_MASK = 0xF0,
|
GFXS0_DSTBLEND_RGB_MASK = 0xF0,
|
||||||
|
|
||||||
GFXS0_BLENDOP_RGB_SHIFT = 0x8,
|
GFXS0_BLENDOP_RGB_SHIFT = 0x8,
|
||||||
GFXS0_BLENDOP_RGB_MASK = 0x700,
|
GFXS0_BLENDOP_RGB_MASK = 0x700,
|
||||||
GFXS0_BLEND_RGB_MASK = 0x7FF,
|
GFXS0_BLEND_RGB_MASK = 0x7FF,
|
||||||
|
|
||||||
GFXS0_ATEST_DISABLE = 0x800,
|
GFXS0_ATEST_DISABLE = 0x800,
|
||||||
GFXS0_ATEST_GT_0 = 0x1000,
|
GFXS0_ATEST_GT_0 = 0x1000,
|
||||||
GFXS0_ATEST_LT_128 = 0x2000,
|
GFXS0_ATEST_LT_128 = 0x2000,
|
||||||
GFXS0_ATEST_GE_128 = 0x3000,
|
GFXS0_ATEST_GE_128 = 0x3000,
|
||||||
GFXS0_ATEST_MASK = 0x3000,
|
GFXS0_ATEST_MASK = 0x3000,
|
||||||
|
|
||||||
GFXS0_CULL_SHIFT = 0xE,
|
GFXS0_CULL_SHIFT = 0xE,
|
||||||
GFXS0_CULL_NONE = 0x4000,
|
GFXS0_CULL_NONE = 0x4000,
|
||||||
GFXS0_CULL_BACK = 0x8000,
|
GFXS0_CULL_BACK = 0x8000,
|
||||||
GFXS0_CULL_FRONT = 0xC000,
|
GFXS0_CULL_FRONT = 0xC000,
|
||||||
GFXS0_CULL_MASK = 0xC000,
|
GFXS0_CULL_MASK = 0xC000,
|
||||||
|
|
||||||
GFXS0_SRCBLEND_ALPHA_SHIFT = 0x10,
|
GFXS0_SRCBLEND_ALPHA_SHIFT = 0x10,
|
||||||
GFXS0_SRCBLEND_ALPHA_MASK = 0xF0000,
|
GFXS0_SRCBLEND_ALPHA_MASK = 0xF0000,
|
||||||
|
|
||||||
GFXS0_DSTBLEND_ALPHA_SHIFT = 0x14,
|
GFXS0_DSTBLEND_ALPHA_SHIFT = 0x14,
|
||||||
GFXS0_DSTBLEND_ALPHA_MASK = 0xF00000,
|
GFXS0_DSTBLEND_ALPHA_MASK = 0xF00000,
|
||||||
|
|
||||||
GFXS0_BLENDOP_ALPHA_SHIFT = 0x18,
|
GFXS0_BLENDOP_ALPHA_SHIFT = 0x18,
|
||||||
GFXS0_BLENDOP_ALPHA_MASK = 0x7000000,
|
GFXS0_BLENDOP_ALPHA_MASK = 0x7000000,
|
||||||
GFXS0_BLEND_ALPHA_MASK = 0x7FF0000,
|
GFXS0_BLEND_ALPHA_MASK = 0x7FF0000,
|
||||||
|
|
||||||
GFXS0_COLORWRITE_RGB = 0x8000000,
|
GFXS0_COLORWRITE_RGB = 0x8000000,
|
||||||
GFXS0_COLORWRITE_ALPHA = 0x10000000,
|
GFXS0_COLORWRITE_ALPHA = 0x10000000,
|
||||||
GFXS0_COLORWRITE_MASK = 0x18000000,
|
GFXS0_COLORWRITE_MASK = 0x18000000,
|
||||||
|
|
||||||
GFXS0_POLYMODE_LINE = 0x80000000,
|
GFXS0_POLYMODE_LINE = 0x80000000,
|
||||||
|
|
||||||
GFXS1_DEPTHWRITE = 0x1,
|
GFXS1_DEPTHWRITE = 0x1,
|
||||||
|
|
||||||
GFXS1_DEPTHTEST_DISABLE = 0x2,
|
GFXS1_DEPTHTEST_DISABLE = 0x2,
|
||||||
GFXS1_DEPTHTEST_SHIFT = 0x2,
|
GFXS1_DEPTHTEST_SHIFT = 0x2,
|
||||||
GFXS1_DEPTHTEST_ALWAYS = 0x0,
|
GFXS1_DEPTHTEST_ALWAYS = 0x0,
|
||||||
@ -589,25 +600,30 @@ namespace IW3
|
|||||||
GFXS1_DEPTHTEST_EQUAL = 0x8,
|
GFXS1_DEPTHTEST_EQUAL = 0x8,
|
||||||
GFXS1_DEPTHTEST_LESSEQUAL = 0xC,
|
GFXS1_DEPTHTEST_LESSEQUAL = 0xC,
|
||||||
GFXS1_DEPTHTEST_MASK = 0xC,
|
GFXS1_DEPTHTEST_MASK = 0xC,
|
||||||
|
|
||||||
GFXS1_POLYGON_OFFSET_SHIFT = 0x4,
|
GFXS1_POLYGON_OFFSET_SHIFT = 0x4,
|
||||||
GFXS1_POLYGON_OFFSET_0 = 0x0,
|
GFXS1_POLYGON_OFFSET_0 = 0x0,
|
||||||
GFXS1_POLYGON_OFFSET_1 = 0x10,
|
GFXS1_POLYGON_OFFSET_1 = 0x10,
|
||||||
GFXS1_POLYGON_OFFSET_2 = 0x20,
|
GFXS1_POLYGON_OFFSET_2 = 0x20,
|
||||||
GFXS1_POLYGON_OFFSET_SHADOWMAP = 0x30,
|
GFXS1_POLYGON_OFFSET_SHADOWMAP = 0x30,
|
||||||
GFXS1_POLYGON_OFFSET_MASK = 0x30,
|
GFXS1_POLYGON_OFFSET_MASK = 0x30,
|
||||||
|
|
||||||
GFXS1_STENCIL_FRONT_ENABLE = 0x40,
|
GFXS1_STENCIL_FRONT_ENABLE = 0x40,
|
||||||
GFXS1_STENCIL_BACK_ENABLE = 0x80,
|
GFXS1_STENCIL_BACK_ENABLE = 0x80,
|
||||||
GFXS1_STENCIL_MASK = 0xC0,
|
GFXS1_STENCIL_MASK = 0xC0,
|
||||||
|
|
||||||
GFXS1_STENCIL_FRONT_PASS_SHIFT = 0x8,
|
GFXS1_STENCIL_FRONT_PASS_SHIFT = 0x8,
|
||||||
GFXS1_STENCIL_FRONT_FAIL_SHIFT = 0xB,
|
GFXS1_STENCIL_FRONT_FAIL_SHIFT = 0xB,
|
||||||
GFXS1_STENCIL_FRONT_ZFAIL_SHIFT = 0xE,
|
GFXS1_STENCIL_FRONT_ZFAIL_SHIFT = 0xE,
|
||||||
GFXS1_STENCIL_FRONT_FUNC_SHIFT = 0x11,
|
GFXS1_STENCIL_FRONT_FUNC_SHIFT = 0x11,
|
||||||
GFXS1_STENCIL_FRONT_MASK = 0xFFF00,
|
GFXS1_STENCIL_FRONT_MASK = 0xFFF00,
|
||||||
|
|
||||||
GFXS1_STENCIL_BACK_PASS_SHIFT = 0x14,
|
GFXS1_STENCIL_BACK_PASS_SHIFT = 0x14,
|
||||||
GFXS1_STENCIL_BACK_FAIL_SHIFT = 0x17,
|
GFXS1_STENCIL_BACK_FAIL_SHIFT = 0x17,
|
||||||
GFXS1_STENCIL_BACK_ZFAIL_SHIFT = 0x1A,
|
GFXS1_STENCIL_BACK_ZFAIL_SHIFT = 0x1A,
|
||||||
GFXS1_STENCIL_BACK_FUNC_SHIFT = 0x1D,
|
GFXS1_STENCIL_BACK_FUNC_SHIFT = 0x1D,
|
||||||
GFXS1_STENCIL_BACK_MASK = 0xFFF00000,
|
GFXS1_STENCIL_BACK_MASK = 0xFFF00000,
|
||||||
|
|
||||||
GFXS1_STENCILFUNC_FRONTBACK_MASK = 0xE00E0000,
|
GFXS1_STENCILFUNC_FRONTBACK_MASK = 0xE00E0000,
|
||||||
GFXS1_STENCILOP_FRONTBACK_MASK = 0x1FF1FF00,
|
GFXS1_STENCILOP_FRONTBACK_MASK = 0x1FF1FF00,
|
||||||
};
|
};
|
||||||
|
@ -696,6 +696,21 @@ namespace IW4
|
|||||||
GFXS_BLENDOP_MASK = 0x7,
|
GFXS_BLENDOP_MASK = 0x7,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum GfxStencilFunc
|
||||||
|
{
|
||||||
|
GFXS_STENCILFUNC_NEVER = 0x0,
|
||||||
|
GFXS_STENCILFUNC_LESS = 0x1,
|
||||||
|
GFXS_STENCILFUNC_EQUAL = 0x2,
|
||||||
|
GFXS_STENCILFUNC_LESSEQUAL = 0x3,
|
||||||
|
GFXS_STENCILFUNC_GREATER = 0x4,
|
||||||
|
GFXS_STENCILFUNC_NOTEQUAL = 0x5,
|
||||||
|
GFXS_STENCILFUNC_GREATEREQUAL = 0x6,
|
||||||
|
GFXS_STENCILFUNC_ALWAYS = 0x7,
|
||||||
|
|
||||||
|
GFXS_STENCILFUNC_COUNT,
|
||||||
|
GFXS_STENCILFUNC_MASK = 0x7
|
||||||
|
};
|
||||||
|
|
||||||
enum GfxStencilOp
|
enum GfxStencilOp
|
||||||
{
|
{
|
||||||
GFXS_STENCILOP_KEEP = 0x0,
|
GFXS_STENCILOP_KEEP = 0x0,
|
||||||
@ -737,8 +752,10 @@ namespace IW4
|
|||||||
|
|
||||||
GFXS0_SRCBLEND_ALPHA_SHIFT = 0x10,
|
GFXS0_SRCBLEND_ALPHA_SHIFT = 0x10,
|
||||||
GFXS0_SRCBLEND_ALPHA_MASK = 0xF0000,
|
GFXS0_SRCBLEND_ALPHA_MASK = 0xF0000,
|
||||||
|
|
||||||
GFXS0_DSTBLEND_ALPHA_SHIFT = 0x14,
|
GFXS0_DSTBLEND_ALPHA_SHIFT = 0x14,
|
||||||
GFXS0_DSTBLEND_ALPHA_MASK = 0xF00000,
|
GFXS0_DSTBLEND_ALPHA_MASK = 0xF00000,
|
||||||
|
|
||||||
GFXS0_BLENDOP_ALPHA_SHIFT = 0x18,
|
GFXS0_BLENDOP_ALPHA_SHIFT = 0x18,
|
||||||
GFXS0_BLENDOP_ALPHA_MASK = 0x7000000,
|
GFXS0_BLENDOP_ALPHA_MASK = 0x7000000,
|
||||||
GFXS0_BLEND_ALPHA_MASK = 0x7FF0000,
|
GFXS0_BLEND_ALPHA_MASK = 0x7FF0000,
|
||||||
@ -751,6 +768,7 @@ namespace IW4
|
|||||||
GFXS0_POLYMODE_LINE = 0x80000000,
|
GFXS0_POLYMODE_LINE = 0x80000000,
|
||||||
|
|
||||||
GFXS1_DEPTHWRITE = 0x1,
|
GFXS1_DEPTHWRITE = 0x1,
|
||||||
|
|
||||||
GFXS1_DEPTHTEST_DISABLE = 0x2,
|
GFXS1_DEPTHTEST_DISABLE = 0x2,
|
||||||
GFXS1_DEPTHTEST_ALWAYS = 0x0,
|
GFXS1_DEPTHTEST_ALWAYS = 0x0,
|
||||||
GFXS1_DEPTHTEST_LESS = 0x4,
|
GFXS1_DEPTHTEST_LESS = 0x4,
|
||||||
@ -771,15 +789,29 @@ namespace IW4
|
|||||||
GFXS1_STENCIL_MASK = 0xC0,
|
GFXS1_STENCIL_MASK = 0xC0,
|
||||||
|
|
||||||
GFXS1_STENCIL_FRONT_PASS_SHIFT = 0x8,
|
GFXS1_STENCIL_FRONT_PASS_SHIFT = 0x8,
|
||||||
|
GFXS1_STENCIL_FRONT_PASS_MASK = 0x700,
|
||||||
|
|
||||||
GFXS1_STENCIL_FRONT_FAIL_SHIFT = 0xB,
|
GFXS1_STENCIL_FRONT_FAIL_SHIFT = 0xB,
|
||||||
|
GFXS1_STENCIL_FRONT_FAIL_MASK = 0x3800,
|
||||||
|
|
||||||
GFXS1_STENCIL_FRONT_ZFAIL_SHIFT = 0xE,
|
GFXS1_STENCIL_FRONT_ZFAIL_SHIFT = 0xE,
|
||||||
|
GFXS1_STENCIL_FRONT_ZFAIL_MASK = 0x1C000,
|
||||||
|
|
||||||
GFXS1_STENCIL_FRONT_FUNC_SHIFT = 0x11,
|
GFXS1_STENCIL_FRONT_FUNC_SHIFT = 0x11,
|
||||||
|
GFXS1_STENCIL_FRONT_FUNC_MASK = 0xE0000,
|
||||||
GFXS1_STENCIL_FRONT_MASK = 0xFFF00,
|
GFXS1_STENCIL_FRONT_MASK = 0xFFF00,
|
||||||
|
|
||||||
GFXS1_STENCIL_BACK_PASS_SHIFT = 0x14,
|
GFXS1_STENCIL_BACK_PASS_SHIFT = 0x14,
|
||||||
|
GFXS1_STENCIL_BACK_PASS_MASK = 0x700000,
|
||||||
|
|
||||||
GFXS1_STENCIL_BACK_FAIL_SHIFT = 0x17,
|
GFXS1_STENCIL_BACK_FAIL_SHIFT = 0x17,
|
||||||
|
GFXS1_STENCIL_BACK_FAIL_MASK = 0x3800000,
|
||||||
|
|
||||||
GFXS1_STENCIL_BACK_ZFAIL_SHIFT = 0x1A,
|
GFXS1_STENCIL_BACK_ZFAIL_SHIFT = 0x1A,
|
||||||
|
GFXS1_STENCIL_BACK_ZFAIL_MASK = 0x1C000000,
|
||||||
|
|
||||||
GFXS1_STENCIL_BACK_FUNC_SHIFT = 0x1D,
|
GFXS1_STENCIL_BACK_FUNC_SHIFT = 0x1D,
|
||||||
|
GFXS1_STENCIL_BACK_FUNC_MASK = 0xE0000000,
|
||||||
GFXS1_STENCIL_BACK_MASK = 0xFFF00000,
|
GFXS1_STENCIL_BACK_MASK = 0xFFF00000,
|
||||||
|
|
||||||
GFXS1_STENCILFUNC_FRONTBACK_MASK = 0xE00E0000,
|
GFXS1_STENCILFUNC_FRONTBACK_MASK = 0xE00E0000,
|
||||||
|
@ -303,4 +303,62 @@ namespace IW4
|
|||||||
"shadowMap"
|
"shadowMap"
|
||||||
};
|
};
|
||||||
static_assert(std::extent_v<decltype(GdtPolygonOffsetNames)> == static_cast<size_t>(PolygonOffset_e::COUNT));
|
static_assert(std::extent_v<decltype(GdtPolygonOffsetNames)> == static_cast<size_t>(PolygonOffset_e::COUNT));
|
||||||
|
|
||||||
|
enum class StencilFunc_e
|
||||||
|
{
|
||||||
|
UNKNOWN,
|
||||||
|
NEVER,
|
||||||
|
LESS,
|
||||||
|
EQUAL,
|
||||||
|
LESS_EQUAL,
|
||||||
|
GREATER,
|
||||||
|
NOT_EQUAL,
|
||||||
|
GREATER_EQUAL,
|
||||||
|
ALWAYS,
|
||||||
|
|
||||||
|
COUNT
|
||||||
|
};
|
||||||
|
|
||||||
|
inline const char* GdtStencilFuncNames[]
|
||||||
|
{
|
||||||
|
"",
|
||||||
|
"Never",
|
||||||
|
"Less",
|
||||||
|
"Equal",
|
||||||
|
"LessEqual",
|
||||||
|
"Greater",
|
||||||
|
"NotEqual",
|
||||||
|
"GreaterEqual",
|
||||||
|
"Always"
|
||||||
|
};
|
||||||
|
static_assert(std::extent_v<decltype(GdtStencilFuncNames)> == static_cast<size_t>(StencilFunc_e::COUNT));
|
||||||
|
|
||||||
|
enum class StencilOp_e
|
||||||
|
{
|
||||||
|
UNKNOWN,
|
||||||
|
KEEP,
|
||||||
|
ZERO,
|
||||||
|
REPLACE,
|
||||||
|
INCR_SAT,
|
||||||
|
DECR_SAT,
|
||||||
|
INVERT,
|
||||||
|
INCR,
|
||||||
|
DECR,
|
||||||
|
|
||||||
|
COUNT
|
||||||
|
};
|
||||||
|
|
||||||
|
inline const char* GdtStencilOpNames[]
|
||||||
|
{
|
||||||
|
"",
|
||||||
|
"Keep",
|
||||||
|
"Zero",
|
||||||
|
"Replace",
|
||||||
|
"IncrSat",
|
||||||
|
"DecrSat",
|
||||||
|
"Invert",
|
||||||
|
"Incr",
|
||||||
|
"Decr"
|
||||||
|
};
|
||||||
|
static_assert(std::extent_v<decltype(GdtStencilOpNames)> == static_cast<size_t>(StencilOp_e::COUNT));
|
||||||
}
|
}
|
||||||
|
@ -557,6 +557,15 @@ namespace IW4
|
|||||||
PolygonOffset_e m_polygon_offset = PolygonOffset_e::UNKNOWN;
|
PolygonOffset_e m_polygon_offset = PolygonOffset_e::UNKNOWN;
|
||||||
StateBitsEnabledStatus_e m_color_write_rgb = StateBitsEnabledStatus_e::UNKNOWN;
|
StateBitsEnabledStatus_e m_color_write_rgb = StateBitsEnabledStatus_e::UNKNOWN;
|
||||||
StateBitsEnabledStatus_e m_color_write_alpha = StateBitsEnabledStatus_e::UNKNOWN;
|
StateBitsEnabledStatus_e m_color_write_alpha = StateBitsEnabledStatus_e::UNKNOWN;
|
||||||
|
StateBitsEnabledStatus_e m_gamma_write = StateBitsEnabledStatus_e::UNKNOWN;
|
||||||
|
StencilFunc_e m_stencil_front_func = StencilFunc_e::UNKNOWN;
|
||||||
|
StencilOp_e m_stencil_front_fail = StencilOp_e::UNKNOWN;
|
||||||
|
StencilOp_e m_stencil_front_zfail = StencilOp_e::UNKNOWN;
|
||||||
|
StencilOp_e m_stencil_front_pass = StencilOp_e::UNKNOWN;
|
||||||
|
StencilFunc_e m_stencil_back_func = StencilFunc_e::UNKNOWN;
|
||||||
|
StencilOp_e m_stencil_back_fail = StencilOp_e::UNKNOWN;
|
||||||
|
StencilOp_e m_stencil_back_zfail = StencilOp_e::UNKNOWN;
|
||||||
|
StencilOp_e m_stencil_back_pass = StencilOp_e::UNKNOWN;
|
||||||
};
|
};
|
||||||
|
|
||||||
class MaterialGdtDumper
|
class MaterialGdtDumper
|
||||||
@ -893,6 +902,77 @@ namespace IW4
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class BlendFuncParameters
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
const BlendFunc_e m_blend_func;
|
||||||
|
const BlendOp_e m_blend_op_rgb;
|
||||||
|
const CustomBlendFunc_e m_src_blend_func;
|
||||||
|
const CustomBlendFunc_e m_dst_blend_func;
|
||||||
|
const BlendOp_e m_blend_op_alpha;
|
||||||
|
const CustomBlendFunc_e m_src_blend_func_alpha;
|
||||||
|
const CustomBlendFunc_e m_dst_blend_func_alpha;
|
||||||
|
|
||||||
|
BlendFuncParameters(const BlendFunc_e blendFunc, const BlendOp_e blend_Op_Rgb, const CustomBlendFunc_e src_Blend_Func, const CustomBlendFunc_e dst_Blend_Func,
|
||||||
|
const BlendOp_e blend_Op_Alpha, const CustomBlendFunc_e src_Blend_Func_Alpha, const CustomBlendFunc_e dst_Blend_Func_Alpha)
|
||||||
|
: m_blend_func(blendFunc),
|
||||||
|
m_blend_op_rgb(blend_Op_Rgb),
|
||||||
|
m_src_blend_func(src_Blend_Func),
|
||||||
|
m_dst_blend_func(dst_Blend_Func),
|
||||||
|
m_blend_op_alpha(blend_Op_Alpha),
|
||||||
|
m_src_blend_func_alpha(src_Blend_Func_Alpha),
|
||||||
|
m_dst_blend_func_alpha(dst_Blend_Func_Alpha)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
BlendFuncParameters knownBlendFuncs[5]
|
||||||
|
{
|
||||||
|
BlendFuncParameters(BlendFunc_e::ADD, BlendOp_e::ADD, CustomBlendFunc_e::ONE, CustomBlendFunc_e::ONE, BlendOp_e::DISABLE, CustomBlendFunc_e::UNKNOWN, CustomBlendFunc_e::UNKNOWN),
|
||||||
|
BlendFuncParameters(BlendFunc_e::BLEND, BlendOp_e::ADD, CustomBlendFunc_e::SRC_ALPHA, CustomBlendFunc_e::INV_SRC_ALPHA, BlendOp_e::DISABLE, CustomBlendFunc_e::UNKNOWN,
|
||||||
|
CustomBlendFunc_e::UNKNOWN),
|
||||||
|
BlendFuncParameters(BlendFunc_e::MULTIPLY, BlendOp_e::ADD, CustomBlendFunc_e::ZERO, CustomBlendFunc_e::SRC_COLOR, BlendOp_e::DISABLE, CustomBlendFunc_e::UNKNOWN,
|
||||||
|
CustomBlendFunc_e::UNKNOWN),
|
||||||
|
BlendFuncParameters(BlendFunc_e::REPLACE, BlendOp_e::DISABLE, CustomBlendFunc_e::UNKNOWN, CustomBlendFunc_e::UNKNOWN, BlendOp_e::DISABLE, CustomBlendFunc_e::UNKNOWN,
|
||||||
|
CustomBlendFunc_e::UNKNOWN),
|
||||||
|
BlendFuncParameters(BlendFunc_e::SCREEN_ADD, BlendOp_e::ADD, CustomBlendFunc_e::INV_DST_COLOR, CustomBlendFunc_e::ONE, BlendOp_e::DISABLE, CustomBlendFunc_e::UNKNOWN,
|
||||||
|
CustomBlendFunc_e::UNKNOWN),
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
bool KnownBlendFuncParameterMatches(const T materialValue, const T blendFuncValue)
|
||||||
|
{
|
||||||
|
if (blendFuncValue == T::UNKNOWN)
|
||||||
|
return true;
|
||||||
|
if (materialValue == T::UNKNOWN)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return static_cast<unsigned>(materialValue) == static_cast<unsigned>(blendFuncValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ExamineBlendFunc()
|
||||||
|
{
|
||||||
|
if (m_state_bits_info.m_blend_func != BlendFunc_e::UNKNOWN)
|
||||||
|
return;
|
||||||
|
|
||||||
|
for (const auto& knownBlendFunc : knownBlendFuncs)
|
||||||
|
{
|
||||||
|
if (KnownBlendFuncParameterMatches(m_state_bits_info.m_custom_blend_op_rgb, knownBlendFunc.m_blend_op_rgb)
|
||||||
|
&& KnownBlendFuncParameterMatches(m_state_bits_info.m_custom_src_blend_func, knownBlendFunc.m_src_blend_func)
|
||||||
|
&& KnownBlendFuncParameterMatches(m_state_bits_info.m_custom_dst_blend_func, knownBlendFunc.m_dst_blend_func)
|
||||||
|
&& KnownBlendFuncParameterMatches(m_state_bits_info.m_custom_blend_op_alpha, knownBlendFunc.m_blend_op_alpha)
|
||||||
|
&& KnownBlendFuncParameterMatches(m_state_bits_info.m_custom_src_blend_func_alpha, knownBlendFunc.m_src_blend_func_alpha)
|
||||||
|
&& KnownBlendFuncParameterMatches(m_state_bits_info.m_custom_dst_blend_func_alpha, knownBlendFunc.m_dst_blend_func_alpha)
|
||||||
|
)
|
||||||
|
{
|
||||||
|
m_state_bits_info.m_blend_func = knownBlendFunc.m_blend_func;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
m_state_bits_info.m_blend_func = BlendFunc_e::CUSTOM;
|
||||||
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
T StateBitsToEnum(const unsigned input, const size_t mask, const size_t shift)
|
T StateBitsToEnum(const unsigned input, const size_t mask, const size_t shift)
|
||||||
{
|
{
|
||||||
@ -991,6 +1071,35 @@ namespace IW4
|
|||||||
|
|
||||||
if (m_state_bits_info.m_color_write_alpha == StateBitsEnabledStatus_e::UNKNOWN)
|
if (m_state_bits_info.m_color_write_alpha == StateBitsEnabledStatus_e::UNKNOWN)
|
||||||
m_state_bits_info.m_color_write_alpha = (stateBits.loadBits[0] & GFXS0_COLORWRITE_ALPHA) ? StateBitsEnabledStatus_e::ENABLED : StateBitsEnabledStatus_e::DISABLED;
|
m_state_bits_info.m_color_write_alpha = (stateBits.loadBits[0] & GFXS0_COLORWRITE_ALPHA) ? StateBitsEnabledStatus_e::ENABLED : StateBitsEnabledStatus_e::DISABLED;
|
||||||
|
|
||||||
|
if (m_state_bits_info.m_gamma_write == StateBitsEnabledStatus_e::UNKNOWN)
|
||||||
|
m_state_bits_info.m_gamma_write = (stateBits.loadBits[0] & GFXS0_GAMMAWRITE) ? StateBitsEnabledStatus_e::ENABLED : StateBitsEnabledStatus_e::DISABLED;
|
||||||
|
|
||||||
|
if (m_state_bits_info.m_stencil_front_func == StencilFunc_e::UNKNOWN)
|
||||||
|
m_state_bits_info.m_stencil_front_func = StateBitsToEnum<StencilFunc_e>(stateBits.loadBits[1], GFXS1_STENCIL_FRONT_FUNC_MASK, GFXS1_STENCIL_FRONT_FUNC_SHIFT);
|
||||||
|
|
||||||
|
if (m_state_bits_info.m_stencil_front_pass == StencilOp_e::UNKNOWN)
|
||||||
|
m_state_bits_info.m_stencil_front_pass = StateBitsToEnum<StencilOp_e>(stateBits.loadBits[1], GFXS1_STENCIL_FRONT_PASS_MASK, GFXS1_STENCIL_FRONT_PASS_SHIFT);
|
||||||
|
|
||||||
|
if (m_state_bits_info.m_stencil_front_fail == StencilOp_e::UNKNOWN)
|
||||||
|
m_state_bits_info.m_stencil_front_fail = StateBitsToEnum<StencilOp_e>(stateBits.loadBits[1], GFXS1_STENCIL_FRONT_FAIL_MASK, GFXS1_STENCIL_FRONT_FAIL_SHIFT);
|
||||||
|
|
||||||
|
if (m_state_bits_info.m_stencil_front_zfail == StencilOp_e::UNKNOWN)
|
||||||
|
m_state_bits_info.m_stencil_front_zfail = StateBitsToEnum<StencilOp_e>(stateBits.loadBits[1], GFXS1_STENCIL_FRONT_ZFAIL_MASK, GFXS1_STENCIL_FRONT_ZFAIL_SHIFT);
|
||||||
|
|
||||||
|
if (m_state_bits_info.m_stencil_back_func == StencilFunc_e::UNKNOWN)
|
||||||
|
m_state_bits_info.m_stencil_back_func = StateBitsToEnum<StencilFunc_e>(stateBits.loadBits[1], GFXS1_STENCIL_BACK_FUNC_MASK, GFXS1_STENCIL_BACK_FUNC_SHIFT);
|
||||||
|
|
||||||
|
if (m_state_bits_info.m_stencil_back_pass == StencilOp_e::UNKNOWN)
|
||||||
|
m_state_bits_info.m_stencil_back_pass = StateBitsToEnum<StencilOp_e>(stateBits.loadBits[1], GFXS1_STENCIL_BACK_PASS_MASK, GFXS1_STENCIL_BACK_PASS_SHIFT);
|
||||||
|
|
||||||
|
if (m_state_bits_info.m_stencil_back_fail == StencilOp_e::UNKNOWN)
|
||||||
|
m_state_bits_info.m_stencil_back_fail = StateBitsToEnum<StencilOp_e>(stateBits.loadBits[1], GFXS1_STENCIL_BACK_FAIL_MASK, GFXS1_STENCIL_BACK_FAIL_SHIFT);
|
||||||
|
|
||||||
|
if (m_state_bits_info.m_stencil_back_zfail == StencilOp_e::UNKNOWN)
|
||||||
|
m_state_bits_info.m_stencil_back_zfail = StateBitsToEnum<StencilOp_e>(stateBits.loadBits[1], GFXS1_STENCIL_BACK_ZFAIL_MASK, GFXS1_STENCIL_BACK_ZFAIL_SHIFT);
|
||||||
|
|
||||||
|
ExamineBlendFunc();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetMaterialTypeValues()
|
void SetMaterialTypeValues()
|
||||||
@ -1027,6 +1136,15 @@ namespace IW4
|
|||||||
SetValue("colorWriteGreen", GdtStateBitsEnabledStatusNames[static_cast<size_t>(m_state_bits_info.m_color_write_rgb)]);
|
SetValue("colorWriteGreen", GdtStateBitsEnabledStatusNames[static_cast<size_t>(m_state_bits_info.m_color_write_rgb)]);
|
||||||
SetValue("colorWriteBlue", GdtStateBitsEnabledStatusNames[static_cast<size_t>(m_state_bits_info.m_color_write_rgb)]);
|
SetValue("colorWriteBlue", GdtStateBitsEnabledStatusNames[static_cast<size_t>(m_state_bits_info.m_color_write_rgb)]);
|
||||||
SetValue("colorWriteAlpha", GdtStateBitsEnabledStatusNames[static_cast<size_t>(m_state_bits_info.m_color_write_alpha)]);
|
SetValue("colorWriteAlpha", GdtStateBitsEnabledStatusNames[static_cast<size_t>(m_state_bits_info.m_color_write_alpha)]);
|
||||||
|
SetValue("gammaWrite", GdtStateBitsOnOffStatusNames[static_cast<size_t>(m_state_bits_info.m_gamma_write)]);
|
||||||
|
SetValue("stencilFunc1", GdtStencilFuncNames[static_cast<size_t>(m_state_bits_info.m_stencil_front_func)]);
|
||||||
|
SetValue("stencilOpPass1", GdtStencilOpNames[static_cast<size_t>(m_state_bits_info.m_stencil_front_pass)]);
|
||||||
|
SetValue("stencilOpFail1", GdtStencilOpNames[static_cast<size_t>(m_state_bits_info.m_stencil_front_fail)]);
|
||||||
|
SetValue("stencilOpZFail1", GdtStencilOpNames[static_cast<size_t>(m_state_bits_info.m_stencil_front_zfail)]);
|
||||||
|
SetValue("stencilFunc2", GdtStencilFuncNames[static_cast<size_t>(m_state_bits_info.m_stencil_back_func)]);
|
||||||
|
SetValue("stencilOpPass2", GdtStencilOpNames[static_cast<size_t>(m_state_bits_info.m_stencil_back_pass)]);
|
||||||
|
SetValue("stencilOpFail2", GdtStencilOpNames[static_cast<size_t>(m_state_bits_info.m_stencil_back_fail)]);
|
||||||
|
SetValue("stencilOpZFail2", GdtStencilOpNames[static_cast<size_t>(m_state_bits_info.m_stencil_back_zfail)]);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetTextureTableValues()
|
void SetTextureTableValues()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user