Browse Source

Merge pull request #43332 from lawnjelly/ewok_line2d

Batching - use legacy path for antialiased polys.
Rémi Verschelde 4 years ago
parent
commit
7fccecf6a7
1 changed files with 31 additions and 20 deletions
  1. 31 20
      drivers/gles_common/rasterizer_canvas_batcher.h

+ 31 - 20
drivers/gles_common/rasterizer_canvas_batcher.h

@@ -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;