Skip to content

Commit

Permalink
Merge pull request mixxxdj#13381 from fwcd/disable-textured-waveforms…
Browse files Browse the repository at this point in the history
…-gles

Waveforms: Disable textured waveforms when using OpenGL ES
  • Loading branch information
daschuer authored Jun 19, 2024
2 parents 331f59f + ce82b3c commit a48562a
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 15 deletions.
4 changes: 4 additions & 0 deletions src/waveform/renderers/allshader/waveformrenderertextured.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
#include "waveform/renderers/allshader/waveformrenderertextured.h"

#ifndef QT_OPENGL_ES_2

#include <QOpenGLFramebufferObject>
#include <QOpenGLShaderProgram>

Expand Down Expand Up @@ -531,3 +533,5 @@ void WaveformRendererTextured::paintGL() {
}

} // namespace allshader

#endif // QT_OPENGL_ES_2
4 changes: 4 additions & 0 deletions src/waveform/renderers/allshader/waveformrenderertextured.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
#pragma once

#ifndef QT_OPENGL_ES_2

#include "shaders/rgbshader.h"
#include "track/track_decl.h"
#include "util/class.h"
Expand Down Expand Up @@ -65,3 +67,5 @@ class allshader::WaveformRendererTextured : public QObject,
const QString m_pFragShader;
std::unique_ptr<QOpenGLShaderProgram> m_frameShaderProgram;
};

#endif // QT_OPENGL_ES_2
42 changes: 27 additions & 15 deletions src/waveform/widgets/allshader/waveformwidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -65,27 +65,30 @@ allshader::WaveformRendererSignalBase*
WaveformWidget::addWaveformSignalRenderer(WaveformWidgetType::Type type,
WaveformRendererSignalBase::Options options,
::WaveformRendererAbstract::PositionSource positionSource) {
#ifndef QT_OPENGL_ES_2
if (options & allshader::WaveformRendererSignalBase::Option::HighDetail) {
switch (type) {
case ::WaveformWidgetType::RGB:
case ::WaveformWidgetType::Filtered:
case ::WaveformWidgetType::Stacked:
return addRenderer<WaveformRendererTextured>(type, positionSource, options);
default:
break;
}
}
#endif

switch (type) {
case ::WaveformWidgetType::Simple:
return addRenderer<WaveformRendererSimple>();
case ::WaveformWidgetType::RGB:
if (options & allshader::WaveformRendererSignalBase::Option::HighDetail) {
return addRenderer<WaveformRendererTextured>(type, positionSource, options);
}
return addRenderer<WaveformRendererRGB>(positionSource, options);
case ::WaveformWidgetType::HSV:
return addRenderer<WaveformRendererHSV>();
case ::WaveformWidgetType::Filtered:
if (options & allshader::WaveformRendererSignalBase::Option::HighDetail) {
return addRenderer<WaveformRendererTextured>(type, positionSource, options);
}
return addRenderer<WaveformRendererFiltered>(false);
case ::WaveformWidgetType::Stacked:
if (options & allshader::WaveformRendererSignalBase::Option::HighDetail) {
return addRenderer<WaveformRendererTextured>(type, positionSource, options);
} else {
return addRenderer<WaveformRendererFiltered>(true); // true for RGB Stacked
}
return addRenderer<WaveformRendererFiltered>(true); // true for RGB Stacked
default:
break;
}
Expand Down Expand Up @@ -148,17 +151,26 @@ void WaveformWidget::leaveEvent(QEvent* pEvent) {
/* static */
WaveformRendererSignalBase::Options WaveformWidget::supportedOptions(
WaveformWidgetType::Type type) {
WaveformRendererSignalBase::Options options = WaveformRendererSignalBase::Option::None;
switch (type) {
case WaveformWidgetType::Type::RGB:
return WaveformRendererSignalBase::Option::AllOptionsCombined;
options = WaveformRendererSignalBase::Option::AllOptionsCombined;
break;
case WaveformWidgetType::Type::Filtered:
return WaveformRendererSignalBase::Option::HighDetail;
options = WaveformRendererSignalBase::Option::HighDetail;
break;
case WaveformWidgetType::Type::Stacked:
return WaveformRendererSignalBase::Option::HighDetail;
options = WaveformRendererSignalBase::Option::HighDetail;
break;
default:
break;
}
return WaveformRendererSignalBase::Option::None;
#ifdef QT_OPENGL_ES_2
// High detail (textured) waveforms are not supported on OpenGL ES.
// See https://github.com/mixxxdj/mixxx/issues/13385
options &= ~WaveformRendererSignalBase::Options(WaveformRendererSignalBase::Option::HighDetail);
#endif
return options;
}

/* static */
Expand Down

0 comments on commit a48562a

Please sign in to comment.