diff --git a/src/engine/engine.cpp b/src/engine/engine.cpp index afcdcebc9..4a1667399 100644 --- a/src/engine/engine.cpp +++ b/src/engine/engine.cpp @@ -1578,6 +1578,40 @@ String DivEngine::getWarnings() { return warnings; } +String DivEngine::getPlaybackDebugInfo() { + return fmt::sprintf( + "curOrder: %d\n" + "prevOrder: %d\n" + "curRow: %d\n" + "prevRow: %d\n" + "ticks: %d\n" + "subticks: %d\n" + "totalLoops: %d\n" + "lastLoopPos: %d\n" + "nextSpeed: %d\n" + "divider: %f\n" + "cycles: %d\n" + "clockDrift: %f\n" + "changeOrd: %d\n" + "changePos: %d\n" + "totalSeconds: %d\n" + "totalTicks: %d\n" + "totalTicksR: %d\n" + "totalCmds: %d\n" + "lastCmds: %d\n" + "cmdsPerSecond: %d\n" + "globalPitch: %d\n" + "extValue: %d\n" + "speed1: %d\n" + "speed2: %d\n" + "tempoAccum: %d\n" + "totalProcessed: %d\n", + curOrder,prevOrder,curRow,prevRow,ticks,subticks,totalLoops,lastLoopPos,nextSpeed,divider,cycles,clockDrift, + changeOrd,changePos,totalSeconds,totalTicks,totalTicksR,totalCmds,lastCmds,cmdsPerSecond,globalPitch, + (int)extValue,(int)speed1,(int)speed2,(int)tempoAccum,(int)totalProcessed + ); +} + DivInstrument* DivEngine::getIns(int index, DivInstrumentType fallbackType) { if (index==-2 && tempIns!=NULL) { return tempIns; @@ -1701,6 +1735,7 @@ void DivEngine::playSub(bool preserveDrift, int goalRow) { skipping=true; memset(walked,0,8192); for (int i=0; isetSkipRegisterWrites(true); + logV("goal: %d goalRow: %d",goal,goalRow); while (playing && curOrdervirtualTempoN)/MAX(1,curSubSong->virtualTempoD))<1 && curRow>=goalRow) break; } for (int i=0; isetSkipRegisterWrites(false); if (goal>0 || goalRow>0) { @@ -1734,6 +1770,7 @@ void DivEngine::playSub(bool preserveDrift, int goalRow) { subticks=1; prevOrder=curOrder; prevRow=curRow; + tempoAccum=0; } skipping=false; cmdStream.clear(); diff --git a/src/engine/engine.h b/src/engine/engine.h index 3a03c4278..648ebfb49 100644 --- a/src/engine/engine.h +++ b/src/engine/engine.h @@ -955,6 +955,9 @@ class DivEngine { // get warnings String getWarnings(); + // get debug info + String getPlaybackDebugInfo(); + // switch master bool switchMaster(); diff --git a/src/gui/debugWindow.cpp b/src/gui/debugWindow.cpp index a8f750087..9358c06f9 100644 --- a/src/gui/debugWindow.cpp +++ b/src/gui/debugWindow.cpp @@ -98,7 +98,7 @@ void FurnaceGUI::drawDebug() { ImGui::Columns(); ImGui::TreePop(); } - if (ImGui::TreeNode("Playback Status")) { + if (ImGui::TreeNode("Channel Status")) { ImGui::Text("for best results set latency to minimum or use the Frame Advance button."); ImGui::Columns(e->getTotalChannelCount()); for (int i=0; igetTotalChannelCount(); i++) { @@ -160,6 +160,11 @@ void FurnaceGUI::drawDebug() { ImGui::Columns(); ImGui::TreePop(); } + if (ImGui::TreeNode("Playback Status")) { + String pdi=e->getPlaybackDebugInfo(); + ImGui::TextWrapped("%s",pdi.c_str()); + ImGui::TreePop(); + } if (ImGui::TreeNode("Sample Debug")) { for (int i=0; isong.sampleLen; i++) { DivSample* sample=e->getSample(i);