summaryrefslogtreecommitdiff
path: root/src/mesa/tnl/t_save_api.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mesa/tnl/t_save_api.c')
-rw-r--r--src/mesa/tnl/t_save_api.c22
1 files changed, 17 insertions, 5 deletions
diff --git a/src/mesa/tnl/t_save_api.c b/src/mesa/tnl/t_save_api.c
index 1fe2ff6d44..92fd336953 100644
--- a/src/mesa/tnl/t_save_api.c
+++ b/src/mesa/tnl/t_save_api.c
@@ -306,6 +306,7 @@ static void _save_wrap_buffers( GLcontext *ctx )
TNLcontext *tnl = TNL_CONTEXT(ctx);
GLint i = tnl->save.prim_count - 1;
GLenum mode;
+ GLuint count;
assert(i < (GLint) tnl->save.prim_max);
assert(i >= 0);
@@ -314,7 +315,9 @@ static void _save_wrap_buffers( GLcontext *ctx )
*/
tnl->save.prim[i].count = ((tnl->save.initial_counter - tnl->save.counter) -
tnl->save.prim[i].start);
- mode = tnl->save.prim[i].mode & ~(PRIM_BEGIN|PRIM_END);
+ count = tnl->save.prim[i].count;
+ mode = tnl->save.prim[i].mode;
+
/* store the copied vertices, and allocate a new list.
*/
@@ -322,10 +325,19 @@ static void _save_wrap_buffers( GLcontext *ctx )
/* Restart interrupted primitive
*/
- tnl->save.prim[0].mode = mode;
- tnl->save.prim[0].start = 0;
- tnl->save.prim[0].count = 0;
- tnl->save.prim_count = 1;
+ if (!(mode & PRIM_END)) {
+
+ if (count == tnl->save.copied.nr)
+ tnl->save.prim[0].mode = mode;
+ else
+ tnl->save.prim[0].mode = mode & ~PRIM_BEGIN;
+
+ tnl->save.prim[0].start = 0;
+ tnl->save.prim[0].count = 0;
+ tnl->save.prim_count = 1;
+ }
+ else
+ tnl->save.prim_count = 0;
}