• 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.
    • Gustavo L ConteG
      Gustavo L Conte
      last edited by

      Well, this will be much harder than I tought.

      I started last week to read the integration tutorial from projectM

      I don't think we could integrate into strawberry as a widget

      IT requires, per example, an OpenGL context. Also, it would require to be programmed in a completely different way that the other analyzers are functioning right now. dunno.

      And I think that if this would be rendered into last say, another window
      then ppl could just run projectM-SDL together with the music player ๐Ÿ˜›

      When I have more time I'll dive into this. It would really be an awesome feature.

      jonasJ 1 Reply Last reply Reply Quote 0
      • T
        tagomago @Jellby
        last edited by

        @Jellby It did, thank you!!

        1 Reply Last reply Reply Quote 0
        • 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
                                            • First post
                                              Last post
                                            Powered by NodeBB | Contributors