… | |
… | |
2561 | assert (f); |
2561 | assert (f); |
2562 | f->smooth = smooth; |
2562 | f->smooth = smooth; |
2563 | |
2563 | |
2564 | void set_data (faceidx idx, int faceset, SV *data, SV *chksum) |
2564 | void set_data (faceidx idx, int faceset, SV *data, SV *chksum) |
2565 | CODE: |
2565 | CODE: |
|
|
2566 | { |
2566 | facedata *d = face_data (idx, faceset); |
2567 | facedata *d = face_data (idx, faceset); |
2567 | assert (d); |
2568 | assert (d); |
2568 | sv_to (data, d->data); |
2569 | sv_to (data, d->data); |
2569 | STRLEN clen; |
2570 | STRLEN clen; |
2570 | char *cdata = SvPVbyte (chksum, clen); |
2571 | char *cdata = SvPVbyte (chksum, clen); |
|
|
2572 | clen = min (CHKSUM_SIZE, clen); |
|
|
2573 | |
|
|
2574 | if (memcmp (d->chksum, cdata, clen)) |
|
|
2575 | { |
2571 | memcpy (d->chksum, cdata, min (CHKSUM_SIZE, clen)); |
2576 | memcpy (d->chksum, cdata, clen); |
|
|
2577 | |
|
|
2578 | // invalidate existing client face info |
|
|
2579 | for_all_clients (ns) |
|
|
2580 | if (ns->faceset == faceset) |
|
|
2581 | { |
|
|
2582 | ns->faces_sent [idx] = false; |
|
|
2583 | ns->force_newmap = true; |
|
|
2584 | } |
|
|
2585 | } |
|
|
2586 | } |
2572 | |
2587 | |
2573 | void invalidate (faceidx idx) |
2588 | void invalidate (faceidx idx) |
2574 | CODE: |
2589 | CODE: |
2575 | for_all_clients (ns) |
2590 | for_all_clients (ns) |
|
|
2591 | { |
2576 | ns->faces_sent [idx] = false; |
2592 | ns->faces_sent [idx] = false; |
|
|
2593 | ns->force_newmap = true; |
|
|
2594 | } |
2577 | |
2595 | |
2578 | void invalidate_all () |
2596 | void invalidate_all () |
2579 | CODE: |
2597 | CODE: |
2580 | for_all_clients (ns) |
2598 | for_all_clients (ns) |
|
|
2599 | { |
2581 | ns->faces_sent.reset (); |
2600 | ns->faces_sent.reset (); |
|
|
2601 | ns->force_newmap = true; |
|
|
2602 | } |
2582 | |
2603 | |