X-Git-Url: https://git.sesse.net/?p=kdenlive;a=blobdiff_plain;f=src%2Frenderer.cpp;h=d141a4f6ace583e4a1570853cb2540c2e733c64e;hp=b3142223c7307acc2d486270e0d983c03a2911fa;hb=a3eee7be24126f5a3458d488f44cd61c66135e17;hpb=6c62a4d8f799379bfb7a11d25521cf829248587c diff --git a/src/renderer.cpp b/src/renderer.cpp index b3142223..d141a4f6 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp @@ -111,7 +111,7 @@ void Render::consumer_gl_frame_show(mlt_consumer consumer, Render * self, mlt_fr emit self->mltFrameReceived(new Mlt::Frame(frame_ptr)); } -Render::Render(Kdenlive::MonitorId rendererName, int winid, QString profile, QWidget *parent) : +Render::Render(Kdenlive::MonitorId rendererName, int winid, QString profile, QWidget *parent, QGLWidget *mainGLContext) : AbstractRender(rendererName, parent), requestedSeekPosition(SEEK_INACTIVE), showFrameSemaphore(1), @@ -128,7 +128,9 @@ Render::Render(Kdenlive::MonitorId rendererName, int winid, QString profile, QWi m_blackClip(NULL), m_winid(winid), m_paused(true), - m_isActive(false) + m_isActive(false), + m_mainGLContext(mainGLContext), + m_GLContext(NULL) { qRegisterMetaType ("stringMap"); analyseAudio = KdenliveSettings::monitor_audio(); @@ -140,16 +142,21 @@ Render::Render(Kdenlive::MonitorId rendererName, int winid, QString profile, QWi m_mltProducer->set_speed(0.0); m_refreshTimer.setSingleShot(true); m_refreshTimer.setInterval(100); + m_glslManager = new Mlt::Filter(*m_mltProfile, "glsl.manager"); connect(&m_refreshTimer, SIGNAL(timeout()), this, SLOT(refresh())); connect(this, SIGNAL(multiStreamFound(QString,QList,QList,stringMap)), this, SLOT(slotMultiStreamProducerFound(QString,QList,QList,stringMap))); connect(this, SIGNAL(checkSeeking()), this, SLOT(slotCheckSeeking())); connect(this, SIGNAL(mltFrameReceived(Mlt::Frame*)), this, SLOT(showFrame(Mlt::Frame*)), Qt::UniqueConnection); + + m_GLContext = new QGLWidget(0, m_mainGLContext); + m_GLContext->resize(0, 0); } Render::~Render() { closeMlt(); delete m_mltProfile; + delete m_GLContext; } @@ -704,6 +711,10 @@ bool Render::isProcessing(const QString &id) void Render::processFileProperties() { + // We are in a new thread, so we need a new OpenGL context for the remainder of the function. + QGLWidget ctx(0, m_mainGLContext); + ctx.makeCurrent(); + requestClipInfo info; QLocale locale; while (!m_requestList.isEmpty()) {