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

    Reintegrate projectM Visualizer

    Scheduled Pinned Locked Moved
    Development
    6
    91
    7.8k
    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.
    • K
      kblaschke
      last edited by

      Hi,

      I'm a maintainer of the projectM visualizer library. We've been working on making projectM better in many ways over the past two years or so, and finally released a new major version (4.0) back in April '23. This new version fixed a few bugs and improved the rendering quality, but was mainly focused on rewriting the build system (now only using CMake) and creating a proper API. libprojectM now supports building as a shared library on all platforms, and has a stable and clean C API instead of requiring direct access to the internal C++ code, which was a big issue for devs in all previous releases.

      Clementine used a forked copy of a very old projectM version, which was never updated and had numerous bugs and performance issues, so removing it from Strawberry was surely a good thing. Yet I think many users would like to have a visualizer again, and with the upcoming 4.1 release projectM will be (mostly) compatible with the latest Milkdrop release, support previously unimplemented preset features like loops and megabuf.

      The API won't change between 4.0 and 4.1, so if anyone has time to integrate it into Strawberry, you may start right away. If there are any questions, head over to our Discord or post in our GitHub discussion board, I'll be notified there. I try to check this forum from time to time, but expect longer delays here.

      StarberryS T 2 Replies Last reply Reply Quote 2
      • StarberryS
        Starberry @kblaschke
        last edited by

        Hi, @kblaschke

        I, for one, would love to have this visualisation implemented into Strawberry. That's what would give it that additional oomph. Clementine indeed had an inferior version of ProjectM. so I'm delighted to see that development is continuing.

        I sadly am not (yet) capable of undergoing a complex task such as adding ProjectM to Strawberry, but here's to hoping that there is a willing, competent enthusiast out there. If anyone has experience with visualisation tools or software development, your contribution could make a significant difference.

        Here is the most obvious resource for anyone interested:
        https://github.com/projectM-visualizer/projectm/wiki

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

          @Starberry , @kblaschke

          That's something I'd really like to happen so I'm on it
          the logic behind my promise is a little fuzzy: Give me a little bit of time.... since bits are just one's or zero's, "a little bit" is quite controversial.. LoL ๐Ÿ•

          anyway

          let's do this ! ๐Ÿ’จ

          1 Reply Last reply Reply Quote 1
          • T
            tagomago @kblaschke
            last edited by

            @kblaschke Sorry for the clueless question, but... what does it do? I have followed like 10 links from the wiki of the project hoping to see a screenshot, but to no avail.

            Thx!

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

              @tagomago Maybe this helps? https://github.com/projectM-visualizer/projectm

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