[PATCH] glamor: Eliminate diagonal tearing in xv

Keith Packard keithp at keithp.com
Mon Jul 28 11:10:15 PDT 2014


This uses a single large triangle and a scissor to draw the video
instead of two triangles.

Signed-off-by: Keith Packard <keithp at keithp.com>
---
 glamor/glamor_xv.c | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/glamor/glamor_xv.c b/glamor/glamor_xv.c
index 68a06a4..3f3e064 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);
-- 
2.0.1



More information about the xorg-devel mailing list