mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2025-04-20 00:02:55 +00:00
Add statemap validation in debug mode
This commit is contained in:
parent
2dd8660824
commit
c5cfdfde89
@ -1,7 +1,53 @@
|
|||||||
#include "StateMapLayout.h"
|
#include "StateMapLayout.h"
|
||||||
|
|
||||||
|
#include <cassert>
|
||||||
|
|
||||||
using namespace state_map;
|
using namespace state_map;
|
||||||
|
|
||||||
|
namespace state_map
|
||||||
|
{
|
||||||
|
#ifdef _DEBUG
|
||||||
|
void ValidateStateMapLayout(const StateMapLayout& layout)
|
||||||
|
{
|
||||||
|
// Must have at least one state bits field
|
||||||
|
assert(layout.m_state_bits_count > 0);
|
||||||
|
|
||||||
|
for (const auto& var : layout.m_var_layout.m_vars)
|
||||||
|
{
|
||||||
|
// Cannot exceed state bits fields
|
||||||
|
assert(var.m_state_bits_index < layout.m_state_bits_count);
|
||||||
|
|
||||||
|
for (auto i = 0u; i < var.m_values.size(); i++)
|
||||||
|
{
|
||||||
|
const auto& value = var.m_values[i];
|
||||||
|
|
||||||
|
// Zero mask values must be last
|
||||||
|
assert(value.m_state_bits_mask != 0 || i == var.m_values.size() - 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const auto& entry : layout.m_entry_layout.m_entries)
|
||||||
|
{
|
||||||
|
// Cannot exceed state bits fields
|
||||||
|
assert(entry.m_state_bits_index < layout.m_state_bits_count);
|
||||||
|
|
||||||
|
// Has to have a mask for passthrough
|
||||||
|
assert(entry.m_state_bits_mask != 0);
|
||||||
|
|
||||||
|
for (auto& resultVar : entry.m_result_vars)
|
||||||
|
{
|
||||||
|
const auto correspondingVar = std::find_if(layout.m_var_layout.m_vars.begin(), layout.m_var_layout.m_vars.end(), [&resultVar](const StateMapLayoutVar& var)
|
||||||
|
{
|
||||||
|
return var.m_name == resultVar;
|
||||||
|
});
|
||||||
|
|
||||||
|
// Has to have a corresponding var
|
||||||
|
assert(correspondingVar != layout.m_var_layout.m_vars.end());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
StateMapLayoutEntry::StateMapLayoutEntry(std::string name, const size_t stateBitsIndex, const size_t stateBitsMask, std::vector<std::string> resultVars)
|
StateMapLayoutEntry::StateMapLayoutEntry(std::string name, const size_t stateBitsIndex, const size_t stateBitsMask, std::vector<std::string> resultVars)
|
||||||
: m_name(std::move(name)),
|
: m_name(std::move(name)),
|
||||||
@ -39,4 +85,7 @@ StateMapLayout::StateMapLayout(const size_t stateBitsCount, const StateMapLayout
|
|||||||
m_entry_layout(entryLayout),
|
m_entry_layout(entryLayout),
|
||||||
m_var_layout(varLayout)
|
m_var_layout(varLayout)
|
||||||
{
|
{
|
||||||
|
#ifdef _DEBUG
|
||||||
|
ValidateStateMapLayout(*this);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -790,10 +790,9 @@ namespace IW4
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"mtlStencil", 1, {
|
"mtlStencil", 1, {
|
||||||
{"Disable", 0},
|
|
||||||
{"OneSided", GFXS1_STENCIL_FRONT_ENABLE},
|
{"OneSided", GFXS1_STENCIL_FRONT_ENABLE},
|
||||||
{"TwoSided", GFXS1_STENCIL_FRONT_ENABLE | GFXS1_STENCIL_BACK_ENABLE},
|
{"TwoSided", GFXS1_STENCIL_FRONT_ENABLE | GFXS1_STENCIL_BACK_ENABLE},
|
||||||
{"0", GFXS1_POLYGON_OFFSET_0},
|
{"Disable", 0},
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user