diff options
author | Carlos Rafael Giani <dv@pseudoterminal.org> | 2015-03-10 00:07:40 +0100 |
---|---|---|
committer | Yoann Lopes <yoann.lopes@theqtcompany.com> | 2015-05-26 11:57:56 +0000 |
commit | 288d54947406caa9b9d6326a88a7dc8afc64ee04 (patch) | |
tree | ba2cbb7c5d2ca87ed69e2aca1e4a46eaf3ccfa53 /src/plugins/videonode/imx6/qsgvivantevideomaterialshader.cpp | |
parent | a3f82a8995543288dd004349bbe94beece170d6a (diff) |
videonode: imx6: Ensure the video node excludes padding pixels
Padding rows & columns are included in the video frame that is sent to
the VIV direct texture. Scale the UV coordinates to ensure the padding
pixels aren't shown.
Change-Id: I8b870a95ff786f9f80f42f0cc33f468b0c9c3863
Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
Reviewed-by: Yoann Lopes <yoann.lopes@theqtcompany.com>
Diffstat (limited to 'src/plugins/videonode/imx6/qsgvivantevideomaterialshader.cpp')
-rw-r--r-- | src/plugins/videonode/imx6/qsgvivantevideomaterialshader.cpp | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/src/plugins/videonode/imx6/qsgvivantevideomaterialshader.cpp b/src/plugins/videonode/imx6/qsgvivantevideomaterialshader.cpp index b51acfe62..a0a417736 100644 --- a/src/plugins/videonode/imx6/qsgvivantevideomaterialshader.cpp +++ b/src/plugins/videonode/imx6/qsgvivantevideomaterialshader.cpp @@ -35,6 +35,13 @@ #include "qsgvivantevideonode.h" #include "qsgvivantevideomaterial.h" +QSGVivanteVideoMaterialShader::QSGVivanteVideoMaterialShader() : + mUScale(1), + mVScale(1), + mNewUVScale(true) +{ +} + void QSGVivanteVideoMaterialShader::updateState(const RenderState &state, QSGMaterial *newMaterial, QSGMaterial *oldMaterial) @@ -48,6 +55,10 @@ void QSGVivanteVideoMaterialShader::updateState(const RenderState &state, mat->setOpacity(state.opacity()); program()->setUniformValue(mIdOpacity, state.opacity()); } + if (mNewUVScale) { + program()->setUniformValue(mIdUVScale, mUScale, mVScale); + mNewUVScale = false; + } if (state.isMatrixDirty()) program()->setUniformValue(mIdMatrix, state.combinedMatrix()); } @@ -61,6 +72,13 @@ const char * const *QSGVivanteVideoMaterialShader::attributeNames() const { return names; } +void QSGVivanteVideoMaterialShader::setUVScale(float uScale, float vScale) +{ + mUScale = uScale; + mVScale = vScale; + mNewUVScale = true; +} + const char *QSGVivanteVideoMaterialShader::vertexShader() const { static const char *shader = "uniform highp mat4 qt_Matrix; \n" @@ -78,12 +96,13 @@ const char *QSGVivanteVideoMaterialShader::fragmentShader() const { static const char *shader = "uniform sampler2D texture;" "uniform lowp float opacity;" + "uniform highp vec2 uvScale;" "" "varying highp vec2 qt_TexCoord;" "" "void main()" "{" - " gl_FragColor = vec4(texture2D( texture, qt_TexCoord ).rgb, 1.0) * opacity;\n" + " gl_FragColor = vec4(texture2D( texture, qt_TexCoord * uvScale ).rgb, 1.0) * opacity;\n" "}"; return shader; } @@ -93,4 +112,5 @@ void QSGVivanteVideoMaterialShader::initialize() { mIdMatrix = program()->uniformLocation("qt_Matrix"); mIdTexture = program()->uniformLocation("texture"); mIdOpacity = program()->uniformLocation("opacity"); + mIdUVScale = program()->uniformLocation("uvScale"); } |