Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

qopenglwindow-based replacement of qglwidget, full glsl shader based waveforms, vumeters and spinnies #10989

Merged
merged 122 commits into from
May 29, 2023

Conversation

m0dB
Copy link
Contributor

@m0dB m0dB commented Oct 22, 2022

This PR addresses performance issues, particularly on macOS, by replacing the (deprecated) QGLWidget with a new class WGLWidget. When cmake option QOPENGL is ON (the default), WGLWidget is derived from QWidget and uses QOpenGLWindow for drawing. When cmake option QOPENGL is OFF, WGLWidget derives directly from QGLWidget, effectively leaving everything as before.

Additionally, this PR implements waveform, spinny and vu-meter rendering using GLSL shaders for drawing for better performance. The original implementations were combining QPainter-based drawing with openGL. Using QPainter with QOpenGLWindow as a paint device causes performance issues.

The original WSpinny and WVuMeter classes are still available as fall back for when GLSL is not available or in case we encounter issues. By default the new WSpinnyGLSL and WVuMeterGLSL are used.

All original waveform types are also still available, but the new (all-shader) type waveforms should perform better on all platforms.

Notes:

  • The QOPENGL cmake option sets preprocessor define MIXXX_USE_QOPENGL, which is used to select the QOpenGLWIndow based code instead of the QGLWidget based code.
  • When WGLWidget derives from QGLWidget, it adds some methods, this is merely to have a common API for both implementations
  • I also tried an alternative approach: replacing QGLWidget with the newer QOpenGLWidget, but that required too many changes to get to work
  • I have tried to address all the comments in the reviews have been addressed, with the notable exception of a requested API improvement of the shader and vertex code, but this can be done later and will mainly be aesthetics.

Known issues:

  • alpha transparency of the beat lines in the legacy GL waveforms causes a graphical artifact and had to be forced to 1.0
  • when changing the layout / resizing, the QOpenGLWindows are moved/resized ahead (?) of the rest of the widgets.

@JoergAtGithub
Copy link
Member

I tried to build it on Windows, but I got:

CMake Error at buildenv/mixxx-deps-2.4-x64-windows-f9cdab3/scripts/buildsystems/vcpkg.cmake:613 (_add_library):
  Cannot find source file:
    src/widget/qopengl/wspinny.cpp

@m0dB
Copy link
Contributor Author

m0dB commented Oct 22, 2022

Yes, I see the CI build also failed. I guess I didn't add the file. I'll have a look when I am back at my computer.

@m0dB
Copy link
Contributor Author

m0dB commented Oct 22, 2022

Please try again, @JoergAtGithub . Note that I have no idea if/how this will run on windows (or linux for that matter) and if it requires additional steps when setting up the QOpenGL stuff, so YMMV.

@JoergAtGithub
Copy link
Member

JoergAtGithub commented Oct 22, 2022

I get now:

``` [718/870] Building CXX object CMakeFiles\mixxx-lib.dir\src\waveform\renderers\qopengl\waveformrendermarkrange.cpp.obj FAILED: CMakeFiles/mixxx-lib.dir/src/waveform/renderers/qopengl/waveformrendermarkrange.cpp.obj C:\PROGRA~1\MICROS~1\2022\COMMUN~1\VC\Tools\MSVC\1433~1.316\bin\Hostx64\x64\cl.exe /nologo /TP -DAMD64 -DHAVE_WINSOCK2_H -DMIXXX_BUILD_RELEASE -DMIXXX_DEBUG_ASSERTIONS_ENABLED -DMIXXX_DEBUG_ASSERTIONS_FATAL -DMIXXX_USE_QOPENGL -DNDEBUG -DNOMINMAX -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_PRINTSUPPORT_LIB -DQT_QMLMODELS_LIB -DQT_QML_LIB -DQT_QUICKWIDGETS_LIB -DQT_QUICK_LIB -DQT_SQL_LIB -DQT_SVG_LIB -DQT_TABLET_SUPPORT -DQT_TESTCASE_BUILDDIR=\"C:/Users/Joerg.WORLDWARTWEB/source/repos/JoergAtGithub/mixxx/build/x64__portable\" -DQT_TESTLIB_LIB -DQT_USE_QSTRINGBUILDER -DQT_WIDGETS_LIB -DQT_XML_LIB -DSFC_SUPPORTS_SET_COMPRESSION_LEVEL -DUNICODE -DWIN32 -DWINVER=0x0601 -D_ATL_MIN_CRT -D_CRT_SECURE_NO_WARNINGS -D_SILENCE_CXX17_ITERATOR_BASE_CLASS_DEPRECATION_WARNING -D_USE_MATH_DEFINES -D_WIN32_WINNT=0x0601 -D_WINSOCK_DEPRECATED_NO_WARNINGS -D__BATTERY__ -D__BROADCAST__ -D__ENGINEPRIME__ -D__HID__ -D__HSS1394__ -D__LILV__ -D__MAD__ -D__MEDIAFOUNDATION__ -D__MODPLUG__ -D__OPUS__ -D__QTKEYCHAIN__ -D__SNDFILE__ -D__SQLITE3__ -D__SSE2__ -D__SSE__ -D__VINYLCONTROL__ -D__WINDOWS__ -D__WV__ -IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\build\x64__portable\mixxx-lib_autogen\include -IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src -IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\build\x64__portable\src -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\buildenv\mixxx-deps-2.4-x64-windows-f9cdab3\installed\x64-windows\include -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\lib\fidlib -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\lib\googletest\googletest\include -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\lib\portaudio -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\lib\rigtorp\SPSCQueue\include -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\lib\replaygain -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\lib\reverb -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\lib\libshout-idjc\include -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\lib\kaitai -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\lib\mp3guessenc-0.27.4 -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\buildenv\mixxx-deps-2.4-x64-windows-f9cdab3\installed\x64-windows\include\qt5 -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\buildenv\mixxx-deps-2.4-x64-windows-f9cdab3\installed\x64-windows\include\qt5\QtConcurrent -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\buildenv\mixxx-deps-2.4-x64-windows-f9cdab3\installed\x64-windows\include\qt5\QtCore -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\buildenv\mixxx-deps-2.4-x64-windows-f9cdab3\installed\x64-windows\tools\qt5\mkspecs\win32-msvc -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\buildenv\mixxx-deps-2.4-x64-windows-f9cdab3\installed\x64-windows\include\qt5\QtGui -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\buildenv\mixxx-deps-2.4-x64-windows-f9cdab3\installed\x64-windows\include\qt5\QtNetwork -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\buildenv\mixxx-deps-2.4-x64-windows-f9cdab3\installed\x64-windows\include\qt5\QtOpenGL -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\buildenv\mixxx-deps-2.4-x64-windows-f9cdab3\installed\x64-windows\include\qt5\QtWidgets -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\buildenv\mixxx-deps-2.4-x64-windows-f9cdab3\installed\x64-windows\include\qt5\QtPrintSupport -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\buildenv\mixxx-deps-2.4-x64-windows-f9cdab3\installed\x64-windows\include\qt5\QtQml -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\buildenv\mixxx-deps-2.4-x64-windows-f9cdab3\installed\x64-windows\include\qt5\QtQuickWidgets -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\buildenv\mixxx-deps-2.4-x64-windows-f9cdab3\installed\x64-windows\include\qt5\QtQuick -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\buildenv\mixxx-deps-2.4-x64-windows-f9cdab3\installed\x64-windows\include\qt5\QtQmlModels -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\buildenv\mixxx-deps-2.4-x64-windows-f9cdab3\installed\x64-windows\include\qt5\QtSql -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\buildenv\mixxx-deps-2.4-x64-windows-f9cdab3\installed\x64-windows\include\qt5\QtSvg -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\buildenv\mixxx-deps-2.4-x64-windows-f9cdab3\installed\x64-windows\include\qt5\QtTest -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\buildenv\mixxx-deps-2.4-x64-windows-f9cdab3\installed\x64-windows\include\qt5\QtXml -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\lib\qm-dsp -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\lib\qm-dsp\include -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\buildenv\mixxx-deps-2.4-x64-windows-f9cdab3\installed\x64-windows\include\taglib -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\buildenv\mixxx-deps-2.4-x64-windows-f9cdab3\installed\x64-windows\include\opus -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\buildenv\mixxx-deps-2.4-x64-windows-f9cdab3\installed\x64-windows\include\hidapi -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\lib\xwax -external:W0 /DWIN32 /D_WINDOWS /GR /EHsc /Zc:__cplusplus /Z7 /O2 /Ob1 /DNDEBUG -MD /UTF8 /fp:fast /Gy /W3 -std:c++20 /showIncludes /FoCMakeFiles\mixxx-lib.dir\src\waveform\renderers\qopengl\waveformrendermarkrange.cpp.obj /FdCMakeFiles\mixxx-lib.dir\mixxx-lib.pdb /FS -c C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermarkrange.cpp C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermarkrange.cpp(19): error C2872: 'WaveformRenderMarkRange': ambiguous symbol C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform/renderers/waveformmarkrange.h(79): note: could be 'WaveformRenderMarkRange' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform/renderers/qopengl/waveformrendermarkrange.h(15): note: or 'qopengl::WaveformRenderMarkRange' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermarkrange.cpp(19): error C2027: use of undefined type 'WaveformRenderMarkRange' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform/renderers/waveformmarkrange.h(79): note: see declaration of 'WaveformRenderMarkRange' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermarkrange.cpp(20): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermarkrange.cpp(20): error C2550: '{ctor}': constructor initializer lists are only allowed on constructor definitions C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermarkrange.cpp(21): warning C4508: '{ctor}': function should return a value; 'void' return type assumed C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermarkrange.cpp(23): error C2872: 'WaveformRenderMarkRange': ambiguous symbol C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform/renderers/waveformmarkrange.h(79): note: could be 'WaveformRenderMarkRange' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform/renderers/qopengl/waveformrendermarkrange.h(15): note: or 'qopengl::WaveformRenderMarkRange' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermarkrange.cpp(23): error C2872: 'WaveformRenderMarkRange': ambiguous symbol C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform/renderers/waveformmarkrange.h(79): note: could be 'WaveformRenderMarkRange' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform/renderers/qopengl/waveformrendermarkrange.h(15): note: or 'qopengl::WaveformRenderMarkRange' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermarkrange.cpp(23): error C2027: use of undefined type 'WaveformRenderMarkRange' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform/renderers/waveformmarkrange.h(79): note: see declaration of 'WaveformRenderMarkRange' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermarkrange.cpp(23): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermarkrange.cpp(24): warning C4508: '{dtor}': function should return a value; 'void' return type assumed C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermarkrange.cpp(26): error C2872: 'WaveformRenderMarkRange': ambiguous symbol C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform/renderers/waveformmarkrange.h(79): note: could be 'WaveformRenderMarkRange' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform/renderers/qopengl/waveformrendermarkrange.h(15): note: or 'qopengl::WaveformRenderMarkRange' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermarkrange.cpp(26): error C2027: use of undefined type 'WaveformRenderMarkRange' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform/renderers/waveformmarkrange.h(79): note: see declaration of 'WaveformRenderMarkRange' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermarkrange.cpp(44): error C2065: 'm_shaderProgram': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermarkrange.cpp(48): error C2065: 'm_shaderProgram': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermarkrange.cpp(53): error C2065: 'm_shaderProgram': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermarkrange.cpp(57): error C2065: 'm_shaderProgram': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermarkrange.cpp(61): error C2872: 'WaveformRenderMarkRange': ambiguous symbol C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform/renderers/waveformmarkrange.h(79): note: could be 'WaveformRenderMarkRange' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform/renderers/qopengl/waveformrendermarkrange.h(15): note: or 'qopengl::WaveformRenderMarkRange' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermarkrange.cpp(61): error C2027: use of undefined type 'WaveformRenderMarkRange' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform/renderers/waveformmarkrange.h(79): note: see declaration of 'WaveformRenderMarkRange' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermarkrange.cpp(70): error C2065: 'm_shaderProgram': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermarkrange.cpp(71): error C2065: 'm_shaderProgram': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermarkrange.cpp(73): error C2065: 'm_shaderProgram': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermarkrange.cpp(75): error C2065: 'm_shaderProgram': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermarkrange.cpp(76): error C2065: 'm_shaderProgram': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermarkrange.cpp(82): error C2872: 'WaveformRenderMarkRange': ambiguous symbol C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform/renderers/waveformmarkrange.h(79): note: could be 'WaveformRenderMarkRange' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform/renderers/qopengl/waveformrendermarkrange.h(15): note: or 'qopengl::WaveformRenderMarkRange' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermarkrange.cpp(82): error C2027: use of undefined type 'WaveformRenderMarkRange' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform/renderers/waveformmarkrange.h(79): note: see declaration of 'WaveformRenderMarkRange' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermarkrange.cpp(83): error C2065: 'm_markRanges': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermarkrange.cpp(84): error C2065: 'm_markRanges': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermarkrange.cpp(89): error C2065: 'm_markRanges': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermarkrange.cpp(91): error C2065: 'm_waveformRenderer': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermarkrange.cpp(94): error C2065: 'm_waveformRenderer': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermarkrange.cpp(90): error C2440: '': cannot convert from 'initializer list' to 'WaveformMarkRange' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermarkrange.cpp(94): note: No constructor could take the source type, or constructor overload resolution was ambiguous C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermarkrange.cpp(100): error C2872: 'WaveformRenderMarkRange': ambiguous symbol C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform/renderers/waveformmarkrange.h(79): note: could be 'WaveformRenderMarkRange' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform/renderers/qopengl/waveformrendermarkrange.h(15): note: or 'qopengl::WaveformRenderMarkRange' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermarkrange.cpp(100): error C2027: use of undefined type 'WaveformRenderMarkRange' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform/renderers/waveformmarkrange.h(79): note: see declaration of 'WaveformRenderMarkRange' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermarkrange.cpp(105): error C2065: 'm_waveformRenderer': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermarkrange.cpp(105): error C2065: 'm_waveformRenderer': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermarkrange.cpp(105): error C2440: '': cannot convert from 'initializer list' to 'QRectF' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermarkrange.cpp(105): note: No constructor could take the source type, or constructor overload resolution was ambiguous C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermarkrange.cpp(106): error C2065: 'm_shaderProgram': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermarkrange.cpp(108): error C2065: 'm_shaderProgram': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermarkrange.cpp(109): error C2065: 'm_shaderProgram': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermarkrange.cpp(111): error C2065: 'm_markRanges': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermarkrange.cpp(111): error C2530: 'markRange': references must be initialized C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermarkrange.cpp(111): error C3531: 'markRange': a symbol whose type contains 'auto' must have an initializer C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermarkrange.cpp(111): error C2143: syntax error: missing ';' before ':' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermarkrange.cpp(111): error C2143: syntax error: missing ';' before ')' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermarkrange.cpp(128): error C2065: 'm_waveformRenderer': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermarkrange.cpp(130): error C2065: 'm_waveformRenderer': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermarkrange.cpp(138): error C2065: 'm_waveformRenderer': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermarkrange.cpp(145): error C2065: 'm_waveformRenderer': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermarkrange.cpp(145): error C2440: '': cannot convert from 'initializer list' to 'QRectF' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermarkrange.cpp(145): note: No constructor could take the source type, or constructor overload resolution was ambiguous [719/870] Building CXX object CMakeFiles\mixxx-lib.dir\src\waveform\renderers\qopengl\waveformrenderersignalbase.cpp.obj [720/870] Building CXX object CMakeFiles\mixxx-lib.dir\src\waveform\renderers\qopengl\waveformrendererrgb.cpp.obj [721/870] Building CXX object CMakeFiles\mixxx-lib.dir\src\waveform\widgets\qopengl\waveformwidget.cpp.obj [722/870] Building CXX object CMakeFiles\mixxx-lib.dir\src\waveform\widgets\qopengl\rgbwaveformwidget.cpp.obj [723/870] Building CXX object CMakeFiles\mixxx-lib.dir\src\waveform\renderers\qopengl\waveformrendererpreroll.cpp.obj [724/870] Building CXX object CMakeFiles\mixxx-lib.dir\src\waveform\renderers\qopengl\waveformrendermark.cpp.obj FAILED: CMakeFiles/mixxx-lib.dir/src/waveform/renderers/qopengl/waveformrendermark.cpp.obj C:\PROGRA~1\MICROS~1\2022\COMMUN~1\VC\Tools\MSVC\1433~1.316\bin\Hostx64\x64\cl.exe /nologo /TP -DAMD64 -DHAVE_WINSOCK2_H -DMIXXX_BUILD_RELEASE -DMIXXX_DEBUG_ASSERTIONS_ENABLED -DMIXXX_DEBUG_ASSERTIONS_FATAL -DMIXXX_USE_QOPENGL -DNDEBUG -DNOMINMAX -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_PRINTSUPPORT_LIB -DQT_QMLMODELS_LIB -DQT_QML_LIB -DQT_QUICKWIDGETS_LIB -DQT_QUICK_LIB -DQT_SQL_LIB -DQT_SVG_LIB -DQT_TABLET_SUPPORT -DQT_TESTCASE_BUILDDIR=\"C:/Users/Joerg.WORLDWARTWEB/source/repos/JoergAtGithub/mixxx/build/x64__portable\" -DQT_TESTLIB_LIB -DQT_USE_QSTRINGBUILDER -DQT_WIDGETS_LIB -DQT_XML_LIB -DSFC_SUPPORTS_SET_COMPRESSION_LEVEL -DUNICODE -DWIN32 -DWINVER=0x0601 -D_ATL_MIN_CRT -D_CRT_SECURE_NO_WARNINGS -D_SILENCE_CXX17_ITERATOR_BASE_CLASS_DEPRECATION_WARNING -D_USE_MATH_DEFINES -D_WIN32_WINNT=0x0601 -D_WINSOCK_DEPRECATED_NO_WARNINGS -D__BATTERY__ -D__BROADCAST__ -D__ENGINEPRIME__ -D__HID__ -D__HSS1394__ -D__LILV__ -D__MAD__ -D__MEDIAFOUNDATION__ -D__MODPLUG__ -D__OPUS__ -D__QTKEYCHAIN__ -D__SNDFILE__ -D__SQLITE3__ -D__SSE2__ -D__SSE__ -D__VINYLCONTROL__ -D__WINDOWS__ -D__WV__ -IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\build\x64__portable\mixxx-lib_autogen\include -IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src -IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\build\x64__portable\src -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\buildenv\mixxx-deps-2.4-x64-windows-f9cdab3\installed\x64-windows\include -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\lib\fidlib -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\lib\googletest\googletest\include -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\lib\portaudio -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\lib\rigtorp\SPSCQueue\include -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\lib\replaygain -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\lib\reverb -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\lib\libshout-idjc\include -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\lib\kaitai -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\lib\mp3guessenc-0.27.4 -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\buildenv\mixxx-deps-2.4-x64-windows-f9cdab3\installed\x64-windows\include\qt5 -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\buildenv\mixxx-deps-2.4-x64-windows-f9cdab3\installed\x64-windows\include\qt5\QtConcurrent -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\buildenv\mixxx-deps-2.4-x64-windows-f9cdab3\installed\x64-windows\include\qt5\QtCore -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\buildenv\mixxx-deps-2.4-x64-windows-f9cdab3\installed\x64-windows\tools\qt5\mkspecs\win32-msvc -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\buildenv\mixxx-deps-2.4-x64-windows-f9cdab3\installed\x64-windows\include\qt5\QtGui -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\buildenv\mixxx-deps-2.4-x64-windows-f9cdab3\installed\x64-windows\include\qt5\QtNetwork -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\buildenv\mixxx-deps-2.4-x64-windows-f9cdab3\installed\x64-windows\include\qt5\QtOpenGL -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\buildenv\mixxx-deps-2.4-x64-windows-f9cdab3\installed\x64-windows\include\qt5\QtWidgets -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\buildenv\mixxx-deps-2.4-x64-windows-f9cdab3\installed\x64-windows\include\qt5\QtPrintSupport -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\buildenv\mixxx-deps-2.4-x64-windows-f9cdab3\installed\x64-windows\include\qt5\QtQml -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\buildenv\mixxx-deps-2.4-x64-windows-f9cdab3\installed\x64-windows\include\qt5\QtQuickWidgets -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\buildenv\mixxx-deps-2.4-x64-windows-f9cdab3\installed\x64-windows\include\qt5\QtQuick -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\buildenv\mixxx-deps-2.4-x64-windows-f9cdab3\installed\x64-windows\include\qt5\QtQmlModels -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\buildenv\mixxx-deps-2.4-x64-windows-f9cdab3\installed\x64-windows\include\qt5\QtSql -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\buildenv\mixxx-deps-2.4-x64-windows-f9cdab3\installed\x64-windows\include\qt5\QtSvg -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\buildenv\mixxx-deps-2.4-x64-windows-f9cdab3\installed\x64-windows\include\qt5\QtTest -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\buildenv\mixxx-deps-2.4-x64-windows-f9cdab3\installed\x64-windows\include\qt5\QtXml -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\lib\qm-dsp -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\lib\qm-dsp\include -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\buildenv\mixxx-deps-2.4-x64-windows-f9cdab3\installed\x64-windows\include\taglib -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\buildenv\mixxx-deps-2.4-x64-windows-f9cdab3\installed\x64-windows\include\opus -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\buildenv\mixxx-deps-2.4-x64-windows-f9cdab3\installed\x64-windows\include\hidapi -external:IC:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\lib\xwax -external:W0 /DWIN32 /D_WINDOWS /GR /EHsc /Zc:__cplusplus /Z7 /O2 /Ob1 /DNDEBUG -MD /UTF8 /fp:fast /Gy /W3 -std:c++20 /showIncludes /FoCMakeFiles\mixxx-lib.dir\src\waveform\renderers\qopengl\waveformrendermark.cpp.obj /FdCMakeFiles\mixxx-lib.dir\mixxx-lib.pdb /FS -c C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(23): error C2872: 'WaveformRenderMark': ambiguous symbol C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\waveformmark.h(123): note: could be 'WaveformRenderMark' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform/renderers/qopengl/waveformrendermark.h(16): note: or 'qopengl::WaveformRenderMark' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(23): error C2027: use of undefined type 'WaveformRenderMark' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\waveformmark.h(123): note: see declaration of 'WaveformRenderMark' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(24): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(24): error C2550: '{ctor}': constructor initializer lists are only allowed on constructor definitions C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(25): warning C4508: '{ctor}': function should return a value; 'void' return type assumed C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(27): error C2872: 'WaveformRenderMark': ambiguous symbol C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\waveformmark.h(123): note: could be 'WaveformRenderMark' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform/renderers/qopengl/waveformrendermark.h(16): note: or 'qopengl::WaveformRenderMark' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(27): error C2872: 'WaveformRenderMark': ambiguous symbol C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\waveformmark.h(123): note: could be 'WaveformRenderMark' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform/renderers/qopengl/waveformrendermark.h(16): note: or 'qopengl::WaveformRenderMark' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(27): error C2027: use of undefined type 'WaveformRenderMark' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\waveformmark.h(123): note: see declaration of 'WaveformRenderMark' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(27): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(28): error C2065: 'm_marks': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(28): error C2530: 'pMark': references must be initialized C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(28): error C3531: 'pMark': a symbol whose type contains 'auto' must have an initializer C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(28): error C2143: syntax error: missing ';' before ':' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(28): error C2143: syntax error: missing ';' before ')' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(31): warning C4508: '{dtor}': function should return a value; 'void' return type assumed C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(33): error C2872: 'WaveformRenderMark': ambiguous symbol C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\waveformmark.h(123): note: could be 'WaveformRenderMark' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform/renderers/qopengl/waveformrendermark.h(16): note: or 'qopengl::WaveformRenderMark' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(33): error C2027: use of undefined type 'WaveformRenderMark' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\waveformmark.h(123): note: see declaration of 'WaveformRenderMark' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(34): error C2065: 'm_waveformRenderer': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(35): error C2065: 'm_marks': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(35): error C2065: 'm_waveformRenderer': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(38): error C2872: 'WaveformRenderMark': ambiguous symbol C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\waveformmark.h(123): note: could be 'WaveformRenderMark' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform/renderers/qopengl/waveformrendermark.h(16): note: or 'qopengl::WaveformRenderMark' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(38): error C2027: use of undefined type 'WaveformRenderMark' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\waveformmark.h(123): note: see declaration of 'WaveformRenderMark' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(39): error C3861: 'initGradientShader': identifier not found C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(40): error C3861: 'initTextureShader': identifier not found C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(42): error C3861: 'generatePlayPosMarkTexture': identifier not found C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(45): error C2872: 'WaveformRenderMark': ambiguous symbol C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\waveformmark.h(123): note: could be 'WaveformRenderMark' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform/renderers/qopengl/waveformrendermark.h(16): note: or 'qopengl::WaveformRenderMark' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(45): error C2027: use of undefined type 'WaveformRenderMark' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\waveformmark.h(123): note: see declaration of 'WaveformRenderMark' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(67): error C2065: 'm_gradientShaderProgram': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(71): error C2065: 'm_gradientShaderProgram': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(76): error C2065: 'm_gradientShaderProgram': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(80): error C2065: 'm_gradientShaderProgram': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(85): error C2872: 'WaveformRenderMark': ambiguous symbol C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\waveformmark.h(123): note: could be 'WaveformRenderMark' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform/renderers/qopengl/waveformrendermark.h(16): note: or 'qopengl::WaveformRenderMark' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(85): error C2027: use of undefined type 'WaveformRenderMark' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\waveformmark.h(123): note: see declaration of 'WaveformRenderMark' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(107): error C2065: 'm_textureShaderProgram': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(111): error C2065: 'm_textureShaderProgram': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(116): error C2065: 'm_textureShaderProgram': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(120): error C2065: 'm_textureShaderProgram': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(125): error C2872: 'WaveformRenderMark': ambiguous symbol C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\waveformmark.h(123): note: could be 'WaveformRenderMark' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform/renderers/qopengl/waveformrendermark.h(16): note: or 'qopengl::WaveformRenderMark' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(125): error C2027: use of undefined type 'WaveformRenderMark' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\waveformmark.h(123): note: see declaration of 'WaveformRenderMark' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(126): error C2065: 'm_waveformRenderer': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(126): error C2737: 'devicePixelRatio': const object must be initialized C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(141): error C2065: 'm_waveformRenderer': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(141): error C2065: 'm_waveformRenderer': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(141): error C2440: '': cannot convert from 'initializer list' to 'QRectF' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(141): note: No constructor could take the source type, or constructor overload resolution was ambiguous C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(143): error C2065: 'm_textureShaderProgram': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(145): error C2065: 'm_textureShaderProgram': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(146): error C2065: 'm_textureShaderProgram': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(147): error C2065: 'm_textureShaderProgram': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(148): error C2065: 'm_textureShaderProgram': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(150): error C2065: 'm_textureShaderProgram': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(152): error C2065: 'm_textureShaderProgram': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(153): error C2065: 'm_textureShaderProgram': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(155): error C2065: 'm_textureShaderProgram': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(156): error C2065: 'm_textureShaderProgram': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(159): error C2065: 'm_textureShaderProgram': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(166): error C2872: 'WaveformRenderMark': ambiguous symbol C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\waveformmark.h(123): note: could be 'WaveformRenderMark' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform/renderers/qopengl/waveformrendermark.h(16): note: or 'qopengl::WaveformRenderMark' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(166): error C2027: use of undefined type 'WaveformRenderMark' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\waveformmark.h(123): note: see declaration of 'WaveformRenderMark' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(182): error C2065: 'm_waveformRenderer': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(182): error C2065: 'm_waveformRenderer': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(182): error C2440: '': cannot convert from 'initializer list' to 'QRectF' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(182): note: No constructor could take the source type, or constructor overload resolution was ambiguous C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(183): error C2065: 'm_gradientShaderProgram': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(185): error C2065: 'm_gradientShaderProgram': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(186): error C2065: 'm_gradientShaderProgram': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(187): error C2065: 'm_gradientShaderProgram': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(188): error C2065: 'm_gradientShaderProgram': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(190): error C2065: 'm_gradientShaderProgram': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(191): error C2065: 'm_gradientShaderProgram': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(193): error C2065: 'm_gradientShaderProgram': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(194): error C2065: 'm_gradientShaderProgram': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(196): error C2065: 'm_gradientShaderProgram': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(197): error C2065: 'm_gradientShaderProgram': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(203): error C2872: 'WaveformRenderMark': ambiguous symbol C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\waveformmark.h(123): note: could be 'WaveformRenderMark' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform/renderers/qopengl/waveformrendermark.h(16): note: or 'qopengl::WaveformRenderMark' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(203): error C2027: use of undefined type 'WaveformRenderMark' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\waveformmark.h(123): note: see declaration of 'WaveformRenderMark' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(204): error C2065: 'm_waveformRenderer': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(204): error C2737: 'devicePixelRatio': const object must be initialized C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(207): error C3861: 'checkCuesUpdated': identifier not found C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(212): error C2065: 'm_marks': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(212): error C2530: 'pMark': references must be initialized C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(212): error C3531: 'pMark': a symbol whose type contains 'auto' must have an initializer C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(212): error C2143: syntax error: missing ';' before ':' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(212): error C2143: syntax error: missing ';' before ')' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(224): error C3861: 'generateMarkImage': identifier not found C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(227): error C2737: 'samplePosition': const object must be initialized C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(230): error C2065: 'm_waveformRenderer': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(231): error C2737: 'sampleEndPosition': const object must be initialized C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(235): error C2065: 'm_waveformRenderer': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(239): error C2737: 'markHalfWidth': const object must be initialized C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(246): error C2065: 'm_waveformRenderer': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(248): error C2660: 'drawTexture': function does not take 2 arguments C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(125): note: see declaration of 'drawTexture' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(256): error C2065: 'm_waveformRenderer': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(268): error C2065: 'm_waveformRenderer': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(267): error C2440: '': cannot convert from 'double' to 'QPointF' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(269): note: No constructor could take the source type, or constructor overload resolution was ambiguous C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(266): error C2440: '': cannot convert from 'QPointF' to 'QRectF' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(269): note: No constructor could take the source type, or constructor overload resolution was ambiguous C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(277): error C2679: binary '[': no operator found which takes a right-hand operand of type 'int' (or there is no acceptable conversion) C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\buildenv\mixxx-deps-2.4-x64-windows-f9cdab3\installed\x64-windows\include\qt5\QtCore/qmap.h(385): note: could be 'const T QMap::operator [](const Key &) const' with [ T=int, Key=WaveformMarkPointer ] C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\buildenv\mixxx-deps-2.4-x64-windows-f9cdab3\installed\x64-windows\include\qt5\QtCore/qmap.h(384): note: or 'T &QMap::operator [](const Key &)' with [ T=int, Key=WaveformMarkPointer ] C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(277): note: while trying to match the argument list '(QMap, int)' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(280): error C2737: 'markHalfHeight': const object must be initialized C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(286): error C2065: 'm_waveformRenderer': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(288): error C2660: 'drawTexture': function does not take 2 arguments C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(125): note: see declaration of 'drawTexture' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(296): error C2065: 'm_waveformRenderer': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(299): error C2065: 'm_waveformRenderer': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(304): error C2065: 'm_waveformRenderer': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(304): error C2440: '': cannot convert from 'double' to 'QPointF' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(305): note: No constructor could take the source type, or constructor overload resolution was ambiguous C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(303): error C2440: '': cannot convert from 'QPointF' to 'QRectF' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(305): note: No constructor could take the source type, or constructor overload resolution was ambiguous C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(313): error C2679: binary '[': no operator found which takes a right-hand operand of type 'int' (or there is no acceptable conversion) C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\buildenv\mixxx-deps-2.4-x64-windows-f9cdab3\installed\x64-windows\include\qt5\QtCore/qmap.h(385): note: could be 'const T QMap::operator [](const Key &) const' with [ T=int, Key=WaveformMarkPointer ] C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\buildenv\mixxx-deps-2.4-x64-windows-f9cdab3\installed\x64-windows\include\qt5\QtCore/qmap.h(384): note: or 'T &QMap::operator [](const Key &)' with [ T=int, Key=WaveformMarkPointer ] C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(313): note: while trying to match the argument list '(QMap, int)' C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(318): error C2065: 'm_waveformRenderer': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(321): error C2065: 'm_waveformRenderer': undeclared identifier C:\Users\Joerg.WORLDWARTWEB\source\repos\JoergAtGithub\mixxx\src\waveform\renderers\qopengl\waveformrendermark.cpp(321): fatal error C1003: error count exceeds 100; stopping compilation ```

@m0dB
Copy link
Contributor Author

m0dB commented Oct 22, 2022

Meh... I am using the same names as several existing waveform renderer classes, but in a different namespace (qopengl). Unfortunately namespace resolution is very compiler dependent. I don't think that without access to a windows machine I will be able to fix this. I will change using a namespace to using a prefix instead. Might be more clear anyway.

@@ -0,0 +1,824 @@
#include "widget/wspinny.h"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
#include "widget/wspinny.h"
#include "widget/qopengl/wspinny.h"

I guess this file is meant to be included here?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it doesn't matter, "widget/wspinny.h" will include "widget/qopengl/wspinny.h" when MIXXX_USE_QOPENGL is defined.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

its still weird for the implementation in one module to include the header from a completely separate module...

@ronso0
Copy link
Member

ronso0 commented Oct 22, 2022

Just a side note:
The <details> element allows to hide extra info like pages of compiler messages, and increases the lifespan of readers' mouse wheels ; )

Just <details>quite a few lines of code or whatever</details> works.
(more info https://gist.github.com/scmx/eca72d44afee0113ceb0349dd54a84a2)

@JoergAtGithub
Copy link
Member

I got it working on Windows. I had to add replace WaveformRenderMark with qopengl::WaveformRenderMark everywhere in
src/waveform/renderers/qopengl/waveformrendermark.cpp
and WaveformRenderMarkRange with qopengl::WaveformRenderMarkRange everywhere in
src/waveform/renderers/qopengl/waveformrendermarkrange.cpp

I could use this new Waveform-Type under Windows: Waveforms, Spinnies and VUMeter looked good, but the frame rate was rather low.

@m0dB
Copy link
Contributor Author

m0dB commented Oct 23, 2022

Ok, thanks. I will revert the last commit and add the namespace, I prefer that over the prefix.

Too bad that on windows it does not give the same good results as on macOS. Clearly Qt does things very differently under the hood.

@JoergAtGithub
Copy link
Member

I tested this again on Windows11, but this time with the new buildenv from #11074. This time the results were better:

  • I got the expected frame rate up to 60fps
  • But there were some frame drops

If I move the cross fader of my controller fast, the crossfader in the GUI jumps, if I select a high OpenGL frame rate. Same as on normal GLSL.

@JoergAtGithub
Copy link
Member

Something is gone wrong while rebasing (Ubuntu and Windows builds fail now):

/home/runner/work/mixxx/mixxx/src/widget/wvumetergl.cpp: In member function ‘virtual void WVuMeterGL::showEvent(QShowEvent*)’:
Error: /home/runner/work/mixxx/mixxx/src/widget/wvumetergl.cpp:162:5: error: ‘m_iRendersPending’ was not declared in this scope
  162 |     m_iRendersPending = 2;
      |     ^~~~~~~~~~~~~~~~~

@m0dB
Copy link
Contributor Author

m0dB commented Dec 4, 2022

I see, I only checked the macOS build with QOPENGL=on, where this code isn't compiled. I'll fix it.

@JoergAtGithub
Copy link
Member

To fix the pre-commit issues, download pre-commit.patch from the build artifacts, unzip it into your mixx directory, and call
git apply pre-commit patch
Or you set up automatical code checking locally on your system: https://github.com/mixxxdj/mixxx/wiki/Using-Git#set-up-automatic-code-checking

@fwcd
Copy link
Member

fwcd commented Feb 7, 2023

Any updates on this? This does improve waveform performance noticeably on M1 macs too.

@JoergAtGithub
Copy link
Member

I added the completion of this on the list of GSoC 2023 projects: https://github.com/mixxxdj/mixxx/wiki/GSOC-2023-Ideas/#unify-opengl-waveform-code-for-macos-to-use-qt-515-or-later
If Mixxx will be accepted as GSoC organisation this year again, and someone of you want to finish this, you might get a student salary for it. Or maybe you know a skilled student, who want to apply for this summer job.

@m0dB
Copy link
Contributor Author

m0dB commented Feb 9, 2023

In my opinion this should be merged into main (I will try to find a moment this weekend to rebase it and make sure everything is still okay). I don't see how we can release mixxx 2.4 for macOS with the QGLWidget implementation. But I have the impression that since most devs are using linux or windows, they are okay with sticking with QGLWidget and even the suggestion to conditionally compile one or the other was not well received...

@JoergAtGithub
Copy link
Member

Why not fix the CI issues and remove the "WIP" from the titel of this PR, to make clear, that it's ready for review now?
It's not to late for 2.4, especially as this fixes a serious problem for many users.

@m0dB
Copy link
Contributor Author

m0dB commented Feb 9, 2023

I must say that I got a bit demotivated because after investing a lot of time and energy, I got the impression that it was not going to be accepted into 2.4. But if you think it could be, I will pick it back up.

@daschuer
Copy link
Member

daschuer commented Feb 9, 2023

We are planning a short 2.4 beta phase and than starting a six month release cycle after the 2.4 release, so if we think this requires more testing it is not shifted by two years. I think it depends on how much testing will be done here. A least we should not delay 2.4 beta because of this.
My plan is do dedicate my time to prepare the 2.3.4 release and the 2.4-beta now.

@JoergAtGithub
Copy link
Member

I thought Mixxx 2.4 on Mac Intel is so slow, that it's unusable. In my opinion this would be an absolute showstopper for a 2.4 release. But maybe there are also other solution to fix this?

@daschuer
Copy link
Member

daschuer commented Feb 9, 2023

I thought Mixxx 2.4 on Mac Intel is so slow, that it's unusable.

We have no clear evidence for that. For my understanding it works OKish with QT 5.12 but we need to test.
What are your results comparing the Mixxx 2.3 and 2.4 branch. Is there e difference for you?

@Swiftb0y
Copy link
Member

Swiftb0y commented Feb 9, 2023

I just tested 2.4 on a MacBook and I don't think its very usable. The framerate for the GL waveforms is hovering around 45fps, 25fps for the GLSL waveforms. GUI input lags behind for a solid 2 seconds or so when the spinnies are on. That problem sometimes vanishes but then comes back and I don't know why.
This branch (no matter what waveform is selected?) is buttery smooth compared to 2.4 with almost no framedrops (and no input lags).

Copy link
Member

@Swiftb0y Swiftb0y left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A couple thoughts. Everything but a proper review. I think this could use a little more care to clean up the code until someone can actually take a proper look at this.

src/waveform/renderers/qopengl/waveformrenderbeat.cpp Outdated Show resolved Hide resolved
src/waveform/renderers/qopengl/waveformrendererrgb.cpp Outdated Show resolved Hide resolved
src/waveform/renderers/qopengl/waveformrendererrgb.cpp Outdated Show resolved Hide resolved
@JoergAtGithub
Copy link
Member

macOS 13.4 MacBookPro14,3 Intel

OpenGL status: 2.1 ATI-4.12.7 (AMD Radeon Pro 560 OpenGL Engine)

Builds with the regressions: 2.4-alpha-1508-gb763121761 (HEAD) Average fram rate: ~60, briefly went down to 47 but then also went back up to 60.

Is this a reproduceable regression, or just a one time hick-up?

@m0dB
Copy link
Contributor Author

m0dB commented May 27, 2023

@foss- sounds good. It is expected that there are occasional drops. This has always been the case, the problem is that the Qt event queue delivers the VSyncThread calls to WaveformWidgetFactory to render and swap the waveforms, so if anything holds up the queue (typically scrolling in the library) this causes a drop. But as long as it stabilises on 60 fps, all good!

Could you also try with the "(allshaders)" waveform types? These are the most optimised.

@m0dB
Copy link
Contributor Author

m0dB commented May 27, 2023

Cool, so you can confirm that the original experienced regression after rebase is gone?
Do you have an idea what causes the regression? Is the vcpkg environment involved?

Yes, I confirm I don't have any regression with a clean local build after rebase, and neither with the github build made at the time that I experienced the regression, so I am assuming I messed something up with my build or there was something temporarily wrong with my system. So, false alarm, and sorry for that.

@foss-
Copy link
Contributor

foss- commented May 27, 2023

Could you also try with the "(allshaders)" waveform types? These are the most optimised.

RGB (all-shaders) (GLSL) looking good. Drops happen when scrolling (expected and has always been the case with Mixxx on macOS. There seem to be a few issues with Qt and scrolling on macOS. This P1 Critical bug filed 2019 finally got resolved summer 2022: https://bugreports.qt.io/browse/QTBUG-73117

Very excited to see this PR land 🚀

@m0dB
Copy link
Contributor Author

m0dB commented May 27, 2023

IIRC (I think @ronso0 explained this to me) it's also the querying of the sqlite database that is done in the same thread and thus can interfere with the waveform redraws.

I have a branch where I draw the waveforms from the vsync thread directly, which would solve this problem. Once this PR has been merged to 2.4 I might create an additional PR that adds a vsync render mode "render in vsync thread".

@daschuer
Copy link
Member

The VU-Meter failure in Shade is caused by the 1 pixel height. If I use two pixel height, it works.
A hack that limits the minimum height to two pixels works as well, but than the background is black.
There is another issue with the VU-Meters, that they have a black border when Mixxx is scaled to 200 %
I will file separate issues for that so we can merge this.

@JoergAtGithub JoergAtGithub linked an issue May 29, 2023 that may be closed by this pull request
Copy link
Member

@daschuer daschuer left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OK, so we assume that the frame rate drop is natural is some conditions ad the original report about the regression after rebase was a false positive.

The current state of this PR is a rebase of the current 2.4. For now I ignore the issue that this may have produce not build-able commits. I have also not reviewed all the code again that can be required after such a rebase.
Please do not rebase a PR under review in future to avoide this situation.

Thank you for all the work and patients you have put into this branch. I think it is a mayor mile stone in the history of Mixxx.

@Swiftb0y
Copy link
Member

A huge personal thank you to @m0dB for spending this amount of time and patience on this PR. Thank you to the rest of the team that we managed to get a change this gigantic merged in a reasonable time. Good job everyone. 2.4 Full force 🎉

@Swiftb0y
Copy link
Member

@m0dB you mentioned that you had PR that would allow us to use the current skin system with Qt6, right? Can you open a PR against main for that? Would this allow us to migrate to Qt6 fully?

@uklotzde
Copy link
Contributor

Kudos to @m0dB for your efforts, your perseverance, and your patience to finish this task and PR!

@m0dB
Copy link
Contributor Author

m0dB commented May 29, 2023

@m0dB you mentioned that you had PR that would allow us to use the current skin system with Qt6, right? Can you open a PR against main for that?

Yes, but that is on top of this PR, so I can only create the Qt6 PR once this PR has been merged from 2.4 to main. But 2.4 to main merges are done regularly, right? Otherwise, I can create a PR for 2.4 in the meantime and rebase it later on.

Would this allow us to migrate to Qt6 fully?

It compiles (with some "deprecated" warnings, easy to fix) and runs smoothly, as far as I see, at least on macOS and only done some smoke testing.

The few issues I have seen with Qt6:

  • the splitter below the waveforms doesn't work. I have done some debugging and found that the size policy of the child widgets changes somewhere between when the skin is read in the legacy skin parser and when I try to move the splitter. If I force the size policy back to it's original value it works.
  • the Latenight knobs look slightly different (more pronounced outline), but nothing major.
  • I get a lot of the following warning: warning [Main] skipping QEventPoint(id=1 ts=0 pos=0,0 scn=599.994,259.461 gbl=599.994,259.461 Released ellipse=(1x1 ∡ 0) vel=0,0 press=-599.994,-259.461 last=-599.994,-259.461 Δ 599.994,259.461) : no target window

Also I would be good to have a proper Qt6 buildenv. I am now using the existing buildenv and I pass the path to the official Qt6 binary install with CMAKE_PREFIX_PATH, but I suppose that the way to go is to have Qt6 from vcpkg. I started looking into that but vcpkg is too much of a learning curve right now, so it would be great if someone with vcpkg experience (@daschuer I guess) could take care of that. Or maybe this has been done already?

We can decide to address all this before or after merging the PR. The PR will not change anything at all if you compile with Qt5 or with Qt6 with QML.

@JoergAtGithub
Copy link
Member

grafik

@m0dB
Copy link
Contributor Author

m0dB commented May 29, 2023

#11608

@Be-ing
Copy link
Contributor

Be-ing commented Jun 22, 2023

@m0dB I spent many months juggling weird hacks with build environments and spinning in circles looking for optimizations to keep Mixxx barely functional on macOS. Thank you for finally doing the work to fix the root problem.

@Be-ing
Copy link
Contributor

Be-ing commented Jun 22, 2023

#10989 (comment)

Personally I would do a huge cleanup by:
Removing all legacy waveform widgets. There are some that I haven't ported to pure qopengl, but I can do that quickly (e.g. the simple waveform and glsl ones that read the waveform data from a texture).
Removing all QGL... code
Remove the non-GL implementations of wspinny and wvumeter.

I recommend to work on further refactoring on the main branch and leave the 2.4 beta branch with the QOPENGL=OFF CMake option as an emergency fallback.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Waveforms dissapear after window resized CSS not considered when there is a connection