Batching - use legacy path for antialiased polys.
Antialiased polys work by drawing a smoothed line around the poly after the main drawing. Batching draws polys as a series of triangles with no concept of 'edge', and when 2 polys are joined it becomes impractical to back calculate the edges from the triangles. For this reason batching is disabled for antialiased polys in this PR.
This commit is contained in:
parent
8135fdd382
commit
df4ef8dfac
1 changed files with 32 additions and 21 deletions
|
@ -2160,28 +2160,38 @@ PREAMBLE(bool)::prefill_joined_item(FillState &r_fill_state, int &r_command_star
|
|||
|
||||
case RasterizerCanvas::Item::Command::TYPE_POLYGON: {
|
||||
|
||||
// not using software skinning?
|
||||
if (!bdata.settings_use_software_skinning && get_this()->state.using_skeleton) {
|
||||
RasterizerCanvas::Item::CommandPolygon *polygon = static_cast<RasterizerCanvas::Item::CommandPolygon *>(command);
|
||||
#ifdef GLES_OVER_GL
|
||||
// anti aliasing not accelerated .. it is problematic because it requires a 2nd line drawn around the outside of each
|
||||
// poly, which would require either a second list of indices or a second list of vertices for this step
|
||||
if (polygon->antialiased) {
|
||||
// not accelerated
|
||||
_prefill_default_batch(r_fill_state, command_num, *p_item);
|
||||
} else {
|
||||
RasterizerCanvas::Item::CommandPolygon *polygon = static_cast<RasterizerCanvas::Item::CommandPolygon *>(command);
|
||||
|
||||
// unoptimized - could this be done once per batch / batch texture?
|
||||
bool send_light_angles = polygon->normal_map != RID();
|
||||
|
||||
bool buffer_full = false;
|
||||
|
||||
if (send_light_angles) {
|
||||
// NYI
|
||||
#endif
|
||||
// not using software skinning?
|
||||
if (!bdata.settings_use_software_skinning && get_this()->state.using_skeleton) {
|
||||
// not accelerated
|
||||
_prefill_default_batch(r_fill_state, command_num, *p_item);
|
||||
//buffer_full = prefill_polygon<true>(polygon, r_fill_state, r_command_start, command_num, command_count, p_item, multiply_final_modulate);
|
||||
} else
|
||||
buffer_full = _prefill_polygon<false>(polygon, r_fill_state, r_command_start, command_num, command_count, p_item, multiply_final_modulate);
|
||||
} else {
|
||||
// unoptimized - could this be done once per batch / batch texture?
|
||||
bool send_light_angles = polygon->normal_map != RID();
|
||||
|
||||
if (buffer_full)
|
||||
return true;
|
||||
} // using software skinning path
|
||||
bool buffer_full = false;
|
||||
|
||||
if (send_light_angles) {
|
||||
// NYI
|
||||
_prefill_default_batch(r_fill_state, command_num, *p_item);
|
||||
//buffer_full = prefill_polygon<true>(polygon, r_fill_state, r_command_start, command_num, command_count, p_item, multiply_final_modulate);
|
||||
} else
|
||||
buffer_full = _prefill_polygon<false>(polygon, r_fill_state, r_command_start, command_num, command_count, p_item, multiply_final_modulate);
|
||||
|
||||
if (buffer_full)
|
||||
return true;
|
||||
} // if not using hardware skinning path
|
||||
#ifdef GLES_OVER_GL
|
||||
} // if not anti-aliased poly
|
||||
#endif
|
||||
|
||||
} break;
|
||||
}
|
||||
|
@ -2897,18 +2907,19 @@ PREAMBLE(bool)::_detect_item_batch_break(RenderItemState &r_ris, RasterizerCanva
|
|||
}
|
||||
} break;
|
||||
case RasterizerCanvas::Item::Command::TYPE_POLYGON: {
|
||||
//return true;
|
||||
// only allow polygons to join if they aren't skeleton
|
||||
RasterizerCanvas::Item::CommandPolygon *poly = static_cast<RasterizerCanvas::Item::CommandPolygon *>(command);
|
||||
|
||||
// return true;
|
||||
#ifdef GLES_OVER_GL
|
||||
// anti aliasing not accelerated
|
||||
if (poly->antialiased)
|
||||
return true;
|
||||
#endif
|
||||
|
||||
// light angles not yet implemented, treat as default
|
||||
if (poly->normal_map != RID())
|
||||
return true;
|
||||
|
||||
// we could possibly join polygons that are software skinned? NYI
|
||||
|
||||
if (!get_this()->bdata.settings_use_software_skinning && poly->bones.size())
|
||||
return true;
|
||||
|
||||
|
|
Loading…
Reference in a new issue