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.
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.
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.
const InternalName * get_name() const
Returns the name of this particular data field, e.g.
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.
int get_num_components() const
Returns the number of components of the column: the number of instances of the NumericType in each el...
This is the base class for all three-component vectors and points.
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.
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.
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_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.
Contents get_contents() const
Returns the token representing the semantic meaning of the stored value.
NumericType get_numeric_type() const
Returns the token representing the numeric type of the data storage.
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. ...
static unsigned int unpack_abcd_a(PN_uint32 data)
Returns the first packed value from a DirectX-style NT_packed_abcd.
int get_file_minor_ver() const
Returns the minor version number of the Bam file currently being read.
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.