From fa950e7edc8f1eb207e4459b8dfd4aae5bb654f5 Mon Sep 17 00:00:00 2001 From: wang-bin Date: Wed, 30 Apr 2014 18:46:45 +0800 Subject: [PATCH] gl: add a function to check and update textures --- src/GLWidgetRenderer.cpp | 7 +++++-- src/QtAV/private/GLWidgetRenderer_p.h | 1 + 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/GLWidgetRenderer.cpp b/src/GLWidgetRenderer.cpp index 4320dc5e..e8923189 100644 --- a/src/GLWidgetRenderer.cpp +++ b/src/GLWidgetRenderer.cpp @@ -519,7 +519,7 @@ bool GLWidgetRendererPrivate::initTextures(const VideoFormat &fmt) return true; } -void GLWidgetRendererPrivate::upload(const QRect &roi) +void GLWidgetRendererPrivate::updateTexturesIfNeeded() { const VideoFormat &fmt = video_frame.format(); bool update_textures = false; @@ -555,7 +555,11 @@ void GLWidgetRendererPrivate::upload(const QRect &roi) if (update_textures) { initTextures(fmt); } +} +void GLWidgetRendererPrivate::upload(const QRect &roi) +{ + updateTexturesIfNeeded(); for (int i = 0; i < video_frame.planeCount(); ++i) { uploadPlane(i, internal_format[i], data_format[i], roi); } @@ -712,7 +716,6 @@ void GLWidgetRenderer::drawFrame() DPTR_D(GLWidgetRenderer); QRect roi = realROI(); d.upload(roi); - // shader program may not ready before upload if (d.hasGLSL) { #if NO_QGL_SHADER diff --git a/src/QtAV/private/GLWidgetRenderer_p.h b/src/QtAV/private/GLWidgetRenderer_p.h index 2b826272..88a84994 100644 --- a/src/QtAV/private/GLWidgetRenderer_p.h +++ b/src/QtAV/private/GLWidgetRenderer_p.h @@ -84,6 +84,7 @@ public: bool prepareShaderProgram(const VideoFormat& fmt); bool initTexture(GLuint tex, GLint internal_format, GLenum format, GLenum dataType, int width, int height); bool initTextures(const VideoFormat& fmt); + void updateTexturesIfNeeded(); void upload(const QRect& roi); void uploadPlane(int p, GLint internal_format, GLenum format, const QRect& roi); //GL 4.x: GL_FRAGMENT_SHADER_DERIVATIVE_HINT,GL_TEXTURE_COMPRESSION_HINT