diff --git a/framework/render/video/glRender/CV420PProgramContext.cpp b/framework/render/video/glRender/CV420PProgramContext.cpp index c94b64211..404b187bf 100644 --- a/framework/render/video/glRender/CV420PProgramContext.cpp +++ b/framework/render/video/glRender/CV420PProgramContext.cpp @@ -121,6 +121,10 @@ int CV420PProgramContext::initProgram() { return 0; } +void CV420PProgramContext::useProgram(){ + glUseProgram(mCVProgram); +} + void CV420PProgramContext::updateScale(IVideoRender::Scale scale) { if (mScale != scale) { mScale = scale; diff --git a/framework/render/video/glRender/CV420PProgramContext.h b/framework/render/video/glRender/CV420PProgramContext.h index 10e09672e..fe6ecb2db 100644 --- a/framework/render/video/glRender/CV420PProgramContext.h +++ b/framework/render/video/glRender/CV420PProgramContext.h @@ -27,6 +27,8 @@ class CV420PProgramContext : public IProgramContext { int initProgram() override; + void useProgram() override; + void updateScale(IVideoRender::Scale scale) override; void updateRotate(IVideoRender::Rotate rotate) override; diff --git a/framework/render/video/glRender/GLRender.cpp b/framework/render/video/glRender/GLRender.cpp index 03b5d28eb..7c23f13cf 100644 --- a/framework/render/video/glRender/GLRender.cpp +++ b/framework/render/video/glRender/GLRender.cpp @@ -259,7 +259,7 @@ void GLRender::VSyncOnDestroy() { mPrograms.clear(); - if(mContext == nullptr) { + if (mContext == nullptr) { return; } @@ -273,7 +273,7 @@ void GLRender::VSyncOnDestroy() bool GLRender::renderActually() { - if(mContext == nullptr) { + if (mContext == nullptr) { return false; } @@ -296,7 +296,6 @@ bool GLRender::renderActually() } #endif - bool displayViewChanged = false; { unique_lock viewLock(mViewMutex); @@ -523,7 +522,9 @@ void *GLRender::getSurface() IProgramContext *GLRender::getProgram(int frameFormat, IAFFrame *frame) { if (mPrograms.count(frameFormat) > 0) { - return mPrograms[frameFormat].get(); + IProgramContext *pContext = mPrograms[frameFormat].get(); + pContext->useProgram(); + return pContext; } unique_ptr targetProgram{nullptr}; diff --git a/framework/render/video/glRender/IProgramContext.h b/framework/render/video/glRender/IProgramContext.h index ec0580d65..eea834946 100644 --- a/framework/render/video/glRender/IProgramContext.h +++ b/framework/render/video/glRender/IProgramContext.h @@ -42,6 +42,8 @@ class IProgramContext { virtual int initProgram() = 0; + virtual void useProgram() = 0; + virtual void createSurface() { } diff --git a/framework/render/video/glRender/OESProgramContext.cpp b/framework/render/video/glRender/OESProgramContext.cpp index 0262cdf96..14454a685 100644 --- a/framework/render/video/glRender/OESProgramContext.cpp +++ b/framework/render/video/glRender/OESProgramContext.cpp @@ -97,6 +97,10 @@ int OESProgramContext::initProgram() { return 0; } +void OESProgramContext::useProgram(){ + glUseProgram(mOESProgram); +} + void OESProgramContext::updateScale(IVideoRender::Scale scale) { if (mScale != scale) { mScale = scale; diff --git a/framework/render/video/glRender/OESProgramContext.h b/framework/render/video/glRender/OESProgramContext.h index c3d1515f4..6357e96a9 100644 --- a/framework/render/video/glRender/OESProgramContext.h +++ b/framework/render/video/glRender/OESProgramContext.h @@ -18,6 +18,8 @@ class OESProgramContext : public IProgramContext , private DecoderSurfaceCallbac private: int initProgram() override; + void useProgram() override; + void createSurface() override; void *getSurface() override; diff --git a/framework/render/video/glRender/YUVProgramContext.cpp b/framework/render/video/glRender/YUVProgramContext.cpp index 86c21613a..0b898517b 100644 --- a/framework/render/video/glRender/YUVProgramContext.cpp +++ b/framework/render/video/glRender/YUVProgramContext.cpp @@ -110,6 +110,10 @@ int YUVProgramContext::initProgram() { return 0; } +void YUVProgramContext::useProgram(){ + glUseProgram(mProgram); +} + void YUVProgramContext::updateScale(IVideoRender::Scale scale) { if (mScale != scale) { mScale = scale; diff --git a/framework/render/video/glRender/YUVProgramContext.h b/framework/render/video/glRender/YUVProgramContext.h index 3f62e2481..a77fab9a1 100644 --- a/framework/render/video/glRender/YUVProgramContext.h +++ b/framework/render/video/glRender/YUVProgramContext.h @@ -17,6 +17,8 @@ class YUVProgramContext : public IProgramContext { private: int initProgram() override ; + void useProgram() override ; + void updateScale(IVideoRender::Scale scale) override ; void updateFlip(IVideoRender::Flip flip) override ;