From a65b3fc08e0e94d311fea6969684fe0677ecabca Mon Sep 17 00:00:00 2001 From: Antoine C Date: Mon, 21 Oct 2024 00:39:02 +0100 Subject: [PATCH] Waveform still not showing on legacy UI --- src/qml/qmlwaveformdisplay.cpp | 1 + src/rendergraph/opengl/engine.cpp | 2 ++ src/rendergraph/opengl/rendergraph/engine.h | 1 + src/rendergraph/opengl/texture.cpp | 25 +++++++++++++----- src/rendergraph/scenegraph/context.cpp | 4 +-- .../scenegraph/rendergraph/context.h | 5 ++-- .../allshader/waveformrendererendoftrack.cpp | 26 +++---------------- .../allshader/waveformrendererendoftrack.h | 4 --- .../allshader/waveformrendererrgb.cpp | 13 ++++++++++ .../renderers/allshader/waveformrendererrgb.h | 17 +++--------- 10 files changed, 46 insertions(+), 52 deletions(-) diff --git a/src/qml/qmlwaveformdisplay.cpp b/src/qml/qmlwaveformdisplay.cpp index eab4fcd47e00..36da160623b4 100644 --- a/src/qml/qmlwaveformdisplay.cpp +++ b/src/qml/qmlwaveformdisplay.cpp @@ -133,6 +133,7 @@ QSGNode* QmlWaveformDisplay::updatePaintNode(QSGNode* node, UpdatePaintNodeData* if (m_dirtyFlag.testFlag(DirtyFlag::Geometry)) { m_dirtyFlag.setFlag(DirtyFlag::Geometry, false); + resizeRenderer(boundingRect().width(), boundingRect().height(), window()->devicePixelRatio()); bgNode->setRect(boundingRect()); auto rect = QRectF(boundingRect().x() + diff --git a/src/rendergraph/opengl/engine.cpp b/src/rendergraph/opengl/engine.cpp index c5202918155d..d2dc24ae59b1 100644 --- a/src/rendergraph/opengl/engine.cpp +++ b/src/rendergraph/opengl/engine.cpp @@ -11,6 +11,8 @@ Engine::Engine(std::unique_ptr pRootNode) } Engine::~Engine() { + m_pInitializeNodes.clear(); + m_pPreprocessNodes.clear(); } void Engine::add(BaseNode* pNode) { diff --git a/src/rendergraph/opengl/rendergraph/engine.h b/src/rendergraph/opengl/rendergraph/engine.h index 83e480727e00..686b4411263d 100644 --- a/src/rendergraph/opengl/rendergraph/engine.h +++ b/src/rendergraph/opengl/rendergraph/engine.h @@ -18,6 +18,7 @@ class rendergraph::Engine { void render(); void resize(int w, int h); void preprocess(); + // FIXME do we expected Engine to take ownership of this ptr? void add(BaseNode* pNode); void remove(BaseNode* pNode); const QMatrix4x4& matrix() const { diff --git a/src/rendergraph/opengl/texture.cpp b/src/rendergraph/opengl/texture.cpp index 1bd10cf77422..2c63d284a4b6 100644 --- a/src/rendergraph/opengl/texture.cpp +++ b/src/rendergraph/opengl/texture.cpp @@ -1,4 +1,7 @@ #include "rendergraph/texture.h" +#include +#include +#include "rendergraph/assert.h" #include "rendergraph/context.h" @@ -6,15 +9,23 @@ using namespace rendergraph; namespace { QImage premultiplyAlpha(const QImage& image) { + QImage texture(image.width(), image.height(), QImage::Format_RGBA8888); if (image.format() == QImage::Format_RGBA8888_Premultiplied) { - return QImage(image.bits(), image.width(), image.height(), QImage::Format_RGBA8888); + VERIFY_OR_DEBUG_ASSERT(texture.sizeInBytes() == image.sizeInBytes()){ + texture.fill(QColor(Qt::transparent).rgba()); + return texture; + } + std::memcpy(texture.bits(), image.bits(), texture.sizeInBytes()); + } else { + auto convertedImage = image.convertToFormat(QImage::Format_RGBA8888_Premultiplied); + VERIFY_OR_DEBUG_ASSERT(texture.sizeInBytes() == convertedImage.sizeInBytes()){ + texture.fill(QColor(Qt::transparent).rgba()); + return texture; + } + std::memcpy(texture.bits(), convertedImage.bits(), texture.sizeInBytes()); + } - return QImage( - image.convertToFormat(QImage::Format_RGBA8888_Premultiplied) - .bits(), - image.width(), - image.height(), - QImage::Format_RGBA8888); + return texture; } } // namespace diff --git a/src/rendergraph/scenegraph/context.cpp b/src/rendergraph/scenegraph/context.cpp index 61c5e12caa7c..29c3f567e25c 100644 --- a/src/rendergraph/scenegraph/context.cpp +++ b/src/rendergraph/scenegraph/context.cpp @@ -2,10 +2,10 @@ using namespace rendergraph; -Context::Context(QQuickWindow* pWindow) +Context::Context(gsl::not_null pWindow) : m_pWindow(pWindow) { } -QQuickWindow* Context::window() const { +gsl::not_null Context::window() const { return m_pWindow; } diff --git a/src/rendergraph/scenegraph/rendergraph/context.h b/src/rendergraph/scenegraph/rendergraph/context.h index e26e6eb78599..431b41d027ba 100644 --- a/src/rendergraph/scenegraph/rendergraph/context.h +++ b/src/rendergraph/scenegraph/rendergraph/context.h @@ -1,6 +1,7 @@ #pragma once #include +#include namespace rendergraph { class Context; @@ -8,8 +9,8 @@ class Context; class rendergraph::Context { public: - Context(QQuickWindow* pWindow); - QQuickWindow* window() const; + Context(gsl::not_null pWindow); + gsl::not_null window() const; private: QQuickWindow* m_pWindow; diff --git a/src/waveform/renderers/allshader/waveformrendererendoftrack.cpp b/src/waveform/renderers/allshader/waveformrendererendoftrack.cpp index 6d41b653344a..0ab5f95819b9 100644 --- a/src/waveform/renderers/allshader/waveformrendererendoftrack.cpp +++ b/src/waveform/renderers/allshader/waveformrendererendoftrack.cpp @@ -63,23 +63,7 @@ void WaveformRendererEndOfTrack::preprocess() { m_pTimeRemainingControl = std::make_unique( m_waveformRenderer->getGroup(), "time_remaining"); } - - static int offset = 0; - const int elapsedTotal = m_timer.elapsed().toIntegerMillis(); - const int elapsed = (elapsedTotal + offset) % kBlinkingPeriodMillis; - - // for testing - offset = (offset == 0) ? kBlinkingPeriodMillis / 4 : 0; - - if (elapsedTotal >= m_lastFrameCountLogged + 1000) { - if (elapsedTotal >= m_lastFrameCountLogged + 2000) { - m_lastFrameCountLogged = elapsedTotal; - } - m_lastFrameCountLogged += 1000; - qDebug() << "FPS:" << m_frameCount; - m_frameCount = 0; - } - m_frameCount++; + const int elapsed = m_timer.elapsed().toIntegerMillis() % kBlinkingPeriodMillis; const double blinkIntensity = (double)(2 * abs(elapsed - kBlinkingPeriodMillis / 2)) / kBlinkingPeriodMillis; @@ -87,12 +71,8 @@ void WaveformRendererEndOfTrack::preprocess() { const double remainingTime = m_pTimeRemainingControl->get(); const double remainingTimeTriggerSeconds = WaveformWidgetFactory::instance()->getEndOfTrackWarningTime(); - const double criticalIntensity = static_cast(elapsed) / - static_cast( - kBlinkingPeriodMillis); // TODO put back: - //(remainingTimeTriggerSeconds - - // remainingTime) / - // remainingTimeTriggerSeconds; + const double criticalIntensity = (remainingTimeTriggerSeconds - remainingTime) / + remainingTimeTriggerSeconds; const double alpha = std::max(0.0, std::min(1.0, criticalIntensity * blinkIntensity)); diff --git a/src/waveform/renderers/allshader/waveformrendererendoftrack.h b/src/waveform/renderers/allshader/waveformrendererendoftrack.h index c76653332ce0..812991c60d8f 100644 --- a/src/waveform/renderers/allshader/waveformrendererendoftrack.h +++ b/src/waveform/renderers/allshader/waveformrendererendoftrack.h @@ -36,10 +36,6 @@ class allshader::WaveformRendererEndOfTrack final bool isSubtreeBlocked() const override; private: - // TODO REMOVE - int m_lastFrameCountLogged{}; - int m_frameCount{}; - std::unique_ptr m_pEndOfTrackControl; std::unique_ptr m_pTimeRemainingControl; diff --git a/src/waveform/renderers/allshader/waveformrendererrgb.cpp b/src/waveform/renderers/allshader/waveformrendererrgb.cpp index 6dbc8d1752d1..ad7d34374044 100644 --- a/src/waveform/renderers/allshader/waveformrendererrgb.cpp +++ b/src/waveform/renderers/allshader/waveformrendererrgb.cpp @@ -18,11 +18,24 @@ inline float math_pow2(float x) { } // namespace WaveformRendererRGB::WaveformRendererRGB(WaveformWidgetRenderer* waveformWidget, +#ifdef __RENDERGRAPH_IS_SCENEGRAPH + QColor axesColor, + QColor lowColor, + QColor midColor, + QColor highColor, +#endif ::WaveformRendererAbstract::PositionSource type, WaveformRendererSignalBase::Options options) : WaveformRendererSignalBase(waveformWidget), m_isSlipRenderer(type == ::WaveformRendererAbstract::Slip), m_options(options) { +#ifdef __RENDERGRAPH_IS_SCENEGRAPH + getRgbF(axesColor, &m_axesColor_r, &m_axesColor_g, &m_axesColor_b, &m_axesColor_a); + + getRgbF(lowColor, &m_rgbLowColor_r, &m_rgbLowColor_g, &m_rgbLowColor_b); + getRgbF(midColor, &m_rgbMidColor_r, &m_rgbMidColor_g, &m_rgbMidColor_b); + getRgbF(highColor, &m_rgbHighColor_r, &m_rgbHighColor_g, &m_rgbHighColor_b); +#endif initForRectangles(0); setUsePreprocess(true); } diff --git a/src/waveform/renderers/allshader/waveformrendererrgb.h b/src/waveform/renderers/allshader/waveformrendererrgb.h index 4c5e03f64523..ed44f3fbfade 100644 --- a/src/waveform/renderers/allshader/waveformrendererrgb.h +++ b/src/waveform/renderers/allshader/waveformrendererrgb.h @@ -14,26 +14,15 @@ class allshader::WaveformRendererRGB final public rendergraph::GeometryNode { public: explicit WaveformRendererRGB(WaveformWidgetRenderer* waveformWidget, - ::WaveformRendererAbstract::PositionSource type = - ::WaveformRendererAbstract::Play, - WaveformRendererSignalBase::Options options = WaveformRendererSignalBase::Option::None); - - explicit WaveformRendererRGB( - WaveformWidgetRenderer* waveformWidget, +#ifdef __RENDERGRAPH_IS_SCENEGRAPH QColor axesColor, QColor lowColor, QColor midColor, QColor highColor, +#endif ::WaveformRendererAbstract::PositionSource type = ::WaveformRendererAbstract::Play, - WaveformRendererSignalBase::Options options = WaveformRendererSignalBase::Option::None) - : WaveformRendererRGB(waveformWidget, type, options) { - getRgbF(axesColor, &m_axesColor_r, &m_axesColor_g, &m_axesColor_b, &m_axesColor_a); - - getRgbF(lowColor, &m_rgbLowColor_r, &m_rgbLowColor_g, &m_rgbLowColor_b); - getRgbF(midColor, &m_rgbMidColor_r, &m_rgbMidColor_g, &m_rgbMidColor_b); - getRgbF(highColor, &m_rgbHighColor_r, &m_rgbHighColor_g, &m_rgbHighColor_b); - } + WaveformRendererSignalBase::Options options = WaveformRendererSignalBase::Option::None); // Pure virtual from WaveformRendererSignalBase, not used void onSetup(const QDomNode& node) override;