Original Post
The assertion in the following code is failing, but it should be impossible for it to fail: I've checked to make sure that it's not falling through the switch, so that is not the problem. I just can't imagine how this assertion could ever fail. The value of node->x is 0x07800000, size is 0x00800000, and MaxValue is 0x08000000. node->x + size is equal to MaxValue, so expression in the if statement should evaluate to true. Any ideas?
TerrainNode* Terrain::GetRightNeighbor(TerrainNode *node)
{
uint size = 1 << node->level;
if(node->x + size >= MaxValue)
{
switch(node->face)
{
switch(node->face)
{
case FaceFront:
return Traverse(&_rootNodes[FaceRight], 0, node->y, node->level);
case FaceRight:
return Traverse(&_rootNodes[FaceBack], 0, node->y, node->level);
case FaceLeft:
return Traverse(&_rootNodes[FaceFront], 0, node->y, node->level);
case FaceBack:
return Traverse(&_rootNodes[FaceLeft], 0, node->y, node->level);
case FaceTop:
return Traverse(&_rootNodes[FaceRight], MaxValue - size - node->y, 0, node->level);
case FaceBottom:
return Traverse(&_rootNodes[FaceRight], node->y, MaxValue - 1, node->level);
}
}
}
assert(node->x + size < MaxValue);
return Traverse(GetCommonAncestor(node, node->x ^ (node->x + size)), node->x + size, node->y, node->level);
}