From 30a8a0b8fa9e66efb97aef630765e4cdf6d9cb68 Mon Sep 17 00:00:00 2001 From: Keith Whitwell Date: Tue, 20 Apr 2004 10:18:33 +0000 Subject: When upgrading copied vertices, distinguish between an attribute entering a vertex for the first time and one which was already present but increasing its size. Fixes Brian's normal.c bug. --- src/mesa/tnl/t_save_api.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/mesa/tnl/t_save_api.c b/src/mesa/tnl/t_save_api.c index 4e85935932..dce84e212c 100644 --- a/src/mesa/tnl/t_save_api.c +++ b/src/mesa/tnl/t_save_api.c @@ -473,7 +473,7 @@ static void _save_upgrade_vertex( GLcontext *ctx, /* Need to note this and fix up at runtime (or loopback): */ - if (tnl->save.currentsz[attr] == 0) { + if (tnl->save.currentsz[attr][0] == 0) { assert(oldsz == 0); tnl->save.dangling_attr_ref = GL_TRUE; _mesa_debug(0, "_save_upgrade_vertex: dangling reference attr %d\n", @@ -496,10 +496,19 @@ static void _save_upgrade_vertex( GLcontext *ctx, for (j = 0 ; j < _TNL_ATTRIB_MAX ; j++) { if (tnl->save.attrsz[j]) { if (j == attr) { - ASSIGN_4V( dest, 0, 0, 0, 1 ); - COPY_SZ_4V( dest, oldsz, data ); - data += oldsz; - dest += newsz; + if (oldsz) { + ASSIGN_4V( dest, 0, 0, 0, 1 ); + COPY_SZ_4V( dest, oldsz, data ); + data += oldsz; + dest += newsz; + } + else { + GLuint currentsz = tnl->save.currentsz[attr][0]; + GLfloat *current = tnl->save.current[attr]; + ASSIGN_4V( dest, 0, 0, 0, 1 ); + COPY_SZ_4V( dest, currentsz, current ); + dest += newsz; + } } else { GLint sz = tnl->save.attrsz[j]; -- cgit v1.2.3