mirror of
https://github.com/godotengine/godot.git
synced 2025-10-19 16:03:29 +00:00
Merge pull request #109111 from lawnjelly/fix_multirect_cast
[3.x] `Batching` - Fix `MultiRect` casting to wrong type
This commit is contained in:
commit
e9af21fe1b
1 changed files with 21 additions and 45 deletions
|
@ -3209,20 +3209,13 @@ PREAMBLE(bool)::_sort_items_match(const BSortItem &p_a, const BSortItem &p_b) co
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// tested outside function
|
// Tested outside function.
|
||||||
// if (a->commands.size() != 1)
|
// DEV_ASSERT(a->commands.size() == 1);
|
||||||
// return false;
|
|
||||||
|
|
||||||
const RasterizerCanvas::Item::Command &cb = *b->commands[0];
|
|
||||||
if ((cb.type != RasterizerCanvas::Item::Command::TYPE_RECT) && (cb.type != RasterizerCanvas::Item::Command::TYPE_MULTIRECT)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
const RasterizerCanvas::Item::Command &ca = *a->commands[0];
|
const RasterizerCanvas::Item::Command &ca = *a->commands[0];
|
||||||
// tested outside function
|
const RasterizerCanvas::Item::Command &cb = *b->commands[0];
|
||||||
// if (ca.type != Item::Command::TYPE_RECT)
|
|
||||||
// return false;
|
|
||||||
|
|
||||||
|
if ((ca.type == RasterizerCanvas::Item::Command::TYPE_RECT) && (cb.type == RasterizerCanvas::Item::Command::TYPE_RECT)) {
|
||||||
const RasterizerCanvas::Item::CommandRect *rect_a = static_cast<const RasterizerCanvas::Item::CommandRect *>(&ca);
|
const RasterizerCanvas::Item::CommandRect *rect_a = static_cast<const RasterizerCanvas::Item::CommandRect *>(&ca);
|
||||||
const RasterizerCanvas::Item::CommandRect *rect_b = static_cast<const RasterizerCanvas::Item::CommandRect *>(&cb);
|
const RasterizerCanvas::Item::CommandRect *rect_b = static_cast<const RasterizerCanvas::Item::CommandRect *>(&cb);
|
||||||
|
|
||||||
|
@ -3230,40 +3223,23 @@ PREAMBLE(bool)::_sort_items_match(const BSortItem &p_a, const BSortItem &p_b) co
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ALTERNATIVE APPROACH NOT LIMITED TO RECTS
|
return true;
|
||||||
const RasterizerCanvas::Item::Command &ca = *a->commands[0];
|
}
|
||||||
const RasterizerCanvas::Item::Command &cb = *b->commands[0];
|
|
||||||
|
|
||||||
if (ca.type != cb.type)
|
if ((ca.type == RasterizerCanvas::Item::Command::TYPE_MULTIRECT) && (cb.type == RasterizerCanvas::Item::Command::TYPE_MULTIRECT)) {
|
||||||
return false;
|
const RasterizerCanvas::Item::CommandMultiRect *rect_a = static_cast<const RasterizerCanvas::Item::CommandMultiRect *>(&ca);
|
||||||
|
const RasterizerCanvas::Item::CommandMultiRect *rect_b = static_cast<const RasterizerCanvas::Item::CommandMultiRect *>(&cb);
|
||||||
|
|
||||||
// do textures match?
|
if (rect_a->texture != rect_b->texture) {
|
||||||
switch (ca.type)
|
|
||||||
{
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
case RasterizerCanvas::Item::Command::TYPE_RECT:
|
|
||||||
{
|
|
||||||
const RasterizerCanvas::Item::CommandRect *comm_a = static_cast<const RasterizerCanvas::Item::CommandRect *>(&ca);
|
|
||||||
const RasterizerCanvas::Item::CommandRect *comm_b = static_cast<const RasterizerCanvas::Item::CommandRect *>(&cb);
|
|
||||||
if (comm_a->texture != comm_b->texture)
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
case RasterizerCanvas::Item::Command::TYPE_POLYGON:
|
|
||||||
{
|
|
||||||
const RasterizerCanvas::Item::CommandPolygon *comm_a = static_cast<const RasterizerCanvas::Item::CommandPolygon *>(&ca);
|
|
||||||
const RasterizerCanvas::Item::CommandPolygon *comm_b = static_cast<const RasterizerCanvas::Item::CommandPolygon *>(&cb);
|
|
||||||
if (comm_a->texture != comm_b->texture)
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
PREAMBLE(bool)::sort_items_from(int p_start) {
|
PREAMBLE(bool)::sort_items_from(int p_start) {
|
||||||
#if defined(TOOLS_ENABLED) && defined(DEBUG_ENABLED)
|
#if defined(TOOLS_ENABLED) && defined(DEBUG_ENABLED)
|
||||||
ERR_FAIL_COND_V((p_start + 1) >= bdata.sort_items.size(), false);
|
ERR_FAIL_COND_V((p_start + 1) >= bdata.sort_items.size(), false);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue