--- deliantra/Deliantra-Client/rendercache.c 2008/01/13 08:31:45 1.9 +++ deliantra/Deliantra-Client/rendercache.c 2010/10/14 00:02:39 1.10 @@ -42,6 +42,7 @@ { sv_upgrade (sv, SVt_PV); SvPOK_only (sv); + sv_grow (sv, 512); } return sv; @@ -50,29 +51,23 @@ static void rc_v2f (rc_array_t *arr, float x, float y) { - STRLEN len = SvCUR (arr) + sizeof (float) * 2; - SvGROW (arr, len); + char *end = fast_sv_grow (arr, sizeof (float) * 2); - ((float *)SvEND (arr))[0] = x; - ((float *)SvEND (arr))[1] = y; - - SvCUR_set (arr, len); + ((float *)end)[0] = x; + ((float *)end)[1] = y; } static void rc_t2f_v3f (rc_array_t *arr, float u, float v, float x, float y, float z) { - STRLEN len = SvCUR (arr) + sizeof (float) * 5; - SvGROW (arr, len); - - ((float *)SvEND (arr))[0] = u; - ((float *)SvEND (arr))[1] = v; + char *end = fast_sv_grow (arr, sizeof (float) * 5); - ((float *)SvEND (arr))[2] = x; - ((float *)SvEND (arr))[3] = y; - ((float *)SvEND (arr))[4] = z; + ((float *)end)[0] = u; + ((float *)end)[1] = v; - SvCUR_set (arr, len); + ((float *)end)[2] = x; + ((float *)end)[3] = y; + ((float *)end)[4] = z; } static void @@ -80,10 +75,7 @@ { if (w && h) { - U8 *c; - STRLEN len = SvCUR (arr); - SvGROW (arr, len + 2 * 2 + 1 * 4); - c = (U8 *)SvEND (arr); + U8 *c = (U8 *)fast_sv_grow (arr, 4 + 4); x += w; y += h;