From a7b327db2bd13c97ad555fe0e75a053abca3bd63 Mon Sep 17 00:00:00 2001 From: m0dB <79429057+m0dB@users.noreply.github.com> Date: Mon, 1 May 2023 18:08:52 +0200 Subject: [PATCH] cleanup and formatting post rebase on 2.4, compile allshader widgets also with QGLWidget and use shader based vumeters and spinnys by default --- CMakeLists.txt | 60 ++++----- README-QOpenGL.md | 117 ------------------ src/shaders/shader.cpp | 10 +- src/shaders/shader.h | 11 +- src/skin/legacy/legacyskinparser.cpp | 14 +-- .../allshader/waveformrenderbackground.cpp | 2 +- .../allshader/waveformrenderbackground.h | 2 +- .../allshader/waveformrenderbeat.cpp | 3 +- .../renderers/allshader/waveformrenderbeat.h | 2 +- .../allshader/waveformrendererabstract.h | 3 +- .../allshader/waveformrendererendoftrack.cpp | 3 +- .../allshader/waveformrendererendoftrack.h | 2 +- .../allshader/waveformrendererfiltered.cpp | 3 +- .../allshader/waveformrendererfiltered.h | 2 +- .../allshader/waveformrendererlrrgb.cpp | 3 +- .../allshader/waveformrendererlrrgb.h | 2 +- .../allshader/waveformrendererpreroll.cpp | 3 +- .../allshader/waveformrendererpreroll.h | 2 +- .../allshader/waveformrendererrgb.cpp | 3 +- .../renderers/allshader/waveformrendererrgb.h | 2 +- .../allshader/waveformrenderersimple.cpp | 3 +- .../allshader/waveformrenderersimple.h | 2 +- .../allshader/waveformrendermark.cpp | 3 +- .../renderers/allshader/waveformrendermark.h | 2 +- .../allshader/waveformrendermarkrange.cpp | 3 +- .../allshader/waveformrendermarkrange.h | 2 +- .../renderers/glslwaveformrenderersignal.cpp | 11 +- .../renderers/glslwaveformrenderersignal.h | 2 +- .../renderers/glvsynctestrenderer.cpp | 3 - .../renderers/glwaveformrenderbackground.cpp | 2 - src/waveform/renderers/glwaveformrenderer.h | 28 +---- .../glwaveformrendererfilteredsignal.cpp | 2 - .../renderers/glwaveformrendererrgb.cpp | 2 - .../glwaveformrenderersimplesignal.cpp | 2 - src/waveform/renderers/waveformmark.cpp | 2 - src/waveform/renderers/waveformmark.h | 5 +- src/waveform/renderers/waveformmarkrange.h | 4 - .../renderers/waveformrendererabstract.h | 4 - src/waveform/waveformwidgetfactory.cpp | 30 ++--- .../allshader/filteredwaveformwidget.h | 2 +- .../widgets/allshader/lrrgbwaveformwidget.h | 2 +- .../widgets/allshader/rgbwaveformwidget.h | 2 +- .../widgets/allshader/simplewaveformwidget.h | 2 +- .../widgets/allshader/waveformwidget.cpp | 9 +- .../widgets/allshader/waveformwidget.h | 5 +- .../widgets/glwaveformwidgetabstract.cpp | 3 +- .../widgets/glwaveformwidgetabstract.h | 8 +- src/waveform/widgets/waveformwidgettype.h | 44 ++++--- src/widget/openglwindow.cpp | 4 +- src/widget/wglwidgetqopengl.cpp | 2 +- src/widget/wglwidgetqopengl.h | 2 +- src/widget/wspinny.cpp | 21 ---- src/widget/wspinnyglsl.cpp | 6 +- src/widget/wspinnyglsl.h | 3 +- src/widget/wvumeterglsl.cpp | 4 +- src/widget/wvumeterglsl.h | 4 +- 56 files changed, 151 insertions(+), 333 deletions(-) delete mode 100644 README-QOpenGL.md diff --git a/CMakeLists.txt b/CMakeLists.txt index 75a67b3c094..ffcc7471cd8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1106,7 +1106,26 @@ if(QT6) else() target_sources(mixxx-lib PRIVATE src/mixxxmainwindow.cpp + src/shaders/endoftrackshader.cpp + src/shaders/rgbashader.cpp + src/shaders/rgbshader.cpp + src/shaders/shader.cpp + src/shaders/textureshader.cpp + src/shaders/unicolorshader.cpp src/waveform/guitick.cpp + src/waveform/renderers/allshader/matrixforwidgetgeometry.cpp + src/waveform/renderers/allshader/waveformrenderbackground.cpp + src/waveform/renderers/allshader/waveformrenderbeat.cpp + src/waveform/renderers/allshader/waveformrenderer.cpp + src/waveform/renderers/allshader/waveformrendererendoftrack.cpp + src/waveform/renderers/allshader/waveformrendererfiltered.cpp + src/waveform/renderers/allshader/waveformrendererlrrgb.cpp + src/waveform/renderers/allshader/waveformrendererpreroll.cpp + src/waveform/renderers/allshader/waveformrendererrgb.cpp + src/waveform/renderers/allshader/waveformrenderersignalbase.cpp + src/waveform/renderers/allshader/waveformrenderersimple.cpp + src/waveform/renderers/allshader/waveformrendermark.cpp + src/waveform/renderers/allshader/waveformrendermarkrange.cpp src/waveform/renderers/glslwaveformrenderersignal.cpp src/waveform/renderers/glvsynctestrenderer.cpp src/waveform/renderers/glwaveformrenderbackground.cpp @@ -1137,13 +1156,18 @@ else() src/waveform/vsyncthread.cpp src/waveform/waveformmarklabel.cpp src/waveform/waveformwidgetfactory.cpp + src/waveform/widgets/allshader/filteredwaveformwidget.cpp + src/waveform/widgets/allshader/lrrgbwaveformwidget.cpp + src/waveform/widgets/allshader/rgbwaveformwidget.cpp + src/waveform/widgets/allshader/simplewaveformwidget.cpp + src/waveform/widgets/allshader/waveformwidget.cpp src/waveform/widgets/emptywaveformwidget.cpp - src/waveform/widgets/glwaveformwidgetabstract.cpp src/waveform/widgets/glrgbwaveformwidget.cpp src/waveform/widgets/glsimplewaveformwidget.cpp src/waveform/widgets/glslwaveformwidget.cpp src/waveform/widgets/glvsynctestwidget.cpp src/waveform/widgets/glwaveformwidget.cpp + src/waveform/widgets/glwaveformwidgetabstract.cpp src/waveform/widgets/hsvwaveformwidget.cpp src/waveform/widgets/qthsvwaveformwidget.cpp src/waveform/widgets/qtrgbwaveformwidget.cpp @@ -1153,47 +1177,23 @@ else() src/waveform/widgets/rgbwaveformwidget.cpp src/waveform/widgets/softwarewaveformwidget.cpp src/waveform/widgets/waveformwidgetabstract.cpp + src/widget/wglwaveformwidget.cpp src/widget/woverview.cpp src/widget/woverviewhsv.cpp src/widget/woverviewlmh.cpp src/widget/woverviewrgb.cpp - src/widget/wspinnybase.cpp src/widget/wspinny.cpp - src/widget/wvumeterbase.cpp + src/widget/wspinnybase.cpp + src/widget/wspinnyglsl.cpp src/widget/wvumeter.cpp + src/widget/wvumeterbase.cpp + src/widget/wvumeterglsl.cpp src/widget/wvumeterlegacy.cpp src/widget/wwaveformviewer.cpp - src/widget/wglwaveformwidget.cpp ) if(QOPENGL) target_sources(mixxx-lib PRIVATE - src/waveform/renderers/allshader/matrixforwidgetgeometry.cpp - src/shaders/endoftrackshader.cpp - src/shaders/rgbashader.cpp - src/shaders/rgbshader.cpp - src/shaders/shader.cpp - src/shaders/textureshader.cpp - src/shaders/unicolorshader.cpp - src/waveform/renderers/allshader/waveformrenderbackground.cpp - src/waveform/renderers/allshader/waveformrenderbeat.cpp - src/waveform/renderers/allshader/waveformrenderer.cpp - src/waveform/renderers/allshader/waveformrendererendoftrack.cpp - src/waveform/renderers/allshader/waveformrendererfiltered.cpp - src/waveform/renderers/allshader/waveformrendererlrrgb.cpp - src/waveform/renderers/allshader/waveformrendererpreroll.cpp - src/waveform/renderers/allshader/waveformrendererrgb.cpp - src/waveform/renderers/allshader/waveformrenderersignalbase.cpp - src/waveform/renderers/allshader/waveformrenderersimple.cpp - src/waveform/renderers/allshader/waveformrendermark.cpp - src/waveform/renderers/allshader/waveformrendermarkrange.cpp - src/waveform/widgets/allshader/filteredwaveformwidget.cpp - src/waveform/widgets/allshader/lrrgbwaveformwidget.cpp - src/waveform/widgets/allshader/rgbwaveformwidget.cpp - src/waveform/widgets/allshader/simplewaveformwidget.cpp - src/waveform/widgets/allshader/waveformwidget.cpp src/widget/openglwindow.cpp - src/widget/wspinnyglsl.cpp - src/widget/wvumeterglsl.cpp src/widget/tooltipqopengl.cpp src/widget/wglwidgetqopengl.cpp src/widget/winitialglwidget.cpp diff --git a/README-QOpenGL.md b/README-QOpenGL.md deleted file mode 100644 index 6d888a4e333..00000000000 --- a/README-QOpenGL.md +++ /dev/null @@ -1,117 +0,0 @@ -# Mixxx QOpenGL classes and files - -This document describes the QOpenGL based WGLWidget that replace the legacy QGLWidget and the GLSL-based waveform widget and renderers and the GLSL-based VU meter and Spinny classes. - -## WGLWidget - -`WGLWidget` is the replacement for `QGLWidget`, which, depending on the CMake option `QOPENGL` and preprocessor define `MIXXX_USE_QOPENGL` is either one of: - -- a thin wrapper for, and derived directly from, `QGLWidget`. This is offered as a fallback / alternative in case the new QOpenGL classes don't work. - -- derived from `QWidget` and encapsulating a `QOpenGLWindow` through `createWindowContainer(...)` - -The file to be included from derives classes, which in turn include either one from is src/widget/wglwidget.h - -which in turn includes the actual `WGLWidget` from either one of: - -- src/widget/wglwidgetqglwidget.h -- src/widget/wglwidgetqopengl.h - -The corresponding implementations are in: - -- src/widget/wglwidgetqglwidget.cpp -- src/widget/wglwidgetqopengl.cpp - -The later uses a helper `OpenGLWindow`, derived from `QOpenGLWindow`, in - -- src/widget/openglwindow.h -- src/widget/openglwindow.cpp - -## Utility classes - -A single `WInitialGLWidget` is created on startup and used to query the QOpenGL information. - -- src/widget/winitialglwidget.{h|cpp} - -Tooltips don't work for the qopengl-based `WGLWidget` (because the mouse moves over a different window). The singleton `ToolTipQOpenGL` mimics the standard tooltip behaviour, with a timer triggered after mouse not moving. - -- src/widget/tooltipqopengl.{h|cpp} - -## VU-Meter and Spinny extensions - -Additions methods for drawing with QOpenGL shaders are added to `WVuMeterGL` and `WSpinnyGL`: - -- src/widget/qopengl/wvumetergl.cpp -- src/widget/qopengl/wspinny.cpp - -## Waveform rendering architecture - -The following uses the existing waveform architecture as handled by `WaveformWidgetFactory` and triggered by calling rendering and buffer swaps from the `VSyncThread` and using the audio playback synchronized `VisualPlayPosition`. - -## Waveform widgets - -The following are all using namespace `qopengl`, to distinguish them from the legacy implementations with the same name. - -The base-class `qopengl::WaveformWidget`, derived from `WaveformWidgetAbstract`, as it has handled by the `WaveformWidgetFactory`, and from `WGLWidget`, as it will render using `QOpenGLFunctions` in a `QOpenGLWindow`: - -- src/waveform/widgets/qopengl/waveformwidget.{h|cpp} - -From `qopengl::WaveformWidget` we can derive the actual waveform rendering widgets, currently there is only one, which is listed as "RGB (QOpenGL) (GLSL)", `qopengl::RGBWaveformWidget`: - -- src/waveform/widgets/qopengl/rgbwaveformwidget.{h|cpp} - -The `qopengl::RGBWaveformWidget` has a stack of `qopengl::IWaveformRenderer` instances, which use GLSL shaders to do the drawing: - -## qopengl::IWaveformRenderer derived (indirectly) classes - -`opengl::WaveformRenderBackground` - draws a solid color background (TODO (?) draw image) - -- src/waveform/renderers/qopengl/waveformrenderbackground.{h|cpp} - -`opengl::WaveformRendererEndOfTrack` - draws a blinking gradient when playback reaches end of track - -- src/waveform/renderers/qopengl/waveformrendererendoftrack.{h|cpp} - -`opengl::WaveformRendererPreroll` - fills the preroll and postroll with a series of triangles - -- src/waveform/renderers/qopengl/waveformrendererpreroll.{h|cpp} - -`opengl::WaveformRenderMarkRange` - draws ranges with colored rectangles - -- src/waveform/renderers/qopengl/waveformrendermarkrange.{h|cpp} - -`opengl::WaveformRendererRGB` - draws the actual waveform with lines representing amplitude and color representing low/mid/high filtered content. - -- src/waveform/renderers/qopengl/waveformrendererrgb.{h|cpp} - -`opengl::WaveformRenderBeat` - draws beat markers with simple lines - -- src/waveform/renderers/qopengl/waveformrenderbeat.{h|cpp} - -`opengl::WaveformRenderMark` - renders markers (cues, loops, fades) in offscreen images and draws them with textures - -- src/waveform/renderers/qopengl/waveformrendermark.{h|cpp} - -## Waveform renderer intermediate classes - -The waveform renderers listed above derive from either one of the following - -`opengl::WaveformShaderRenderer` - -- src/waveform/renderers/qopengl/waveformshaderrenderer.{h|cpp} - -`opengl::WaveformRenderer` - -- src/waveform/renderers/qopengl/waveformrenderer.{h|cpp} - -`opengl::WaveformRendererSignalBase` - -- src/waveform/renderers/qopengl/waveformrenderersignalbase.{h|cpp} - -`opengl::WaveformShaderRenderer` in turn derives from qopengl::ShaderLoader` - -- src/waveform/renderers/qopengl/shaderloader.{h|cpp} - -which all eventually derive from `qopengl::IWaveformRenderer` - -- src/waveform/renderers/qopengl/iwaveformrenderer.h diff --git a/src/shaders/shader.cpp b/src/shaders/shader.cpp index e12124dc597..36afd488a38 100644 --- a/src/shaders/shader.cpp +++ b/src/shaders/shader.cpp @@ -4,18 +4,24 @@ using namespace mixxx; +#ifdef MIXXX_USE_QOPENGL +using GLShader = QOpenGLShader; +#else +using GLShader = QGLShader; +#endif + Shader::Shader() = default; Shader::~Shader() = default; void Shader::load(const QString& vertexShaderCode, const QString& fragmentShaderCode) { VERIFY_OR_DEBUG_ASSERT(addShaderFromSourceCode( - QOpenGLShader::Vertex, vertexShaderCode)) { + GLShader::Vertex, vertexShaderCode)) { return; } VERIFY_OR_DEBUG_ASSERT(addShaderFromSourceCode( - QOpenGLShader::Fragment, fragmentShaderCode)) { + GLShader::Fragment, fragmentShaderCode)) { return; } diff --git a/src/shaders/shader.h b/src/shaders/shader.h index cddbc61d4d5..f95b948bcb1 100644 --- a/src/shaders/shader.h +++ b/src/shaders/shader.h @@ -1,6 +1,10 @@ #pragma once +#ifdef MIXXX_USE_QOPENGL #include +#else +#include +#endif #include "util/class.h" @@ -8,7 +12,12 @@ namespace mixxx { class Shader; } -class mixxx::Shader : public QOpenGLShaderProgram { +class mixxx::Shader +#ifdef MIXXX_USE_QOPENGL + : public QOpenGLShaderProgram { +#else + : public QGLShaderProgram { +#endif public: Shader(); ~Shader(); diff --git a/src/skin/legacy/legacyskinparser.cpp b/src/skin/legacy/legacyskinparser.cpp index 06fcae34a9f..cf9f054ae84 100644 --- a/src/skin/legacy/legacyskinparser.cpp +++ b/src/skin/legacy/legacyskinparser.cpp @@ -75,10 +75,8 @@ #include "widget/wslidercomposed.h" #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) #include "widget/wspinny.h" -#ifdef MIXXX_USE_QOPENGL #include "widget/wspinnyglsl.h" #endif -#endif #include "widget/wsplitter.h" #include "widget/wstarrating.h" #include "widget/wstatuslight.h" @@ -88,10 +86,8 @@ #include "widget/wtrackwidgetgroup.h" #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) #include "widget/wvumeter.h" -#include "widget/wvumeterlegacy.h" -#ifdef MIXXX_USE_QOPENGL #include "widget/wvumeterglsl.h" -#endif +#include "widget/wvumeterlegacy.h" #endif #include "widget/wwaveformviewer.h" #include "widget/wwidget.h" @@ -1305,7 +1301,7 @@ QWidget* LegacySkinParser::parseSpinny(const QDomElement& node) { // during on shutdown. This has been tested with Qt 5.12.8 and 5.15.3 WSpinnyBase* pSpinny; if (qApp->platformName() == QLatin1String("xcb")) { -#ifdef MIXXX_USE_QOPENGL +#ifndef MIXXX_USE_QPAINTER_WSPINNY if (pWaveformWidgetFactory->isOpenGlShaderAvailable()) { pSpinny = new WSpinnyGLSL(nullptr, group, m_pConfig, m_pVCManager, pPlayer); } else @@ -1315,7 +1311,7 @@ QWidget* LegacySkinParser::parseSpinny(const QDomElement& node) { } pSpinny->setParent(m_pParent); } else { -#ifdef MIXXX_USE_QOPENGL +#ifndef MIXXX_USE_QPAINTER_WSPINNY if (pWaveformWidgetFactory->isOpenGlShaderAvailable()) { pSpinny = new WSpinnyGLSL(m_pParent, group, m_pConfig, m_pVCManager, pPlayer); } else @@ -1393,7 +1389,7 @@ QWidget* LegacySkinParser::parseVuMeter(const QDomElement& node) { // during on shutdown. This has been tested with Qt 5.12.8 and 5.15.3 WVuMeterBase* pVuMeterWidget; if (qApp->platformName() == QLatin1String("xcb")) { -#ifdef MIXXX_USE_QOPENGL +#ifndef MIXXX_USE_QPAINTER_VUMETER if (pWaveformWidgetFactory->isOpenGlShaderAvailable()) { pVuMeterWidget = new WVuMeterGLSL(); } else @@ -1403,7 +1399,7 @@ QWidget* LegacySkinParser::parseVuMeter(const QDomElement& node) { } pVuMeterWidget->setParent(m_pParent); } else { -#ifdef MIXXX_USE_QOPENGL +#ifndef MIXXX_USE_QPAINTER_VUMETER if (pWaveformWidgetFactory->isOpenGlShaderAvailable()) { pVuMeterWidget = new WVuMeterGLSL(m_pParent); } else diff --git a/src/waveform/renderers/allshader/waveformrenderbackground.cpp b/src/waveform/renderers/allshader/waveformrenderbackground.cpp index fa113ad4696..c848b8f72b0 100644 --- a/src/waveform/renderers/allshader/waveformrenderbackground.cpp +++ b/src/waveform/renderers/allshader/waveformrenderbackground.cpp @@ -24,7 +24,7 @@ void WaveformRenderBackground::setup(const QDomNode& node, } } -void WaveformRenderBackground::renderGL() { +void WaveformRenderBackground::paintGL() { glClearColor(static_cast(m_backgroundColor.redF()), static_cast(m_backgroundColor.greenF()), static_cast(m_backgroundColor.blueF()), diff --git a/src/waveform/renderers/allshader/waveformrenderbackground.h b/src/waveform/renderers/allshader/waveformrenderbackground.h index 398fd233b1e..654261d1dd4 100644 --- a/src/waveform/renderers/allshader/waveformrenderbackground.h +++ b/src/waveform/renderers/allshader/waveformrenderbackground.h @@ -15,7 +15,7 @@ class allshader::WaveformRenderBackground final : public allshader::WaveformRend ~WaveformRenderBackground() override; void setup(const QDomNode& node, const SkinContext& context) override; - void renderGL() override; + void paintGL() override; private: QColor m_backgroundColor; diff --git a/src/waveform/renderers/allshader/waveformrenderbeat.cpp b/src/waveform/renderers/allshader/waveformrenderbeat.cpp index cca27eed8ec..7d21cd38c1e 100644 --- a/src/waveform/renderers/allshader/waveformrenderbeat.cpp +++ b/src/waveform/renderers/allshader/waveformrenderbeat.cpp @@ -20,6 +20,7 @@ WaveformRenderBeat::~WaveformRenderBeat() { } void WaveformRenderBeat::initializeGL() { + WaveformRenderer::initializeGL(); m_shader.init(); } @@ -28,7 +29,7 @@ void WaveformRenderBeat::setup(const QDomNode& node, const SkinContext& context) m_color = WSkinColor::getCorrectColor(m_color).toRgb(); } -void WaveformRenderBeat::renderGL() { +void WaveformRenderBeat::paintGL() { TrackPointer trackInfo = m_waveformRenderer->getTrackInfo(); if (!trackInfo) { diff --git a/src/waveform/renderers/allshader/waveformrenderbeat.h b/src/waveform/renderers/allshader/waveformrenderbeat.h index 39b17325f34..30324719a8b 100644 --- a/src/waveform/renderers/allshader/waveformrenderbeat.h +++ b/src/waveform/renderers/allshader/waveformrenderbeat.h @@ -20,7 +20,7 @@ class allshader::WaveformRenderBeat final : public allshader::WaveformRenderer { ~WaveformRenderBeat() override; void setup(const QDomNode& node, const SkinContext& context) override; - void renderGL() override; + void paintGL() override; void initializeGL() override; private: diff --git a/src/waveform/renderers/allshader/waveformrendererabstract.h b/src/waveform/renderers/allshader/waveformrendererabstract.h index 0a811122658..2baacb73cd7 100644 --- a/src/waveform/renderers/allshader/waveformrendererabstract.h +++ b/src/waveform/renderers/allshader/waveformrendererabstract.h @@ -18,8 +18,9 @@ class allshader::WaveformRendererAbstract : public QOpenGLFunctions { /// actual WGLWidget. virtual ~WaveformRendererAbstract() = default; virtual void initializeGL() { + initializeOpenGLFunctions(); } virtual void resizeGL(int w, int h) { } - virtual void renderGL() = 0; + virtual void paintGL() = 0; }; diff --git a/src/waveform/renderers/allshader/waveformrendererendoftrack.cpp b/src/waveform/renderers/allshader/waveformrendererendoftrack.cpp index e65666360b6..320585bfe54 100644 --- a/src/waveform/renderers/allshader/waveformrendererendoftrack.cpp +++ b/src/waveform/renderers/allshader/waveformrendererendoftrack.cpp @@ -53,6 +53,7 @@ void WaveformRendererEndOfTrack::setup(const QDomNode& node, const SkinContext& } void WaveformRendererEndOfTrack::initializeGL() { + WaveformRenderer::initializeGL(); m_shader.init(); } @@ -83,7 +84,7 @@ void WaveformRendererEndOfTrack::fillWithGradient(QColor color) { m_shader.release(); } -void WaveformRendererEndOfTrack::renderGL() { +void WaveformRendererEndOfTrack::paintGL() { if (!m_pEndOfTrackControl->toBool()) { return; } diff --git a/src/waveform/renderers/allshader/waveformrendererendoftrack.h b/src/waveform/renderers/allshader/waveformrendererendoftrack.h index b9cdd220122..8bc8e60903c 100644 --- a/src/waveform/renderers/allshader/waveformrendererendoftrack.h +++ b/src/waveform/renderers/allshader/waveformrendererendoftrack.h @@ -28,7 +28,7 @@ class allshader::WaveformRendererEndOfTrack final : public allshader::WaveformRe bool init() override; void initializeGL() override; - void renderGL() override; + void paintGL() override; private: void fillWithGradient(QColor color); diff --git a/src/waveform/renderers/allshader/waveformrendererfiltered.cpp b/src/waveform/renderers/allshader/waveformrendererfiltered.cpp index 50faba5b2bb..3b3353dc022 100644 --- a/src/waveform/renderers/allshader/waveformrendererfiltered.cpp +++ b/src/waveform/renderers/allshader/waveformrendererfiltered.cpp @@ -24,10 +24,11 @@ void WaveformRendererFiltered::onSetup(const QDomNode& node) { } void WaveformRendererFiltered::initializeGL() { + WaveformRendererSignalBase::initializeGL(); m_shader.init(); } -void WaveformRendererFiltered::renderGL() { +void WaveformRendererFiltered::paintGL() { TrackPointer pTrack = m_waveformRenderer->getTrackInfo(); if (!pTrack) { return; diff --git a/src/waveform/renderers/allshader/waveformrendererfiltered.h b/src/waveform/renderers/allshader/waveformrendererfiltered.h index 7d63e41402a..7b1ef5efec8 100644 --- a/src/waveform/renderers/allshader/waveformrendererfiltered.h +++ b/src/waveform/renderers/allshader/waveformrendererfiltered.h @@ -18,7 +18,7 @@ class allshader::WaveformRendererFiltered final : public allshader::WaveformRend void onSetup(const QDomNode& node) override; void initializeGL() override; - void renderGL() override; + void paintGL() override; private: mixxx::UnicolorShader m_shader; diff --git a/src/waveform/renderers/allshader/waveformrendererlrrgb.cpp b/src/waveform/renderers/allshader/waveformrendererlrrgb.cpp index ee9b68dad5d..ed996342354 100644 --- a/src/waveform/renderers/allshader/waveformrendererlrrgb.cpp +++ b/src/waveform/renderers/allshader/waveformrendererlrrgb.cpp @@ -30,10 +30,11 @@ void WaveformRendererLRRGB::onSetup(const QDomNode& node) { } void WaveformRendererLRRGB::initializeGL() { + WaveformRendererSignalBase::initializeGL(); m_shader.init(); } -void WaveformRendererLRRGB::renderGL() { +void WaveformRendererLRRGB::paintGL() { TrackPointer pTrack = m_waveformRenderer->getTrackInfo(); if (!pTrack) { return; diff --git a/src/waveform/renderers/allshader/waveformrendererlrrgb.h b/src/waveform/renderers/allshader/waveformrendererlrrgb.h index a3dc98bed7b..4a98a30ef3c 100644 --- a/src/waveform/renderers/allshader/waveformrendererlrrgb.h +++ b/src/waveform/renderers/allshader/waveformrendererlrrgb.h @@ -19,7 +19,7 @@ class allshader::WaveformRendererLRRGB final : public allshader::WaveformRendere void onSetup(const QDomNode& node) override; void initializeGL() override; - void renderGL() override; + void paintGL() override; private: mixxx::RGBShader m_shader; diff --git a/src/waveform/renderers/allshader/waveformrendererpreroll.cpp b/src/waveform/renderers/allshader/waveformrendererpreroll.cpp index 99bb41264ba..81947692e24 100644 --- a/src/waveform/renderers/allshader/waveformrendererpreroll.cpp +++ b/src/waveform/renderers/allshader/waveformrendererpreroll.cpp @@ -25,10 +25,11 @@ void WaveformRendererPreroll::setup( } void WaveformRendererPreroll::initializeGL() { + WaveformRenderer::initializeGL(); m_shader.init(); } -void WaveformRendererPreroll::renderGL() { +void WaveformRendererPreroll::paintGL() { const TrackPointer track = m_waveformRenderer->getTrackInfo(); if (!track) { return; diff --git a/src/waveform/renderers/allshader/waveformrendererpreroll.h b/src/waveform/renderers/allshader/waveformrendererpreroll.h index 0778f6e58f8..488a66047b5 100644 --- a/src/waveform/renderers/allshader/waveformrendererpreroll.h +++ b/src/waveform/renderers/allshader/waveformrendererpreroll.h @@ -20,7 +20,7 @@ class allshader::WaveformRendererPreroll final : public allshader::WaveformRende ~WaveformRendererPreroll() override; void setup(const QDomNode& node, const SkinContext& context) override; - void renderGL() override; + void paintGL() override; void initializeGL() override; private: diff --git a/src/waveform/renderers/allshader/waveformrendererrgb.cpp b/src/waveform/renderers/allshader/waveformrendererrgb.cpp index c6804422aa1..6e0da40d550 100644 --- a/src/waveform/renderers/allshader/waveformrendererrgb.cpp +++ b/src/waveform/renderers/allshader/waveformrendererrgb.cpp @@ -30,10 +30,11 @@ void WaveformRendererRGB::onSetup(const QDomNode& node) { } void WaveformRendererRGB::initializeGL() { + WaveformRendererSignalBase::initializeGL(); m_shader.init(); } -void WaveformRendererRGB::renderGL() { +void WaveformRendererRGB::paintGL() { TrackPointer pTrack = m_waveformRenderer->getTrackInfo(); if (!pTrack) { return; diff --git a/src/waveform/renderers/allshader/waveformrendererrgb.h b/src/waveform/renderers/allshader/waveformrendererrgb.h index 339780544a7..b556507207c 100644 --- a/src/waveform/renderers/allshader/waveformrendererrgb.h +++ b/src/waveform/renderers/allshader/waveformrendererrgb.h @@ -19,7 +19,7 @@ class allshader::WaveformRendererRGB final : public allshader::WaveformRendererS void onSetup(const QDomNode& node) override; void initializeGL() override; - void renderGL() override; + void paintGL() override; private: mixxx::RGBShader m_shader; diff --git a/src/waveform/renderers/allshader/waveformrenderersimple.cpp b/src/waveform/renderers/allshader/waveformrenderersimple.cpp index 120c7c209c2..83502732ab2 100644 --- a/src/waveform/renderers/allshader/waveformrenderersimple.cpp +++ b/src/waveform/renderers/allshader/waveformrenderersimple.cpp @@ -24,10 +24,11 @@ void WaveformRendererSimple::onSetup(const QDomNode& node) { } void WaveformRendererSimple::initializeGL() { + WaveformRendererSignalBase::initializeGL(); m_shader.init(); } -void WaveformRendererSimple::renderGL() { +void WaveformRendererSimple::paintGL() { TrackPointer pTrack = m_waveformRenderer->getTrackInfo(); if (!pTrack) { return; diff --git a/src/waveform/renderers/allshader/waveformrenderersimple.h b/src/waveform/renderers/allshader/waveformrenderersimple.h index cfb8f15971c..7a0c7f4fa6e 100644 --- a/src/waveform/renderers/allshader/waveformrenderersimple.h +++ b/src/waveform/renderers/allshader/waveformrenderersimple.h @@ -18,7 +18,7 @@ class allshader::WaveformRendererSimple final : public allshader::WaveformRender void onSetup(const QDomNode& node) override; void initializeGL() override; - void renderGL() override; + void paintGL() override; private: mixxx::UnicolorShader m_shader; diff --git a/src/waveform/renderers/allshader/waveformrendermark.cpp b/src/waveform/renderers/allshader/waveformrendermark.cpp index c94b65635d5..830642a1f2a 100644 --- a/src/waveform/renderers/allshader/waveformrendermark.cpp +++ b/src/waveform/renderers/allshader/waveformrendermark.cpp @@ -48,6 +48,7 @@ void allshader::WaveformRenderMark::setup(const QDomNode& node, const SkinContex } void allshader::WaveformRenderMark::initializeGL() { + WaveformRenderer::initializeGL(); m_rgbaShader.init(); m_textureShader.init(); @@ -152,7 +153,7 @@ void allshader::WaveformRenderMark::drawMark(const QRectF& rect, QColor color) { m_rgbaShader.release(); } -void allshader::WaveformRenderMark::renderGL() { +void allshader::WaveformRenderMark::paintGL() { const float devicePixelRatio = m_waveformRenderer->getDevicePixelRatio(); QMap marksOnScreen; diff --git a/src/waveform/renderers/allshader/waveformrendermark.h b/src/waveform/renderers/allshader/waveformrendermark.h index 0f3228cfa21..32188cd352d 100644 --- a/src/waveform/renderers/allshader/waveformrendermark.h +++ b/src/waveform/renderers/allshader/waveformrendermark.h @@ -26,7 +26,7 @@ class allshader::WaveformRenderMark final : public QObject, public allshader::Wa void setup(const QDomNode& node, const SkinContext& context) override; void initializeGL() override; - void renderGL() override; + void paintGL() override; void resizeGL(int w, int h) override; // Called when a new track is loaded. diff --git a/src/waveform/renderers/allshader/waveformrendermarkrange.cpp b/src/waveform/renderers/allshader/waveformrendermarkrange.cpp index 2a8c5d8cd20..ad5c35ce0d7 100644 --- a/src/waveform/renderers/allshader/waveformrendermarkrange.cpp +++ b/src/waveform/renderers/allshader/waveformrendermarkrange.cpp @@ -20,6 +20,7 @@ allshader::WaveformRenderMarkRange::~WaveformRenderMarkRange() { } void allshader::WaveformRenderMarkRange::initializeGL() { + WaveformRenderer::initializeGL(); m_shader.init(); } @@ -61,7 +62,7 @@ void allshader::WaveformRenderMarkRange::setup(const QDomNode& node, const SkinC } } -void allshader::WaveformRenderMarkRange::renderGL() { +void allshader::WaveformRenderMarkRange::paintGL() { glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); diff --git a/src/waveform/renderers/allshader/waveformrendermarkrange.h b/src/waveform/renderers/allshader/waveformrendermarkrange.h index e8f2b267cab..2cebc686232 100644 --- a/src/waveform/renderers/allshader/waveformrendermarkrange.h +++ b/src/waveform/renderers/allshader/waveformrendermarkrange.h @@ -23,7 +23,7 @@ class allshader::WaveformRenderMarkRange final : public allshader::WaveformRende void setup(const QDomNode& node, const SkinContext& context) override; void initializeGL() override; - void renderGL() override; + void paintGL() override; private: void fillRect(const QRectF& rect, QColor color); diff --git a/src/waveform/renderers/glslwaveformrenderersignal.cpp b/src/waveform/renderers/glslwaveformrenderersignal.cpp index 6114a9bc324..fc3289c6d46 100644 --- a/src/waveform/renderers/glslwaveformrenderersignal.cpp +++ b/src/waveform/renderers/glslwaveformrenderersignal.cpp @@ -193,8 +193,9 @@ void GLSLWaveformRendererSignal::createFrameBuffers() { } } -void GLSLWaveformRendererSignal::onInitializeGL() { - initializeOpenGLFunctions(); +void GLSLWaveformRendererSignal::initializeGL() { + GLWaveformRenderer::initializeGL(); + m_textureRenderedWaveformCompletion = 0; if (!m_frameShaderProgram) { @@ -242,7 +243,7 @@ void GLSLWaveformRendererSignal::onSetTrack() { } void GLSLWaveformRendererSignal::onResize() { - // onInitializeGL not called yet + // initializeGL not called yet if (!m_frameShaderProgram) { return; } @@ -251,7 +252,7 @@ void GLSLWaveformRendererSignal::onResize() { void GLSLWaveformRendererSignal::slotWaveformUpdated() { m_textureRenderedWaveformCompletion = 0; - // onInitializeGL not called yet + // initializeGL not called yet if (!m_frameShaderProgram) { return; } @@ -284,8 +285,6 @@ void GLSLWaveformRendererSignal::draw(QPainter* painter, QPaintEvent* /*event*/) return; } - maybeInitializeGL(); - // save the GL state set for QPainter painter->beginNativePainting(); diff --git a/src/waveform/renderers/glslwaveformrenderersignal.h b/src/waveform/renderers/glslwaveformrenderersignal.h index 2455061a3bc..f64614c8a9c 100644 --- a/src/waveform/renderers/glslwaveformrenderersignal.h +++ b/src/waveform/renderers/glslwaveformrenderersignal.h @@ -42,7 +42,7 @@ class GLSLWaveformRendererSignal : public QObject, ~GLSLWaveformRendererSignal() override; void onSetup(const QDomNode& node) override; - void onInitializeGL() override; + void initializeGL() override; void draw(QPainter* painter, QPaintEvent* event) override; void onSetTrack() override; diff --git a/src/waveform/renderers/glvsynctestrenderer.cpp b/src/waveform/renderers/glvsynctestrenderer.cpp index b3e200fbcf1..d9a0a364ebc 100644 --- a/src/waveform/renderers/glvsynctestrenderer.cpp +++ b/src/waveform/renderers/glvsynctestrenderer.cpp @@ -26,12 +26,9 @@ inline void setPoint(QPointF& point, qreal x, qreal y) { } void GLVSyncTestRenderer::draw(QPainter* painter, QPaintEvent* /*event*/) { - maybeInitializeGL(); - PerformanceTimer timer; //mixxx::Duration t5, t6, t7, t8, t9, t10, t11, t12, t13; - timer.start(); ConstWaveformPointer pWaveform = m_waveformRenderer->getWaveform(); diff --git a/src/waveform/renderers/glwaveformrenderbackground.cpp b/src/waveform/renderers/glwaveformrenderbackground.cpp index 5dcff14c30e..9e6626fbbb8 100644 --- a/src/waveform/renderers/glwaveformrenderbackground.cpp +++ b/src/waveform/renderers/glwaveformrenderbackground.cpp @@ -10,8 +10,6 @@ GLWaveformRenderBackground::~GLWaveformRenderBackground() { #if !defined(QT_NO_OPENGL) && !defined(QT_OPENGL_ES_2) void GLWaveformRenderBackground::draw(QPainter* painter, QPaintEvent* /*event*/) { - maybeInitializeGL(); - painter->beginNativePainting(); glClearColor(static_cast(m_backgroundColor.redF()), static_cast(m_backgroundColor.greenF()), diff --git a/src/waveform/renderers/glwaveformrenderer.h b/src/waveform/renderers/glwaveformrenderer.h index b8a55e6f550..e860aa49c9f 100644 --- a/src/waveform/renderers/glwaveformrenderer.h +++ b/src/waveform/renderers/glwaveformrenderer.h @@ -11,35 +11,9 @@ class GLWaveformRenderer : public QOpenGLFunctions_2_1 { public: - GLWaveformRenderer() -#ifndef MIXXX_USE_QOPENGL - , - m_pLastContext(nullptr) -#endif - { - } - - virtual void onInitializeGL() { + virtual void initializeGL() { initializeOpenGLFunctions(); } - - protected: - // Somehow QGLWidget does not call QGLWidget::initializeGL on macOS, so hack around that - // by calling this in `draw` when the QGLContext has been made current. - // TODO: remove this when upgrading to QOpenGLWidget - void maybeInitializeGL() { -#ifndef MIXXX_USE_QOPENGL - if (QGLContext::currentContext() != m_pLastContext) { - onInitializeGL(); - m_pLastContext = QGLContext::currentContext(); - } -#endif - } - - private: -#ifndef MIXXX_USE_QOPENGL - const QGLContext* m_pLastContext; -#endif }; #endif // !defined(QT_NO_OPENGL) && !defined(QT_OPENGL_ES_2) diff --git a/src/waveform/renderers/glwaveformrendererfilteredsignal.cpp b/src/waveform/renderers/glwaveformrendererfilteredsignal.cpp index 7be917481a4..8d127379ee1 100644 --- a/src/waveform/renderers/glwaveformrendererfilteredsignal.cpp +++ b/src/waveform/renderers/glwaveformrendererfilteredsignal.cpp @@ -23,8 +23,6 @@ void GLWaveformRendererFilteredSignal::onSetup(const QDomNode& /*node*/) { } void GLWaveformRendererFilteredSignal::draw(QPainter* painter, QPaintEvent* /*event*/) { - maybeInitializeGL(); - ConstWaveformPointer pWaveform = m_waveformRenderer->getWaveform(); if (pWaveform.isNull()) { return; diff --git a/src/waveform/renderers/glwaveformrendererrgb.cpp b/src/waveform/renderers/glwaveformrendererrgb.cpp index 0189dcee7d8..fcba30fbc74 100644 --- a/src/waveform/renderers/glwaveformrendererrgb.cpp +++ b/src/waveform/renderers/glwaveformrendererrgb.cpp @@ -25,8 +25,6 @@ void GLWaveformRendererRGB::onSetup(const QDomNode& /* node */) { } void GLWaveformRendererRGB::draw(QPainter* painter, QPaintEvent* /*event*/) { - maybeInitializeGL(); - ConstWaveformPointer pWaveform = m_waveformRenderer->getWaveform(); if (pWaveform.isNull()) { return; diff --git a/src/waveform/renderers/glwaveformrenderersimplesignal.cpp b/src/waveform/renderers/glwaveformrenderersimplesignal.cpp index 6a3cd87fe86..be2efa1b947 100644 --- a/src/waveform/renderers/glwaveformrenderersimplesignal.cpp +++ b/src/waveform/renderers/glwaveformrenderersimplesignal.cpp @@ -25,8 +25,6 @@ inline void setPoint(QPointF& point, qreal x, qreal y) { } void GLWaveformRendererSimpleSignal::draw(QPainter* painter, QPaintEvent* /*event*/) { - maybeInitializeGL(); - ConstWaveformPointer pWaveform = m_waveformRenderer->getWaveform(); if (pWaveform.isNull()) { return; diff --git a/src/waveform/renderers/waveformmark.cpp b/src/waveform/renderers/waveformmark.cpp index 91f07d566f7..13e682eed0e 100644 --- a/src/waveform/renderers/waveformmark.cpp +++ b/src/waveform/renderers/waveformmark.cpp @@ -1,8 +1,6 @@ #include "waveformmark.h" -#ifdef MIXXX_USE_QOPENGL #include -#endif #include #include "skin/legacy/skincontext.h" diff --git a/src/waveform/renderers/waveformmark.h b/src/waveform/renderers/waveformmark.h index 2388b486471..eeaf0c43b47 100644 --- a/src/waveform/renderers/waveformmark.h +++ b/src/waveform/renderers/waveformmark.h @@ -14,12 +14,11 @@ class WaveformSignalColors; class WOverview; -#ifdef MIXXX_USE_QOPENGL class QOpenGLTexture; + namespace allshader { class WaveformRenderMark; } -#endif class WaveformMark { public: @@ -109,10 +108,8 @@ class WaveformMark { std::unique_ptr m_pPositionCO; std::unique_ptr m_pEndPositionCO; std::unique_ptr m_pVisibleCO; -#ifdef MIXXX_USE_QOPENGL std::unique_ptr m_pTexture; // used by allshader::WaveformRenderMark friend class allshader::WaveformRenderMark; -#endif int m_iHotCue; QImage m_image; diff --git a/src/waveform/renderers/waveformmarkrange.h b/src/waveform/renderers/waveformmarkrange.h index 29fdc0bccad..5ed7b4d3063 100644 --- a/src/waveform/renderers/waveformmarkrange.h +++ b/src/waveform/renderers/waveformmarkrange.h @@ -13,11 +13,9 @@ QT_FORWARD_DECLARE_CLASS(QDomNode); class SkinContext; class WaveformSignalColors; -#ifdef MIXXX_USE_QOPENGL namespace allshader { class WaveformRenderMarkRange; } -#endif class WaveformMarkRange { public: @@ -77,8 +75,6 @@ class WaveformMarkRange { DurationTextLocation m_durationTextLocation; friend class WaveformRenderMarkRange; -#ifdef MIXXX_USE_QOPENGL friend class allshader::WaveformRenderMarkRange; -#endif friend class WOverview; }; diff --git a/src/waveform/renderers/waveformrendererabstract.h b/src/waveform/renderers/waveformrendererabstract.h index e10b174f2ce..fc1f9027f4a 100644 --- a/src/waveform/renderers/waveformrendererabstract.h +++ b/src/waveform/renderers/waveformrendererabstract.h @@ -9,11 +9,9 @@ QT_FORWARD_DECLARE_CLASS(QPainter) class SkinContext; class WaveformWidgetRenderer; -#ifdef MIXXX_USE_QOPENGL namespace allshader { class WaveformRendererAbstract; } -#endif class WaveformRendererAbstract { public: @@ -27,11 +25,9 @@ class WaveformRendererAbstract { virtual void onResize() {} virtual void onSetTrack() {} -#ifdef MIXXX_USE_QOPENGL virtual allshader::WaveformRendererAbstract* allshaderWaveformRenderer() { return nullptr; } -#endif protected: bool isDirty() const { diff --git a/src/waveform/waveformwidgetfactory.cpp b/src/waveform/waveformwidgetfactory.cpp index 2e90ec3c7e5..81d7a13a958 100644 --- a/src/waveform/waveformwidgetfactory.cpp +++ b/src/waveform/waveformwidgetfactory.cpp @@ -26,6 +26,10 @@ #include "waveform/sharedglcontext.h" #include "waveform/visualsmanager.h" #include "waveform/vsyncthread.h" +#include "waveform/widgets/allshader/filteredwaveformwidget.h" +#include "waveform/widgets/allshader/lrrgbwaveformwidget.h" +#include "waveform/widgets/allshader/rgbwaveformwidget.h" +#include "waveform/widgets/allshader/simplewaveformwidget.h" #include "waveform/widgets/emptywaveformwidget.h" #include "waveform/widgets/glrgbwaveformwidget.h" #include "waveform/widgets/glsimplewaveformwidget.h" @@ -42,12 +46,6 @@ #include "waveform/widgets/rgbwaveformwidget.h" #include "waveform/widgets/softwarewaveformwidget.h" #include "waveform/widgets/waveformwidgetabstract.h" -#ifdef MIXXX_USE_QOPENGL -#include "waveform/widgets/allshader/filteredwaveformwidget.h" -#include "waveform/widgets/allshader/lrrgbwaveformwidget.h" -#include "waveform/widgets/allshader/rgbwaveformwidget.h" -#include "waveform/widgets/allshader/simplewaveformwidget.h" -#endif #include "widget/wvumeter.h" #include "widget/wvumeterlegacy.h" #include "widget/wwaveformviewer.h" @@ -948,36 +946,34 @@ void WaveformWidgetFactory::evaluateWidgets() { useOpenGLShaders = QtRGBWaveformWidget::useOpenGLShaders(); developerOnly = QtRGBWaveformWidget::developerOnly(); break; -#ifdef MIXXX_USE_QOPENGL - case WaveformWidgetType::QOpenGLRGBWaveform: + case WaveformWidgetType::AllShaderRGBWaveform: widgetName = allshader::RGBWaveformWidget::getWaveformWidgetName(); useOpenGl = allshader::RGBWaveformWidget::useOpenGl(); useOpenGles = allshader::RGBWaveformWidget::useOpenGles(); useOpenGLShaders = allshader::RGBWaveformWidget::useOpenGLShaders(); developerOnly = allshader::RGBWaveformWidget::developerOnly(); break; - case WaveformWidgetType::QOpenGLLRRGBWaveform: + case WaveformWidgetType::AllShaderLRRGBWaveform: widgetName = allshader::LRRGBWaveformWidget::getWaveformWidgetName(); useOpenGl = allshader::LRRGBWaveformWidget::useOpenGl(); useOpenGles = allshader::LRRGBWaveformWidget::useOpenGles(); useOpenGLShaders = allshader::LRRGBWaveformWidget::useOpenGLShaders(); developerOnly = allshader::LRRGBWaveformWidget::developerOnly(); break; - case WaveformWidgetType::QOpenGLFilteredWaveform: + case WaveformWidgetType::AllShaderFilteredWaveform: widgetName = allshader::FilteredWaveformWidget::getWaveformWidgetName(); useOpenGl = allshader::FilteredWaveformWidget::useOpenGl(); useOpenGles = allshader::FilteredWaveformWidget::useOpenGles(); useOpenGLShaders = allshader::FilteredWaveformWidget::useOpenGLShaders(); developerOnly = allshader::FilteredWaveformWidget::developerOnly(); break; - case WaveformWidgetType::QOpenGLSimpleWaveform: + case WaveformWidgetType::AllShaderSimpleWaveform: widgetName = allshader::SimpleWaveformWidget::getWaveformWidgetName(); useOpenGl = allshader::SimpleWaveformWidget::useOpenGl(); useOpenGles = allshader::SimpleWaveformWidget::useOpenGles(); useOpenGLShaders = allshader::SimpleWaveformWidget::useOpenGLShaders(); developerOnly = allshader::SimpleWaveformWidget::developerOnly(); break; -#endif default: DEBUG_ASSERT(!"Unexpected WaveformWidgetType"); continue; @@ -1084,20 +1080,18 @@ WaveformWidgetAbstract* WaveformWidgetFactory::createWaveformWidget( case WaveformWidgetType::QtRGBWaveform: widget = new QtRGBWaveformWidget(viewer->getGroup(), viewer); break; -#ifdef MIXXX_USE_QOPENGL - case WaveformWidgetType::QOpenGLRGBWaveform: + case WaveformWidgetType::AllShaderRGBWaveform: widget = new allshader::RGBWaveformWidget(viewer->getGroup(), viewer); break; - case WaveformWidgetType::QOpenGLLRRGBWaveform: + case WaveformWidgetType::AllShaderLRRGBWaveform: widget = new allshader::LRRGBWaveformWidget(viewer->getGroup(), viewer); break; - case WaveformWidgetType::QOpenGLFilteredWaveform: + case WaveformWidgetType::AllShaderFilteredWaveform: widget = new allshader::FilteredWaveformWidget(viewer->getGroup(), viewer); break; - case WaveformWidgetType::QOpenGLSimpleWaveform: + case WaveformWidgetType::AllShaderSimpleWaveform: widget = new allshader::SimpleWaveformWidget(viewer->getGroup(), viewer); break; -#endif default: //case WaveformWidgetType::SoftwareSimpleWaveform: TODO: (vrince) //case WaveformWidgetType::EmptyWaveform: diff --git a/src/waveform/widgets/allshader/filteredwaveformwidget.h b/src/waveform/widgets/allshader/filteredwaveformwidget.h index 948d03c97ec..43c8ea09b4d 100644 --- a/src/waveform/widgets/allshader/filteredwaveformwidget.h +++ b/src/waveform/widgets/allshader/filteredwaveformwidget.h @@ -15,7 +15,7 @@ class allshader::FilteredWaveformWidget final : public allshader::WaveformWidget ~FilteredWaveformWidget() override; WaveformWidgetType::Type getType() const override { - return WaveformWidgetType::QOpenGLFilteredWaveform; + return WaveformWidgetType::AllShaderFilteredWaveform; } static inline QString getWaveformWidgetName() { diff --git a/src/waveform/widgets/allshader/lrrgbwaveformwidget.h b/src/waveform/widgets/allshader/lrrgbwaveformwidget.h index 17a749e1e77..e27c62427b1 100644 --- a/src/waveform/widgets/allshader/lrrgbwaveformwidget.h +++ b/src/waveform/widgets/allshader/lrrgbwaveformwidget.h @@ -15,7 +15,7 @@ class allshader::LRRGBWaveformWidget final : public allshader::WaveformWidget { ~LRRGBWaveformWidget() override; WaveformWidgetType::Type getType() const override { - return WaveformWidgetType::QOpenGLLRRGBWaveform; + return WaveformWidgetType::AllShaderLRRGBWaveform; } static inline QString getWaveformWidgetName() { diff --git a/src/waveform/widgets/allshader/rgbwaveformwidget.h b/src/waveform/widgets/allshader/rgbwaveformwidget.h index 08aaacf8fcf..105d903025b 100644 --- a/src/waveform/widgets/allshader/rgbwaveformwidget.h +++ b/src/waveform/widgets/allshader/rgbwaveformwidget.h @@ -15,7 +15,7 @@ class allshader::RGBWaveformWidget final : public allshader::WaveformWidget { ~RGBWaveformWidget() override; WaveformWidgetType::Type getType() const override { - return WaveformWidgetType::QOpenGLRGBWaveform; + return WaveformWidgetType::AllShaderRGBWaveform; } static inline QString getWaveformWidgetName() { diff --git a/src/waveform/widgets/allshader/simplewaveformwidget.h b/src/waveform/widgets/allshader/simplewaveformwidget.h index 60ffb8c53a6..7ea03c943c2 100644 --- a/src/waveform/widgets/allshader/simplewaveformwidget.h +++ b/src/waveform/widgets/allshader/simplewaveformwidget.h @@ -15,7 +15,7 @@ class allshader::SimpleWaveformWidget final : public allshader::WaveformWidget { ~SimpleWaveformWidget() override; WaveformWidgetType::Type getType() const override { - return WaveformWidgetType::QOpenGLSimpleWaveform; + return WaveformWidgetType::AllShaderSimpleWaveform; } static inline QString getWaveformWidgetName() { diff --git a/src/waveform/widgets/allshader/waveformwidget.cpp b/src/waveform/widgets/allshader/waveformwidget.cpp index bcce83dbbd8..5709eb7066f 100644 --- a/src/waveform/widgets/allshader/waveformwidget.cpp +++ b/src/waveform/widgets/allshader/waveformwidget.cpp @@ -19,7 +19,7 @@ WaveformWidget::~WaveformWidget() { mixxx::Duration WaveformWidget::render() { makeCurrentIfNeeded(); - renderGL(); + paintGL(); doneCurrent(); // In the legacy widgets, this is used to "return timer for painter setup" // which is not relevant here. Also note that the return value is not used @@ -28,21 +28,20 @@ mixxx::Duration WaveformWidget::render() { return mixxx::Duration(); } -void WaveformWidget::renderGL() { +void WaveformWidget::paintGL() { if (shouldOnlyDrawBackground()) { if (!m_rendererStack.empty()) { - m_rendererStack[0]->allshaderWaveformRenderer()->renderGL(); + m_rendererStack[0]->allshaderWaveformRenderer()->paintGL(); } } else { for (auto renderer : std::as_const(m_rendererStack)) { - renderer->allshaderWaveformRenderer()->renderGL(); + renderer->allshaderWaveformRenderer()->paintGL(); } } } void WaveformWidget::initializeGL() { for (auto renderer : std::as_const(m_rendererStack)) { - renderer->allshaderWaveformRenderer()->initializeOpenGLFunctions(); renderer->allshaderWaveformRenderer()->initializeGL(); } } diff --git a/src/waveform/widgets/allshader/waveformwidget.h b/src/waveform/widgets/allshader/waveformwidget.h index d499bd2acbe..90c1bec006f 100644 --- a/src/waveform/widgets/allshader/waveformwidget.h +++ b/src/waveform/widgets/allshader/waveformwidget.h @@ -18,11 +18,12 @@ class allshader::WaveformWidget : public ::WGLWaveformWidget, mixxx::Duration render() override; // overrides for WGLWidget + void paintGL() override; void initializeGL() override; - void renderGL() override; void resizeGL(int w, int h) override; - virtual WGLWidget* getGLWidget() override { return this; } + + private: }; diff --git a/src/waveform/widgets/glwaveformwidgetabstract.cpp b/src/waveform/widgets/glwaveformwidgetabstract.cpp index 25321b18882..7faab28ddba 100644 --- a/src/waveform/widgets/glwaveformwidgetabstract.cpp +++ b/src/waveform/widgets/glwaveformwidgetabstract.cpp @@ -2,6 +2,5 @@ GLWaveformWidgetAbstract::GLWaveformWidgetAbstract(const QString& group, QWidget* parent) : WaveformWidgetAbstract(group), - WGLWaveformWidget(parent) -{ + WGLWaveformWidget(parent) { } diff --git a/src/waveform/widgets/glwaveformwidgetabstract.h b/src/waveform/widgets/glwaveformwidgetabstract.h index c5070b1c564..c845d1eb071 100644 --- a/src/waveform/widgets/glwaveformwidgetabstract.h +++ b/src/waveform/widgets/glwaveformwidgetabstract.h @@ -8,7 +8,7 @@ QT_FORWARD_DECLARE_CLASS(QString) /// GLWaveformWidgetAbstract is a WaveformWidgetAbstract & WGLWidget. Any added /// renderers derived from GLWaveformRenderer can implement a virtual method -/// onInitializeGL, which will be called from GLWaveformRenderer::initializeGL +/// initializeGL, which will be called from GLWaveformRenderer::initializeGL /// (which overrides WGLWidget::initializeGL). This can be used for initialization /// that must be deferred until the GL context has been initialized and that can't /// be done in the constructor. @@ -23,20 +23,20 @@ class GLWaveformWidgetAbstract : public WaveformWidgetAbstract, public WGLWavefo } protected: +#if !defined(QT_NO_OPENGL) && !defined(QT_OPENGL_ES_2) #ifdef MIXXX_USE_QOPENGL - void renderGL() override { + void paintGL() override { // Called by OpenGLWindow to avoid flickering on resize. // The static_cast of this in required to avoid ambiguity // as method render is in both base classes. static_cast(this)->render(); } #endif -#if !defined(QT_NO_OPENGL) && !defined(QT_OPENGL_ES_2) void initializeGL() override { for (auto renderer : std::as_const(m_rendererStack)) { auto glRenderer = dynamic_cast(renderer); if (glRenderer) { - glRenderer->onInitializeGL(); + glRenderer->initializeGL(); } } } diff --git a/src/waveform/widgets/waveformwidgettype.h b/src/waveform/widgets/waveformwidgettype.h index 92b7eb6ad7f..a46199d9998 100644 --- a/src/waveform/widgets/waveformwidgettype.h +++ b/src/waveform/widgets/waveformwidgettype.h @@ -6,28 +6,26 @@ class WaveformWidgetType { // The order must not be changed because the waveforms are referenced // from the sorted preferences by a number. EmptyWaveform = 0, - SoftwareSimpleWaveform, // 1 TODO - SoftwareWaveform, // 2 Filtered - QtSimpleWaveform, // 3 Simple Qt - QtWaveform, // 4 Filtered Qt - GLSimpleWaveform, // 5 Simple GL - GLFilteredWaveform, // 6 Filtered GL - GLSLFilteredWaveform, // 7 Filtered GLSL - HSVWaveform, // 8 HSV - GLVSyncTest, // 9 VSync GL - RGBWaveform, // 10 RGB - GLRGBWaveform, // 11 RGB GL - GLSLRGBWaveform, // 12 RGB GLSL - QtVSyncTest, // 13 VSync Qt - QtHSVWaveform, // 14 HSV Qt - QtRGBWaveform, // 15 RGB Qt - GLSLRGBStackedWaveform, // 16 RGB Stacked -#ifdef MIXXX_USE_QOPENGL - QOpenGLRGBWaveform, // 17 RGB (all-shaders) - QOpenGLLRRGBWaveform, // 18 L/R RGB (all-shaders) - QOpenGLFilteredWaveform, // 19 Filtered (all-shaders) - QOpenGLSimpleWaveform, // 20 Simple (all-shaders) -#endif - Count_WaveformwidgetType // Also used as invalid value + SoftwareSimpleWaveform, // 1 TODO + SoftwareWaveform, // 2 Filtered + QtSimpleWaveform, // 3 Simple Qt + QtWaveform, // 4 Filtered Qt + GLSimpleWaveform, // 5 Simple GL + GLFilteredWaveform, // 6 Filtered GL + GLSLFilteredWaveform, // 7 Filtered GLSL + HSVWaveform, // 8 HSV + GLVSyncTest, // 9 VSync GL + RGBWaveform, // 10 RGB + GLRGBWaveform, // 11 RGB GL + GLSLRGBWaveform, // 12 RGB GLSL + QtVSyncTest, // 13 VSync Qt + QtHSVWaveform, // 14 HSV Qt + QtRGBWaveform, // 15 RGB Qt + GLSLRGBStackedWaveform, // 16 RGB Stacked + AllShaderRGBWaveform, // 17 RGB (all-shaders) + AllShaderLRRGBWaveform, // 18 L/R RGB (all-shaders) + AllShaderFilteredWaveform, // 19 Filtered (all-shaders) + AllShaderSimpleWaveform, // 20 Simple (all-shaders) + Count_WaveformwidgetType // Also used as invalid value }; }; diff --git a/src/widget/openglwindow.cpp b/src/widget/openglwindow.cpp index a15ac70d7ab..179f10ff5a6 100644 --- a/src/widget/openglwindow.cpp +++ b/src/widget/openglwindow.cpp @@ -27,11 +27,11 @@ void OpenGLWindow::paintGL() { if (m_pWidget && isExposed()) { if (m_dirty) { // Extra render and swap to avoid flickering when resizing - m_pWidget->renderGL(); + m_pWidget->paintGL(); m_pWidget->swapBuffers(); m_dirty = false; } - m_pWidget->renderGL(); + m_pWidget->paintGL(); } } diff --git a/src/widget/wglwidgetqopengl.cpp b/src/widget/wglwidgetqopengl.cpp index d3d4dc0f2fd..6b85775b224 100644 --- a/src/widget/wglwidgetqopengl.cpp +++ b/src/widget/wglwidgetqopengl.cpp @@ -58,7 +58,7 @@ void WGLWidget::doneCurrent() { } } -void WGLWidget::renderGL() { +void WGLWidget::paintGL() { // to be implemented in derived widgets if needed } diff --git a/src/widget/wglwidgetqopengl.h b/src/widget/wglwidgetqopengl.h index cd3f5174726..cdaa89ee98e 100644 --- a/src/widget/wglwidgetqopengl.h +++ b/src/widget/wglwidgetqopengl.h @@ -36,7 +36,7 @@ class WGLWidget : public QWidget { void showEvent(QShowEvent* event) override; // called (indirectly) by WaveformWidgetFactory - virtual void renderGL(); + virtual void paintGL(); // called by OpenGLWindow virtual void resizeGL(int w, int h); virtual void initializeGL(); diff --git a/src/widget/wspinny.cpp b/src/widget/wspinny.cpp index bb13137371e..b4e077fbbbc 100644 --- a/src/widget/wspinny.cpp +++ b/src/widget/wspinny.cpp @@ -1,26 +1,5 @@ #include "widget/wspinny.h" -/* -#include -#include -#include -#include -#include -#include - -#include "control/controlobject.h" -#include "control/controlproxy.h" -#include "library/coverartcache.h" -#include "library/coverartutils.h" -#include "track/track.h" -#include "util/dnd.h" -#include "util/fpclassify.h" -#include "vinylcontrol/vinylcontrol.h" -#include "vinylcontrol/vinylcontrolmanager.h" -#include "waveform/visualplayposition.h" -#include "waveform/vsyncthread.h" -#include "wimagestore.h" -*/ WSpinny::WSpinny( QWidget* parent, diff --git a/src/widget/wspinnyglsl.cpp b/src/widget/wspinnyglsl.cpp index 8b021474af8..795a2fb6a73 100644 --- a/src/widget/wspinnyglsl.cpp +++ b/src/widget/wspinnyglsl.cpp @@ -1,7 +1,5 @@ #include "widget/wspinnyglsl.h" -#include - #include "util/assert.h" WSpinnyGLSL::WSpinnyGLSL( @@ -41,12 +39,12 @@ void WSpinnyGLSL::coverChanged() { void WSpinnyGLSL::draw() { if (shouldRender()) { makeCurrentIfNeeded(); - renderGL(); + paintGL(); doneCurrent(); } } -void WSpinnyGLSL::renderGL() { +void WSpinnyGLSL::paintGL() { glDisable(GL_DEPTH_TEST); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); diff --git a/src/widget/wspinnyglsl.h b/src/widget/wspinnyglsl.h index 7e599b53124..861e7bdd0fe 100644 --- a/src/widget/wspinnyglsl.h +++ b/src/widget/wspinnyglsl.h @@ -1,6 +1,5 @@ #pragma once -#include #include #include "shaders/textureshader.h" @@ -20,7 +19,7 @@ class WSpinnyGLSL : public WSpinnyBase { void coverChanged() override; void initializeGL() override; - void renderGL() override; + void paintGL() override; void drawTexture(QOpenGLTexture* texture); void cleanupGL(); void updateLoaderCoverGL(); diff --git a/src/widget/wvumeterglsl.cpp b/src/widget/wvumeterglsl.cpp index af1609a24db..853d1aa096b 100644 --- a/src/widget/wvumeterglsl.cpp +++ b/src/widget/wvumeterglsl.cpp @@ -14,7 +14,7 @@ WVuMeterGLSL::~WVuMeterGLSL() { void WVuMeterGLSL::draw() { if (shouldRender()) { makeCurrentIfNeeded(); - renderGL(); + paintGL(); doneCurrent(); } } @@ -41,7 +41,7 @@ void WVuMeterGLSL::initializeGL() { m_textureShader.init(); } -void WVuMeterGLSL::renderGL() { +void WVuMeterGLSL::paintGL() { glClearColor(static_cast(m_qBgColor.redF()), static_cast(m_qBgColor.greenF()), static_cast(m_qBgColor.blueF()), diff --git a/src/widget/wvumeterglsl.h b/src/widget/wvumeterglsl.h index dd71140cfff..40708369949 100644 --- a/src/widget/wvumeterglsl.h +++ b/src/widget/wvumeterglsl.h @@ -1,7 +1,5 @@ #pragma once -#include -#include #include #include @@ -24,6 +22,6 @@ class WVuMeterGLSL : public WVuMeterBase { void draw() override; void initializeGL() override; void cleanupGL(); - void renderGL() override; + void paintGL() override; void drawTexture(QOpenGLTexture* texture, const QRectF& sourceRect, const QRectF& targetRect); };