diff --git a/drivers/gles_common/rasterizer_canvas_batcher.h b/drivers/gles_common/rasterizer_canvas_batcher.h index 9ffcab96d1..4f38abd459 100644 --- a/drivers/gles_common/rasterizer_canvas_batcher.h +++ b/drivers/gles_common/rasterizer_canvas_batcher.h @@ -579,7 +579,7 @@ private: // translating vertex formats prior to rendering void _translate_batches_to_vertex_colored_FVF(); template - void _translate_batches_to_larger_FVF(); + void _translate_batches_to_larger_FVF(uint32_t p_sequence_batch_type_flags); protected: // accessory funcs @@ -2344,19 +2344,19 @@ PREAMBLE(void)::flush_render_batches(RasterizerCanvas::Item *p_first_item, Raste case RasterizerStorageCommon::FVF_COLOR: { // special case, where vertex colors are used (polys) if (!bdata.vertex_colors.size()) - _translate_batches_to_larger_FVF(); + _translate_batches_to_larger_FVF(p_sequence_batch_type_flags); else // normal, reduce number of batches by baking batch colors _translate_batches_to_vertex_colored_FVF(); } break; case RasterizerStorageCommon::FVF_LIGHT_ANGLE: - _translate_batches_to_larger_FVF(); + _translate_batches_to_larger_FVF(p_sequence_batch_type_flags); break; case RasterizerStorageCommon::FVF_MODULATED: - _translate_batches_to_larger_FVF(); + _translate_batches_to_larger_FVF(p_sequence_batch_type_flags); break; case RasterizerStorageCommon::FVF_LARGE: - _translate_batches_to_larger_FVF(); + _translate_batches_to_larger_FVF(p_sequence_batch_type_flags); break; } @@ -2771,9 +2771,15 @@ PREAMBLE(void)::_translate_batches_to_vertex_colored_FVF() { // In addition this can optionally add light angles to the FVF, necessary for normal mapping. T_PREAMBLE template -void C_PREAMBLE::_translate_batches_to_larger_FVF() { +void C_PREAMBLE::_translate_batches_to_larger_FVF(uint32_t p_sequence_batch_type_flags) { - bool include_poly_color = INCLUDE_LIGHT_ANGLES | INCLUDE_MODULATE | INCLUDE_LARGE; + bool include_poly_color = false; + + // we ONLY want to include the color verts in translation when using polys, + // as rects do not write vertex colors, only colors per batch. + if (p_sequence_batch_type_flags & RasterizerStorageCommon::BTF_POLY) { + include_poly_color = INCLUDE_LIGHT_ANGLES | INCLUDE_MODULATE | INCLUDE_LARGE; + } // zeros the size and sets up how big each unit is bdata.unit_vertices.prepare(sizeof(BATCH_VERTEX_TYPE));