25void GeomVertexColumn::
28 _num_components = copy._num_components;
29 _numeric_type = copy._numeric_type;
30 _contents = copy._contents;
32 _column_alignment = copy._column_alignment;
33 _num_elements = copy._num_elements;
34 _element_stride = copy._element_stride;
55 _num_components = num_components;
65 _numeric_type = numeric_type;
95 _column_alignment = column_alignment;
102void GeomVertexColumn::
103output(std::ostream &out)
const {
138 case NT_packed_ufloat:
145 if (_num_elements > 1) {
146 out <<
"[" << _num_elements <<
"]";
154void GeomVertexColumn::
156 nassertv(_num_components > 0 && _start >= 0);
158 _num_values = _num_components;
160 if (_numeric_type == NT_stdfloat) {
161 if (vertices_float64) {
162 _numeric_type = NT_float64;
164 _numeric_type = NT_float32;
168 switch (_numeric_type) {
171 _component_bytes = 2;
176 _component_bytes = 4;
181 _component_bytes = 1;
186 _component_bytes = 4;
191 _component_bytes = 4;
195 _component_bytes = 8;
202 case NT_packed_ufloat:
203 _component_bytes = 4;
208 if (_num_elements == 0) {
210 if (_contents == C_matrix) {
211 _num_elements = _num_components;
217 if (_column_alignment < 1) {
220 _column_alignment = max(_component_bytes, (
int)vertex_column_alignment);
224 _start = ((_start + _column_alignment - 1) / _column_alignment) * _column_alignment;
226 if (_element_stride < 1) {
227 _element_stride = _component_bytes * _num_components;
229 _total_bytes = _element_stride * _num_elements;
231 if (_packer !=
nullptr) {
235 _packer = make_packer();
236 _packer->_column =
this;
243GeomVertexColumn::Packer *GeomVertexColumn::
252 if (
sizeof(
float) ==
sizeof(PN_float32)) {
257 return new Packer_point_nativefloat_2;
259 return new Packer_point_nativefloat_3;
263 return new Packer_point_nativefloat_4;
265 return new Packer_point_float32_4;
271 return new Packer_point_float32_2;
273 return new Packer_point_float32_3;
275 return new Packer_point_float32_4;
280 if (
sizeof(
double) ==
sizeof(PN_float64)) {
285 return new Packer_point_nativedouble_2;
287 return new Packer_point_nativedouble_3;
289 return new Packer_point_nativedouble_4;
294 return new Packer_point_float64_2;
296 return new Packer_point_float64_3;
298 return new Packer_point_float64_4;
305 return new Packer_point;
311 return new Packer_rgba_uint8_4;
314 return new Packer_argb_packed;
317 if (
sizeof(
float) ==
sizeof(PN_float32) &&
321 return new Packer_rgba_nativefloat_4;
323 return new Packer_rgba_float32_4;
331 <<
"GeomVertexColumn with contents C_color must have 3 or 4 components!\n";
333 return new Packer_color;
338 <<
"GeomVertexColumn with contents C_normal must have 3 or 4 components!\n";
347 if (
sizeof(
float) ==
sizeof(PN_float32)) {
350 return new Packer_nativefloat_3;
352 return new Packer_float32_3;
362 if (
sizeof(
double) ==
sizeof(PN_float64)) {
365 return new Packer_nativedouble_3;
367 return new Packer_float64_3;
418 _name == InternalName::get_normal() && _contents == C_vector) {
419 _contents = C_normal;
434 _numeric_type = (NumericType)scan.
get_uint8();
438 _column_alignment = 1;
452GeomVertexColumn::Packer::
459float GeomVertexColumn::Packer::
460get_data1f(
const unsigned char *pointer) {
461 switch (_column->get_numeric_type()) {
463 return *(
const uint8_t *)pointer;
466 return *(
const uint16_t *)pointer;
469 return *(
const uint32_t *)pointer;
473 uint32_t dword = *(
const uint32_t *)pointer;
479 uint32_t dword = *(
const uint32_t *)pointer;
484 return *(
const PN_float32 *)pointer;
487 return *(
const PN_float64 *)pointer;
490 return *(
const int8_t *)pointer;
493 return *(
const int16_t *)pointer;
496 return *(
const int32_t *)pointer;
498 case NT_packed_ufloat:
500 uint32_t dword = *(
const uint32_t *)pointer;
505 nassertr(
false, 0.0f);
514const LVecBase2f &GeomVertexColumn::Packer::
515get_data2f(
const unsigned char *pointer) {
516 if (_column->get_num_values() == 1) {
517 _v2.set(get_data1f(pointer), 0.0f);
521 switch (_column->get_numeric_type()) {
524 const uint8_t *pi = (
const uint8_t *)pointer;
525 _v2.set(pi[0], pi[1]);
531 const uint16_t *pi = (
const uint16_t *)pointer;
532 _v2.set(pi[0], pi[1]);
538 const uint32_t *pi = (
const uint32_t *)pointer;
539 _v2.set(pi[0], pi[1]);
545 uint32_t dword = *(
const uint32_t *)pointer;
553 uint32_t dword = *(
const uint32_t *)pointer;
561 const PN_float32 *pi = (
const PN_float32 *)pointer;
562 _v2.set(pi[0], pi[1]);
568 const PN_float64 *pi = (
const PN_float64 *)pointer;
569 _v2.set(pi[0], pi[1]);
574 nassertr(
false, _v2);
579 const int8_t *pi = (
const int8_t *)pointer;
580 _v2.set(pi[0], pi[1]);
586 const int16_t *pi = (
const int16_t *)pointer;
587 _v2.set(pi[0], pi[1]);
593 const int32_t *pi = (
const int32_t *)pointer;
594 _v2.set(pi[0], pi[1]);
598 case NT_packed_ufloat:
599 nassertr(
false, _v2);
610const LVecBase3f &GeomVertexColumn::Packer::
611get_data3f(
const unsigned char *pointer) {
612 switch (_column->get_num_values()) {
614 _v3.set(get_data1f(pointer), 0.0f, 0.0f);
619 const LVecBase2f &v2 = get_data2f(pointer);
620 _v3.set(v2[0], v2[1], 0.0f);
625 switch (_column->get_numeric_type()) {
628 const uint8_t *pi = (
const uint8_t *)pointer;
629 _v3.set(pi[0], pi[1], pi[2]);
635 const uint16_t *pi = (
const uint16_t *)pointer;
636 _v3.set(pi[0], pi[1], pi[2]);
642 const uint32_t *pi = (
const uint32_t *)pointer;
643 _v3.set(pi[0], pi[1], pi[2]);
649 uint32_t dword = *(
const uint32_t *)pointer;
658 uint32_t dword = *(
const uint32_t *)pointer;
667 const PN_float32 *pi = (
const PN_float32 *)pointer;
668 _v3.set(pi[0], pi[1], pi[2]);
674 const PN_float64 *pi = (
const PN_float64 *)pointer;
675 _v3.set(pi[0], pi[1], pi[2]);
680 nassertr(
false, _v3);
685 const int8_t *pi = (
const int8_t *)pointer;
686 _v3.set(pi[0], pi[1], pi[2]);
692 const int16_t *pi = (
const int16_t *)pointer;
693 _v3.set(pi[0], pi[1], pi[2]);
699 const int32_t *pi = (
const int32_t *)pointer;
700 _v3.set(pi[0], pi[1], pi[2]);
704 case NT_packed_ufloat:
706 uint32_t dword = *(
const uint32_t *)pointer;
721const LVecBase4f &GeomVertexColumn::Packer::
722get_data4f(
const unsigned char *pointer) {
723 switch (_column->get_num_values()) {
725 _v4.set(get_data1f(pointer), 0.0f, 0.0f, 0.0f);
730 const LVecBase2f &v2 = get_data2f(pointer);
731 _v4.set(v2[0], v2[1], 0.0f, 0.0f);
737 const LVecBase3f &v3 = get_data3f(pointer);
738 _v4.set(v3[0], v3[1], v3[2], 0.0f);
743 switch (_column->get_numeric_type()) {
746 const uint8_t *pi = (
const uint8_t *)pointer;
747 _v4.set(pi[0], pi[1], pi[2], pi[3]);
753 const uint16_t *pi = (
const uint16_t *)pointer;
754 _v4.set(pi[0], pi[1], pi[2], pi[3]);
760 const uint32_t *pi = (
const uint32_t *)pointer;
761 _v4.set(pi[0], pi[1], pi[2], pi[3]);
767 uint32_t dword = *(
const uint32_t *)pointer;
777 uint32_t dword = *(
const uint32_t *)pointer;
787 const PN_float32 *pi = (
const PN_float32 *)pointer;
788 _v4.set(pi[0], pi[1], pi[2], pi[3]);
794 const PN_float64 *pi = (
const PN_float64 *)pointer;
795 _v4.set(pi[0], pi[1], pi[2], pi[3]);
800 nassertr(
false, _v4);
805 const int8_t *pi = (
const int8_t *)pointer;
806 _v4.set(pi[0], pi[1], pi[2], pi[3]);
812 const int16_t *pi = (
const int16_t *)pointer;
813 _v4.set(pi[0], pi[1], pi[2], pi[3]);
819 const int32_t *pi = (
const int32_t *)pointer;
820 _v4.set(pi[0], pi[1], pi[2], pi[3]);
824 case NT_packed_ufloat:
825 nassertr(
false, _v4);
836double GeomVertexColumn::Packer::
837get_data1d(
const unsigned char *pointer) {
838 switch (_column->get_numeric_type()) {
840 return *(
const uint8_t *)pointer;
843 return *(
const uint16_t *)pointer;
846 return *(
const uint32_t *)pointer;
850 uint32_t dword = *(
const uint32_t *)pointer;
856 uint32_t dword = *(
const uint32_t *)pointer;
861 return *(
const PN_float32 *)pointer;
864 return *(
const PN_float64 *)pointer;
867 nassertr(
false, 0.0);
871 return *(
const int8_t *)pointer;
874 return *(
const int16_t *)pointer;
877 return *(
const int32_t *)pointer;
879 case NT_packed_ufloat:
881 uint32_t dword = *(
const uint32_t *)pointer;
892const LVecBase2d &GeomVertexColumn::Packer::
893get_data2d(
const unsigned char *pointer) {
894 if (_column->get_num_values() == 1) {
895 _v2d.set(get_data1d(pointer), 0.0f);
899 switch (_column->get_numeric_type()) {
902 const uint8_t *pi = (
const uint8_t *)pointer;
903 _v2d.set(pi[0], pi[1]);
909 const uint16_t *pi = (
const uint16_t *)pointer;
910 _v2d.set(pi[0], pi[1]);
916 const uint32_t *pi = (
const uint32_t *)pointer;
917 _v2d.set(pi[0], pi[1]);
923 uint32_t dword = *(
const uint32_t *)pointer;
931 uint32_t dword = *(
const uint32_t *)pointer;
939 const PN_float32 *pi = (
const PN_float32 *)pointer;
940 _v2d.set(pi[0], pi[1]);
946 const PN_float64 *pi = (
const PN_float64 *)pointer;
947 _v2d.set(pi[0], pi[1]);
952 nassertr(
false, _v2d);
957 const int8_t *pi = (
const int8_t *)pointer;
958 _v2d.set(pi[0], pi[1]);
964 const int16_t *pi = (
const int16_t *)pointer;
965 _v2d.set(pi[0], pi[1]);
971 const int32_t *pi = (
const int32_t *)pointer;
972 _v2d.set(pi[0], pi[1]);
976 case NT_packed_ufloat:
977 nassertr(
false, _v2d);
988const LVecBase3d &GeomVertexColumn::Packer::
989get_data3d(
const unsigned char *pointer) {
990 switch (_column->get_num_values()) {
992 _v3d.set(get_data1d(pointer), 0.0f, 0.0f);
997 const LVecBase2d &v2 = get_data2d(pointer);
998 _v3d.set(v2[0], v2[1], 0.0f);
1003 switch (_column->get_numeric_type()) {
1006 const uint8_t *pi = (
const uint8_t *)pointer;
1007 _v3d.set(pi[0], pi[1], pi[2]);
1013 const uint16_t *pi = (
const uint16_t *)pointer;
1014 _v3d.set(pi[0], pi[1], pi[2]);
1020 const uint32_t *pi = (
const uint32_t *)pointer;
1021 _v3d.set(pi[0], pi[1], pi[2]);
1025 case NT_packed_dcba:
1027 uint32_t dword = *(
const uint32_t *)pointer;
1034 case NT_packed_dabc:
1036 uint32_t dword = *(
const uint32_t *)pointer;
1045 const PN_float32 *pi = (
const PN_float32 *)pointer;
1046 _v3d.set(pi[0], pi[1], pi[2]);
1052 const PN_float64 *pi = (
const PN_float64 *)pointer;
1053 _v3d.set(pi[0], pi[1], pi[2]);
1058 nassertr(
false, _v3d);
1063 const int8_t *pi = (
const int8_t *)pointer;
1064 _v3d.set(pi[0], pi[1], pi[2]);
1070 const int16_t *pi = (
const int16_t *)pointer;
1071 _v3d.set(pi[0], pi[1], pi[2]);
1077 const int32_t *pi = (
const int32_t *)pointer;
1078 _v3d.set(pi[0], pi[1], pi[2]);
1082 case NT_packed_ufloat:
1084 uint32_t dword = *(
const uint32_t *)pointer;
1099const LVecBase4d &GeomVertexColumn::Packer::
1100get_data4d(
const unsigned char *pointer) {
1101 switch (_column->get_num_values()) {
1103 _v4d.set(get_data1d(pointer), 0.0f, 0.0f, 0.0f);
1108 const LVecBase2d &v2 = get_data2d(pointer);
1109 _v4d.set(v2[0], v2[1], 0.0f, 0.0f);
1115 const LVecBase3d &v3 = get_data3d(pointer);
1116 _v4d.set(v3[0], v3[1], v3[2], 0.0f);
1121 switch (_column->get_numeric_type()) {
1124 const uint8_t *pi = (
const uint8_t *)pointer;
1125 _v4d.set(pi[0], pi[1], pi[2], pi[3]);
1131 const uint16_t *pi = (
const uint16_t *)pointer;
1132 _v4d.set(pi[0], pi[1], pi[2], pi[3]);
1138 const uint32_t *pi = (
const uint32_t *)pointer;
1139 _v4d.set(pi[0], pi[1], pi[2], pi[3]);
1143 case NT_packed_dcba:
1145 uint32_t dword = *(
const uint32_t *)pointer;
1153 case NT_packed_dabc:
1155 uint32_t dword = *(
const uint32_t *)pointer;
1165 const PN_float32 *pi = (
const PN_float32 *)pointer;
1166 _v4d.set(pi[0], pi[1], pi[2], pi[3]);
1172 const PN_float64 *pi = (
const PN_float64 *)pointer;
1173 _v4d.set(pi[0], pi[1], pi[2], pi[3]);
1178 nassertr(
false, _v4d);
1183 const int8_t *pi = (
const int8_t *)pointer;
1184 _v4d.set(pi[0], pi[1], pi[2], pi[3]);
1190 const int16_t *pi = (
const int16_t *)pointer;
1191 _v4d.set(pi[0], pi[1], pi[2], pi[3]);
1197 const int32_t *pi = (
const int32_t *)pointer;
1198 _v4d.set(pi[0], pi[1], pi[2], pi[3]);
1202 case NT_packed_ufloat:
1203 nassertr(
false, _v4d);
1214int GeomVertexColumn::Packer::
1215get_data1i(
const unsigned char *pointer) {
1216 switch (_column->get_numeric_type()) {
1221 return *(
const uint16_t *)pointer;
1224 return *(
const uint32_t *)pointer;
1226 case NT_packed_dcba:
1228 uint32_t dword = *(
const uint32_t *)pointer;
1232 case NT_packed_dabc:
1234 uint32_t dword = *(
const uint32_t *)pointer;
1239 return (
int)*(
const PN_float32 *)pointer;
1242 return (
int)*(
const PN_float64 *)pointer;
1249 return *(
const int8_t *)pointer;
1252 return *(
const int16_t *)pointer;
1255 return *(
const int32_t *)pointer;
1257 case NT_packed_ufloat:
1259 uint32_t dword = *(
const uint32_t *)pointer;
1270const LVecBase2i &GeomVertexColumn::Packer::
1271get_data2i(
const unsigned char *pointer) {
1272 switch (_column->get_num_values()) {
1274 _v2i.set(get_data1i(pointer), 0);
1278 switch (_column->get_numeric_type()) {
1280 _v2i.set(pointer[0], pointer[1]);
1285 const uint16_t *pi = (
const uint16_t *)pointer;
1286 _v2i.set(pi[0], pi[1]);
1292 const uint32_t *pi = (
const uint32_t *)pointer;
1293 _v2i.set(pi[0], pi[1]);
1297 case NT_packed_dcba:
1299 uint32_t dword = *(
const uint32_t *)pointer;
1305 case NT_packed_dabc:
1307 uint32_t dword = *(
const uint32_t *)pointer;
1315 const PN_float32 *pi = (
const PN_float32 *)pointer;
1316 _v2i.set((
int)pi[0], (int)pi[1]);
1322 const PN_float64 *pi = (
const PN_float64 *)pointer;
1323 _v2i.set((
int)pi[0], (int)pi[1]);
1328 nassertr(
false, _v2i);
1333 const int8_t *pi = (
const int8_t *)pointer;
1334 _v2i.set(pi[0], pi[1]);
1340 const int16_t *pi = (
const int16_t *)pointer;
1341 _v2i.set(pi[0], pi[1]);
1347 const int32_t *pi = (
const int32_t *)pointer;
1348 _v2i.set(pi[0], pi[1]);
1352 case NT_packed_ufloat:
1353 nassertr(
false, _v2i);
1364const LVecBase3i &GeomVertexColumn::Packer::
1365get_data3i(
const unsigned char *pointer) {
1366 switch (_column->get_num_values()) {
1368 _v3i.set(get_data1i(pointer), 0, 0);
1373 const LVecBase2i &v2 = get_data2i(pointer);
1374 _v3i.set(v2[0], v2[1], 0);
1379 switch (_column->get_numeric_type()) {
1381 _v3i.set(pointer[0], pointer[1], 0);
1386 const uint16_t *pi = (
const uint16_t *)pointer;
1387 _v3i.set(pi[0], pi[1], pi[2]);
1393 const uint32_t *pi = (
const uint32_t *)pointer;
1394 _v3i.set(pi[0], pi[1], pi[2]);
1398 case NT_packed_dcba:
1400 uint32_t dword = *(
const uint32_t *)pointer;
1407 case NT_packed_dabc:
1409 uint32_t dword = *(
const uint32_t *)pointer;
1418 const PN_float32 *pi = (
const PN_float32 *)pointer;
1419 _v3i.set((
int)pi[0], (int)pi[1], (
int)pi[2]);
1425 const PN_float64 *pi = (
const PN_float64 *)pointer;
1426 _v3i.set((
int)pi[0], (int)pi[1], (
int)pi[2]);
1431 nassertr(
false, _v3i);
1436 const int8_t *pi = (
const int8_t *)pointer;
1437 _v3i.set(pi[0], pi[1], pi[2]);
1443 const int16_t *pi = (
const int16_t *)pointer;
1444 _v3i.set(pi[0], pi[1], pi[2]);
1450 const int32_t *pi = (
const int32_t *)pointer;
1451 _v3i.set(pi[0], pi[1], pi[2]);
1455 case NT_packed_ufloat:
1457 uint32_t dword = *(
const uint32_t *)pointer;
1472const LVecBase4i &GeomVertexColumn::Packer::
1473get_data4i(
const unsigned char *pointer) {
1474 switch (_column->get_num_values()) {
1476 _v4i.set(get_data1i(pointer), 0, 0, 0);
1481 const LVecBase2i &v2 = get_data2i(pointer);
1482 _v4i.set(v2[0], v2[1], 0, 0);
1488 const LVecBase3i &v3 = get_data3i(pointer);
1489 _v4i.set(v3[0], v3[1], v3[2], 0);
1494 switch (_column->get_numeric_type()) {
1496 _v4i.set(pointer[0], pointer[1], pointer[2], pointer[3]);
1501 const uint16_t *pi = (
const uint16_t *)pointer;
1502 _v4i.set(pi[0], pi[1], pi[2], pi[3]);
1508 const uint32_t *pi = (
const uint32_t *)pointer;
1509 _v4i.set(pi[0], pi[1], pi[2], pi[3]);
1513 case NT_packed_dcba:
1515 uint32_t dword = *(
const uint32_t *)pointer;
1523 case NT_packed_dabc:
1525 uint32_t dword = *(
const uint32_t *)pointer;
1535 const PN_float32 *pi = (
const PN_float32 *)pointer;
1536 _v4i.set((
int)pi[0], (int)pi[1], (
int)pi[2], (int)pi[3]);
1542 const PN_float64 *pi = (
const PN_float64 *)pointer;
1543 _v4i.set((
int)pi[0], (int)pi[1], (
int)pi[2], (int)pi[3]);
1548 nassertr(
false, _v4i);
1553 const int8_t *pi = (
const int8_t *)pointer;
1554 _v4i.set(pi[0], pi[1], pi[2], pi[3]);
1560 const int16_t *pi = (
const int16_t *)pointer;
1561 _v4i.set(pi[0], pi[1], pi[2], pi[3]);
1567 const int32_t *pi = (
const int32_t *)pointer;
1568 _v4i.set(pi[0], pi[1], pi[2], pi[3]);
1572 case NT_packed_ufloat:
1573 nassertr(
false, _v4i);
1584void GeomVertexColumn::Packer::
1585set_data1f(
unsigned char *pointer,
float data) {
1586 switch (_column->get_num_values()) {
1588 switch (_column->get_numeric_type()) {
1590 *(uint8_t *)pointer = (
unsigned int)data;
1594 *(uint16_t *)pointer = (
unsigned int)data;
1598 *(uint32_t *)pointer = (
unsigned int)data;
1601 case NT_packed_dcba:
1602 case NT_packed_dabc:
1607 *(PN_float32 *)pointer = data;
1611 *(PN_float64 *)pointer = data;
1619 *(int8_t *)pointer = (
int)data;
1623 *(int16_t *)pointer = (
int)data;
1627 *(int32_t *)pointer = (
int)data;
1630 case NT_packed_ufloat:
1637 set_data2f(pointer, LVecBase2f(data, 0.0f));
1641 set_data3f(pointer, LVecBase3f(data, 0.0f, 0.0f));
1645 set_data4f(pointer, LVecBase4f(data, 0.0f, 0.0f, 0.0f));
1653void GeomVertexColumn::Packer::
1654set_data2f(
unsigned char *pointer,
const LVecBase2f &data) {
1655 switch (_column->get_num_values()) {
1657 set_data1f(pointer, data[0]);
1661 switch (_column->get_numeric_type()) {
1664 uint8_t *pi = (uint8_t *)pointer;
1665 pi[0] = (
unsigned int)data[0];
1666 pi[1] = (
unsigned int)data[1];
1672 uint16_t *pi = (uint16_t *)pointer;
1673 pi[0] = (
unsigned int)data[0];
1674 pi[1] = (
unsigned int)data[1];
1680 uint32_t *pi = (uint32_t *)pointer;
1681 pi[0] = (
unsigned int)data[0];
1682 pi[1] = (
unsigned int)data[1];
1686 case NT_packed_dcba:
1687 case NT_packed_dabc:
1693 PN_float32 *pi = (PN_float32 *)pointer;
1701 PN_float64 *pi = (PN_float64 *)pointer;
1713 int8_t *pi = (int8_t *)pointer;
1714 pi[0] = (int)data[0];
1715 pi[1] = (int)data[1];
1721 int16_t *pi = (int16_t *)pointer;
1722 pi[0] = (int)data[0];
1723 pi[1] = (int)data[1];
1729 int32_t *pi = (int32_t *)pointer;
1730 pi[0] = (int)data[0];
1731 pi[1] = (int)data[1];
1735 case NT_packed_ufloat:
1742 set_data3f(pointer, LVecBase3f(data[0], data[1], 0.0f));
1746 set_data4f(pointer, LVecBase4f(data[0], data[1], 0.0f, 0.0f));
1754void GeomVertexColumn::Packer::
1755set_data3f(
unsigned char *pointer,
const LVecBase3f &data) {
1756 switch (_column->get_num_values()) {
1758 set_data1f(pointer, data[0]);
1762 set_data2f(pointer, LVecBase2f(data[0], data[1]));
1766 switch (_column->get_numeric_type()) {
1769 uint8_t *pi = (uint8_t *)pointer;
1770 pi[0] = (
unsigned int)data[0];
1771 pi[1] = (
unsigned int)data[1];
1772 pi[2] = (
unsigned int)data[2];
1778 uint16_t *pi = (uint16_t *)pointer;
1779 pi[0] = (
unsigned int)data[0];
1780 pi[1] = (
unsigned int)data[1];
1781 pi[2] = (
unsigned int)data[2];
1787 uint32_t *pi = (uint32_t *)pointer;
1788 pi[0] = (
unsigned int)data[0];
1789 pi[1] = (
unsigned int)data[1];
1790 pi[2] = (
unsigned int)data[2];
1794 case NT_packed_dcba:
1795 case NT_packed_dabc:
1801 PN_float32 *pi = (PN_float32 *)pointer;
1810 PN_float64 *pi = (PN_float64 *)pointer;
1823 int8_t *pi = (int8_t *)pointer;
1824 pi[0] = (int)data[0];
1825 pi[1] = (int)data[1];
1826 pi[2] = (int)data[2];
1832 int16_t *pi = (int16_t *)pointer;
1833 pi[0] = (int)data[0];
1834 pi[1] = (int)data[1];
1835 pi[2] = (int)data[2];
1841 int32_t *pi = (int32_t *)pointer;
1842 pi[0] = (int)data[0];
1843 pi[1] = (int)data[1];
1844 pi[2] = (int)data[2];
1848 case NT_packed_ufloat:
1855 set_data4f(pointer, LVecBase4f(data[0], data[1], data[2], 0.0f));
1863void GeomVertexColumn::Packer::
1864set_data4f(
unsigned char *pointer,
const LVecBase4f &data) {
1865 switch (_column->get_num_values()) {
1867 set_data1f(pointer, data[0]);
1871 set_data2f(pointer, LVecBase2f(data[0], data[1]));
1875 set_data3f(pointer, LVecBase3f(data[0], data[1], data[2]));
1879 switch (_column->get_numeric_type()) {
1882 uint8_t *pi = (uint8_t *)pointer;
1883 pi[0] = (
unsigned int)data[0];
1884 pi[1] = (
unsigned int)data[1];
1885 pi[2] = (
unsigned int)data[2];
1886 pi[3] = (
unsigned int)data[3];
1892 uint16_t *pi = (uint16_t *)pointer;
1893 pi[0] = (
unsigned int)data[0];
1894 pi[1] = (
unsigned int)data[1];
1895 pi[2] = (
unsigned int)data[2];
1896 pi[3] = (
unsigned int)data[3];
1902 uint32_t *pi = (uint32_t *)pointer;
1903 pi[0] = (
unsigned int)data[0];
1904 pi[1] = (
unsigned int)data[1];
1905 pi[2] = (
unsigned int)data[2];
1906 pi[3] = (
unsigned int)data[3];
1910 case NT_packed_dcba:
1914 case NT_packed_dabc:
1920 PN_float32 *pi = (PN_float32 *)pointer;
1930 PN_float64 *pi = (PN_float64 *)pointer;
1944 int8_t *pi = (int8_t *)pointer;
1945 pi[0] = (int)data[0];
1946 pi[1] = (int)data[1];
1947 pi[2] = (int)data[2];
1948 pi[3] = (int)data[3];
1954 int16_t *pi = (int16_t *)pointer;
1955 pi[0] = (int)data[0];
1956 pi[1] = (int)data[1];
1957 pi[2] = (int)data[2];
1958 pi[3] = (int)data[3];
1964 int32_t *pi = (int32_t *)pointer;
1965 pi[0] = (int)data[0];
1966 pi[1] = (int)data[1];
1967 pi[2] = (int)data[2];
1968 pi[3] = (int)data[3];
1972 case NT_packed_ufloat:
1983void GeomVertexColumn::Packer::
1984set_data1d(
unsigned char *pointer,
double data) {
1985 switch (_column->get_num_values()) {
1987 switch (_column->get_numeric_type()) {
1989 *(uint8_t *)pointer = (
unsigned int)data;
1993 *(uint16_t *)pointer = (
unsigned int)data;
1997 *(uint32_t *)pointer = (
unsigned int)data;
2000 case NT_packed_dcba:
2001 case NT_packed_dabc:
2006 *(PN_float32 *)pointer = data;
2010 *(PN_float64 *)pointer = data;
2018 *(int8_t *)pointer = (
int)data;
2022 *(int16_t *)pointer = (
int)data;
2026 *(int32_t *)pointer = (
int)data;
2029 case NT_packed_ufloat:
2036 set_data2d(pointer, LVecBase2d(data, 0.0f));
2040 set_data3d(pointer, LVecBase3d(data, 0.0f, 0.0f));
2044 set_data4d(pointer, LVecBase4d(data, 0.0f, 0.0f, 0.0f));
2052void GeomVertexColumn::Packer::
2053set_data2d(
unsigned char *pointer,
const LVecBase2d &data) {
2054 switch (_column->get_num_values()) {
2056 set_data1d(pointer, data[0]);
2059 switch (_column->get_numeric_type()) {
2062 uint8_t *pi = (uint8_t *)pointer;
2063 pi[0] = (
unsigned int)data[0];
2064 pi[1] = (
unsigned int)data[1];
2070 uint16_t *pi = (uint16_t *)pointer;
2071 pi[0] = (
unsigned int)data[0];
2072 pi[1] = (
unsigned int)data[1];
2078 uint32_t *pi = (uint32_t *)pointer;
2079 pi[0] = (
unsigned int)data[0];
2080 pi[1] = (
unsigned int)data[1];
2084 case NT_packed_dcba:
2085 case NT_packed_dabc:
2091 PN_float32 *pi = (PN_float32 *)pointer;
2099 PN_float64 *pi = (PN_float64 *)pointer;
2111 int8_t *pi = (int8_t *)pointer;
2112 pi[0] = (int)data[0];
2113 pi[1] = (int)data[1];
2119 int16_t *pi = (int16_t *)pointer;
2120 pi[0] = (int)data[0];
2121 pi[1] = (int)data[1];
2127 int32_t *pi = (int32_t *)pointer;
2128 pi[0] = (int)data[0];
2129 pi[1] = (int)data[1];
2133 case NT_packed_ufloat:
2140 set_data3d(pointer, LVecBase3d(data[0], data[1], 0.0f));
2144 set_data4d(pointer, LVecBase4d(data[0], data[1], 0.0f, 0.0f));
2152void GeomVertexColumn::Packer::
2153set_data3d(
unsigned char *pointer,
const LVecBase3d &data) {
2154 switch (_column->get_num_values()) {
2156 set_data1d(pointer, data[0]);
2160 set_data2d(pointer, LVecBase2d(data[0], data[1]));
2164 switch (_column->get_numeric_type()) {
2167 uint8_t *pi = (uint8_t *)pointer;
2168 pi[0] = (
unsigned int)data[0];
2169 pi[1] = (
unsigned int)data[1];
2170 pi[2] = (
unsigned int)data[2];
2176 uint16_t *pi = (uint16_t *)pointer;
2177 pi[0] = (
unsigned int)data[0];
2178 pi[1] = (
unsigned int)data[1];
2179 pi[2] = (
unsigned int)data[2];
2185 uint32_t *pi = (uint32_t *)pointer;
2186 pi[0] = (
unsigned int)data[0];
2187 pi[1] = (
unsigned int)data[1];
2188 pi[2] = (
unsigned int)data[2];
2192 case NT_packed_dcba:
2193 case NT_packed_dabc:
2199 PN_float32 *pi = (PN_float32 *)pointer;
2208 PN_float64 *pi = (PN_float64 *)pointer;
2221 int8_t *pi = (int8_t *)pointer;
2222 pi[0] = (int)data[0];
2223 pi[1] = (int)data[1];
2224 pi[2] = (int)data[2];
2230 int16_t *pi = (int16_t *)pointer;
2231 pi[0] = (int)data[0];
2232 pi[1] = (int)data[1];
2233 pi[2] = (int)data[2];
2239 int32_t *pi = (int32_t *)pointer;
2240 pi[0] = (int)data[0];
2241 pi[1] = (int)data[1];
2242 pi[2] = (int)data[2];
2246 case NT_packed_ufloat:
2253 set_data4d(pointer, LVecBase4d(data[0], data[1], data[2], 0.0f));
2261void GeomVertexColumn::Packer::
2262set_data4d(
unsigned char *pointer,
const LVecBase4d &data) {
2263 switch (_column->get_num_values()) {
2265 set_data1d(pointer, data[0]);
2269 set_data2d(pointer, LVecBase2d(data[0], data[1]));
2273 set_data3d(pointer, LVecBase3d(data[0], data[1], data[2]));
2277 switch (_column->get_numeric_type()) {
2280 uint8_t *pi = (uint8_t *)pointer;
2281 pi[0] = (
unsigned int)data[0];
2282 pi[1] = (
unsigned int)data[1];
2283 pi[2] = (
unsigned int)data[2];
2284 pi[3] = (
unsigned int)data[3];
2290 uint16_t *pi = (uint16_t *)pointer;
2291 pi[0] = (
unsigned int)data[0];
2292 pi[1] = (
unsigned int)data[1];
2293 pi[2] = (
unsigned int)data[2];
2294 pi[3] = (
unsigned int)data[3];
2300 uint32_t *pi = (uint32_t *)pointer;
2301 pi[0] = (
unsigned int)data[0];
2302 pi[1] = (
unsigned int)data[1];
2303 pi[2] = (
unsigned int)data[2];
2304 pi[3] = (
unsigned int)data[3];
2308 case NT_packed_dcba:
2312 case NT_packed_dabc:
2318 PN_float32 *pi = (PN_float32 *)pointer;
2328 PN_float64 *pi = (PN_float64 *)pointer;
2342 int8_t *pi = (int8_t *)pointer;
2343 pi[0] = (int)data[0];
2344 pi[1] = (int)data[1];
2345 pi[2] = (int)data[2];
2346 pi[3] = (int)data[3];
2352 int16_t *pi = (int16_t *)pointer;
2353 pi[0] = (int)data[0];
2354 pi[1] = (int)data[1];
2355 pi[2] = (int)data[2];
2356 pi[3] = (int)data[3];
2362 int32_t *pi = (int32_t *)pointer;
2363 pi[0] = (int)data[0];
2364 pi[1] = (int)data[1];
2365 pi[2] = (int)data[2];
2366 pi[3] = (int)data[3];
2370 case NT_packed_ufloat:
2381void GeomVertexColumn::Packer::
2382set_data1i(
unsigned char *pointer,
int data) {
2383 switch (_column->get_num_values()) {
2385 switch (_column->get_numeric_type()) {
2388 nassertv((*pointer) == data);
2392 *(uint16_t *)pointer = data;
2393 nassertv(*(uint16_t *)pointer == data);
2397 *(uint32_t *)pointer = data;
2400 case NT_packed_dcba:
2401 case NT_packed_dabc:
2406 *(PN_float32 *)pointer = (
float)data;
2410 *(PN_float64 *)pointer = (
double)data;
2418 *(int8_t *)pointer = data;
2419 nassertv(*(int8_t *)pointer == data);
2423 *(int16_t *)pointer = data;
2424 nassertv(*(int16_t *)pointer == data);
2428 *(int32_t *)pointer = data;
2431 case NT_packed_ufloat:
2438 set_data2i(pointer, LVecBase2i(data, 0));
2442 set_data3i(pointer, LVecBase3i(data, 0, 0));
2446 set_data4i(pointer, LVecBase4i(data, 0, 0, 0));
2454void GeomVertexColumn::Packer::
2455set_data2i(
unsigned char *pointer,
const LVecBase2i &data) {
2456 switch (_column->get_num_values()) {
2458 set_data1i(pointer, data[0]);
2462 switch (_column->get_numeric_type()) {
2464 pointer[0] = data[0];
2465 pointer[1] = data[1];
2470 uint16_t *pi = (uint16_t *)pointer;
2478 uint32_t *pi = (uint32_t *)pointer;
2484 case NT_packed_dcba:
2485 case NT_packed_dabc:
2491 PN_float32 *pi = (PN_float32 *)pointer;
2499 PN_float64 *pi = (PN_float64 *)pointer;
2511 int8_t *pi = (int8_t *)pointer;
2519 int16_t *pi = (int16_t *)pointer;
2527 int32_t *pi = (int32_t *)pointer;
2533 case NT_packed_ufloat:
2540 set_data3i(pointer, LVecBase3i(data[0], data[1], 0));
2544 set_data4i(pointer, LVecBase4i(data[0], data[1], 0, 0));
2552void GeomVertexColumn::Packer::
2553set_data3i(
unsigned char *pointer,
const LVecBase3i &data) {
2554 switch (_column->get_num_values()) {
2556 set_data1i(pointer, data[0]);
2560 set_data2i(pointer, LVecBase2i(data[0], data[1]));
2564 switch (_column->get_numeric_type()) {
2566 pointer[0] = data[0];
2567 pointer[1] = data[1];
2568 pointer[2] = data[2];
2573 uint16_t *pi = (uint16_t *)pointer;
2582 uint32_t *pi = (uint32_t *)pointer;
2589 case NT_packed_dcba:
2590 case NT_packed_dabc:
2596 PN_float32 *pi = (PN_float32 *)pointer;
2605 PN_float64 *pi = (PN_float64 *)pointer;
2618 int8_t *pi = (int8_t *)pointer;
2627 int16_t *pi = (int16_t *)pointer;
2636 int32_t *pi = (int32_t *)pointer;
2643 case NT_packed_ufloat:
2650 set_data4i(pointer, LVecBase4i(data[0], data[1], data[2], 0));
2658void GeomVertexColumn::Packer::
2659set_data4i(
unsigned char *pointer,
const LVecBase4i &data) {
2660 switch (_column->get_num_values()) {
2662 set_data1i(pointer, data[0]);
2666 set_data2i(pointer, LVecBase2i(data[0], data[1]));
2670 set_data3i(pointer, LVecBase3i(data[0], data[1], data[2]));
2674 switch (_column->get_numeric_type()) {
2676 pointer[0] = data[0];
2677 pointer[1] = data[1];
2678 pointer[2] = data[2];
2679 pointer[3] = data[3];
2684 uint16_t *pi = (uint16_t *)pointer;
2694 uint32_t *pi = (uint32_t *)pointer;
2702 case NT_packed_dcba:
2706 case NT_packed_dabc:
2712 PN_float32 *pi = (PN_float32 *)pointer;
2722 PN_float64 *pi = (PN_float64 *)pointer;
2736 int8_t *pi = (int8_t *)pointer;
2746 int16_t *pi = (int16_t *)pointer;
2756 int32_t *pi = (int32_t *)pointer;
2764 case NT_packed_ufloat:
2775float GeomVertexColumn::Packer_point::
2776get_data1f(
const unsigned char *pointer) {
2777 if (_column->get_num_values() == 4) {
2778 const LVecBase4f &v4 = get_data4f(pointer);
2779 return v4[0] / v4[3];
2781 return Packer::get_data1f(pointer);
2788const LVecBase2f &GeomVertexColumn::Packer_point::
2789get_data2f(
const unsigned char *pointer) {
2790 if (_column->get_num_values() == 4) {
2791 const LVecBase4f &v4 = get_data4f(pointer);
2792 _v2.set(v4[0] / v4[3], v4[1] / v4[3]);
2795 return Packer::get_data2f(pointer);
2802const LVecBase3f &GeomVertexColumn::Packer_point::
2803get_data3f(
const unsigned char *pointer) {
2804 if (_column->get_num_values() == 4) {
2805 const LVecBase4f &v4 = get_data4f(pointer);
2806 _v3.set(v4[0] / v4[3], v4[1] / v4[3], v4[2] / v4[3]);
2809 return Packer::get_data3f(pointer);
2816const LVecBase4f &GeomVertexColumn::Packer_point::
2817get_data4f(
const unsigned char *pointer) {
2818 switch (_column->get_num_values()) {
2820 _v4.set(get_data1f(pointer), 0.0f, 0.0f, 1.0f);
2825 const LVecBase2f &v2 = get_data2f(pointer);
2826 _v4.set(v2[0], v2[1], 0.0f, 1.0f);
2832 const LVecBase3f &v3 = get_data3f(pointer);
2833 _v4.set(v3[0], v3[1], v3[2], 1.0f);
2838 switch (_column->get_numeric_type()) {
2841 const uint8_t *pi = (
const uint8_t *)pointer;
2842 _v4.set(pi[0], pi[1], pi[2], pi[3]);
2848 const uint16_t *pi = (
const uint16_t *)pointer;
2849 _v4.set(pi[0], pi[1], pi[2], pi[3]);
2855 const uint32_t *pi = (
const uint32_t *)pointer;
2856 _v4.set(pi[0], pi[1], pi[2], pi[3]);
2860 case NT_packed_dcba:
2862 uint32_t dword = *(
const uint32_t *)pointer;
2870 case NT_packed_dabc:
2872 uint32_t dword = *(
const uint32_t *)pointer;
2882 const PN_float32 *pi = (
const PN_float32 *)pointer;
2883 _v4.set(pi[0], pi[1], pi[2], pi[3]);
2889 const PN_float64 *pi = (
const PN_float64 *)pointer;
2890 _v4.set(pi[0], pi[1], pi[2], pi[3]);
2895 nassertr(
false, _v4);
2900 const int8_t *pi = (
const int8_t *)pointer;
2901 _v4.set(pi[0], pi[1], pi[2], pi[3]);
2907 const int16_t *pi = (
const int16_t *)pointer;
2908 _v4.set(pi[0], pi[1], pi[2], pi[3]);
2914 const int32_t *pi = (
const int32_t *)pointer;
2915 _v4.set(pi[0], pi[1], pi[2], pi[3]);
2919 case NT_packed_ufloat:
2920 nassertr(
false, _v4);
2931double GeomVertexColumn::Packer_point::
2932get_data1d(
const unsigned char *pointer) {
2933 if (_column->get_num_values() == 4) {
2934 const LVecBase4d &v4 = get_data4d(pointer);
2935 return v4[0] / v4[3];
2937 return Packer::get_data1d(pointer);
2944const LVecBase2d &GeomVertexColumn::Packer_point::
2945get_data2d(
const unsigned char *pointer) {
2946 if (_column->get_num_values() == 4) {
2947 const LVecBase4d &v4 = get_data4d(pointer);
2948 _v2d.set(v4[0] / v4[3], v4[1] / v4[3]);
2951 return Packer::get_data2d(pointer);
2958const LVecBase3d &GeomVertexColumn::Packer_point::
2959get_data3d(
const unsigned char *pointer) {
2960 if (_column->get_num_values() == 4) {
2961 const LVecBase4d &v4 = get_data4d(pointer);
2962 _v3d.set(v4[0] / v4[3], v4[1] / v4[3], v4[2] / v4[3]);
2965 return Packer::get_data3d(pointer);
2972const LVecBase4d &GeomVertexColumn::Packer_point::
2973get_data4d(
const unsigned char *pointer) {
2974 switch (_column->get_num_values()) {
2976 _v4d.set(get_data1d(pointer), 0.0f, 0.0f, 1.0f);
2981 const LVecBase2d &v2 = get_data2d(pointer);
2982 _v4d.set(v2[0], v2[1], 0.0f, 1.0f);
2988 const LVecBase3d &v3 = get_data3d(pointer);
2989 _v4d.set(v3[0], v3[1], v3[2], 1.0f);
2994 switch (_column->get_numeric_type()) {
2997 const uint8_t *pi = (
const uint8_t *)pointer;
2998 _v4d.set(pi[0], pi[1], pi[2], pi[3]);
3004 const uint16_t *pi = (
const uint16_t *)pointer;
3005 _v4d.set(pi[0], pi[1], pi[2], pi[3]);
3011 const uint32_t *pi = (
const uint32_t *)pointer;
3012 _v4d.set(pi[0], pi[1], pi[2], pi[3]);
3016 case NT_packed_dcba:
3018 uint32_t dword = *(
const uint32_t *)pointer;
3026 case NT_packed_dabc:
3028 uint32_t dword = *(
const uint32_t *)pointer;
3038 const PN_float32 *pi = (
const PN_float32 *)pointer;
3039 _v4d.set(pi[0], pi[1], pi[2], pi[3]);
3045 const PN_float64 *pi = (
const PN_float64 *)pointer;
3046 _v4d.set(pi[0], pi[1], pi[2], pi[3]);
3051 nassertr(
false, _v4d);
3056 const int8_t *pi = (
const int8_t *)pointer;
3057 _v4d.set(pi[0], pi[1], pi[2], pi[3]);
3063 const int16_t *pi = (
const int16_t *)pointer;
3064 _v4d.set(pi[0], pi[1], pi[2], pi[3]);
3070 const int32_t *pi = (
const int32_t *)pointer;
3071 _v4d.set(pi[0], pi[1], pi[2], pi[3]);
3075 case NT_packed_ufloat:
3076 nassertr(
false, _v4d);
3087void GeomVertexColumn::Packer_point::
3088set_data1f(
unsigned char *pointer,
float data) {
3089 if (_column->get_num_values() == 4) {
3090 set_data4f(pointer, LVecBase4f(data, 0.0f, 0.0f, 1.0f));
3092 Packer::set_data1f(pointer, data);
3099void GeomVertexColumn::Packer_point::
3100set_data2f(
unsigned char *pointer,
const LVecBase2f &data) {
3101 if (_column->get_num_values() == 4) {
3102 set_data4f(pointer, LVecBase4f(data[0], data[1], 0.0f, 1.0f));
3104 Packer::set_data2f(pointer, data);
3111void GeomVertexColumn::Packer_point::
3112set_data3f(
unsigned char *pointer,
const LVecBase3f &data) {
3113 if (_column->get_num_values() == 4) {
3114 set_data4f(pointer, LVecBase4f(data[0], data[1], data[2], 1.0f));
3116 Packer::set_data3f(pointer, data);
3123void GeomVertexColumn::Packer_point::
3124set_data4f(
unsigned char *pointer,
const LVecBase4f &data) {
3125 switch (_column->get_num_values()) {
3127 set_data1f(pointer, data[0] / data[3]);
3131 set_data2f(pointer, LVecBase2f(data[0] / data[3], data[1] / data[3]));
3135 set_data3f(pointer, LVecBase3f(data[0] / data[3], data[1] / data[3], data[2] / data[3]));
3139 switch (_column->get_numeric_type()) {
3142 uint8_t *pi = (uint8_t *)pointer;
3143 pi[0] = (
unsigned int)data[0];
3144 pi[1] = (
unsigned int)data[1];
3145 pi[2] = (
unsigned int)data[2];
3146 pi[3] = (
unsigned int)data[3];
3152 uint16_t *pi = (uint16_t *)pointer;
3153 pi[0] = (
unsigned int)data[0];
3154 pi[1] = (
unsigned int)data[1];
3155 pi[2] = (
unsigned int)data[2];
3156 pi[3] = (
unsigned int)data[3];
3162 uint32_t *pi = (uint32_t *)pointer;
3163 pi[0] = (
unsigned int)data[0];
3164 pi[1] = (
unsigned int)data[1];
3165 pi[2] = (
unsigned int)data[2];
3166 pi[3] = (
unsigned int)data[3];
3170 case NT_packed_dcba:
3174 case NT_packed_dabc:
3180 PN_float32 *pi = (PN_float32 *)pointer;
3190 PN_float64 *pi = (PN_float64 *)pointer;
3204 int8_t *pi = (int8_t *)pointer;
3205 pi[0] = (int)data[0];
3206 pi[1] = (int)data[1];
3207 pi[2] = (int)data[2];
3208 pi[3] = (int)data[3];
3214 int16_t *pi = (int16_t *)pointer;
3215 pi[0] = (int)data[0];
3216 pi[1] = (int)data[1];
3217 pi[2] = (int)data[2];
3218 pi[3] = (int)data[3];
3224 int32_t *pi = (int32_t *)pointer;
3225 pi[0] = (int)data[0];
3226 pi[1] = (int)data[1];
3227 pi[2] = (int)data[2];
3228 pi[3] = (int)data[3];
3232 case NT_packed_ufloat:
3243void GeomVertexColumn::Packer_point::
3244set_data1d(
unsigned char *pointer,
double data) {
3245 if (_column->get_num_values() == 4) {
3246 set_data4d(pointer, LVecBase4d(data, 0.0f, 0.0f, 1.0f));
3248 Packer::set_data1d(pointer, data);
3255void GeomVertexColumn::Packer_point::
3256set_data2d(
unsigned char *pointer,
const LVecBase2d &data) {
3257 if (_column->get_num_values() == 4) {
3258 set_data4d(pointer, LVecBase4d(data[0], data[1], 0.0f, 1.0f));
3260 Packer::set_data2d(pointer, data);
3267void GeomVertexColumn::Packer_point::
3268set_data3d(
unsigned char *pointer,
const LVecBase3d &data) {
3269 if (_column->get_num_values() == 4) {
3270 set_data4d(pointer, LVecBase4d(data[0], data[1], data[2], 1.0f));
3272 Packer::set_data3d(pointer, data);
3279void GeomVertexColumn::Packer_point::
3280set_data4d(
unsigned char *pointer,
const LVecBase4d &data) {
3281 switch (_column->get_num_values()) {
3283 set_data1d(pointer, data[0] / data[3]);
3287 set_data2d(pointer, LVecBase2d(data[0] / data[3], data[1] / data[3]));
3291 set_data3d(pointer, LVecBase3d(data[0] / data[3], data[1] / data[3], data[2] / data[3]));
3295 switch (_column->get_numeric_type()) {
3298 uint8_t *pi = (uint8_t *)pointer;
3299 pi[0] = (
unsigned int)data[0];
3300 pi[1] = (
unsigned int)data[1];
3301 pi[2] = (
unsigned int)data[2];
3302 pi[3] = (
unsigned int)data[3];
3308 uint16_t *pi = (uint16_t *)pointer;
3309 pi[0] = (
unsigned int)data[0];
3310 pi[1] = (
unsigned int)data[1];
3311 pi[2] = (
unsigned int)data[2];
3312 pi[3] = (
unsigned int)data[3];
3318 uint32_t *pi = (uint32_t *)pointer;
3319 pi[0] = (
unsigned int)data[0];
3320 pi[1] = (
unsigned int)data[1];
3321 pi[2] = (
unsigned int)data[2];
3322 pi[3] = (
unsigned int)data[3];
3326 case NT_packed_dcba:
3330 case NT_packed_dabc:
3336 PN_float32 *pi = (PN_float32 *)pointer;
3346 PN_float64 *pi = (PN_float64 *)pointer;
3360 int8_t *pi = (int8_t *)pointer;
3361 pi[0] = (int)data[0];
3362 pi[1] = (int)data[1];
3363 pi[2] = (int)data[2];
3364 pi[3] = (int)data[3];
3370 int16_t *pi = (int16_t *)pointer;
3371 pi[0] = (int)data[0];
3372 pi[1] = (int)data[1];
3373 pi[2] = (int)data[2];
3374 pi[3] = (int)data[3];
3380 int32_t *pi = (int32_t *)pointer;
3381 pi[0] = (int)data[0];
3382 pi[1] = (int)data[1];
3383 pi[2] = (int)data[2];
3384 pi[3] = (int)data[3];
3388 case NT_packed_ufloat:
3399float GeomVertexColumn::Packer_color::
3400get_data1f(
const unsigned char *pointer) {
3401 switch (_column->get_numeric_type()) {
3403 return (*(
const uint8_t *)pointer) / 255.0f;
3406 return (*(
const uint16_t *)pointer) / 65535.0f;
3409 return (*(
const uint32_t *)pointer) / 4294967295.0f;
3411 case NT_packed_dcba:
3413 uint32_t dword = *(
const uint32_t *)pointer;
3417 case NT_packed_dabc:
3419 uint32_t dword = *(
const uint32_t *)pointer;
3424 return *(
const PN_float32 *)pointer;
3427 return *(
const PN_float64 *)pointer;
3430 nassertr(
false, 0.0f);
3439const LVecBase2f &GeomVertexColumn::Packer_color::
3440get_data2f(
const unsigned char *pointer) {
3441 if (_column->get_num_values() == 3) {
3442 const LVecBase3f &v3 = get_data3f(pointer);
3443 _v2.set(v3[0], v3[1]);
3446 const LVecBase4f &v4 = get_data4f(pointer);
3447 _v2.set(v4[0], v4[1]);
3455const LVecBase3f &GeomVertexColumn::Packer_color::
3456get_data3f(
const unsigned char *pointer) {
3457 if (_column->get_num_values() == 3) {
3458 switch (_column->get_numeric_type()) {
3461 const uint8_t *pi = (
const uint8_t *)pointer;
3462 _v3.set(pi[0], pi[1], pi[2]);
3469 const uint16_t *pi = (
const uint16_t *)pointer;
3470 _v3.set(pi[0], pi[1], pi[2]);
3477 const uint32_t *pi = (
const uint32_t *)pointer;
3478 _v3.set(pi[0], pi[1], pi[2]);
3479 _v3 /= 4294967295.0f;
3483 case NT_packed_dcba:
3484 case NT_packed_dabc:
3485 nassertr(
false, _v3);
3490 const PN_float32 *pi = (
const PN_float32 *)pointer;
3491 _v3.set(pi[0], pi[1], pi[2]);
3497 const PN_float64 *pi = (
const PN_float64 *)pointer;
3498 _v3.set(pi[0], pi[1], pi[2]);
3506 nassertr(
false, _v3);
3509 case NT_packed_ufloat:
3511 uint32_t dword = *(
const uint32_t *)pointer;
3519 const LVecBase4f &v4 = get_data4f(pointer);
3520 _v3.set(v4[0], v4[1], v4[2]);
3530const LVecBase4f &GeomVertexColumn::Packer_color::
3531get_data4f(
const unsigned char *pointer) {
3532 if (_column->get_num_values() == 3) {
3533 const LVecBase3f &v3 = get_data3f(pointer);
3534 _v4.set(v3[0], v3[1], v3[2], 1.0f);
3537 switch (_column->get_numeric_type()) {
3540 const uint8_t *pi = (
const uint8_t *)pointer;
3541 _v4.set(pi[0], pi[1], pi[2], pi[3]);
3548 const uint16_t *pi = (
const uint16_t *)pointer;
3549 _v4.set(pi[0], pi[1], pi[2], pi[3]);
3556 const uint32_t *pi = (
const uint32_t *)pointer;
3557 _v4.set(pi[0], pi[1], pi[2], pi[3]);
3558 _v4 /= 4294967295.0f;
3562 case NT_packed_dcba:
3564 uint32_t dword = *(
const uint32_t *)pointer;
3573 case NT_packed_dabc:
3575 uint32_t dword = *(
const uint32_t *)pointer;
3586 const PN_float32 *pi = (
const PN_float32 *)pointer;
3587 _v4.set(pi[0], pi[1], pi[2], pi[3]);
3593 const PN_float64 *pi = (
const PN_float64 *)pointer;
3594 _v4.set(pi[0], pi[1], pi[2], pi[3]);
3602 case NT_packed_ufloat:
3603 nassertr(
false, _v4);
3614double GeomVertexColumn::Packer_color::
3615get_data1d(
const unsigned char *pointer) {
3616 switch (_column->get_numeric_type()) {
3618 return (*(
const uint8_t *)pointer) / 255.0;
3621 return (*(
const uint16_t *)pointer) / 65535.0;
3624 return (*(
const uint32_t *)pointer) / 4294967295.0;
3626 case NT_packed_dcba:
3628 uint32_t dword = *(
const uint32_t *)pointer;
3632 case NT_packed_dabc:
3634 uint32_t dword = *(
const uint32_t *)pointer;
3639 return *(
const PN_float32 *)pointer;
3642 return *(
const PN_float64 *)pointer;
3645 nassertr(
false, 0.0);
3654const LVecBase2d &GeomVertexColumn::Packer_color::
3655get_data2d(
const unsigned char *pointer) {
3656 if (_column->get_num_values() == 3) {
3657 const LVecBase3d &v3 = get_data3d(pointer);
3658 _v2d.set(v3[0], v3[1]);
3661 const LVecBase4d &v4 = get_data4d(pointer);
3662 _v2d.set(v4[0], v4[1]);
3670const LVecBase3d &GeomVertexColumn::Packer_color::
3671get_data3d(
const unsigned char *pointer) {
3672 if (_column->get_num_values() == 3) {
3673 switch (_column->get_numeric_type()) {
3676 const uint8_t *pi = (
const uint8_t *)pointer;
3677 _v3d.set(pi[0], pi[1], pi[2]);
3684 const uint16_t *pi = (
const uint16_t *)pointer;
3685 _v3d.set(pi[0], pi[1], pi[2]);
3692 const uint32_t *pi = (
const uint32_t *)pointer;
3693 _v3d.set(pi[0], pi[1], pi[2]);
3694 _v3d /= 4294967295.0;
3698 case NT_packed_dcba:
3699 case NT_packed_dabc:
3700 nassertr(
false, _v3d);
3705 const PN_float32 *pi = (
const PN_float32 *)pointer;
3706 _v3d.set(pi[0], pi[1], pi[2]);
3712 const PN_float64 *pi = (
const PN_float64 *)pointer;
3713 _v3d.set(pi[0], pi[1], pi[2]);
3721 nassertr(
false, _v3d);
3724 case NT_packed_ufloat:
3726 uint32_t dword = *(
const uint32_t *)pointer;
3734 const LVecBase4d &v4 = get_data4d(pointer);
3735 _v3d.set(v4[0], v4[1], v4[2]);
3745const LVecBase4d &GeomVertexColumn::Packer_color::
3746get_data4d(
const unsigned char *pointer) {
3747 if (_column->get_num_values() == 3) {
3748 const LVecBase3d &v3 = get_data3d(pointer);
3749 _v4d.set(v3[0], v3[1], v3[2], 1.0);
3752 switch (_column->get_numeric_type()) {
3755 const uint8_t *pi = (
const uint8_t *)pointer;
3756 _v4d.set(pi[0], pi[1], pi[2], pi[3]);
3763 const uint16_t *pi = (
const uint16_t *)pointer;
3764 _v4d.set(pi[0], pi[1], pi[2], pi[3]);
3771 const uint32_t *pi = (
const uint32_t *)pointer;
3772 _v4d.set(pi[0], pi[1], pi[2], pi[3]);
3773 _v4d /= 4294967295.0;
3777 case NT_packed_dcba:
3779 uint32_t dword = *(
const uint32_t *)pointer;
3788 case NT_packed_dabc:
3790 uint32_t dword = *(
const uint32_t *)pointer;
3801 const PN_float32 *pi = (
const PN_float32 *)pointer;
3802 _v4d.set(pi[0], pi[1], pi[2], pi[3]);
3808 const PN_float64 *pi = (
const PN_float64 *)pointer;
3809 _v4d.set(pi[0], pi[1], pi[2], pi[3]);
3817 case NT_packed_ufloat:
3818 nassertr(
false, _v4d);
3829void GeomVertexColumn::Packer_color::
3830set_data1f(
unsigned char *pointer,
float data) {
3831 if (_column->get_num_values() == 3) {
3832 set_data3f(pointer, LVecBase3f(data, 0.0f, 0.0f));
3834 set_data4f(pointer, LVecBase4f(data, 0.0f, 0.0f, 1.0f));
3841void GeomVertexColumn::Packer_color::
3842set_data2f(
unsigned char *pointer,
const LVecBase2f &data) {
3843 if (_column->get_num_values() == 3) {
3844 set_data3f(pointer, LVecBase3f(data[0], data[1], 0.0f));
3846 set_data4f(pointer, LVecBase4f(data[0], data[1], 0.0f, 1.0f));
3853void GeomVertexColumn::Packer_color::
3854set_data3f(
unsigned char *pointer,
const LVecBase3f &data) {
3855 if (_column->get_num_values() == 3) {
3856 switch (_column->get_numeric_type()) {
3859 LVecBase3f scaled = data * 255.0f;
3860 uint8_t *pi = (uint8_t *)pointer;
3861 pi[0] = (
unsigned int)scaled[0];
3862 pi[1] = (
unsigned int)scaled[1];
3863 pi[2] = (
unsigned int)scaled[2];
3869 LVecBase3f scaled = data * 65535.0f;
3870 uint16_t *pi = (uint16_t *)pointer;
3871 pi[0] = (
unsigned int)scaled[0];
3872 pi[1] = (
unsigned int)scaled[1];
3873 pi[2] = (
unsigned int)scaled[2];
3879 LVecBase3f scaled = data * 4294967295.0f;
3880 uint32_t *pi = (uint32_t *)pointer;
3881 pi[0] = (
unsigned int)scaled[0];
3882 pi[1] = (
unsigned int)scaled[1];
3883 pi[2] = (
unsigned int)scaled[2];
3887 case NT_packed_dcba:
3889 LVecBase3f scaled = data * 255.0f;
3891 1.0f, scaled[2], scaled[1], scaled[0]);
3895 case NT_packed_dabc:
3897 LVecBase3f scaled = data * 255.0f;
3899 1.0f, scaled[0], scaled[1], scaled[2]);
3905 PN_float32 *pi = (PN_float32 *)pointer;
3914 PN_float64 *pi = (PN_float64 *)pointer;
3928 case NT_packed_ufloat:
3933 set_data4f(pointer, LVecBase4f(data[0], data[1], data[2], 1.0f));
3940void GeomVertexColumn::Packer_color::
3941set_data4f(
unsigned char *pointer,
const LVecBase4f &data) {
3942 if (_column->get_num_values() == 3) {
3943 set_data3f(pointer, LVecBase3f(data[0], data[1], data[2]));
3945 switch (_column->get_numeric_type()) {
3948 LVecBase4f scaled = data * 255.0f;
3949 uint8_t *pi = (uint8_t *)pointer;
3950 pi[0] = (
unsigned int)scaled[0];
3951 pi[1] = (
unsigned int)scaled[1];
3952 pi[2] = (
unsigned int)scaled[2];
3953 pi[3] = (
unsigned int)scaled[3];
3959 LVecBase4f scaled = data * 65535.0f;
3960 uint16_t *pi = (uint16_t *)pointer;
3961 pi[0] = (
unsigned int)scaled[0];
3962 pi[1] = (
unsigned int)scaled[1];
3963 pi[2] = (
unsigned int)scaled[2];
3964 pi[3] = (
unsigned int)scaled[3];
3970 LVecBase4f scaled = data * 4294967295.0f;
3971 uint32_t *pi = (uint32_t *)pointer;
3972 pi[0] = (
unsigned int)scaled[0];
3973 pi[1] = (
unsigned int)scaled[1];
3974 pi[2] = (
unsigned int)scaled[2];
3975 pi[3] = (
unsigned int)scaled[3];
3979 case NT_packed_dcba:
3981 LVecBase4f scaled = data * 255.0f;
3983 scaled[3], scaled[2], scaled[1], scaled[0]);
3987 case NT_packed_dabc:
3989 LVecBase4f scaled = data * 255.0f;
3991 scaled[3], scaled[0], scaled[1], scaled[2]);
3997 PN_float32 *pi = (PN_float32 *)pointer;
4007 PN_float64 *pi = (PN_float64 *)pointer;
4022 case NT_packed_ufloat:
4032void GeomVertexColumn::Packer_color::
4033set_data1d(
unsigned char *pointer,
double data) {
4034 if (_column->get_num_values() == 3) {
4035 set_data3d(pointer, LVecBase3d(data, 0.0, 0.0));
4037 set_data4d(pointer, LVecBase4d(data, 0.0, 0.0, 1.0));
4044void GeomVertexColumn::Packer_color::
4045set_data2d(
unsigned char *pointer,
const LVecBase2d &data) {
4046 if (_column->get_num_values() == 3) {
4047 set_data3d(pointer, LVecBase3d(data[0], data[1], 0.0));
4049 set_data4d(pointer, LVecBase4d(data[0], data[1], 0.0, 1.0));
4056void GeomVertexColumn::Packer_color::
4057set_data3d(
unsigned char *pointer,
const LVecBase3d &data) {
4058 if (_column->get_num_values() == 3) {
4059 switch (_column->get_numeric_type()) {
4062 LVecBase3d scaled = data * 255.0;
4063 uint8_t *pi = (uint8_t *)pointer;
4064 pi[0] = (
unsigned int)scaled[0];
4065 pi[1] = (
unsigned int)scaled[1];
4066 pi[2] = (
unsigned int)scaled[2];
4072 LVecBase3d scaled = data * 65535.0;
4073 uint16_t *pi = (uint16_t *)pointer;
4074 pi[0] = (
unsigned int)scaled[0];
4075 pi[1] = (
unsigned int)scaled[1];
4076 pi[2] = (
unsigned int)scaled[2];
4082 LVecBase3d scaled = data * 4294967295.0;
4083 uint32_t *pi = (uint32_t *)pointer;
4084 pi[0] = (
unsigned int)scaled[0];
4085 pi[1] = (
unsigned int)scaled[1];
4086 pi[2] = (
unsigned int)scaled[2];
4090 case NT_packed_dcba:
4092 LVecBase3d scaled = data * 255.0;
4094 1.0, scaled[2], scaled[1], scaled[0]);
4098 case NT_packed_dabc:
4100 LVecBase3d scaled = data * 255.0;
4102 1.0, scaled[0], scaled[1], scaled[2]);
4108 PN_float32 *pi = (PN_float32 *)pointer;
4117 PN_float64 *pi = (PN_float64 *)pointer;
4131 case NT_packed_ufloat:
4136 set_data4d(pointer, LVecBase4d(data[0], data[1], data[2], 1.0f));
4143void GeomVertexColumn::Packer_color::
4144set_data4d(
unsigned char *pointer,
const LVecBase4d &data) {
4145 if (_column->get_num_values() == 3) {
4146 set_data3d(pointer, LVecBase3d(data[0], data[1], data[2]));
4148 switch (_column->get_numeric_type()) {
4151 LVecBase4d scaled = data * 255.0;
4152 uint8_t *pi = (uint8_t *)pointer;
4153 pi[0] = (
unsigned int)scaled[0];
4154 pi[1] = (
unsigned int)scaled[1];
4155 pi[2] = (
unsigned int)scaled[2];
4156 pi[3] = (
unsigned int)scaled[3];
4162 LVecBase4d scaled = data * 65535.0;
4163 uint16_t *pi = (uint16_t *)pointer;
4164 pi[0] = (
unsigned int)scaled[0];
4165 pi[1] = (
unsigned int)scaled[1];
4166 pi[2] = (
unsigned int)scaled[2];
4167 pi[3] = (
unsigned int)scaled[3];
4173 LVecBase4d scaled = data * 4294967295.0;
4174 uint32_t *pi = (uint32_t *)pointer;
4175 pi[0] = (
unsigned int)scaled[0];
4176 pi[1] = (
unsigned int)scaled[1];
4177 pi[2] = (
unsigned int)scaled[2];
4178 pi[3] = (
unsigned int)scaled[3];
4182 case NT_packed_dcba:
4184 LVecBase4d scaled = data * 255.0;
4186 scaled[3], scaled[2], scaled[1], scaled[0]);
4190 case NT_packed_dabc:
4192 LVecBase4d scaled = data * 255.0;
4194 scaled[3], scaled[0], scaled[1], scaled[2]);
4200 PN_float32 *pi = (PN_float32 *)pointer;
4210 PN_float64 *pi = (PN_float64 *)pointer;
4225 case NT_packed_ufloat:
4235const LVecBase3f &GeomVertexColumn::Packer_float32_3::
4236get_data3f(
const unsigned char *pointer) {
4237 const PN_float32 *pi = (
const PN_float32 *)pointer;
4238 _v3.set(pi[0], pi[1], pi[2]);
4245void GeomVertexColumn::Packer_float32_3::
4246set_data3f(
unsigned char *pointer,
const LVecBase3f &data) {
4247 PN_float32 *pi = (PN_float32 *)pointer;
4256const LVecBase2f &GeomVertexColumn::Packer_point_float32_2::
4257get_data2f(
const unsigned char *pointer) {
4258 const PN_float32 *pi = (
const PN_float32 *)pointer;
4259 _v2.set(pi[0], pi[1]);
4266void GeomVertexColumn::Packer_point_float32_2::
4267set_data2f(
unsigned char *pointer,
const LVecBase2f &data) {
4268 PN_float32 *pi = (PN_float32 *)pointer;
4276const LVecBase3f &GeomVertexColumn::Packer_point_float32_3::
4277get_data3f(
const unsigned char *pointer) {
4278 const PN_float32 *pi = (
const PN_float32 *)pointer;
4279 _v3.set(pi[0], pi[1], pi[2]);
4286void GeomVertexColumn::Packer_point_float32_3::
4287set_data3f(
unsigned char *pointer,
const LVecBase3f &data) {
4288 PN_float32 *pi = (PN_float32 *)pointer;
4297const LVecBase4f &GeomVertexColumn::Packer_point_float32_4::
4298get_data4f(
const unsigned char *pointer) {
4299 const PN_float32 *pi = (
const PN_float32 *)pointer;
4300 _v4.set(pi[0], pi[1], pi[2], pi[3]);
4307void GeomVertexColumn::Packer_point_float32_4::
4308set_data4f(
unsigned char *pointer,
const LVecBase4f &data) {
4309 PN_float32 *pi = (PN_float32 *)pointer;
4319const LVecBase3f &GeomVertexColumn::Packer_nativefloat_3::
4320get_data3f(
const unsigned char *pointer) {
4321 return *(
const LVecBase3f *)pointer;
4327const LVecBase2f &GeomVertexColumn::Packer_point_nativefloat_2::
4328get_data2f(
const unsigned char *pointer) {
4329 return *(
const LVecBase2f *)pointer;
4335const LVecBase3f &GeomVertexColumn::Packer_point_nativefloat_3::
4336get_data3f(
const unsigned char *pointer) {
4337 return *(
const LVecBase3f *)pointer;
4343const LVecBase4f &GeomVertexColumn::Packer_point_nativefloat_4::
4344get_data4f(
const unsigned char *pointer) {
4345 return *(
const LVecBase4f *)pointer;
4351const LVecBase3d &GeomVertexColumn::Packer_float64_3::
4352get_data3d(
const unsigned char *pointer) {
4353 const PN_float64 *pi = (
const PN_float64 *)pointer;
4354 _v3d.set(pi[0], pi[1], pi[2]);
4361void GeomVertexColumn::Packer_float64_3::
4362set_data3d(
unsigned char *pointer,
const LVecBase3d &data) {
4363 PN_float64 *pi = (PN_float64 *)pointer;
4372const LVecBase2d &GeomVertexColumn::Packer_point_float64_2::
4373get_data2d(
const unsigned char *pointer) {
4374 const PN_float64 *pi = (
const PN_float64 *)pointer;
4375 _v2d.set(pi[0], pi[1]);
4382void GeomVertexColumn::Packer_point_float64_2::
4383set_data2d(
unsigned char *pointer,
const LVecBase2d &data) {
4384 PN_float64 *pi = (PN_float64 *)pointer;
4392const LVecBase3d &GeomVertexColumn::Packer_point_float64_3::
4393get_data3d(
const unsigned char *pointer) {
4394 const PN_float64 *pi = (
const PN_float64 *)pointer;
4395 _v3d.set(pi[0], pi[1], pi[2]);
4402void GeomVertexColumn::Packer_point_float64_3::
4403set_data3d(
unsigned char *pointer,
const LVecBase3d &data) {
4404 PN_float64 *pi = (PN_float64 *)pointer;
4413const LVecBase4d &GeomVertexColumn::Packer_point_float64_4::
4414get_data4d(
const unsigned char *pointer) {
4415 const PN_float64 *pi = (
const PN_float64 *)pointer;
4416 _v4d.set(pi[0], pi[1], pi[2], pi[3]);
4423void GeomVertexColumn::Packer_point_float64_4::
4424set_data4d(
unsigned char *pointer,
const LVecBase4d &data) {
4425 PN_float64 *pi = (PN_float64 *)pointer;
4435const LVecBase3d &GeomVertexColumn::Packer_nativedouble_3::
4436get_data3d(
const unsigned char *pointer) {
4437 return *(
const LVecBase3d *)pointer;
4443const LVecBase2d &GeomVertexColumn::Packer_point_nativedouble_2::
4444get_data2d(
const unsigned char *pointer) {
4445 return *(
const LVecBase2d *)pointer;
4451const LVecBase3d &GeomVertexColumn::Packer_point_nativedouble_3::
4452get_data3d(
const unsigned char *pointer) {
4453 return *(
const LVecBase3d *)pointer;
4459const LVecBase4d &GeomVertexColumn::Packer_point_nativedouble_4::
4460get_data4d(
const unsigned char *pointer) {
4461 return *(
const LVecBase4d *)pointer;
4467const LVecBase4f &GeomVertexColumn::Packer_argb_packed::
4468get_data4f(
const unsigned char *pointer) {
4469 uint32_t dword = *(
const uint32_t *)pointer;
4481const LVecBase4d &GeomVertexColumn::Packer_argb_packed::
4482get_data4d(
const unsigned char *pointer) {
4483 uint32_t dword = *(
const uint32_t *)pointer;
4495void GeomVertexColumn::Packer_argb_packed::
4496set_data4f(
unsigned char *pointer,
const LVecBase4f &data) {
4500 ((
unsigned int)(min(max(data[3], 0.0f), 1.0f) * 255.0f),
4501 (
unsigned int)(min(max(data[0], 0.0f), 1.0f) * 255.0f),
4502 (
unsigned int)(min(max(data[1], 0.0f), 1.0f) * 255.0f),
4503 (
unsigned int)(min(max(data[2], 0.0f), 1.0f) * 255.0f));
4509void GeomVertexColumn::Packer_argb_packed::
4510set_data4d(
unsigned char *pointer,
const LVecBase4d &data) {
4514 ((
unsigned int)(min(max(data[3], 0.0), 1.0) * 255.0),
4515 (
unsigned int)(min(max(data[0], 0.0), 1.0) * 255.0),
4516 (
unsigned int)(min(max(data[1], 0.0), 1.0) * 255.0),
4517 (
unsigned int)(min(max(data[2], 0.0), 1.0) * 255.0));
4523const LVecBase4f &GeomVertexColumn::Packer_rgba_uint8_4::
4524get_data4f(
const unsigned char *pointer) {
4525 _v4.set((
float)pointer[0], (
float)pointer[1],
4526 (
float)pointer[2], (
float)pointer[3]);
4534const LVecBase4d &GeomVertexColumn::Packer_rgba_uint8_4::
4535get_data4d(
const unsigned char *pointer) {
4536 _v4d.set((
double)pointer[0], (
double)pointer[1],
4537 (
double)pointer[2], (
double)pointer[3]);
4545void GeomVertexColumn::Packer_rgba_uint8_4::
4546set_data4f(
unsigned char *pointer,
const LVecBase4f &data) {
4547 pointer[0] = (
unsigned int)(min(max(data[0], 0.0f), 1.0f) * 255.0f);
4548 pointer[1] = (
unsigned int)(min(max(data[1], 0.0f), 1.0f) * 255.0f);
4549 pointer[2] = (
unsigned int)(min(max(data[2], 0.0f), 1.0f) * 255.0f);
4550 pointer[3] = (
unsigned int)(min(max(data[3], 0.0f), 1.0f) * 255.0f);
4556void GeomVertexColumn::Packer_rgba_uint8_4::
4557set_data4d(
unsigned char *pointer,
const LVecBase4d &data) {
4558 pointer[0] = (
unsigned int)(min(max(data[0], 0.0), 1.0) * 255.0);
4559 pointer[1] = (
unsigned int)(min(max(data[1], 0.0), 1.0) * 255.0);
4560 pointer[2] = (
unsigned int)(min(max(data[2], 0.0), 1.0) * 255.0);
4561 pointer[3] = (
unsigned int)(min(max(data[3], 0.0), 1.0) * 255.0);
4567const LVecBase4f &GeomVertexColumn::Packer_rgba_float32_4::
4568get_data4f(
const unsigned char *pointer) {
4569 const PN_float32 *pi = (
const PN_float32 *)pointer;
4570 _v4.set(pi[0], pi[1], pi[2], pi[3]);
4577void GeomVertexColumn::Packer_rgba_float32_4::
4578set_data4f(
unsigned char *pointer,
const LVecBase4f &data) {
4579 PN_float32 *pi = (PN_float32 *)pointer;
4589const LVecBase4f &GeomVertexColumn::Packer_rgba_nativefloat_4::
4590get_data4f(
const unsigned char *pointer) {
4591 return *(
const LVecBase4f *)pointer;
4597int GeomVertexColumn::Packer_uint16_1::
4598get_data1i(
const unsigned char *pointer) {
4599 return *(
const uint16_t *)pointer;
4605void GeomVertexColumn::Packer_uint16_1::
4606set_data1i(
unsigned char *pointer,
int data) {
4607 *(uint16_t *)pointer = data;
4608 nassertv(*(uint16_t *)pointer == data);
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
This is the fundamental interface for extracting binary objects from a Bam file, as generated by a Ba...
bool read_pointer(DatagramIterator &scan)
The interface for reading a pointer to another object from a Bam file.
int get_file_minor_ver() const
Returns the minor version number of the Bam file currently being read.
This is the fundamental interface for writing binary objects to a Bam file, to be extracted later by ...
void write_pointer(Datagram &packet, const TypedWritable *dest)
The interface for writing a pointer to another object to a Bam file.
int get_file_minor_ver() const
Returns the minor version number of the Bam file currently being written.
A class to retrieve the individual data elements previously stored in a Datagram.
uint8_t get_uint8()
Extracts an unsigned 8-bit integer.
uint16_t get_uint16()
Extracts an unsigned 16-bit integer.
An ordered list of data elements, formatted in memory for transmission over a socket or writing to a ...
void add_uint8(uint8_t value)
Adds an unsigned 8-bit integer to the datagram.
void add_uint16(uint16_t value)
Adds an unsigned 16-bit integer to the datagram.
This defines how a single column is interleaved within a vertex array stored within a Geom.
int get_num_values() const
Returns the number of numeric values of the column: the number of distinct numeric values that go int...
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...
int get_start() const
Returns the byte within the array record at which this column starts.
void set_column_alignment(int column_alignment)
Changes the column alignment of an existing column.
NumericType get_numeric_type() const
Returns the token representing the numeric type of the data storage.
void write_datagram(BamWriter *manager, Datagram &dg)
Writes the contents of this object to the datagram for shipping out to a Bam file.
void set_name(InternalName *name)
Replaces the name of an existing column.
int complete_pointers(TypedWritable **plist, BamReader *manager)
Receives an array of pointers, one for each time manager->read_pointer() was called in fillin().
void set_numeric_type(NumericType numeric_type)
Changes the numeric type an existing column.
const InternalName * get_name() const
Returns the name of this particular data field, e.g.
void set_contents(Contents contents)
Changes the semantic meaning of an existing column.
void set_start(int start)
Changes the start byte of an existing column.
void set_num_components(int num_components)
Changes the number of components of an existing column.
Contents get_contents() const
Returns the token representing the semantic meaning of the stored value.
int get_num_components() const
Returns the number of components of the column: the number of instances of the NumericType in each el...
static uint32_t pack_ufloat(float a, float b, float c)
Packs three float values in an unsigned 32-bit int.
static float unpack_ufloat_c(uint32_t data)
Unpacks an unsigned float10 value from an uint32.
static float unpack_ufloat_a(uint32_t data)
Unpacks an unsigned float11 value from an uint32.
static float unpack_ufloat_b(uint32_t data)
Unpacks an unsigned float11 value from an uint32.
static unsigned int unpack_abcd_b(uint32_t data)
Returns the second packed value from a DirectX-style NT_packed_abcd.
static unsigned int unpack_abcd_a(uint32_t data)
Returns the first packed value from a DirectX-style NT_packed_abcd.
static uint32_t 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.
static unsigned int unpack_abcd_c(uint32_t data)
Returns the third packed value from a DirectX-style NT_packed_abcd.
static unsigned int unpack_abcd_d(uint32_t data)
Returns the fourth packed value from a DirectX-style NT_packed_abcd.
Encodes a string name in a hash table, mapping it to a pointer.
Base class for objects that can be written to and read from Bam files.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.