|
@@ -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();
|
|
|
+#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);
|
|
|
+ } else {
|
|
|
+ // unoptimized - could this be done once per batch / batch texture?
|
|
|
+ bool send_light_angles = polygon->normal_map != RID();
|
|
|
|
|
|
- bool buffer_full = false;
|
|
|
+ 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 (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;
|
|
|
- } // using software skinning path
|
|
|
+ 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;
|
|
|
|