fix MIDI playlist rendering with opaque regions

regions are sorted lowest-first, not highest-first.
This commit is contained in:
Paul Davis 2025-07-14 09:11:42 -06:00
parent ee4b68fc80
commit 0edba1f559

View file

@ -357,20 +357,20 @@ MidiPlaylist::render (MidiChannelFilter* filter)
} else { } else {
DEBUG_TRACE (DEBUG::MidiPlaylistIO, string_compose ("\t%1 layered regions to read\n", regs.size())); DEBUG_TRACE (DEBUG::MidiPlaylistIO, string_compose ("\t%1 layered regions to read\n", regs.size()));
bool top = false;
bool top = true;
std::vector<samplepos_t> bounds; std::vector<samplepos_t> bounds;
EventsSortByTimeAndType<samplepos_t> cmp; EventsSortByTimeAndType<samplepos_t> cmp;
int n = regs.size();
/* iterate, bottom region first */
/* iterate, top-most region first */
for (auto & mr : regs) { for (auto & mr : regs) {
DEBUG_TRACE (DEBUG::MidiPlaylistIO, string_compose ("maybe render from %1\n", mr->name())); DEBUG_TRACE (DEBUG::MidiPlaylistIO, string_compose ("maybe render from %1\n", mr->name()));
if (top) { if (--n == 0) {
/* render topmost region as-is */ /* render topmost region as-is */
mr->render (evlist, 0, _note_mode, filter); mr->render (evlist, 0, _note_mode, filter);
top = false;
} else { } else {
Evoral::EventList<samplepos_t> tmp; Evoral::EventList<samplepos_t> tmp;
mr->render (tmp, 0, _note_mode, filter); mr->render (tmp, 0, _note_mode, filter);