diff options
author | Junyan He <junyan.he@linux.intel.com> | 2012-07-20 05:52:57 +0800 |
---|---|---|
committer | root <root@fc17.bj.intel.com> | 2012-07-23 11:43:30 +0800 |
commit | 79d369f161c78185483bf8fdeed77f79430d4a1e (patch) | |
tree | f9effc4bd3677568e895b821dc020894fb04ad36 | |
parent | 1f50d3f368c9e7135576ecb376fbaef34fd22132 (diff) |
Fix the problem of VBO leak.
In some cases we allocate the VBO but have no vertex to
emit, which cause the VBO fail to be released. Fix it.
Signed-off-by: Junyan He <junyan.he@linux.intel.com>
-rw-r--r-- | src/glamor_render.c | 6 | ||||
-rw-r--r-- | src/glamor_trapezoid.c | 6 |
2 files changed, 6 insertions, 6 deletions
diff --git a/src/glamor_render.c b/src/glamor_render.c index 6dacd44..9b80295 100644 --- a/src/glamor_render.c +++ b/src/glamor_render.c @@ -826,9 +826,6 @@ glamor_flush_composite_rects(ScreenPtr screen) glamor_get_screen_private(screen); glamor_gl_dispatch *dispatch; - if (!glamor_priv->render_nr_verts) - return; - dispatch = glamor_get_dispatch(glamor_priv); if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP) dispatch->glUnmapBuffer(GL_ARRAY_BUFFER); @@ -840,6 +837,9 @@ glamor_flush_composite_rects(ScreenPtr screen) glamor_priv->vb, GL_DYNAMIC_DRAW); } + if (!glamor_priv->render_nr_verts) + return; + dispatch->glDrawElements(GL_TRIANGLES, (glamor_priv->render_nr_verts * 3) / 2, GL_UNSIGNED_SHORT, NULL); glamor_put_dispatch(glamor_priv); diff --git a/src/glamor_trapezoid.c b/src/glamor_trapezoid.c index 5c02a8c..fd63062 100644 --- a/src/glamor_trapezoid.c +++ b/src/glamor_trapezoid.c @@ -199,9 +199,6 @@ glamor_flush_composite_triangles(ScreenPtr screen) glamor_get_screen_private(screen); glamor_gl_dispatch *dispatch; - if (!glamor_priv->render_nr_verts) - return; - dispatch = glamor_get_dispatch(glamor_priv); if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP) dispatch->glUnmapBuffer(GL_ARRAY_BUFFER); @@ -213,6 +210,9 @@ glamor_flush_composite_triangles(ScreenPtr screen) glamor_priv->vb, GL_DYNAMIC_DRAW); } + if (!glamor_priv->render_nr_verts) + return; + dispatch->glDrawArrays(GL_TRIANGLES, 0, glamor_priv->render_nr_verts); glamor_put_dispatch(glamor_priv); } |