15 #include "geomVertexColumn.h" 16 #include "geomVertexData.h" 17 #include "bamReader.h" 18 #include "bamWriter.h" 25 void GeomVertexColumn::
28 _num_components = copy._num_components;
29 _numeric_type = copy._numeric_type;
30 _contents = copy._contents;
32 _column_alignment = copy._column_alignment;
59 _num_components = num_components;
72 _numeric_type = numeric_type;
111 _column_alignment = column_alignment;
120 void GeomVertexColumn::
121 output(ostream &out)
const {
166 void GeomVertexColumn::
168 nassertv(_num_components > 0 && _start >= 0);
170 _num_values = _num_components;
173 if (_numeric_type == NT_stdfloat) {
174 if (vertices_float64) {
175 _numeric_type = NT_float64;
177 _numeric_type = NT_float32;
181 switch (_numeric_type) {
183 _component_bytes = 2;
187 _component_bytes = 4;
191 _component_bytes = 1;
196 _component_bytes = 4;
201 _component_bytes = 4;
205 _component_bytes = 8;
213 if (_contents == C_matrix) {
214 _num_elements = _num_components;
217 if (_column_alignment < 1) {
221 _column_alignment = max(_component_bytes, (
int)vertex_column_alignment);
225 _start = ((_start + _column_alignment - 1) / _column_alignment) * _column_alignment;
227 _element_stride = _component_bytes * _num_components;
228 _total_bytes = _element_stride * _num_elements;
230 if (_packer != NULL) {
234 _packer = make_packer();
235 _packer->_column =
this;
245 GeomVertexColumn::Packer *GeomVertexColumn::
246 make_packer()
const {
254 if (
sizeof(
float) ==
sizeof(PN_float32)) {
259 return new Packer_point_nativefloat_2;
261 return new Packer_point_nativefloat_3;
263 return new Packer_point_nativefloat_4;
268 return new Packer_point_float32_2;
270 return new Packer_point_float32_3;
272 return new Packer_point_float32_4;
277 if (
sizeof(
double) ==
sizeof(PN_float64)) {
282 return new Packer_point_nativedouble_2;
284 return new Packer_point_nativedouble_3;
286 return new Packer_point_nativedouble_4;
291 return new Packer_point_float64_2;
293 return new Packer_point_float64_3;
295 return new Packer_point_float64_4;
302 return new Packer_point;
309 return new Packer_rgba_uint8_4;
318 return new Packer_argb_packed;
327 if (
sizeof(
float) ==
sizeof(PN_float32)) {
330 return new Packer_rgba_nativefloat_4;
332 return new Packer_rgba_float32_4;
342 return new Packer_color;
346 <<
"GeomVertexColumn with contents C_normal must have 3 or 4 components!\n";
354 if (
sizeof(
float) ==
sizeof(PN_float32)) {
357 return new Packer_nativefloat_3;
359 return new Packer_float32_3;
369 if (
sizeof(
double) ==
sizeof(PN_float64)) {
372 return new Packer_nativedouble_3;
374 return new Packer_float64_3;
415 _name = DCAST(InternalName, p_list[pi++]);
432 _numeric_type = (NumericType)scan.
get_uint8();
436 _column_alignment = 1;
449 GeomVertexColumn::Packer::
458 float GeomVertexColumn::Packer::
459 get_data1f(
const unsigned char *pointer) {
460 switch (_column->get_numeric_type()) {
462 return maybe_scale_color_f(*pointer);
465 return *(
const PN_uint16 *)pointer;
468 return *(
const PN_uint32 *)pointer;
472 PN_uint32 dword = *(
const PN_uint32 *)pointer;
478 PN_uint32 dword = *(
const PN_uint32 *)pointer;
483 return *(
const PN_float32 *)pointer;
486 return *(
const PN_float64 *)pointer;
489 nassertr(
false, 0.0f);
501 get_data2f(
const unsigned char *pointer) {
502 if (_column->get_num_values() == 1) {
503 _v2.set(get_data1f(pointer), 0.0f);
507 switch (_column->get_numeric_type()) {
509 maybe_scale_color_f(pointer[0], pointer[1]);
514 const PN_uint16 *pi = (
const PN_uint16 *)pointer;
515 _v2.set(pi[0], pi[1]);
521 const PN_uint32 *pi = (
const PN_uint32 *)pointer;
522 _v2.set(pi[0], pi[1]);
528 PN_uint32 dword = *(
const PN_uint32 *)pointer;
536 PN_uint32 dword = *(
const PN_uint32 *)pointer;
544 const PN_float32 *pi = (
const PN_float32 *)pointer;
545 _v2.set(pi[0], pi[1]);
551 const PN_float64 *pi = (
const PN_float64 *)pointer;
552 _v2.set(pi[0], pi[1]);
557 nassertr(
false, _v2);
570 get_data3f(
const unsigned char *pointer) {
571 switch (_column->get_num_values()) {
573 _v3.set(get_data1f(pointer), 0.0f, 0.0f);
579 _v3.set(v2[0], v2[1], 0.0f);
584 switch (_column->get_numeric_type()) {
586 maybe_scale_color_f(pointer[0], pointer[1], pointer[2]);
591 const PN_uint16 *pi = (
const PN_uint16 *)pointer;
592 _v3.set(pi[0], pi[1], pi[2]);
598 const PN_uint32 *pi = (
const PN_uint32 *)pointer;
599 _v3.set(pi[0], pi[1], pi[2]);
605 PN_uint32 dword = *(
const PN_uint32 *)pointer;
614 PN_uint32 dword = *(
const PN_uint32 *)pointer;
623 const PN_float32 *pi = (
const PN_float32 *)pointer;
624 _v3.set(pi[0], pi[1], pi[2]);
630 const PN_float64 *pi = (
const PN_float64 *)pointer;
631 _v3.set(pi[0], pi[1], pi[2]);
636 nassertr(
false, _v3);
649 get_data4f(
const unsigned char *pointer) {
650 switch (_column->get_num_values()) {
652 _v4.set(get_data1f(pointer), 0.0f, 0.0f, 0.0f);
658 _v4.set(v2[0], v2[1], 0.0f, 0.0f);
665 _v4.set(v3[0], v3[1], v3[2], 0.0f);
670 switch (_column->get_numeric_type()) {
672 maybe_scale_color_f(pointer[0], pointer[1], pointer[2], pointer[3]);
677 const PN_uint16 *pi = (
const PN_uint16 *)pointer;
678 _v4.set(pi[0], pi[1], pi[2], pi[3]);
684 const PN_uint32 *pi = (
const PN_uint32 *)pointer;
685 _v4.set(pi[0], pi[1], pi[2], pi[3]);
691 PN_uint32 dword = *(
const PN_uint32 *)pointer;
701 PN_uint32 dword = *(
const PN_uint32 *)pointer;
711 const PN_float32 *pi = (
const PN_float32 *)pointer;
712 _v4.set(pi[0], pi[1], pi[2], pi[3]);
718 const PN_float64 *pi = (
const PN_float64 *)pointer;
719 _v4.set(pi[0], pi[1], pi[2], pi[3]);
724 nassertr(
false, _v4);
736 double GeomVertexColumn::Packer::
737 get_data1d(
const unsigned char *pointer) {
738 switch (_column->get_numeric_type()) {
740 return maybe_scale_color_d(*pointer);
743 return *(
const PN_uint16 *)pointer;
746 return *(
const PN_uint32 *)pointer;
750 PN_uint32 dword = *(
const PN_uint32 *)pointer;
756 PN_uint32 dword = *(
const PN_uint32 *)pointer;
761 return *(
const PN_float32 *)pointer;
764 return *(
const PN_float64 *)pointer;
767 nassertr(
false, 0.0f);
779 get_data2d(
const unsigned char *pointer) {
780 if (_column->get_num_values() == 1) {
781 _v2d.set(get_data1d(pointer), 0.0f);
785 switch (_column->get_numeric_type()) {
787 maybe_scale_color_d(pointer[0], pointer[1]);
792 const PN_uint16 *pi = (
const PN_uint16 *)pointer;
793 _v2d.set(pi[0], pi[1]);
799 const PN_uint32 *pi = (
const PN_uint32 *)pointer;
800 _v2d.set(pi[0], pi[1]);
806 PN_uint32 dword = *(
const PN_uint32 *)pointer;
814 PN_uint32 dword = *(
const PN_uint32 *)pointer;
822 const PN_float32 *pi = (
const PN_float32 *)pointer;
823 _v2d.set(pi[0], pi[1]);
829 const PN_float64 *pi = (
const PN_float64 *)pointer;
830 _v2d.set(pi[0], pi[1]);
835 nassertr(
false, _v2d);
848 get_data3d(
const unsigned char *pointer) {
849 switch (_column->get_num_values()) {
851 _v3d.set(get_data1d(pointer), 0.0f, 0.0f);
857 _v3d.set(v2[0], v2[1], 0.0f);
862 switch (_column->get_numeric_type()) {
864 maybe_scale_color_d(pointer[0], pointer[1], pointer[2]);
869 const PN_uint16 *pi = (
const PN_uint16 *)pointer;
870 _v3d.set(pi[0], pi[1], pi[2]);
876 const PN_uint32 *pi = (
const PN_uint32 *)pointer;
877 _v3d.set(pi[0], pi[1], pi[2]);
883 PN_uint32 dword = *(
const PN_uint32 *)pointer;
892 PN_uint32 dword = *(
const PN_uint32 *)pointer;
901 const PN_float32 *pi = (
const PN_float32 *)pointer;
902 _v3d.set(pi[0], pi[1], pi[2]);
908 const PN_float64 *pi = (
const PN_float64 *)pointer;
909 _v3d.set(pi[0], pi[1], pi[2]);
914 nassertr(
false, _v3d);
927 get_data4d(
const unsigned char *pointer) {
928 switch (_column->get_num_values()) {
930 _v4d.set(get_data1d(pointer), 0.0f, 0.0f, 0.0f);
936 _v4d.set(v2[0], v2[1], 0.0f, 0.0f);
943 _v4d.set(v3[0], v3[1], v3[2], 0.0f);
948 switch (_column->get_numeric_type()) {
950 maybe_scale_color_d(pointer[0], pointer[1], pointer[2], pointer[3]);
955 const PN_uint16 *pi = (
const PN_uint16 *)pointer;
956 _v4d.set(pi[0], pi[1], pi[2], pi[3]);
962 const PN_uint32 *pi = (
const PN_uint32 *)pointer;
963 _v4d.set(pi[0], pi[1], pi[2], pi[3]);
969 PN_uint32 dword = *(
const PN_uint32 *)pointer;
979 PN_uint32 dword = *(
const PN_uint32 *)pointer;
989 const PN_float32 *pi = (
const PN_float32 *)pointer;
990 _v4d.set(pi[0], pi[1], pi[2], pi[3]);
996 const PN_float64 *pi = (
const PN_float64 *)pointer;
997 _v4d.set(pi[0], pi[1], pi[2], pi[3]);
1002 nassertr(
false, _v4d);
1014 int GeomVertexColumn::Packer::
1015 get_data1i(
const unsigned char *pointer) {
1016 switch (_column->get_numeric_type()) {
1021 return *(
const PN_uint16 *)pointer;
1024 return *(
const PN_uint32 *)pointer;
1026 case NT_packed_dcba:
1028 PN_uint32 dword = *(
const PN_uint32 *)pointer;
1032 case NT_packed_dabc:
1034 PN_uint32 dword = *(
const PN_uint32 *)pointer;
1039 return (
int)*(
const PN_float32 *)pointer;
1042 return (
int)*(
const PN_float64 *)pointer;
1057 get_data2i(
const unsigned char *pointer) {
1058 switch (_column->get_num_values()) {
1060 _v2i.set(get_data1i(pointer), 0);
1064 switch (_column->get_numeric_type()) {
1066 _v2i.set(pointer[0], pointer[1]);
1071 const PN_uint16 *pi = (
const PN_uint16 *)pointer;
1072 _v2i.set(pi[0], pi[1]);
1078 const PN_uint32 *pi = (
const PN_uint32 *)pointer;
1079 _v2i.set(pi[0], pi[1]);
1083 case NT_packed_dcba:
1085 PN_uint32 dword = *(
const PN_uint32 *)pointer;
1091 case NT_packed_dabc:
1093 PN_uint32 dword = *(
const PN_uint32 *)pointer;
1101 const PN_float32 *pi = (
const PN_float32 *)pointer;
1102 _v2i.set((
int)pi[0], (
int)pi[1]);
1108 const PN_float64 *pi = (
const PN_float64 *)pointer;
1109 _v2i.set((
int)pi[0], (
int)pi[1]);
1114 nassertr(
false, _v2i);
1127 get_data3i(
const unsigned char *pointer) {
1128 switch (_column->get_num_values()) {
1130 _v3i.set(get_data1i(pointer), 0, 0);
1136 _v3i.set(v2[0], v2[1], 0);
1141 switch (_column->get_numeric_type()) {
1143 _v3i.set(pointer[0], pointer[1], 0);
1148 const PN_uint16 *pi = (
const PN_uint16 *)pointer;
1149 _v3i.set(pi[0], pi[1], pi[2]);
1155 const PN_uint32 *pi = (
const PN_uint32 *)pointer;
1156 _v3i.set(pi[0], pi[1], pi[2]);
1160 case NT_packed_dcba:
1162 PN_uint32 dword = *(
const PN_uint32 *)pointer;
1169 case NT_packed_dabc:
1171 PN_uint32 dword = *(
const PN_uint32 *)pointer;
1180 const PN_float32 *pi = (
const PN_float32 *)pointer;
1181 _v3i.set((
int)pi[0], (
int)pi[1], (
int)pi[2]);
1187 const PN_float64 *pi = (
const PN_float64 *)pointer;
1188 _v3i.set((
int)pi[0], (
int)pi[1], (
int)pi[2]);
1193 nassertr(
false, _v3i);
1206 get_data4i(
const unsigned char *pointer) {
1207 switch (_column->get_num_values()) {
1209 _v4i.set(get_data1i(pointer), 0, 0, 0);
1215 _v4i.set(v2[0], v2[1], 0, 0);
1222 _v4i.set(v3[0], v3[1], v3[2], 0);
1227 switch (_column->get_numeric_type()) {
1229 _v4i.set(pointer[0], pointer[1], pointer[2], pointer[3]);
1234 const PN_uint16 *pi = (
const PN_uint16 *)pointer;
1235 _v4i.set(pi[0], pi[1], pi[2], pi[3]);
1241 const PN_uint32 *pi = (
const PN_uint32 *)pointer;
1242 _v4i.set(pi[0], pi[1], pi[2], pi[3]);
1246 case NT_packed_dcba:
1248 PN_uint32 dword = *(
const PN_uint32 *)pointer;
1256 case NT_packed_dabc:
1258 PN_uint32 dword = *(
const PN_uint32 *)pointer;
1268 const PN_float32 *pi = (
const PN_float32 *)pointer;
1269 _v4i.set((
int)pi[0], (
int)pi[1], (
int)pi[2], (
int)pi[3]);
1275 const PN_float64 *pi = (
const PN_float64 *)pointer;
1276 _v4i.set((
int)pi[0], (
int)pi[1], (
int)pi[2], (
int)pi[3]);
1281 nassertr(
false, _v4i);
1293 void GeomVertexColumn::Packer::
1294 set_data1f(
unsigned char *pointer,
float data) {
1295 switch (_column->get_num_values()) {
1297 switch (_column->get_numeric_type()) {
1299 *pointer = maybe_unscale_color_f(data);
1303 *(PN_uint16 *)pointer = (
unsigned int)data;
1307 *(PN_uint32 *)pointer = (
unsigned int)data;
1310 case NT_packed_dcba:
1311 case NT_packed_dabc:
1316 *(PN_float32 *)pointer = data;
1320 *(PN_float64 *)pointer = data;
1333 set_data3f(pointer,
LVecBase3f(data, 0.0f, 0.0f));
1337 set_data4f(pointer,
LVecBase4f(data, 0.0f, 0.0f, 0.0f));
1347 void GeomVertexColumn::Packer::
1348 set_data2f(
unsigned char *pointer,
const LVecBase2f &data) {
1349 switch (_column->get_num_values()) {
1351 set_data1f(pointer, data[0]);
1354 switch (_column->get_numeric_type()) {
1356 maybe_unscale_color_f(data);
1363 PN_uint16 *pi = (PN_uint16 *)pointer;
1364 pi[0] = (
unsigned int)data[0];
1365 pi[1] = (
unsigned int)data[1];
1371 PN_uint32 *pi = (PN_uint32 *)pointer;
1372 pi[0] = (
unsigned int)data[0];
1373 pi[1] = (
unsigned int)data[1];
1377 case NT_packed_dcba:
1378 case NT_packed_dabc:
1384 PN_float32 *pi = (PN_float32 *)pointer;
1392 PN_float64 *pi = (PN_float64 *)pointer;
1404 set_data3f(pointer,
LVecBase3f(data[0], data[1], 0.0f));
1408 set_data4f(pointer,
LVecBase4f(data[0], data[1], 0.0f, 0.0f));
1418 void GeomVertexColumn::Packer::
1419 set_data3f(
unsigned char *pointer,
const LVecBase3f &data) {
1420 switch (_column->get_num_values()) {
1422 set_data1f(pointer, data[0]);
1426 set_data2f(pointer,
LVecBase2f(data[0], data[1]));
1430 switch (_column->get_numeric_type()) {
1432 maybe_unscale_color_f(data);
1440 PN_uint16 *pi = (PN_uint16 *)pointer;
1441 pi[0] = (
unsigned int)data[0];
1442 pi[1] = (
unsigned int)data[1];
1443 pi[2] = (
unsigned int)data[2];
1449 PN_uint32 *pi = (PN_uint32 *)pointer;
1450 pi[0] = (
unsigned int)data[0];
1451 pi[1] = (
unsigned int)data[1];
1452 pi[2] = (
unsigned int)data[2];
1456 case NT_packed_dcba:
1457 case NT_packed_dabc:
1463 PN_float32 *pi = (PN_float32 *)pointer;
1472 PN_float64 *pi = (PN_float64 *)pointer;
1485 set_data4f(pointer,
LVecBase4f(data[0], data[1], data[2], 0.0f));
1495 void GeomVertexColumn::Packer::
1496 set_data4f(
unsigned char *pointer,
const LVecBase4f &data) {
1497 switch (_column->get_num_values()) {
1499 set_data1f(pointer, data[0]);
1503 set_data2f(pointer,
LVecBase2f(data[0], data[1]));
1507 set_data3f(pointer,
LVecBase3f(data[0], data[1], data[2]));
1511 switch (_column->get_numeric_type()) {
1513 maybe_unscale_color_f(data);
1522 PN_uint16 *pi = (PN_uint16 *)pointer;
1523 pi[0] = (
unsigned int)data[0];
1524 pi[1] = (
unsigned int)data[1];
1525 pi[2] = (
unsigned int)data[2];
1526 pi[3] = (
unsigned int)data[3];
1532 PN_uint32 *pi = (PN_uint32 *)pointer;
1533 pi[0] = (
unsigned int)data[0];
1534 pi[1] = (
unsigned int)data[1];
1535 pi[2] = (
unsigned int)data[2];
1536 pi[3] = (
unsigned int)data[3];
1540 case NT_packed_dcba:
1541 maybe_unscale_color_f(data);
1545 case NT_packed_dabc:
1546 maybe_unscale_color_f(data);
1552 PN_float32 *pi = (PN_float32 *)pointer;
1562 PN_float64 *pi = (PN_float64 *)pointer;
1582 void GeomVertexColumn::Packer::
1583 set_data1d(
unsigned char *pointer,
double data) {
1584 switch (_column->get_num_values()) {
1586 switch (_column->get_numeric_type()) {
1588 *pointer = maybe_unscale_color_d(data);
1592 *(PN_uint16 *)pointer = (
unsigned int)data;
1596 *(PN_uint32 *)pointer = (
unsigned int)data;
1599 case NT_packed_dcba:
1600 case NT_packed_dabc:
1605 *(PN_float32 *)pointer = data;
1609 *(PN_float64 *)pointer = data;
1622 set_data3d(pointer,
LVecBase3d(data, 0.0f, 0.0f));
1626 set_data4d(pointer,
LVecBase4d(data, 0.0f, 0.0f, 0.0f));
1636 void GeomVertexColumn::Packer::
1637 set_data2d(
unsigned char *pointer,
const LVecBase2d &data) {
1638 switch (_column->get_num_values()) {
1640 set_data1d(pointer, data[0]);
1643 switch (_column->get_numeric_type()) {
1645 maybe_unscale_color_d(data);
1652 PN_uint16 *pi = (PN_uint16 *)pointer;
1653 pi[0] = (
unsigned int)data[0];
1654 pi[1] = (
unsigned int)data[1];
1660 PN_uint32 *pi = (PN_uint32 *)pointer;
1661 pi[0] = (
unsigned int)data[0];
1662 pi[1] = (
unsigned int)data[1];
1666 case NT_packed_dcba:
1667 case NT_packed_dabc:
1673 PN_float32 *pi = (PN_float32 *)pointer;
1681 PN_float64 *pi = (PN_float64 *)pointer;
1693 set_data3d(pointer,
LVecBase3d(data[0], data[1], 0.0f));
1697 set_data4d(pointer,
LVecBase4d(data[0], data[1], 0.0f, 0.0f));
1707 void GeomVertexColumn::Packer::
1708 set_data3d(
unsigned char *pointer,
const LVecBase3d &data) {
1709 switch (_column->get_num_values()) {
1711 set_data1d(pointer, data[0]);
1715 set_data2d(pointer,
LVecBase2d(data[0], data[1]));
1719 switch (_column->get_numeric_type()) {
1721 maybe_unscale_color_d(data);
1729 PN_uint16 *pi = (PN_uint16 *)pointer;
1730 pi[0] = (
unsigned int)data[0];
1731 pi[1] = (
unsigned int)data[1];
1732 pi[2] = (
unsigned int)data[2];
1738 PN_uint32 *pi = (PN_uint32 *)pointer;
1739 pi[0] = (
unsigned int)data[0];
1740 pi[1] = (
unsigned int)data[1];
1741 pi[2] = (
unsigned int)data[2];
1745 case NT_packed_dcba:
1746 case NT_packed_dabc:
1752 PN_float32 *pi = (PN_float32 *)pointer;
1761 PN_float64 *pi = (PN_float64 *)pointer;
1774 set_data4d(pointer,
LVecBase4d(data[0], data[1], data[2], 0.0f));
1784 void GeomVertexColumn::Packer::
1785 set_data4d(
unsigned char *pointer,
const LVecBase4d &data) {
1786 switch (_column->get_num_values()) {
1788 set_data1d(pointer, data[0]);
1792 set_data2d(pointer,
LVecBase2d(data[0], data[1]));
1796 set_data3d(pointer,
LVecBase3d(data[0], data[1], data[2]));
1800 switch (_column->get_numeric_type()) {
1802 maybe_unscale_color_d(data);
1811 PN_uint16 *pi = (PN_uint16 *)pointer;
1812 pi[0] = (
unsigned int)data[0];
1813 pi[1] = (
unsigned int)data[1];
1814 pi[2] = (
unsigned int)data[2];
1815 pi[3] = (
unsigned int)data[3];
1821 PN_uint32 *pi = (PN_uint32 *)pointer;
1822 pi[0] = (
unsigned int)data[0];
1823 pi[1] = (
unsigned int)data[1];
1824 pi[2] = (
unsigned int)data[2];
1825 pi[3] = (
unsigned int)data[3];
1829 case NT_packed_dcba:
1830 maybe_unscale_color_d(data);
1834 case NT_packed_dabc:
1835 maybe_unscale_color_d(data);
1841 PN_float32 *pi = (PN_float32 *)pointer;
1851 PN_float64 *pi = (PN_float64 *)pointer;
1871 void GeomVertexColumn::Packer::
1872 set_data1i(
unsigned char *pointer,
int data) {
1873 switch (_column->get_num_values()) {
1875 switch (_column->get_numeric_type()) {
1878 nassertv((*pointer) == data);
1882 *(PN_uint16 *)pointer = data;
1883 nassertv(*(PN_uint16 *)pointer == data);
1887 *(PN_uint32 *)pointer = data;
1890 case NT_packed_dcba:
1891 case NT_packed_dabc:
1896 *(PN_float32 *)pointer = (
float)data;
1900 *(PN_float64 *)pointer = (
double)data;
1917 set_data4i(pointer,
LVecBase4i(data, 0, 0, 0));
1927 void GeomVertexColumn::Packer::
1928 set_data2i(
unsigned char *pointer,
const LVecBase2i &data) {
1929 switch (_column->get_num_values()) {
1931 set_data1i(pointer, data[0]);
1935 switch (_column->get_numeric_type()) {
1937 pointer[0] = data[0];
1938 pointer[1] = data[1];
1943 PN_uint16 *pi = (PN_uint16 *)pointer;
1951 PN_uint32 *pi = (PN_uint32 *)pointer;
1957 case NT_packed_dcba:
1958 case NT_packed_dabc:
1964 PN_float32 *pi = (PN_float32 *)pointer;
1972 PN_float64 *pi = (PN_float64 *)pointer;
1984 set_data3i(pointer,
LVecBase3i(data[0], data[1], 0));
1988 set_data4i(pointer,
LVecBase4i(data[0], data[1], 0, 0));
1998 void GeomVertexColumn::Packer::
1999 set_data3i(
unsigned char *pointer,
const LVecBase3i &data) {
2000 switch (_column->get_num_values()) {
2002 set_data1i(pointer, data[0]);
2006 set_data2i(pointer,
LVecBase2i(data[0], data[1]));
2010 switch (_column->get_numeric_type()) {
2012 pointer[0] = data[0];
2013 pointer[1] = data[1];
2014 pointer[2] = data[2];
2019 PN_uint16 *pi = (PN_uint16 *)pointer;
2028 PN_uint32 *pi = (PN_uint32 *)pointer;
2035 case NT_packed_dcba:
2036 case NT_packed_dabc:
2042 PN_float32 *pi = (PN_float32 *)pointer;
2051 PN_float64 *pi = (PN_float64 *)pointer;
2064 set_data4i(pointer,
LVecBase4i(data[0], data[1], data[2], 0));
2074 void GeomVertexColumn::Packer::
2075 set_data4i(
unsigned char *pointer,
const LVecBase4i &data) {
2076 switch (_column->get_num_values()) {
2078 set_data1i(pointer, data[0]);
2082 set_data2i(pointer,
LVecBase2i(data[0], data[1]));
2086 set_data3i(pointer,
LVecBase3i(data[0], data[1], data[2]));
2090 switch (_column->get_numeric_type()) {
2092 pointer[0] = data[0];
2093 pointer[1] = data[1];
2094 pointer[2] = data[2];
2095 pointer[3] = data[3];
2100 PN_uint16 *pi = (PN_uint16 *)pointer;
2110 PN_uint32 *pi = (PN_uint32 *)pointer;
2118 case NT_packed_dcba:
2122 case NT_packed_dabc:
2128 PN_float32 *pi = (PN_float32 *)pointer;
2138 PN_float64 *pi = (PN_float64 *)pointer;
2158 float GeomVertexColumn::Packer_point::
2159 get_data1f(
const unsigned char *pointer) {
2160 if (_column->get_num_values() == 4) {
2162 return v4[0] / v4[3];
2164 return Packer::get_data1f(pointer);
2173 const LVecBase2f &GeomVertexColumn::Packer_point::
2174 get_data2f(
const unsigned char *pointer) {
2175 if (_column->get_num_values() == 4) {
2177 _v2.set(v4[0] / v4[3], v4[1] / v4[3]);
2180 return Packer::get_data2f(pointer);
2189 const LVecBase3f &GeomVertexColumn::Packer_point::
2190 get_data3f(
const unsigned char *pointer) {
2191 if (_column->get_num_values() == 4) {
2193 _v3.set(v4[0] / v4[3], v4[1] / v4[3], v4[2] / v4[3]);
2196 return Packer::get_data3f(pointer);
2205 const LVecBase4f &GeomVertexColumn::Packer_point::
2206 get_data4f(
const unsigned char *pointer) {
2207 switch (_column->get_num_values()) {
2209 _v4.set(get_data1i(pointer), 0.0f, 0.0f, 1.0f);
2215 _v4.set(v2[0], v2[1], 0.0f, 1.0f);
2222 _v4.set(v3[0], v3[1], v3[2], 1.0f);
2227 switch (_column->get_numeric_type()) {
2229 maybe_scale_color_f(pointer[0], pointer[1], pointer[2], pointer[3]);
2234 const PN_uint16 *pi = (
const PN_uint16 *)pointer;
2235 _v4.set(pi[0], pi[1], pi[2], pi[3]);
2241 const PN_uint32 *pi = (
const PN_uint32 *)pointer;
2242 _v4.set(pi[0], pi[1], pi[2], pi[3]);
2246 case NT_packed_dcba:
2248 PN_uint32 dword = *(
const PN_uint32 *)pointer;
2256 case NT_packed_dabc:
2258 PN_uint32 dword = *(
const PN_uint32 *)pointer;
2268 const PN_float32 *pi = (
const PN_float32 *)pointer;
2269 _v4.set(pi[0], pi[1], pi[2], pi[3]);
2275 const PN_float64 *pi = (
const PN_float64 *)pointer;
2276 _v4.set(pi[0], pi[1], pi[2], pi[3]);
2281 nassertr(
false, _v4);
2293 double GeomVertexColumn::Packer_point::
2294 get_data1d(
const unsigned char *pointer) {
2295 if (_column->get_num_values() == 4) {
2297 return v4[0] / v4[3];
2299 return Packer::get_data1d(pointer);
2308 const LVecBase2d &GeomVertexColumn::Packer_point::
2309 get_data2d(
const unsigned char *pointer) {
2310 if (_column->get_num_values() == 4) {
2312 _v2d.set(v4[0] / v4[3], v4[1] / v4[3]);
2315 return Packer::get_data2d(pointer);
2324 const LVecBase3d &GeomVertexColumn::Packer_point::
2325 get_data3d(
const unsigned char *pointer) {
2326 if (_column->get_num_values() == 4) {
2328 _v3d.set(v4[0] / v4[3], v4[1] / v4[3], v4[2] / v4[3]);
2331 return Packer::get_data3d(pointer);
2340 const LVecBase4d &GeomVertexColumn::Packer_point::
2341 get_data4d(
const unsigned char *pointer) {
2342 switch (_column->get_num_values()) {
2344 _v4d.set(get_data1i(pointer), 0.0f, 0.0f, 1.0f);
2350 _v4d.set(v2[0], v2[1], 0.0f, 1.0f);
2357 _v4d.set(v3[0], v3[1], v3[2], 1.0f);
2362 switch (_column->get_numeric_type()) {
2364 maybe_scale_color_d(pointer[0], pointer[1], pointer[2], pointer[3]);
2369 const PN_uint16 *pi = (
const PN_uint16 *)pointer;
2370 _v4d.set(pi[0], pi[1], pi[2], pi[3]);
2376 const PN_uint32 *pi = (
const PN_uint32 *)pointer;
2377 _v4d.set(pi[0], pi[1], pi[2], pi[3]);
2381 case NT_packed_dcba:
2383 PN_uint32 dword = *(
const PN_uint32 *)pointer;
2391 case NT_packed_dabc:
2393 PN_uint32 dword = *(
const PN_uint32 *)pointer;
2403 const PN_float32 *pi = (
const PN_float32 *)pointer;
2404 _v4d.set(pi[0], pi[1], pi[2], pi[3]);
2410 const PN_float64 *pi = (
const PN_float64 *)pointer;
2411 _v4d.set(pi[0], pi[1], pi[2], pi[3]);
2416 nassertr(
false, _v4d);
2428 void GeomVertexColumn::Packer_point::
2429 set_data1f(
unsigned char *pointer,
float data) {
2430 if (_column->get_num_values() == 4) {
2431 set_data4f(pointer,
LVecBase4f(data, 0.0f, 0.0f, 1.0f));
2433 Packer::set_data1f(pointer, data);
2442 void GeomVertexColumn::Packer_point::
2443 set_data2f(
unsigned char *pointer,
const LVecBase2f &data) {
2444 if (_column->get_num_values() == 4) {
2445 set_data4f(pointer,
LVecBase4f(data[0], data[1], 0.0f, 1.0f));
2447 Packer::set_data2f(pointer, data);
2456 void GeomVertexColumn::Packer_point::
2457 set_data3f(
unsigned char *pointer,
const LVecBase3f &data) {
2458 if (_column->get_num_values() == 4) {
2459 set_data4f(pointer,
LVecBase4f(data[0], data[1], data[2], 1.0f));
2461 Packer::set_data3f(pointer, data);
2470 void GeomVertexColumn::Packer_point::
2471 set_data4f(
unsigned char *pointer,
const LVecBase4f &data) {
2472 switch (_column->get_num_values()) {
2474 set_data1f(pointer, data[0] / data[3]);
2478 set_data2f(pointer,
LVecBase2f(data[0] / data[3], data[1] / data[3]));
2482 set_data3f(pointer,
LVecBase3f(data[0] / data[3], data[1] / data[3], data[2] / data[3]));
2486 switch (_column->get_numeric_type()) {
2488 maybe_unscale_color_f(data);
2497 PN_uint16 *pi = (PN_uint16 *)pointer;
2498 pi[0] = (
unsigned int)data[0];
2499 pi[1] = (
unsigned int)data[1];
2500 pi[2] = (
unsigned int)data[2];
2501 pi[3] = (
unsigned int)data[3];
2507 PN_uint32 *pi = (PN_uint32 *)pointer;
2508 pi[0] = (
unsigned int)data[0];
2509 pi[1] = (
unsigned int)data[1];
2510 pi[2] = (
unsigned int)data[2];
2511 pi[3] = (
unsigned int)data[3];
2515 case NT_packed_dcba:
2516 maybe_unscale_color_f(data);
2520 case NT_packed_dabc:
2521 maybe_unscale_color_f(data);
2527 PN_float32 *pi = (PN_float32 *)pointer;
2537 PN_float64 *pi = (PN_float64 *)pointer;
2557 void GeomVertexColumn::Packer_point::
2558 set_data1d(
unsigned char *pointer,
double data) {
2559 if (_column->get_num_values() == 4) {
2560 set_data4d(pointer,
LVecBase4d(data, 0.0f, 0.0f, 1.0f));
2562 Packer::set_data1d(pointer, data);
2571 void GeomVertexColumn::Packer_point::
2572 set_data2d(
unsigned char *pointer,
const LVecBase2d &data) {
2573 if (_column->get_num_values() == 4) {
2574 set_data4d(pointer,
LVecBase4d(data[0], data[1], 0.0f, 1.0f));
2576 Packer::set_data2d(pointer, data);
2585 void GeomVertexColumn::Packer_point::
2586 set_data3d(
unsigned char *pointer,
const LVecBase3d &data) {
2587 if (_column->get_num_values() == 4) {
2588 set_data4d(pointer,
LVecBase4d(data[0], data[1], data[2], 1.0f));
2590 Packer::set_data3d(pointer, data);
2599 void GeomVertexColumn::Packer_point::
2600 set_data4d(
unsigned char *pointer,
const LVecBase4d &data) {
2601 switch (_column->get_num_values()) {
2603 set_data1d(pointer, data[0] / data[3]);
2607 set_data2d(pointer,
LVecBase2d(data[0] / data[3], data[1] / data[3]));
2611 set_data3d(pointer,
LVecBase3d(data[0] / data[3], data[1] / data[3], data[2] / data[3]));
2615 switch (_column->get_numeric_type()) {
2617 maybe_unscale_color_d(data);
2626 PN_uint16 *pi = (PN_uint16 *)pointer;
2627 pi[0] = (
unsigned int)data[0];
2628 pi[1] = (
unsigned int)data[1];
2629 pi[2] = (
unsigned int)data[2];
2630 pi[3] = (
unsigned int)data[3];
2636 PN_uint32 *pi = (PN_uint32 *)pointer;
2637 pi[0] = (
unsigned int)data[0];
2638 pi[1] = (
unsigned int)data[1];
2639 pi[2] = (
unsigned int)data[2];
2640 pi[3] = (
unsigned int)data[3];
2644 case NT_packed_dcba:
2645 maybe_unscale_color_d(data);
2649 case NT_packed_dabc:
2650 maybe_unscale_color_d(data);
2656 PN_float32 *pi = (PN_float32 *)pointer;
2666 PN_float64 *pi = (PN_float64 *)pointer;
2686 const LVecBase4f &GeomVertexColumn::Packer_color::
2687 get_data4f(
const unsigned char *pointer) {
2688 switch (_column->get_num_values()) {
2690 _v4.set(get_data1i(pointer), 0.0f, 0.0f, 1.0f);
2696 _v4.set(v2[0], v2[1], 0.0f, 1.0f);
2703 _v4.set(v3[0], v3[1], v3[2], 1.0f);
2708 switch (_column->get_numeric_type()) {
2710 maybe_scale_color_f(pointer[0], pointer[1], pointer[2], pointer[3]);
2715 const PN_uint16 *pi = (
const PN_uint16 *)pointer;
2716 _v4.set(pi[0], pi[1], pi[2], pi[3]);
2722 const PN_uint32 *pi = (
const PN_uint32 *)pointer;
2723 _v4.set(pi[0], pi[1], pi[2], pi[3]);
2727 case NT_packed_dcba:
2729 PN_uint32 dword = *(
const PN_uint32 *)pointer;
2737 case NT_packed_dabc:
2739 PN_uint32 dword = *(
const PN_uint32 *)pointer;
2749 const PN_float32 *pi = (
const PN_float32 *)pointer;
2750 _v4.set(pi[0], pi[1], pi[2], pi[3]);
2756 const PN_float64 *pi = (
const PN_float64 *)pointer;
2757 _v4.set(pi[0], pi[1], pi[2], pi[3]);
2762 nassertr(
false, _v4);
2774 const LVecBase4d &GeomVertexColumn::Packer_color::
2775 get_data4d(
const unsigned char *pointer) {
2776 switch (_column->get_num_values()) {
2778 _v4d.set(get_data1i(pointer), 0.0f, 0.0f, 1.0f);
2784 _v4d.set(v2[0], v2[1], 0.0f, 1.0f);
2791 _v4d.set(v3[0], v3[1], v3[2], 1.0f);
2796 switch (_column->get_numeric_type()) {
2798 maybe_scale_color_d(pointer[0], pointer[1], pointer[2], pointer[3]);
2803 const PN_uint16 *pi = (
const PN_uint16 *)pointer;
2804 _v4d.set(pi[0], pi[1], pi[2], pi[3]);
2810 const PN_uint32 *pi = (
const PN_uint32 *)pointer;
2811 _v4d.set(pi[0], pi[1], pi[2], pi[3]);
2815 case NT_packed_dcba:
2817 PN_uint32 dword = *(
const PN_uint32 *)pointer;
2825 case NT_packed_dabc:
2827 PN_uint32 dword = *(
const PN_uint32 *)pointer;
2837 const PN_float32 *pi = (
const PN_float32 *)pointer;
2838 _v4d.set(pi[0], pi[1], pi[2], pi[3]);
2844 const PN_float64 *pi = (
const PN_float64 *)pointer;
2845 _v4d.set(pi[0], pi[1], pi[2], pi[3]);
2850 nassertr(
false, _v4d);
2862 void GeomVertexColumn::Packer_color::
2863 set_data1f(
unsigned char *pointer,
float data) {
2864 if (_column->get_num_values() == 4) {
2865 set_data4f(pointer,
LVecBase4f(data, 0.0f, 0.0f, 1.0f));
2867 Packer::set_data1f(pointer, data);
2876 void GeomVertexColumn::Packer_color::
2877 set_data2f(
unsigned char *pointer,
const LVecBase2f &data) {
2878 if (_column->get_num_values() == 4) {
2879 set_data4f(pointer,
LVecBase4f(data[0], data[1], 0.0f, 1.0f));
2881 Packer::set_data2f(pointer, data);
2890 void GeomVertexColumn::Packer_color::
2891 set_data3f(
unsigned char *pointer,
const LVecBase3f &data) {
2892 if (_column->get_num_values() == 4) {
2893 set_data4f(pointer,
LVecBase4f(data[0], data[1], data[2], 1.0f));
2895 Packer::set_data3f(pointer, data);
2904 void GeomVertexColumn::Packer_color::
2905 set_data1d(
unsigned char *pointer,
double data) {
2906 if (_column->get_num_values() == 4) {
2907 set_data4d(pointer,
LVecBase4d(data, 0.0f, 0.0f, 1.0f));
2909 Packer::set_data1d(pointer, data);
2918 void GeomVertexColumn::Packer_color::
2919 set_data2d(
unsigned char *pointer,
const LVecBase2d &data) {
2920 if (_column->get_num_values() == 4) {
2921 set_data4d(pointer,
LVecBase4d(data[0], data[1], 0.0f, 1.0f));
2923 Packer::set_data2d(pointer, data);
2932 void GeomVertexColumn::Packer_color::
2933 set_data3d(
unsigned char *pointer,
const LVecBase3d &data) {
2934 if (_column->get_num_values() == 4) {
2935 set_data4d(pointer,
LVecBase4d(data[0], data[1], data[2], 1.0f));
2937 Packer::set_data3d(pointer, data);
2946 const LVecBase3f &GeomVertexColumn::Packer_float32_3::
2947 get_data3f(
const unsigned char *pointer) {
2948 const PN_float32 *pi = (
const PN_float32 *)pointer;
2949 _v3.set(pi[0], pi[1], pi[2]);
2958 void GeomVertexColumn::Packer_float32_3::
2959 set_data3f(
unsigned char *pointer,
const LVecBase3f &data) {
2960 PN_float32 *pi = (PN_float32 *)pointer;
2971 const LVecBase2f &GeomVertexColumn::Packer_point_float32_2::
2972 get_data2f(
const unsigned char *pointer) {
2973 const PN_float32 *pi = (
const PN_float32 *)pointer;
2974 _v2.set(pi[0], pi[1]);
2983 void GeomVertexColumn::Packer_point_float32_2::
2984 set_data2f(
unsigned char *pointer,
const LVecBase2f &data) {
2985 PN_float32 *pi = (PN_float32 *)pointer;
2995 const LVecBase3f &GeomVertexColumn::Packer_point_float32_3::
2996 get_data3f(
const unsigned char *pointer) {
2997 const PN_float32 *pi = (
const PN_float32 *)pointer;
2998 _v3.set(pi[0], pi[1], pi[2]);
3007 void GeomVertexColumn::Packer_point_float32_3::
3008 set_data3f(
unsigned char *pointer,
const LVecBase3f &data) {
3009 PN_float32 *pi = (PN_float32 *)pointer;
3020 const LVecBase4f &GeomVertexColumn::Packer_point_float32_4::
3021 get_data4f(
const unsigned char *pointer) {
3022 const PN_float32 *pi = (
const PN_float32 *)pointer;
3023 _v4.set(pi[0], pi[1], pi[2], pi[3]);
3032 void GeomVertexColumn::Packer_point_float32_4::
3033 set_data4f(
unsigned char *pointer,
const LVecBase4f &data) {
3034 PN_float32 *pi = (PN_float32 *)pointer;
3046 const LVecBase3f &GeomVertexColumn::Packer_nativefloat_3::
3047 get_data3f(
const unsigned char *pointer) {
3056 const LVecBase2f &GeomVertexColumn::Packer_point_nativefloat_2::
3057 get_data2f(
const unsigned char *pointer) {
3066 const LVecBase3f &GeomVertexColumn::Packer_point_nativefloat_3::
3067 get_data3f(
const unsigned char *pointer) {
3076 const LVecBase4f &GeomVertexColumn::Packer_point_nativefloat_4::
3077 get_data4f(
const unsigned char *pointer) {
3086 const LVecBase3d &GeomVertexColumn::Packer_float64_3::
3087 get_data3d(
const unsigned char *pointer) {
3088 const PN_float64 *pi = (
const PN_float64 *)pointer;
3089 _v3d.set(pi[0], pi[1], pi[2]);
3098 void GeomVertexColumn::Packer_float64_3::
3099 set_data3d(
unsigned char *pointer,
const LVecBase3d &data) {
3100 PN_float64 *pi = (PN_float64 *)pointer;
3111 const LVecBase2d &GeomVertexColumn::Packer_point_float64_2::
3112 get_data2d(
const unsigned char *pointer) {
3113 const PN_float64 *pi = (
const PN_float64 *)pointer;
3114 _v2d.set(pi[0], pi[1]);
3123 void GeomVertexColumn::Packer_point_float64_2::
3124 set_data2d(
unsigned char *pointer,
const LVecBase2d &data) {
3125 PN_float64 *pi = (PN_float64 *)pointer;
3135 const LVecBase3d &GeomVertexColumn::Packer_point_float64_3::
3136 get_data3d(
const unsigned char *pointer) {
3137 const PN_float64 *pi = (
const PN_float64 *)pointer;
3138 _v3d.set(pi[0], pi[1], pi[2]);
3147 void GeomVertexColumn::Packer_point_float64_3::
3148 set_data3d(
unsigned char *pointer,
const LVecBase3d &data) {
3149 PN_float64 *pi = (PN_float64 *)pointer;
3160 const LVecBase4d &GeomVertexColumn::Packer_point_float64_4::
3161 get_data4d(
const unsigned char *pointer) {
3162 const PN_float64 *pi = (
const PN_float64 *)pointer;
3163 _v4d.set(pi[0], pi[1], pi[2], pi[3]);
3172 void GeomVertexColumn::Packer_point_float64_4::
3173 set_data4d(
unsigned char *pointer,
const LVecBase4d &data) {
3174 PN_float64 *pi = (PN_float64 *)pointer;
3186 const LVecBase3d &GeomVertexColumn::Packer_nativedouble_3::
3187 get_data3d(
const unsigned char *pointer) {
3196 const LVecBase2d &GeomVertexColumn::Packer_point_nativedouble_2::
3197 get_data2d(
const unsigned char *pointer) {
3206 const LVecBase3d &GeomVertexColumn::Packer_point_nativedouble_3::
3207 get_data3d(
const unsigned char *pointer) {
3216 const LVecBase4d &GeomVertexColumn::Packer_point_nativedouble_4::
3217 get_data4d(
const unsigned char *pointer) {
3226 const LVecBase4f &GeomVertexColumn::Packer_argb_packed::
3227 get_data4f(
const unsigned char *pointer) {
3228 PN_uint32 dword = *(
const PN_uint32 *)pointer;
3241 void GeomVertexColumn::Packer_argb_packed::
3242 set_data4f(
unsigned char *pointer,
const LVecBase4f &data) {
3247 for (
int i = 0; i < 4; i++) {
3251 newData[i] = data[i];
3254 ((
unsigned int)(newData[3] * 255.0f),
3255 (
unsigned int)(newData[0] * 255.0f),
3256 (
unsigned int)(newData[1] * 255.0f),
3257 (
unsigned int)(newData[2] * 255.0f));
3265 const LVecBase4f &GeomVertexColumn::Packer_rgba_uint8_4::
3266 get_data4f(
const unsigned char *pointer) {
3267 _v4.set((
float)pointer[0] / 255.0f,
3268 (
float)pointer[1] / 255.0f,
3269 (
float)pointer[2] / 255.0f,
3270 (
float)pointer[3] / 255.0f);
3279 void GeomVertexColumn::Packer_rgba_uint8_4::
3280 set_data4f(
unsigned char *pointer,
const LVecBase4f &data) {
3281 pointer[0] = (
unsigned int)(data[0] * 255.0f);
3282 pointer[1] = (
unsigned int)(data[1] * 255.0f);
3283 pointer[2] = (
unsigned int)(data[2] * 255.0f);
3284 pointer[3] = (
unsigned int)(data[3] * 255.0f);
3292 const LVecBase4f &GeomVertexColumn::Packer_rgba_float32_4::
3293 get_data4f(
const unsigned char *pointer) {
3294 const PN_float32 *pi = (
const PN_float32 *)pointer;
3295 _v4.set(pi[0], pi[1], pi[2], pi[3]);
3304 void GeomVertexColumn::Packer_rgba_float32_4::
3305 set_data4f(
unsigned char *pointer,
const LVecBase4f &data) {
3306 PN_float32 *pi = (PN_float32 *)pointer;
3318 const LVecBase4f &GeomVertexColumn::Packer_rgba_nativefloat_4::
3319 get_data4f(
const unsigned char *pointer) {
3328 int GeomVertexColumn::Packer_uint16_1::
3329 get_data1i(
const unsigned char *pointer) {
3330 return *(
const PN_uint16 *)pointer;
3338 void GeomVertexColumn::Packer_uint16_1::
3339 set_data1i(
unsigned char *pointer,
int data) {
3340 *(PN_uint16 *)pointer = data;
3341 nassertv(*(PN_uint16 *)pointer == data);
This is the base class for all three-component vectors and points.
void add_uint8(PN_uint8 value)
Adds an unsigned 8-bit integer to the datagram.
Contents get_contents() const
Returns the token representing the semantic meaning of the stored value.
void fillin(DatagramIterator &scan, BamReader *manager)
This internal function is called by make_from_bam to read in all of the relevant data from the BamFil...
This is the fundamental interface for extracting binary objects from a Bam file, as generated by a Ba...
void set_contents(Contents contents)
Changes the semantic meaning of an existing column.
static PN_uint32 pack_abcd(unsigned int a, unsigned int b, unsigned int c, unsigned int d)
Packs four values in a DirectX-style NT_packed_abcd value.
This is the base class for all two-component vectors and points.
NumericType get_numeric_type() const
Returns the token representing the numeric type of the data storage.
Base class for objects that can be written to and read from Bam files.
This is the base class for all two-component vectors and points.
void set_start(int start)
Changes the start byte of an existing column.
This is the base class for all three-component vectors and points.
This is the fundamental interface for writing binary objects to a Bam file, to be extracted later by ...
void set_num_components(int num_components)
Changes the number of components of an existing column.
PN_uint8 get_uint8()
Extracts an unsigned 8-bit integer.
void write_datagram(BamWriter *manager, Datagram &dg)
Writes the contents of this object to the datagram for shipping out to a Bam file.
This is the base class for all three-component vectors and points.
int get_file_minor_ver() const
Returns the minor version number of the Bam file currently being read.
This defines how a single column is interleaved within a vertex array stored within a Geom...
PN_uint16 get_uint16()
Extracts an unsigned 16-bit integer.
static unsigned int unpack_abcd_c(PN_uint32 data)
Returns the third packed value from a DirectX-style NT_packed_abcd.
int get_num_values() const
Returns the number of numeric values of the column: the number of distinct numeric values that go int...
void set_name(InternalName *name)
Replaces the name of an existing column.
This is the base class for all two-component vectors and points.
This is the base class for all three-component vectors and points.
void add_uint16(PN_uint16 value)
Adds an unsigned 16-bit integer to the datagram.
This is the base class for all three-component vectors and points.
This is the base class for all three-component vectors and points.
void set_numeric_type(NumericType numeric_type)
Changes the numeric type an existing column.
void set_column_alignment(int column_alignment)
Changes the column alignment of an existing column.
static unsigned int unpack_abcd_d(PN_uint32 data)
Returns the fourth packed value from a DirectX-style NT_packed_abcd.
static unsigned int unpack_abcd_b(PN_uint32 data)
Returns the second packed value from a DirectX-style NT_packed_abcd.
A class to retrieve the individual data elements previously stored in a Datagram. ...
const InternalName * get_name() const
Returns the name of this particular data field, e.g.
static unsigned int unpack_abcd_a(PN_uint32 data)
Returns the first packed value from a DirectX-style NT_packed_abcd.
int get_num_components() const
Returns the number of components of the column: the number of instances of the NumericType in each el...
An ordered list of data elements, formatted in memory for transmission over a socket or writing to a ...
int complete_pointers(TypedWritable **plist, BamReader *manager)
Receives an array of pointers, one for each time manager->read_pointer() was called in fillin()...
void write_pointer(Datagram &packet, const TypedWritable *dest)
The interface for writing a pointer to another object to a Bam file.
void read_pointer(DatagramIterator &scan)
The interface for reading a pointer to another object from a Bam file.