diff --git a/src/gui/gui.h b/src/gui/gui.h index a821530c0..684b47a33 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -1437,6 +1437,7 @@ class FurnaceGUIRender { virtual void wipe(float alpha); virtual void drawOsc(float* data, size_t len, ImVec2 pos0, ImVec2 pos1, ImVec4 color, ImVec2 canvasSize, float lineWidth); virtual void present(); + virtual bool supportsDrawOsc(); virtual bool getOutputSize(int& w, int& h); virtual int getWindowFlags(); virtual void preInit(); diff --git a/src/gui/osc.cpp b/src/gui/osc.cpp index 8f5104930..3cb1393f1 100644 --- a/src/gui/osc.cpp +++ b/src/gui/osc.cpp @@ -303,23 +303,25 @@ void FurnaceGUI::drawOsc() { waveform[i]=ImLerp(inRect.Min,inRect.Max,ImVec2(x,0.5f-y)); } - if (settings.oscEscapesBoundary) { - dl->PushClipRectFullScreen(); - dl->AddPolyline(waveform,oscWidth-24,color,ImDrawFlags_None,dpiScale); - dl->PopClipRect(); + if (rend->supportsDrawOsc()) { + _do.gui=this; + _do.data=&oscValuesAverage[12]; + _do.len=oscWidth-24; + _do.pos0=inRect.Min; + _do.pos1=inRect.Max; + _do.color=isClipping?uiColors[GUI_COLOR_OSC_WAVE_PEAK]:uiColors[GUI_COLOR_OSC_WAVE]; + + dl->AddCallback(_drawOsc,&_do); + dl->AddCallback(ImDrawCallback_ResetRenderState,NULL); } else { - dl->AddPolyline(waveform,oscWidth-24,color,ImDrawFlags_None,dpiScale); + if (settings.oscEscapesBoundary) { + dl->PushClipRectFullScreen(); + dl->AddPolyline(waveform,oscWidth-24,color,ImDrawFlags_None,dpiScale); + dl->PopClipRect(); + } else { + dl->AddPolyline(waveform,oscWidth-24,color,ImDrawFlags_None,dpiScale); + } } - - _do.gui=this; - _do.data=&oscValuesAverage[12]; - _do.len=oscWidth-24; - _do.pos0=inRect.Min; - _do.pos1=inRect.Max; - _do.color=isClipping?uiColors[GUI_COLOR_OSC_WAVE_PEAK]:uiColors[GUI_COLOR_OSC_WAVE]; - - dl->AddCallback(_drawOsc,&_do); - dl->AddCallback(ImDrawCallback_ResetRenderState,NULL); } else { for (int ch=0; chgetAudioDescGot().outChans; ch++) { for (int i=0; i