Skip to content

Commit

Permalink
WIP
Browse files Browse the repository at this point in the history
  • Loading branch information
Swiftb0y committed Sep 4, 2023
1 parent fba0a94 commit b83d539
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 122 deletions.
171 changes: 49 additions & 122 deletions src/waveform/waveformwidgetfactory.cpp
Expand Up @@ -840,14 +840,17 @@ void WaveformWidgetFactory::evaluateWidgets() {
bool useOpenGles;
bool useOpenGLShaders;
WaveformWidgetCategory category;
auto setFromType = [&]<typename WaveformT>() {
widgetName = buildWidgetName<WaveformT>();
useOpenGl = WaveformT::useOpenGl();
useOpenGles = WaveformT::useOpenGles();
useOpenGLShaders = WaveformT::useOpenGLShaders();
category = WaveformT::category();
};

switch(type) {
case WaveformWidgetType::EmptyWaveform:
widgetName = EmptyWaveformWidget::getWaveformWidgetName();
useOpenGl = EmptyWaveformWidget::useOpenGl();
useOpenGles = EmptyWaveformWidget::useOpenGles();
useOpenGLShaders = EmptyWaveformWidget::useOpenGLShaders();
category = EmptyWaveformWidget::category();
setFromType.operator()<EmptyWaveformWidget>();
break;
case WaveformWidgetType::SoftwareSimpleWaveform:
continue; // //TODO(vrince):
Expand All @@ -859,230 +862,134 @@ void WaveformWidgetFactory::evaluateWidgets() {
// https://bugs.launchpad.net/bugs/1928772
continue;
#else
widgetName = SoftwareWaveformWidget::getWaveformWidgetName();
useOpenGl = SoftwareWaveformWidget::useOpenGl();
useOpenGles = SoftwareWaveformWidget::useOpenGles();
useOpenGLShaders = SoftwareWaveformWidget::useOpenGLShaders();
category = SoftwareWaveformWidget::category();
setFromType.operator()<SoftwareWaveformWidget>();
break;
#endif
case WaveformWidgetType::HSVWaveform:
#ifdef __APPLE__
continue;
#else
widgetName = HSVWaveformWidget::getWaveformWidgetName();
useOpenGl = HSVWaveformWidget::useOpenGl();
useOpenGles = HSVWaveformWidget::useOpenGles();
useOpenGLShaders = HSVWaveformWidget::useOpenGLShaders();
category = HSVWaveformWidget::category();
setFromType.operator()<HSVWaveformWidget>();
break;
#endif
case WaveformWidgetType::RGBWaveform:
#ifdef __APPLE__
continue;
#else
widgetName = RGBWaveformWidget::getWaveformWidgetName();
useOpenGl = RGBWaveformWidget::useOpenGl();
useOpenGles = RGBWaveformWidget::useOpenGles();
useOpenGLShaders = RGBWaveformWidget::useOpenGLShaders();
category = RGBWaveformWidget::category();
setFromType.operator()<RGBWaveformWidget>();
break;
#endif
case WaveformWidgetType::QtSimpleWaveform:
#ifdef MIXXX_USE_QOPENGL
continue;
#else
widgetName = QtSimpleWaveformWidget::getWaveformWidgetName();
useOpenGl = QtSimpleWaveformWidget::useOpenGl();
useOpenGles = QtSimpleWaveformWidget::useOpenGles();
useOpenGLShaders = QtSimpleWaveformWidget::useOpenGLShaders();
category = QtSimpleWaveformWidget::category();
setFromType.operator()<QtSimpleWaveformWidget>();
break;
#endif
case WaveformWidgetType::QtWaveform:
#ifdef MIXXX_USE_QOPENGL
continue;
#else
widgetName = QtWaveformWidget::getWaveformWidgetName();
useOpenGl = QtWaveformWidget::useOpenGl();
useOpenGles = QtWaveformWidget::useOpenGles();
useOpenGLShaders = QtWaveformWidget::useOpenGLShaders();
category = QtWaveformWidget::category();
setFromType.operator()<QtWaveformWidget>();
break;
#endif
case WaveformWidgetType::GLSimpleWaveform:
widgetName = GLSimpleWaveformWidget::getWaveformWidgetName();
useOpenGl = GLSimpleWaveformWidget::useOpenGl();
useOpenGles = GLSimpleWaveformWidget::useOpenGles();
useOpenGLShaders = GLSimpleWaveformWidget::useOpenGLShaders();
category = GLSimpleWaveformWidget::category();
setFromType.operator()<GLSimpleWaveformWidget>();
break;
case WaveformWidgetType::GLFilteredWaveform:
widgetName = GLWaveformWidget::getWaveformWidgetName();
useOpenGl = GLWaveformWidget::useOpenGl();
useOpenGles = GLWaveformWidget::useOpenGles();
useOpenGLShaders = GLWaveformWidget::useOpenGLShaders();
category = GLWaveformWidget::category();
setFromType.operator()<GLWaveformWidget>();
break;
case WaveformWidgetType::GLSLFilteredWaveform:
widgetName = GLSLFilteredWaveformWidget::getWaveformWidgetName();
useOpenGl = GLSLFilteredWaveformWidget::useOpenGl();
useOpenGles = GLSLFilteredWaveformWidget::useOpenGles();
useOpenGLShaders = GLSLFilteredWaveformWidget::useOpenGLShaders();
category = GLSLFilteredWaveformWidget::category();
setFromType.operator()<GLSLFilteredWaveformWidget>();
break;
case WaveformWidgetType::GLSLRGBWaveform:
widgetName = GLSLRGBWaveformWidget::getWaveformWidgetName();
useOpenGl = GLSLRGBWaveformWidget::useOpenGl();
useOpenGles = GLSLRGBWaveformWidget::useOpenGles();
useOpenGLShaders = GLSLRGBWaveformWidget::useOpenGLShaders();
category = GLSLRGBWaveformWidget::category();
setFromType.operator()<GLSLRGBWaveformWidget>();
break;
case WaveformWidgetType::GLSLRGBStackedWaveform:
widgetName = GLSLRGBStackedWaveformWidget::getWaveformWidgetName();
useOpenGl = GLSLRGBStackedWaveformWidget::useOpenGl();
useOpenGles = GLSLRGBStackedWaveformWidget::useOpenGles();
useOpenGLShaders = GLSLRGBStackedWaveformWidget::useOpenGLShaders();
category = GLSLRGBStackedWaveformWidget::category();
setFromType.operator()<GLSLRGBStackedWaveformWidget>();
break;
case WaveformWidgetType::GLVSyncTest:
widgetName = GLVSyncTestWidget::getWaveformWidgetName();
useOpenGl = GLVSyncTestWidget::useOpenGl();
useOpenGles = GLVSyncTestWidget::useOpenGles();
useOpenGLShaders = GLVSyncTestWidget::useOpenGLShaders();
category = GLVSyncTestWidget::category();
setFromType.operator()<GLVSyncTestWidget>();
break;
case WaveformWidgetType::GLRGBWaveform:
widgetName = GLRGBWaveformWidget::getWaveformWidgetName();
useOpenGl = GLRGBWaveformWidget::useOpenGl();
useOpenGles = GLRGBWaveformWidget::useOpenGles();
useOpenGLShaders = GLRGBWaveformWidget::useOpenGLShaders();
category = GLRGBWaveformWidget::category();
setFromType.operator()<GLRGBWaveformWidget>();
break;
case WaveformWidgetType::QtVSyncTest:
#ifdef MIXXX_USE_QOPENGL
continue;
#else
widgetName = QtVSyncTestWidget::getWaveformWidgetName();
useOpenGl = QtVSyncTestWidget::useOpenGl();
useOpenGles = QtVSyncTestWidget::useOpenGles();
useOpenGLShaders = QtVSyncTestWidget::useOpenGLShaders();
category = QtVSyncTestWidget::category();
setFromType.operator()<QtVSyncTestWidget>();
#endif
break;
case WaveformWidgetType::QtHSVWaveform:
#ifdef MIXXX_USE_QOPENGL
continue;
#else
widgetName = QtHSVWaveformWidget::getWaveformWidgetName();
useOpenGl = QtHSVWaveformWidget::useOpenGl();
useOpenGles = QtHSVWaveformWidget::useOpenGles();
useOpenGLShaders = QtHSVWaveformWidget::useOpenGLShaders();
category = QtHSVWaveformWidget::category();
setFromType.operator()<QtHSVWaveformWidget>();
break;
#endif
case WaveformWidgetType::QtRGBWaveform:
#ifdef MIXXX_USE_QOPENGL
continue;
#else
widgetName = QtRGBWaveformWidget::getWaveformWidgetName();
useOpenGl = QtRGBWaveformWidget::useOpenGl();
useOpenGles = QtRGBWaveformWidget::useOpenGles();
useOpenGLShaders = QtRGBWaveformWidget::useOpenGLShaders();
category = QtRGBWaveformWidget::category();
setFromType.operator()<QtRGBWaveformWidget>();
break;
#endif
case WaveformWidgetType::AllShaderRGBWaveform:
#ifndef MIXXX_USE_QOPENGL
continue;
#else
widgetName = allshader::RGBWaveformWidget::getWaveformWidgetName();
useOpenGl = allshader::RGBWaveformWidget::useOpenGl();
useOpenGles = allshader::RGBWaveformWidget::useOpenGles();
useOpenGLShaders = allshader::RGBWaveformWidget::useOpenGLShaders();
category = allshader::RGBWaveformWidget::category();
setFromType.operator()<allshader::RGBWaveformWidget>();
break;
#endif
case WaveformWidgetType::AllShaderLRRGBWaveform:
#ifndef MIXXX_USE_QOPENGL
continue;
#else
widgetName = allshader::LRRGBWaveformWidget::getWaveformWidgetName();
useOpenGl = allshader::LRRGBWaveformWidget::useOpenGl();
useOpenGles = allshader::LRRGBWaveformWidget::useOpenGles();
useOpenGLShaders = allshader::LRRGBWaveformWidget::useOpenGLShaders();
category = allshader::LRRGBWaveformWidget::category();
setFromType.operator()<allshader::LRRGBWaveformWidget>();
break;
#endif
case WaveformWidgetType::AllShaderFilteredWaveform:
#ifndef MIXXX_USE_QOPENGL
continue;
#else
widgetName = allshader::FilteredWaveformWidget::getWaveformWidgetName();
useOpenGl = allshader::FilteredWaveformWidget::useOpenGl();
useOpenGles = allshader::FilteredWaveformWidget::useOpenGles();
useOpenGLShaders = allshader::FilteredWaveformWidget::useOpenGLShaders();
category = allshader::FilteredWaveformWidget::category();
setFromType.operator()<allshader::FilteredWaveformWidget>();
break;
#endif
case WaveformWidgetType::AllShaderSimpleWaveform:
#ifndef MIXXX_USE_QOPENGL
continue;
#else
widgetName = allshader::SimpleWaveformWidget::getWaveformWidgetName();
useOpenGl = allshader::SimpleWaveformWidget::useOpenGl();
useOpenGles = allshader::SimpleWaveformWidget::useOpenGles();
useOpenGLShaders = allshader::SimpleWaveformWidget::useOpenGLShaders();
category = allshader::SimpleWaveformWidget::category();
setFromType.operator()<allshader::SimpleWaveformWidget>();
break;
#endif
case WaveformWidgetType::AllShaderHSVWaveform:
#ifndef MIXXX_USE_QOPENGL
continue;
#else
widgetName = allshader::HSVWaveformWidget::getWaveformWidgetName();
useOpenGl = allshader::HSVWaveformWidget::useOpenGl();
useOpenGles = allshader::HSVWaveformWidget::useOpenGles();
useOpenGLShaders = allshader::HSVWaveformWidget::useOpenGLShaders();
category = allshader::HSVWaveformWidget::category();
setFromType.operator()<allshader::HSVWaveformWidget>();
break;
#endif
default:
DEBUG_ASSERT(!"Unexpected WaveformWidgetType");
continue;
}

if (category == WaveformWidgetCategory::Legacy) {
widgetName += QStringLiteral(" (%1)").arg(QObject::tr("legacy"));
}

bool active = true;
if (isOpenGlAvailable()) {
if (useOpenGles && !useOpenGl) {
active = false;
} else if (useOpenGLShaders && !isOpenGlShaderAvailable()) {
active = false;
} else {
if (useOpenGLShaders) {
widgetName += " " + tr("(GLSL)");
} else if (useOpenGl) {
widgetName += " " + tr("(GL)");
}
}
} else if (isOpenGlesAvailable()) {
if (useOpenGl && !useOpenGles) {
active = false;
} else if (useOpenGLShaders && !isOpenGlShaderAvailable()) {
active = false;
} else {
if (useOpenGLShaders) {
widgetName += " " + tr("(GLSL ES)");
} else if (useOpenGles) {
widgetName += " " + tr("(GL ES)");
}
}
} else {
// No sufficient GL supptor
// No sufficient GL support
if (useOpenGles || useOpenGl || useOpenGLShaders) {
active = false;
}
Expand Down Expand Up @@ -1249,3 +1156,23 @@ int WaveformWidgetFactory::findHandleIndexFromType(WaveformWidgetType::Type type
}
return index;
}

template<typename WaveformT>
QString WaveformWidgetFactory::buildWidgetName() {
QString name = WaveformT::getWaveformWidgetName() + QStringLiteral(" (");
if (WaveformT::category() == WaveformWidgetCategory::Legacy) {
name += tr("legacy") + QStringLiteral(", ");
}
if (isOpenGlAvailable() || isOpenGlesAvailable()) {
if (WaveformT::useOpenGlShaders()) {

Check failure on line 1167 in src/waveform/waveformwidgetfactory.cpp

View workflow job for this annotation

GitHub Actions / Windows 2019 (MSVC)

'useOpenGlShaders': is not a member of 'EmptyWaveformWidget'

Check failure on line 1167 in src/waveform/waveformwidgetfactory.cpp

View workflow job for this annotation

GitHub Actions / Windows 2019 (MSVC)

'useOpenGlShaders': identifier not found

Check failure on line 1167 in src/waveform/waveformwidgetfactory.cpp

View workflow job for this annotation

GitHub Actions / Windows 2019 (MSVC)

'useOpenGlShaders': is not a member of 'SoftwareWaveformWidget'

Check failure on line 1167 in src/waveform/waveformwidgetfactory.cpp

View workflow job for this annotation

GitHub Actions / Windows 2019 (MSVC)

'useOpenGlShaders': is not a member of 'HSVWaveformWidget'

Check failure on line 1167 in src/waveform/waveformwidgetfactory.cpp

View workflow job for this annotation

GitHub Actions / Windows 2019 (MSVC)

'useOpenGlShaders': is not a member of 'RGBWaveformWidget'

Check failure on line 1167 in src/waveform/waveformwidgetfactory.cpp

View workflow job for this annotation

GitHub Actions / Windows 2019 (MSVC)

'useOpenGlShaders': is not a member of 'GLSimpleWaveformWidget'

Check failure on line 1167 in src/waveform/waveformwidgetfactory.cpp

View workflow job for this annotation

GitHub Actions / Windows 2019 (MSVC)

'useOpenGlShaders': is not a member of 'GLWaveformWidget'

Check failure on line 1167 in src/waveform/waveformwidgetfactory.cpp

View workflow job for this annotation

GitHub Actions / Windows 2019 (MSVC)

'useOpenGlShaders': is not a member of 'GLSLFilteredWaveformWidget'

Check failure on line 1167 in src/waveform/waveformwidgetfactory.cpp

View workflow job for this annotation

GitHub Actions / Windows 2019 (MSVC)

'useOpenGlShaders': is not a member of 'GLSLRGBWaveformWidget'

Check failure on line 1167 in src/waveform/waveformwidgetfactory.cpp

View workflow job for this annotation

GitHub Actions / Windows 2019 (MSVC)

'useOpenGlShaders': is not a member of 'GLSLRGBStackedWaveformWidget'

Check failure on line 1167 in src/waveform/waveformwidgetfactory.cpp

View workflow job for this annotation

GitHub Actions / clazy

no member named 'useOpenGlShaders' in 'EmptyWaveformWidget'

Check failure on line 1167 in src/waveform/waveformwidgetfactory.cpp

View workflow job for this annotation

GitHub Actions / clazy

no member named 'useOpenGlShaders' in 'SoftwareWaveformWidget'

Check failure on line 1167 in src/waveform/waveformwidgetfactory.cpp

View workflow job for this annotation

GitHub Actions / clazy

no member named 'useOpenGlShaders' in 'HSVWaveformWidget'

Check failure on line 1167 in src/waveform/waveformwidgetfactory.cpp

View workflow job for this annotation

GitHub Actions / clazy

no member named 'useOpenGlShaders' in 'RGBWaveformWidget'

Check failure on line 1167 in src/waveform/waveformwidgetfactory.cpp

View workflow job for this annotation

GitHub Actions / clazy

no member named 'useOpenGlShaders' in 'GLSimpleWaveformWidget'

Check failure on line 1167 in src/waveform/waveformwidgetfactory.cpp

View workflow job for this annotation

GitHub Actions / clazy

no member named 'useOpenGlShaders' in 'GLWaveformWidget'

Check failure on line 1167 in src/waveform/waveformwidgetfactory.cpp

View workflow job for this annotation

GitHub Actions / clazy

no member named 'useOpenGlShaders' in 'GLSLFilteredWaveformWidget'

Check failure on line 1167 in src/waveform/waveformwidgetfactory.cpp

View workflow job for this annotation

GitHub Actions / clazy

no member named 'useOpenGlShaders' in 'GLSLRGBWaveformWidget'

Check failure on line 1167 in src/waveform/waveformwidgetfactory.cpp

View workflow job for this annotation

GitHub Actions / clazy

no member named 'useOpenGlShaders' in 'GLSLRGBStackedWaveformWidget'

Check failure on line 1167 in src/waveform/waveformwidgetfactory.cpp

View workflow job for this annotation

GitHub Actions / clazy

no member named 'useOpenGlShaders' in 'GLVSyncTestWidget'

Check failure on line 1167 in src/waveform/waveformwidgetfactory.cpp

View workflow job for this annotation

GitHub Actions / Ubuntu 22.04 (gcc)

‘useOpenGlShaders’ is not a member of ‘EmptyWaveformWidget’

Check failure on line 1167 in src/waveform/waveformwidgetfactory.cpp

View workflow job for this annotation

GitHub Actions / Ubuntu 22.04 (gcc)

‘useOpenGlShaders’ is not a member of ‘SoftwareWaveformWidget’

Check failure on line 1167 in src/waveform/waveformwidgetfactory.cpp

View workflow job for this annotation

GitHub Actions / Ubuntu 22.04 (gcc)

‘useOpenGlShaders’ is not a member of ‘HSVWaveformWidget’

Check failure on line 1167 in src/waveform/waveformwidgetfactory.cpp

View workflow job for this annotation

GitHub Actions / Ubuntu 22.04 (gcc)

‘useOpenGlShaders’ is not a member of ‘RGBWaveformWidget’

Check failure on line 1167 in src/waveform/waveformwidgetfactory.cpp

View workflow job for this annotation

GitHub Actions / Ubuntu 22.04 (gcc)

‘useOpenGlShaders’ is not a member of ‘GLSimpleWaveformWidget’

Check failure on line 1167 in src/waveform/waveformwidgetfactory.cpp

View workflow job for this annotation

GitHub Actions / Ubuntu 22.04 (gcc)

‘useOpenGlShaders’ is not a member of ‘GLWaveformWidget’

Check failure on line 1167 in src/waveform/waveformwidgetfactory.cpp

View workflow job for this annotation

GitHub Actions / Ubuntu 22.04 (gcc)

‘useOpenGlShaders’ is not a member of ‘GLSLFilteredWaveformWidget’

Check failure on line 1167 in src/waveform/waveformwidgetfactory.cpp

View workflow job for this annotation

GitHub Actions / Ubuntu 22.04 (gcc)

‘useOpenGlShaders’ is not a member of ‘GLSLRGBWaveformWidget’

Check failure on line 1167 in src/waveform/waveformwidgetfactory.cpp

View workflow job for this annotation

GitHub Actions / Ubuntu 22.04 (gcc)

‘useOpenGlShaders’ is not a member of ‘GLSLRGBStackedWaveformWidget’

Check failure on line 1167 in src/waveform/waveformwidgetfactory.cpp

View workflow job for this annotation

GitHub Actions / Ubuntu 22.04 (gcc)

‘useOpenGlShaders’ is not a member of ‘GLVSyncTestWidget’
name += QStringLiteral("GLSL");
} else if (WaveformT::useOpenGl()) {
name += QStringLiteral("GL");
}
if (isOpenGlesAvailable()) {
name += QStringLiteral(" ES");
}
}
name += QChar(')');
return name;
}
2 changes: 2 additions & 0 deletions src/waveform/waveformwidgetfactory.h
Expand Up @@ -160,6 +160,8 @@ class WaveformWidgetFactory : public QObject, public Singleton<WaveformWidgetFac

private:
void evaluateWidgets();
template<typename WaveformT>
QString buildWidgetName();
WaveformWidgetAbstract* createWaveformWidget(WaveformWidgetType::Type type, WWaveformViewer* viewer);
int findIndexOf(WWaveformViewer* viewer) const;

Expand Down

0 comments on commit b83d539

Please sign in to comment.