• Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Register
    • Login

    Reintegrate projectM Visualizer

    Scheduled Pinned Locked Moved
    Development
    6
    91
    9.4k
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • jonasJ
      jonas @Gustavo L Conte
      last edited by

      If someone is familiar with Qt and OpenGL and want to resolve this, then it might be a chance it can be added.

      https://github.com/strawberrymusicplayer/strawberry/pull/1467

      jonasJ 1 Reply Last reply Reply Quote 0
      • jonasJ
        jonas @jonas
        last edited by

        (gdb) bt
        #0  __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at pthread_kill.c:44
        #1  0x00007ffff4094a63 in __pthread_kill_internal (signo=6, threadid=<optimized out>) at pthread_kill.c:78
        #2  0x00007ffff4041176 in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26
        #3  0x00007ffff4028917 in __GI_abort () at abort.c:79
        #4  0x00007ffff44adc4d in __gnu_cxx::__verbose_terminate_handler() () at ../../../../libstdc++-v3/libsupc++/vterminate.cc:95
        #5  0x00007ffff44bf21c in __cxxabiv1::__terminate(void (*)()) (handler=<optimized out>) at ../../../../libstdc++-v3/libsupc++/eh_terminate.cc:48
        #6  0x00007ffff44ad7f5 in std::terminate() () at ../../../../libstdc++-v3/libsupc++/eh_terminate.cc:58
        #7  0x00007ffff44bf4a8 in __cxxabiv1::__cxa_throw(void*, std::type_info*, void (*)(void*)) (obj=<optimized out>, tinfo=0x7ffff4648d78 <typeinfo for std::logic_error>, dest=0x7ffff44d3730 <std::logic_error::~logic_error()>)
            at ../../../../libstdc++-v3/libsupc++/eh_throw.cc:98
        #8  0x00007ffff44b035c in std::__throw_logic_error(char const*) (__s=__s@entry=0x7ffff47c1280 "basic_string: construction from null is not valid") at ../../../../../libstdc++-v3/src/c++11/functexcept.cc:70
        #9  0x00007ffff472bfe2 in std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&) [clone .part.0] [clone .lto_priv.0] (__a=<optimized out>, __s=<optimized out>, this=<optimized out>)
            at /usr/include/c++/13/bits/basic_string.h:646
        #10 0x00007ffff479848d in std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&) (__a=<optimized out>, __s=<optimized out>, this=0x7fffffffa4d0) at Renderer/StaticGlShaders.cpp:845
        #11 StaticGlShaders::QueryGlslVersion() (this=this@entry=0x510bc20) at Renderer/StaticGlShaders.cpp:789
        #12 0x00007ffff47984c9 in StaticGlShaders::StaticGlShaders(bool) (this=0x510bc20, use_gles=<optimized out>, this=<optimized out>, use_gles=<optimized out>) at Renderer/StaticGlShaders.cpp:756
        #13 0x00007ffff4781693 in StaticGlShaders::Get() () at Renderer/StaticGlShaders.h:18
        #14 0x00007ffff4781796 in ShaderEngine::ShaderEngine() (this=0x51351a0, this=<optimized out>) at Renderer/ShaderEngine.cpp:25
        #15 0x00007ffff4781d51 in Renderer::Renderer(int, int, int, int, BeatDetect*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
            (this=this@entry=0x5134fa0, width=width@entry=512, height=height@entry=512, gx=gx@entry=32, gy=gy@entry=24, _beatDetect=0x50fab70, _presetURL="/usr/share/projectM/presets", _titlefontURL="", _menufontURL="", datadir="", this=<optimized out>, width=<optimized out>, height=<optimized out>, gx=<optimized out>, gy=<optimized out>, _beatDetect=<optimized out>, _presetURL=Python Exception <class 'gdb.error'>: value has been optimized out
        , _titlefontURL=Python Exception <class 'gdb.error'>: value has been optimized out
        , _menufontURL=Python Exception <class 'gdb.error'>: value has been optimized out
        , datadir=<optimized out>) at Renderer/Renderer.cpp:160
        #16 0x00007ffff473d36d in projectM::projectM_init(int, int, int, int, int, int) (this=this@entry=0x50fa710, gx=32, gy=24, fps=35, texsize=<optimized out>, width=512, height=512) at /usr/src/debug/projectm-3.1.12/src/libprojectM/projectM.cpp:568
        #17 0x00007ffff473f32c in projectM::readSettings(projectM::Settings const&) (this=this@entry=0x50fa710, settings=...) at /usr/src/debug/projectm-3.1.12/src/libprojectM/projectM.cpp:278
        #18 0x00007ffff473f4d1 in projectM::projectM(projectM::Settings, int) (this=0x50fa710, settings=..., flags=0, this=<optimized out>, settings=..., flags=<optimized out>) at /usr/src/debug/projectm-3.1.12/src/libprojectM/projectM.cpp:130
        #19 0x0000000000dc7f65 in std::make_unique<projectM, projectM::Settings&>(projectM::Settings&) () at /usr/include/c++/13/bits/unique_ptr.h:1070
        #20 0x0000000000dc60ae in ProjectMVisualisation::InitProjectM() (this=0x506a8a0) at /home/jonas/Projects/strawberry/strawberry/src/visualisations/projectmvisualisation.cpp:115
        #21 0x0000000000dc6618 in ProjectMVisualisation::drawBackground(QPainter*, QRectF const&) (this=0x506a8a0, p=0x7fffffffb190, rect=...) at /home/jonas/Projects/strawberry/strawberry/src/visualisations/projectmvisualisation.cpp:140
        #22 0x00007ffff6b782a7 in QGraphicsView::drawBackground(QPainter*, QRectF const&) (this=<optimized out>, painter=0x7fffffffb190, rect=...) at /home/jonas/Projects/Qt/qtbase/qtbase/src/widgets/graphicsview/qgraphicsview.cpp:3716
        #23 0x00007ffff6b7bafa in operator()() const (__closure=__closure@entry=0x7fffffffb1c0) at /home/jonas/Projects/Qt/qtbase/qtbase/src/widgets/graphicsview/qgraphicsview.cpp:3481
        #24 0x00007ffff6b7f4d1 in QGraphicsView::paintEvent(QPaintEvent*) (this=0x4fc6b50, event=<optimized out>) at /home/jonas/Projects/Qt/qtbase/qtbase/src/widgets/graphicsview/qgraphicsview.cpp:3570
        #25 0x00007ffff67f5db2 in QWidget::event(QEvent*) (this=this@entry=0x4fc6b50, event=event@entry=0x7fffffffb680) at /home/jonas/Projects/Qt/qtbase/qtbase/src/widgets/kernel/qwidget.cpp:9112
        #26 0x00007ffff688aa96 in QFrame::event(QEvent*) (this=this@entry=0x4fc6b50, e=e@entry=0x7fffffffb680) at /home/jonas/Projects/Qt/qtbase/qtbase/src/widgets/widgets/qframe.cpp:521
        #27 0x00007ffff6888310 in QAbstractScrollArea::viewportEvent(QEvent*) (this=this@entry=0x4fc6b50, e=e@entry=0x7fffffffb680) at /home/jonas/Projects/Qt/qtbase/qtbase/src/widgets/widgets/qabstractscrollarea.cpp:1064
        #28 0x00007ffff6b7e395 in QGraphicsView::viewportEvent(QEvent*) (this=0x4fc6b50, event=0x7fffffffb680) at /home/jonas/Projects/Qt/qtbase/qtbase/src/widgets/graphicsview/qgraphicsview.cpp:2936
        #29 0x00007ffff6888a87 in QAbstractScrollAreaPrivate::viewportEvent(QEvent*) (event=<optimized out>, this=<optimized out>) at /home/jonas/Projects/Qt/qtbase/qtbase/src/widgets/widgets/qabstractscrollarea_p.h:74
        #30 QAbstractScrollAreaFilter::eventFilter(QObject*, QEvent*) (this=<optimized out>, o=<optimized out>, e=<optimized out>) at /home/jonas/Projects/Qt/qtbase/qtbase/src/widgets/widgets/qabstractscrollarea_p.h:85
        #31 0x00007ffff5363722 in QCoreApplicationPrivate::sendThroughObjectEventFilters(QObject*, QEvent*) (receiver=receiver@entry=0x4eaaf10, event=event@entry=0x7fffffffb680) at /home/jonas/Projects/Qt/qtbase/qtbase/src/corelib/kernel/qcoreapplication.cpp:1293
        #32 0x00007ffff679a1b9 in QApplicationPrivate::notify_helper(QObject*, QEvent*) (this=this@entry=0x167e3f0, receiver=receiver@entry=0x4eaaf10, e=e@entry=0x7fffffffb680) at /home/jonas/Projects/Qt/qtbase/qtbase/src/widgets/kernel/qapplication.cpp:3288
        #33 0x00007ffff679ffdb in QApplication::notify(QObject*, QEvent*) (this=0x7fffffffcba0, receiver=0x4eaaf10, e=0x7fffffffb680) at /home/jonas/Projects/Qt/qtbase/qtbase/src/widgets/kernel/qapplication.cpp:3241
        #34 0x00007ffff5363b5b in QCoreApplication::notifyInternal2(QObject*, QEvent*) (receiver=receiver@entry=0x4eaaf10, event=event@entry=0x7fffffffb680) at /home/jonas/Projects/Qt/qtbase/qtbase/src/corelib/kernel/qcoreapplication.cpp:1154
        #35 0x00007ffff5363c5d in QCoreApplication::sendSpontaneousEvent(QObject*, QEvent*) (receiver=receiver@entry=0x4eaaf10, event=event@entry=0x7fffffffb680) at /home/jonas/Projects/Qt/qtbase/qtbase/src/corelib/kernel/qcoreapplication.cpp:1612
        #36 0x00007ffff67ede41 in QWidgetPrivate::sendPaintEvent(QRegion const&) (this=this@entry=0x50c32d0, toBePainted=...) at /home/jonas/Projects/Qt/qtbase/qtbase/src/widgets/kernel/qwidget.cpp:5655
        #37 0x00007ffff67eec46 in QWidgetPrivate::drawWidget(QPaintDevice*, QRegion const&, QPoint const&, QFlags<QWidgetPrivate::DrawWidgetFlag>, QPainter*, QWidgetRepaintManager*)
            (this=this@entry=0x50c32d0, pdev=pdev@entry=0x50f8530, rgn=..., offset=..., flags=flags@entry=..., sharedPainter=sharedPainter@entry=0x0, repaintManager=<optimized out>) at /home/jonas/Projects/Qt/qtbase/qtbase/src/widgets/kernel/qwidget.cpp:5605
        #38 0x00007ffff67ef5d2 in QWidgetPrivate::paintSiblingsRecursive(QPaintDevice*, QList<QObject*> const&, int, QRegion const&, QPoint const&, QFlags<QWidgetPrivate::DrawWidgetFlag>, QPainter*, QWidgetRepaintManager*)
            (this=this@entry=0x50b6a80, pdev=pdev@entry=0x50f8530, siblings=..., index=<optimized out>, rgn=..., offset=..., flags=..., sharedPainter=0x0, repaintManager=0x50e7990) at /home/jonas/Projects/Qt/qtbase/qtbase/src/widgets/kernel/qwidget.cpp:5784
        #39 0x00007ffff67eef2f in QWidgetPrivate::drawWidget(QPaintDevice*, QRegion const&, QPoint const&, QFlags<QWidgetPrivate::DrawWidgetFlag>, QPainter*, QWidgetRepaintManager*) (this=this@entry=0x50b6a80, pdev=<optimized out>, rgn=..., offset=..., flags=..., 
            flags@entry=..., sharedPainter=sharedPainter@entry=0x0, repaintManager=<optimized out>) at /home/jonas/Projects/Qt/qtbase/qtbase/src/widgets/kernel/qwidget.cpp:5646
        #40 0x00007ffff6804d9a in QWidgetRepaintManager::paintAndFlush() (this=this@entry=0x50e7990) at /home/jonas/Projects/Qt/qtbase/qtbase/src/widgets/kernel/qwidgetrepaintmanager.cpp:907
        #41 0x00007ffff6805044 in QWidgetRepaintManager::sync(QWidget*, QRegion const&) (this=0x50e7990, exposedWidget=0x4fc6b50, exposedRegion=...) at /home/jonas/Projects/Qt/qtbase/qtbase/src/widgets/kernel/qwidgetrepaintmanager.cpp:632
        #42 0x00007ffff67ef261 in QWidgetPrivate::syncBackingStore(QRegion const&) (this=this@entry=0x50b6a80, region=...) at /home/jonas/Projects/Qt/qtbase/qtbase/src/widgets/kernel/qwidget.cpp:1774
        #43 0x00007ffff680d103 in QWidgetWindow::handleExposeEvent(QExposeEvent*) (this=this@entry=0x50e7070, event=event@entry=0x7fffffffc110) at /home/jonas/Projects/Qt/qtbase/qtbase/src/widgets/kernel/qwidgetwindow.cpp:1029
        #44 0x00007ffff680d83f in QWidgetWindow::event(QEvent*) (this=0x50e7070, event=0x7fffffffc110) at /home/jonas/Projects/Qt/qtbase/qtbase/src/widgets/kernel/qwidgetwindow.cpp:342
        #45 0x00007ffff679a1c9 in QApplicationPrivate::notify_helper(QObject*, QEvent*) (this=this@entry=0x167e3f0, receiver=receiver@entry=0x50e7070, e=e@entry=0x7fffffffc110) at /home/jonas/Projects/Qt/qtbase/qtbase/src/widgets/kernel/qapplication.cpp:3294
        #46 0x00007ffff67a192d in QApplication::notify(QObject*, QEvent*) (this=0x7fffffffcba0, receiver=0x50e7070, e=0x7fffffffc110) at /home/jonas/Projects/Qt/qtbase/qtbase/src/widgets/kernel/qapplication.cpp:3245
        #47 0x00007ffff5363b5b in QCoreApplication::notifyInternal2(QObject*, QEvent*) (receiver=receiver@entry=0x50e7070, event=event@entry=0x7fffffffc110) at /home/jonas/Projects/Qt/qtbase/qtbase/src/corelib/kernel/qcoreapplication.cpp:1154
        #48 0x00007ffff5363c5d in QCoreApplication::sendSpontaneousEvent(QObject*, QEvent*) (receiver=receiver@entry=0x50e7070, event=event@entry=0x7fffffffc110) at /home/jonas/Projects/Qt/qtbase/qtbase/src/corelib/kernel/qcoreapplication.cpp:1612
        #49 0x00007ffff5dc7ddc in QGuiApplicationPrivate::processExposeEvent(QWindowSystemInterfacePrivate::ExposeEvent*) (e=0x510f1b0) at /home/jonas/Projects/Qt/qtbase/qtbase/src/gui/kernel/qguiapplication.cpp:3394
        #50 0x00007ffff5dc8b58 in QGuiApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent*) (e=e@entry=0x510f1b0) at /home/jonas/Projects/Qt/qtbase/qtbase/src/gui/kernel/qguiapplication.cpp:2190
        #51 0x00007ffff5e2989a in QWindowSystemInterface::sendWindowSystemEvents(QFlags<QEventLoop::ProcessEventsFlag>) (flags=flags@entry=...) at /home/jonas/Projects/Qt/qtbase/qtbase/src/gui/kernel/qwindowsysteminterface.cpp:1114
        #52 0x00007fffef9866c4 in xcbSourceDispatch(GSource*, GSourceFunc, gpointer) (source=<optimized out>) at /home/jonas/Projects/Qt/qtbase/qtbase/src/plugins/platforms/xcb/qxcbeventdispatcher.cpp:57
        #53 0x00007ffff491e740 in g_main_dispatch (context=0x16cde10) at ../glib/gmain.c:3344
        #54 g_main_context_dispatch_unlocked (context=context@entry=0x16cde10) at ../glib/gmain.c:4152
        #55 0x00007ffff4920388 in g_main_context_iterate_unlocked (context=context@entry=0x16cde10, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/gmain.c:4217
        #56 0x00007ffff4920a3c in g_main_context_iteration (context=0x16cde10, may_block=1) at ../glib/gmain.c:4282
        #57 0x00007ffff55e8465 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=0x1728d60, flags=...) at /home/jonas/Projects/Qt/qtbase/qtbase/src/corelib/kernel/qeventdispatcher_glib.cpp:395
        #58 0x00007fffef986a94 in QXcbGlibEventDispatcher::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=<optimized out>, flags=...) at /home/jonas/Projects/Qt/qtbase/qtbase/src/plugins/platforms/xcb/qxcbeventdispatcher.cpp:96
        --Type <RET> for more, q to quit, c to continue without paging--
        #59 0x00007ffff536e044 in QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=this@entry=0x7fffffffc430, flags=flags@entry=...) at /home/jonas/Projects/Qt/qtbase/qtbase/src/corelib/kernel/qeventloop.cpp:100
        #60 0x00007ffff536e88b in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (this=this@entry=0x7fffffffc430, flags=flags@entry=...) at /home/jonas/Projects/Qt/qtbase/qtbase/src/corelib/global/qflags.h:34
        #61 0x00007ffff53673e5 in QCoreApplication::exec() () at /home/jonas/Projects/Qt/qtbase/qtbase/src/corelib/global/qflags.h:74
        #62 0x00000000004b38e6 in main(int, char**) (argc=1, argv=0x7fffffffd668) at /home/jonas/Projects/strawberry/strawberry/src/main.cpp:322
        
        jonasJ 1 Reply Last reply Reply Quote 0
        • jonasJ
          jonas @jonas
          last edited by

          I managed to fix the crash by moving the Init function to the constructor. But the animations still doesn't look right.

          Gustavo L ConteG 1 Reply Last reply Reply Quote 0
          • Gustavo L ConteG
            Gustavo L Conte @jonas
            last edited by Gustavo L Conte

            @jonas way to go!!!!! That was fast. I got sick in bed these days just saw that right now.

            Have you tried forcing 44100 Hz sample rate?

            Here my projectMSDL only runs like this:

            Recording audio from device "Default capturing device" (ID -1).
            Opened audio recording device "System default capturing device" (ID -1) with 2 channels at 44100 Hz.

            jonasJ 1 Reply Last reply Reply Quote 0
            • jonasJ
              jonas @Gustavo L Conte
              last edited by

              @Gustavo-L-Conte
              It wasn't as fast as I thought, I thought it would be easier to just port the code from Clementine, but turns out there are two issues, QGLWidget being deprecated, and projectm API completely changed to a plain C API in version 4.
              All projectm visualizations works fine when I use Qt 5 with QGLWidget. But once I switch to QOpenGLWidget, only some visualizations work correctly, same issue with both Qt 5 and 6.

              And for ProjectM, everything works fine with version 3, I've added support for version 4 to by using ifdef's in the code, but nothing works yet, I'm missing some things, like what replaces projectM_resetGL in ProjectMVisualisation::SceneRectChanged, I don't see anything.

              The songs I'm testing with are already 44100Hz/16bit. Also the buffer is converted to 16 bit anyway in GstEnginePipeline::BufferProbeCallback, so I don't think that's an issue.

              Anyway, it took a lot longer to do this than anticipated, so if you or someone else wants to look into it, it would be appreciated. The main issue now is getting it to work with, QOpenGLWidget, if that's fixed then we can merge the code without the projectm 4 support.

              jonasJ 1 Reply Last reply Reply Quote 0
              • jonasJ
                jonas @jonas
                last edited by

                Might be worth to mention, no Linux distros seem to have projectm version 4 yet, so it's not a major issue if we continue to use version 3 for a while longer.

                Gustavo L ConteG 1 Reply Last reply Reply Quote 0
                • Gustavo L ConteG
                  Gustavo L Conte @jonas
                  last edited by

                  @jonas I started to fiddle with this last week, got into some issues.... first of all It looks like I need Qt 5.6 to compile it, have to get it so I can test the Qt 5 part, as Ubuntu still has 5.3 even on 24.04 LTS

                  Using libprojectM 4 and Qt6, it segfaults exactly when it is supposed to start rendering to the opengl context. It looks like if it initializes it, but when AddBufferConsumer gets triggered, when data is supposed to arrive and draw to the screen, it segfaults. I still have no clue but I'm trying to understand; I saw something about this:

                  QOpenGLWidget::makeCurrent(): This function makes the context associated with a QOpenGLWidget the current context for rendering. This is analogous to "setting" the context.
                  

                  and also doneCurrent(), I believe this is missing but i'm not sure how to implement due to the inheritance of the visualizercontainer class

                  jonasJ 1 Reply Last reply Reply Quote 0
                  • jonasJ
                    jonas @Gustavo L Conte
                    last edited by

                    @Gustavo-L-Conte

                    Qt 5.6 is ancient, do you mean Qt 6.5?

                    I tested with Qt 5.15.14 and the latest Qt 6 (dev) code.

                    Turns out that the issue I'm seeing with QOpenGLWidget is known to projectm:

                    https://github.com/orgs/projectM-visualizer/discussions/820#discussioncomment-9864556

                    Gustavo L ConteG 2 Replies Last reply Reply Quote 1
                    • Gustavo L ConteG
                      Gustavo L Conte @jonas
                      last edited by Gustavo L Conte

                      @jonas its strange indeed, I believe to already have compiled strawberry against qt 5 before.... but maybe not. Inspecting, I see I kinda have qt 5.15 here 😛

                      ~/strawberry$ qmake -v
                      QMake version 3.1
                      Using Qt version 5.15.13 in /usr/lib/x86_64-linux-gnu
                      
                      qtbase5-dev/noble,now 5.15.13+dfsg-1ubuntu1 amd64 [installed]
                        Qt 5 base development files
                      

                      So indeed, I'm crazy, I was sick as hell when I tought to have Qt 5.3, I saw the wrong version and that sticked to my head, I double checked and of course, its not Qt 5.1 or 5.3 its 5. 15 !!!! Just shoot me.

                      The error I receive with -DBUILD_WITH_QT6=off is this:

                      strawberry/src/globalshortcuts/globalshortcut-x11.cpp:56:7: error: ‘QNativeInterface’ has not been declared
                         56 |   if (QNativeInterface::QX11Application *x11_app = qApp->nativeInterface<QNativeInterface::QX11Application>()) {
                            |       ^~~~~~~~~~~~~~~~
                      

                      QNativeInterface, Which first appeared in Qt 5.6, thats the huge mess I made, sorry.
                      The error has nothing to do with Qt versions anyway. Maybe some typo in ifdefs? or missing headers? This is from a fresh master clone.

                      About the issue in QOpenGLWidget,
                      since we are spawning a new window, we could use SDL2 instead just for that.. could we?

                      Strange that for you and other ppl the rendering becomes garbage, for me it plain segfaults as soon as it tries to render ( libprojectM 4, Qt 6 )

                      I have onboard INTEL graphics

                      Gustavo L ConteG jonasJ 2 Replies Last reply Reply Quote 0
                      • Gustavo L ConteG
                        Gustavo L Conte @Gustavo L Conte
                        last edited by

                        This post is deleted!
                        1 Reply Last reply Reply Quote 0
                        • Gustavo L ConteG
                          Gustavo L Conte @jonas
                          last edited by

                          @jonas look at this, this problem is not new at all!!!

                          https://stackoverflow.com/questions/31658176/using-qopenglwidget-with-qgraphicsview-viewport-not-updating

                          https://stackoverflow.com/a/1745611/1329652

                          jonasJ 1 Reply Last reply Reply Quote 0
                          • jonasJ
                            jonas @Gustavo L Conte
                            last edited by

                            I've tested without QGraphicsScene and I'm having the same issue.
                            Making ProjectMVisualization inherit public QOpenGLWidget, protected QOpenGLFunctions, public GstBufferConsumer

                            Then i override paintGL like this:

                            void ProjectMVisualization::paintGL() {
                            
                              QPainter p(this);
                            
                              p.beginNativePainting();
                            
                            #ifdef HAVE_PROJECTM4
                              if (projectm_instance_) {
                                projectm_set_window_size(projectm_instance_, width() * pixel_ratio_, height() * pixel_ratio_);
                                projectm_opengl_render_frame(projectm_instance_);
                              }
                            #else
                              projectm_->projectM_resetGL(width() * pixel_ratio_, height() * pixel_ratio_);
                              projectm_->renderFrame();
                            #endif
                            
                              p.endNativePainting();
                            
                              update();
                            
                            }
                            
                            jonasJ Gustavo L ConteG 2 Replies Last reply Reply Quote 0
                            • jonasJ
                              jonas @jonas
                              last edited by jonas

                              Here is how it some look, just so we are talking about the same thing:

                              ba6c1e03-ab3d-41b9-aaa8-931bde328641-image.png

                              This is with ProjectM3, with version 4 I still have no luck.

                              1 Reply Last reply Reply Quote 0
                              • jonasJ
                                jonas @Gustavo L Conte
                                last edited by jonas

                                @Gustavo-L-Conte said in Reintegrate projectM Visualizer:

                                QX11Application

                                Did you clean the build directory, or at least delete CMakeCache.txt before you built with Qt 5, QX11Application is part of Qt 6.2 and newer, it shouldn't be included anywhere with Qt 5.
                                Variables in CMake are cached, so it does not help to re-run cmake without deleting the cache first.
                                Also, you should use: -DBUILD_WITH_QT5=ON to disable autodetecting Qt version, setting BUILD_WITH_QT6 to OFF won't do that.

                                Gustavo L ConteG 1 Reply Last reply Reply Quote 0
                                • Gustavo L ConteG
                                  Gustavo L Conte @jonas
                                  last edited by Gustavo L Conte

                                  @jonas yep I tried the same trhink you did, the override in paintGL, but with projectM4 and Qt6, for me only blank screen 😞

                                  and yes, I realized about the flags too. From certain point I was always doing a make clean, and I was able to successfully build with Qt5,
                                  with -DHAVE_X11_GLOBALSHORTCUTS=off

                                  (i think it was that flag) because it issued that error I pointed above; but thats not necessary now I see, if I remove the build dir. 😛 feeling pretty dumb.

                                  anyway, both ways for me, projectM4 or below, gives me only blank screen. I'm rebuilding right now with all combinations to test everything again 😛

                                  1 Reply Last reply Reply Quote 0
                                  • Gustavo L ConteG
                                    Gustavo L Conte @jonas
                                    last edited by Gustavo L Conte

                                    @jonas thanks!!!!! now visualization at least shows for me with Qt5 and projectM 3, as expected!

                                    Gonna try things I did before but now properly cleaning the builddir LoL

                                    Screenshot from 2024-06-29 11-09-50.png

                                    Screenshot from 2024-06-29 11-13-33.png

                                    1 Reply Last reply Reply Quote 0
                                    • Gustavo L ConteG
                                      Gustavo L Conte
                                      last edited by Gustavo L Conte

                                      about the v4, I think its some config missing. I'm going to double check after taking a break, all of these: (got from frontend-SDL2)

                                      projectm_set_preset_duration(projectMWrapper.ProjectM(), _displayDuration);
                                                  projectm_set_preset_locked(projectMWrapper.ProjectM(), !projectm_get_preset_locked(projectMWrapper.ProjectM()));
                                                      projectm_set_beat_sensitivity(_projectMWrapper.ProjectM(), beatSensitivity);
                                              projectm_set_window_size(_projectMHandle, renderWidth, renderHeight);
                                                  projectm_set_aspect_correction(_projectMHandle, aspectCorrectionEnabled);
                                              projectm_set_window_size(_projectM, canvasWidth, canvasHeight);
                                              projectm_set_fps(_projectM, fps);
                                              projectm_set_mesh_size(_projectM, _projectMConfigView->getInt("meshX", 48), _projectMConfigView->getInt("meshY", 32));
                                              projectm_set_aspect_correction(_projectM, _projectMConfigView->getBool("aspectCorrectionEnabled", true));
                                              projectm_set_preset_locked(_projectM, _projectMConfigView->getBool("presetLocked", false));
                                              projectm_set_preset_duration(_projectM, _projectMConfigView->getDouble("displayDuration", 30.0));
                                              projectm_set_soft_cut_duration(_projectM, _projectMConfigView->getDouble("transitionDuration", 3.0));
                                              projectm_set_hard_cut_enabled(_projectM, _projectMConfigView->getBool("hardCutsEnabled", false));
                                              projectm_set_hard_cut_duration(_projectM, _projectMConfigView->getDouble("hardCutDuration", 20.0));
                                              projectm_set_hard_cut_sensitivity(_projectM, static_cast<float>(_projectMConfigView->getDouble("hardCutSensitivity", 1.0)));
                                              projectm_set_beat_sensitivity(_projectM, static_cast<float>(_projectMConfigView->getDouble("beatSensitivity", 1.0)));
                                                  projectm_set_texture_search_paths(_projectM, texturePathList.data(), texturePaths.size());
                                          projectm_set_fps(_projectM, static_cast<uint32_t>(std::round(fps)));
                                              projectm_set_mesh_size(_projectM, _projectMConfigView->getInt("meshX", 220), _projectMConfigView->getInt("meshY", 125));
                                          projectm_set_beat_sensitivity(_projectM, projectm_get_beat_sensitivity(_projectM) + value);
                                              projectm_set_preset_locked(_projectM, _projectMConfigView->getBool("presetLocked", false));
                                              projectm_set_aspect_correction(_projectM, _projectMConfigView->getBool("aspectCorrectionEnabled", true));
                                              projectm_set_preset_duration(_projectM, _projectMConfigView->getDouble("displayDuration", 30.0));
                                              projectm_set_soft_cut_duration(_projectM, _projectMConfigView->getDouble("transitionDuration", 3.0));
                                              projectm_set_aspect_correction(_projectM, _projectMConfigView->getBool("hardCutsEnabled", false));
                                              projectm_set_hard_cut_duration(_projectM, _projectMConfigView->getDouble("hardCutDuration", 20.0));
                                              projectm_set_hard_cut_sensitivity(_projectM, static_cast<float>(_projectMConfigView->getDouble("hardCutSensitivity", 1.0)));
                                              projectm_set_mesh_size(_projectM, _projectMConfigView->getUInt64("meshX", 48), _projectMConfigView->getUInt64("meshY", 32));
                                      
                                      jonasJ 1 Reply Last reply Reply Quote 0
                                      • jonasJ
                                        jonas @Gustavo L Conte
                                        last edited by

                                        @Gustavo-L-Conte

                                        If I add a call to projectm_playlist_play_next or projectm_playlist_set_position, it crashes on projectm_opengl_render_frame.

                                        jonasJ 1 Reply Last reply Reply Quote 1
                                        • jonasJ
                                          jonas @jonas
                                          last edited by

                                          Which makes me think it wasn't trying to render any visualization, because it wasn't set before.

                                          Gustavo L ConteG 1 Reply Last reply Reply Quote 1
                                          • Gustavo L ConteG
                                            Gustavo L Conte @jonas
                                            last edited by

                                            @jonas exactly!!! makes total sense!

                                            Im testing now Qt6 with lib v3, all presets are pretty good, did not see any bug at all!!!!!

                                            Screenshot from 2024-06-29 11-59-19.png

                                            PresetFactory] path is r/share//projectM/presets/Waveform/Wire Tangle/Fireball.milk
                                            [PresetFactory] url is /usr/share//projectM/presets/Waveform/Wire Tangle/Fireball.milk
                                            [PresetFactory] path is r/share//projectM/presets/Dancer/Glowsticks/LuxXx - The Way God Is Rearranged ix.milk
                                            [PresetFactory] url is /usr/share//projectM/presets/Dancer/Glowsticks/LuxXx - The Way God Is Rearranged ix.milk
                                            [PresetFactory] path is r/share//projectM/presets/Waveform/Spectrum/suksma - ed geining hateops - flx not caring is my favorite downer.milk
                                            [PresetFactory] url is /usr/share//projectM/presets/Waveform/Spectrum/suksma - ed geining hateops - flx not caring is my favorite downer.milk
                                            [PresetFactory] path is r/share//projectM/presets/Waveform/Wire Flat Double/Geiss - Motion Blur 2 (Reverse Jelly V3).milk
                                            [PresetFactory] url is /usr/share//projectM/presets/Waveform/Wire Flat Double/Geiss - Motion Blur 2 (Reverse Jelly V3).milk
                                            [PresetFactory] path is r/share//projectM/presets/Waveform/Wire Tangle/Geiss - Cauldron - painterly 3.milk
                                            [PresetFactory] url is /usr/share//projectM/presets/Waveform/Wire Tangle/Geiss - Cauldron - painterly 3.milk
                                            [PresetFactory] path is r/share//projectM/presets/Dancer/Glowsticks Mirror/261.milk
                                            [PresetFactory] url is /usr/share//projectM/presets/Dancer/Glowsticks Mirror/261.milk
                                            [PresetFactory] path is r/share//projectM/presets/Geometric/Cathedral/xtramartin (95).milk
                                            [PresetFactory] url is /usr/share//projectM/presets/Geometric/Cathedral/xtramartin (95).milk
                                            [PresetFactory] path is r/share//projectM/presets/Waveform/Wire Tangle/suksma - i'm the unestimated (ngas) mash geek - eid (-sdi) nz+.milk
                                            [PresetFactory] url is /usr/share//projectM/presets/Waveform/Wire Tangle/suksma - i'm the unestimated (ngas) mash geek - eid (-sdi) nz+.milk
                                            [PresetFactory] path is r/share//projectM/presets/Waveform/Wire Flower/cellular growth.milk
                                            [PresetFactory] url is /usr/share//projectM/presets/Waveform/Wire Flower/cellular growth.milk
                                            [PresetFactory] path is r/share//projectM/presets/Fractal/Nested Spiral/Rovastar - Harlequin's Fractal Encounter - the lord's plan of sadness2.milk
                                            [PresetFactory] url is /usr/share//projectM/presets/Fractal/Nested Spiral/Rovastar - Harlequin's Fractal Encounter - the lord's plan of sadness2.milk
                                            [PresetFactory] path is r/share//projectM/presets/Reaction/Liquid Windy/Isosceles mashup05.milk
                                            [PresetFactory] url is /usr/share//projectM/presets/Reaction/Liquid Windy/Isosceles mashup05.milk
                                            [PresetFactory] path is r/share//projectM/presets/Fractal/Lattice Mirror/EoS - Phat - randombox - mantra 5 response lullquestent vlasphume love discipline chastity nz+.milk
                                            [PresetFactory] url is /usr/share//projectM/presets/Fractal/Lattice Mirror/EoS - Phat - randombox - mantra 5 response lullquestent vlasphume love discipline chastity nz+.milk
                                            [PresetFactory] path is r/share//projectM/presets/Dancer/Whirl Mirror/Tripgnosis - Antiphotonic Dual.milk
                                            [PresetFactory] url is /usr/share//projectM/presets/Dancer/Whirl Mirror/Tripgnosis - Antiphotonic Dual.milk
                                            [PresetFactory] path is r/share//projectM/presets/Drawing/Trails/Including Adam FX 2 flexi + fishbrain -  operation fatcap + Fishbrain and WitchCraft .milk
                                            [PresetFactory] url is /usr/share//projectM/presets/Drawing/Trails/Including Adam FX 2 flexi + fishbrain -  operation fatcap + Fishbrain and WitchCraft .milk
                                            [PresetFactory] path is r/share//projectM/presets/Fractal/Nested Circle/CantStop AdamFX 2 Stahlregen & Bmelgren + EoS + Geiss + Krash + Rocke + Rovastar - Glowstick Heart (MashUp 7) + Rovastar 3.milk
                                            [PresetFactory] url is /usr/share//projectM/presets/Fractal/Nested Circle/CantStop AdamFX 2 Stahlregen & Bmelgren + EoS + Geiss + Krash + Rocke + Rovastar - Glowstick Heart (MashUp 7) + Rovastar 3.milk
                                            [PresetFactory] path is r/share//projectM/presets/Reaction/Liquid Ripples/Flexi + geiss - the deep diver's cognitive dissonance [cavity + pataoblivion3].milk
                                            [PresetFactory] url is /usr/share//projectM/presets/Reaction/Liquid Ripples/Flexi + geiss - the deep diver's cognitive dissonance [cavity + pataoblivion3].milk
                                            [PresetFactory] path is r/share//projectM/presets/Geometric/Stripes/one-stop step-by-step deviance cure 13th step devolution reprisal loss-through-finding inverse paradigm degenerating entropy gain.milk
                                            [PresetFactory] url is /usr/share//projectM/presets/Geometric/Stripes/one-stop step-by-step deviance cure 13th step devolution reprisal loss-through-finding inverse paradigm degenerating entropy gain.milk
                                            [PresetFactory] path is r/share//projectM/presets/Fractal/Core Mirror/AdamFX 2 Geiss - Mash-Up - Angelic  Staine Glass Chapters 6.milk
                                            [PresetFactory] url is /usr/share//projectM/presets/Fractal/Core Mirror/AdamFX 2 Geiss - Mash-Up - Angelic  Staine Glass Chapters 6.milk
                                            [PresetFactory] path is r/share//projectM/presets/Waveform/Wire Spirograph/Fumbling_Foo & Flexi, Martin, Orb - Star Forge v14d.milk
                                            [PresetFactory] url is /usr/share//projectM/presets/Waveform/Wire Spirograph/Fumbling_Foo & Flexi, Martin, Orb - Star Forge v14d.milk
                                            
                                            Gustavo L ConteG 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post
                                            Powered by NodeBB | Contributors