diff options
author | Keith Packard <keithp@keithp.com> | 2014-07-28 11:10:15 -0700 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2014-07-28 13:12:52 -0700 |
commit | 8a60d1c3f4a62675cad005107f56413f946ecd77 (patch) | |
tree | 1288b99114771b717f8dea7cdb9e7413f841c7b8 | |
parent | 29eaa61cb210e0c67004bc567af0c15d48aad626 (diff) |
glamor: Eliminate diagonal tearing in xv
This uses a single large triangle and a scissor to draw the video
instead of two triangles.
Signed-off-by: Keith Packard <keithp@keithp.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r-- | glamor/glamor_xv.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/glamor/glamor_xv.c b/glamor/glamor_xv.c index 68a06a413..3f3e064d5 100644 --- a/glamor/glamor_xv.c +++ b/glamor/glamor_xv.c @@ -336,6 +336,7 @@ glamor_xv_render(glamor_port_private *port_priv) GL_FALSE, 2 * sizeof(float), vertices); glEnableVertexAttribArray(GLAMOR_VERTEX_POS); + glEnable(GL_SCISSOR_TEST); for (i = 0; i < nBox; i++) { float off_x = box[i].x1 - port_priv->drw_x; float off_y = box[i].y1 - port_priv->drw_y; @@ -356,23 +357,25 @@ glamor_xv_render(glamor_port_private *port_priv) glamor_set_normalize_vcoords(pixmap_priv, dst_xscale, dst_yscale, - dstx, + dstx - dstw, dsty, dstx + dstw, - dsty + dsth, + dsty + dsth * 2, vertices); glamor_set_normalize_tcoords(src_pixmap_priv[0], src_xscale[0], src_yscale[0], - srcx, + srcx - srcw, srcy, srcx + srcw, - srcy + srch, + srcy + srch * 2, texcoords); - glDrawArrays(GL_TRIANGLE_FAN, 0, 4); + glScissor(dstx, dsty, dstw, dsth); + glDrawArrays(GL_TRIANGLE_FAN, 0, 3); } + glDisable(GL_SCISSOR_TEST); glDisableVertexAttribArray(GLAMOR_VERTEX_POS); glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); |