Revision: 43786 http://brlcad.svn.sourceforge.net/brlcad/?rev=43786&view=rev Author: starseeker Date: 2011-03-08 19:50:38 +0000 (Tue, 08 Mar 2011)
Log Message: ----------- MFC r43785 Modified Paths: -------------- brlcad/branches/cmake/NEWS brlcad/branches/cmake/TODO brlcad/branches/cmake/misc/Makefile.am brlcad/branches/cmake/misc/debian/rules brlcad/branches/cmake/sh/make_rpm.sh brlcad/branches/cmake/src/fbed/Makefile.am brlcad/branches/cmake/src/librt/Makefile.am brlcad/branches/cmake/src/librt/primitives/bot/bot.c brlcad/branches/cmake/src/librt/primitives/half/half.c brlcad/branches/cmake/src/librt/primitives/nmg/nmg.c Modified: brlcad/branches/cmake/NEWS =================================================================== --- brlcad/branches/cmake/NEWS 2011-03-08 18:21:11 UTC (rev 43785) +++ brlcad/branches/cmake/NEWS 2011-03-08 19:50:38 UTC (rev 43786) @@ -11,17 +11,21 @@ ---------------------------------------------------------------------- ---- 2011-03-XX Release 7.18.4 --- +--- 2011-03-08 Release 7.18.4 --- ---------------------------------------------------------------------- -After considerable development, this release marks the integration of -our high-performance Triangle Intersection Engine (TIE) with BRL-CAD's -LIBRT raytrace library. TIE uses specialized acceleration techniques -for faster raytracing of triangle mesh models. TIE was experimentally -developed as part of our Advanced Distributed Ray Tracer (ADRT) tool -suite, but is now also configurably Integrated with LIBRT (BoT) mesh -raytracing. Particularly for BoT models with high polygon counts, the -optimization is providing performance improvements from 2x-10x faster. +After considerable development, this release includes the preliminary +integration of our high-performance Triangle Intersection Engine (TIE) +with BRL-CAD's LIBRT raytrace library. TIE uses specialized +acceleration techniques for faster raytracing of triangle mesh models. +TIE was experimentally developed over several years as part of +BRL-CAD's Advanced Distributed Ray Tracer (ADRT) tool suite. As this +is the initial integration, TIE is available but presently disabled by +default. The engine optimiation is configurably integrated with LIBRT +mesh (BoT) raytracing and optionally enabled via settings available in +RT and MGED. Inital testing of "real-world" models shows average +improvements around 20-60% while individual meshes with high (1M+) +face counts are rendering more than 2000% faster than before. Also included in this release is the development of a new "shp-g" geometry importer for Shapefile data. Shapefiles are a common file @@ -29,6 +33,7 @@ information systems (GIS) software. Shapefiles may be imported as 2D sketch geometry that can be extruded to a 3D representation. +* support matrices over halfspaces within combinations - Sean Morrison * fixed archer and rtwizard startup failure bug on Mac - Sean Morrison * fixed bug starting up the Combination Editor in mged - Sean Morrison * mged 'mater' command interactive prompting restored - Sean Morrison Modified: brlcad/branches/cmake/TODO =================================================================== --- brlcad/branches/cmake/TODO 2011-03-08 18:21:11 UTC (rev 43785) +++ brlcad/branches/cmake/TODO 2011-03-08 19:50:38 UTC (rev 43786) @@ -17,17 +17,14 @@ THESE TASKS SHOULD HAPPEN BEFORE THE NEXT RELEASE ------------------------------------------------- -* unbust nmg (host/net conversion bug) +* NA-DA! -* test mintie optimization, test performance for release notes -* gqa regression is bombing out with malloc(0) in - allocate_per_region_data() - - THESE TASKS SHOULD HAPPEN WITHIN TWO RELEASE ITERATIONS ------------------------------------------------------- +* fix bottie crash on 32b builds + * resolve bot bin sort optimization crash, disabled during release * implement new makesegs for tie Modified: brlcad/branches/cmake/misc/Makefile.am =================================================================== --- brlcad/branches/cmake/misc/Makefile.am 2011-03-08 18:21:11 UTC (rev 43785) +++ brlcad/branches/cmake/misc/Makefile.am 2011-03-08 19:50:38 UTC (rev 43786) @@ -30,7 +30,8 @@ brlcad-config.in \ brlcad.spec \ brlcad.spec.in \ - debian/application-x-brlcad.png \ + debian/application-x-brlcad-v4.png \ + debian/application-x-brlcad-v5.png \ debian/application-x-brlcad.xml \ debian/brlcad-archer.desktop \ debian/brlcad-archer.png \ Modified: brlcad/branches/cmake/misc/debian/rules =================================================================== --- brlcad/branches/cmake/misc/debian/rules 2011-03-08 18:21:11 UTC (rev 43785) +++ brlcad/branches/cmake/misc/debian/rules 2011-03-08 19:50:38 UTC (rev 43786) @@ -1,6 +1,6 @@ #!/usr/bin/make -f -# Author: Jordi Sayol <g.sa...@yahoo.es> +# Author: Jordi Sayol <g.sa...@yahoo.es> # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 @@ -18,7 +18,7 @@ PARALLEL_OPTIONS = -j$(PARALLEL_JOBS) else ifneq (,$(shell getconf _NPROCESSORS_ONLN)) - PARALLEL_OPTIONS = -j$(shell getconf _NPROCESSORS_ONLN) + PARALLEL_OPTIONS = -j$(shell getconf _NPROCESSORS_ONLN | sed "s/.*/&*2-1/" | bc) endif endif # DEB_BUILD_OPTIONS @@ -44,7 +44,7 @@ dh_testdir dh_testroot dh_prep - dh_installdirs + dh_installdirs $(MAKE) install DESTDIR=$(CURDIR)/debian/tmp @@ -66,4 +66,4 @@ dh_builddeb -a binary: binary-arch -.PHONY: build clean binary-arch binary install +.PHONY: build clean binary-arch binary install Modified: brlcad/branches/cmake/sh/make_rpm.sh =================================================================== --- brlcad/branches/cmake/sh/make_rpm.sh 2011-03-08 18:21:11 UTC (rev 43785) +++ brlcad/branches/cmake/sh/make_rpm.sh 2011-03-08 19:50:38 UTC (rev 43786) @@ -153,7 +153,7 @@ # compile and install in tmp dir ./configure --enable-optimized --enable-almost-everything --with-ogl --disable-debug -make -j`getconf _NPROCESSORS_ONLN` +make -j`getconf _NPROCESSORS_ONLN | sed "s/.*/&*2-1/" | bc` fakeroot make install DESTDIR=`pwd`"/$TMPDIR/tmp" # copy menu files Modified: brlcad/branches/cmake/src/fbed/Makefile.am =================================================================== --- brlcad/branches/cmake/src/fbed/Makefile.am 2011-03-08 18:21:11 UTC (rev 43785) +++ brlcad/branches/cmake/src/fbed/Makefile.am 2011-03-08 19:50:38 UTC (rev 43786) @@ -24,7 +24,7 @@ std.h \ try.h -fbed_CPPFLAGS = \ +AM_CPPFLAGS = \ ${TERMLIB_CPPFLAGS} \ ${STRICT_FLAGS} \ ${TCL_CPPFLAGS} Modified: brlcad/branches/cmake/src/librt/Makefile.am =================================================================== --- brlcad/branches/cmake/src/librt/Makefile.am 2011-03-08 18:21:11 UTC (rev 43785) +++ brlcad/branches/cmake/src/librt/Makefile.am 2011-03-08 19:50:38 UTC (rev 43786) @@ -21,7 +21,7 @@ ${TCL_CPPFLAGS} \ ${BREP_CPPFLAGS} -AM_CFLAGS = ${STRICT_FLAGS} +# AM_CFLAGS = ${STRICT_FLAGS} noinst_PROGRAMS = \ ${BREP_TEST} \ Modified: brlcad/branches/cmake/src/librt/primitives/bot/bot.c =================================================================== --- brlcad/branches/cmake/src/librt/primitives/bot/bot.c 2011-03-08 18:21:11 UTC (rev 43785) +++ brlcad/branches/cmake/src/librt/primitives/bot/bot.c 2011-03-08 19:50:38 UTC (rev 43786) @@ -205,7 +205,7 @@ bot_ip = (struct rt_bot_internal *)ip->idb_ptr; RT_BOT_CK_MAGIC(bot_ip); - if ( rt_bot_mintie > 0 && bot_ip->num_faces >= rt_bot_mintie && (bot_ip->face_normals != NULL || bot_ip->orientation != RT_BOT_UNORIENTED) ) + if ( rt_bot_mintie > 0 && bot_ip->num_faces >= rt_bot_mintie /* FIXME: (necessary?) && (bot_ip->face_normals != NULL || bot_ip->orientation != RT_BOT_UNORIENTED) */ ) return bottie_prep_double(stp, bot_ip, rtip); else if (bot_ip->bot_flags & RT_BOT_USE_FLOATS) return rt_bot_prep_float(stp, bot_ip, rtip); Modified: brlcad/branches/cmake/src/librt/primitives/half/half.c =================================================================== --- brlcad/branches/cmake/src/librt/primitives/half/half.c 2011-03-08 18:21:11 UTC (rev 43785) +++ brlcad/branches/cmake/src/librt/primitives/half/half.c 2011-03-08 19:50:38 UTC (rev 43786) @@ -501,7 +501,22 @@ hip = (struct rt_half_internal *)ip->idb_ptr; RT_HALF_CK_MAGIC(hip); RT_CK_DB_INTERNAL(op); - hop = (struct rt_half_internal *)op->idb_ptr; + + if (op != ip) { + RT_INIT_DB_INTERNAL(op); + hop = (struct rt_half_internal *)bu_malloc(sizeof(struct rt_half_internal), "hop"); + hop->magic = RT_HALF_INTERNAL_MAGIC; + op->idb_ptr = (genptr_t)hop; + op->idb_meth = &rt_functab[ID_HALF]; + op->idb_major_type = DB5_MAJORTYPE_BRLCAD; + op->idb_type = ID_HALF; + if (ip->idb_avs.magic == BU_AVS_MAGIC) { + bu_avs_init(&op->idb_avs, ip->idb_avs.count, "avs"); + bu_avs_merge(&op->idb_avs, &ip->idb_avs); + } + } else { + hop = (struct rt_half_internal *)ip->idb_ptr; + } RT_HALF_CK_MAGIC(hop); /* Pick a point on the original halfspace */ Modified: brlcad/branches/cmake/src/librt/primitives/nmg/nmg.c =================================================================== --- brlcad/branches/cmake/src/librt/primitives/nmg/nmg.c 2011-03-08 18:21:11 UTC (rev 43785) +++ brlcad/branches/cmake/src/librt/primitives/nmg/nmg.c 2011-03-08 19:50:38 UTC (rev 43786) @@ -395,12 +395,12 @@ } -#define RT_CK_DISKMAGIC(_cp, _magic) \ - if (ntohl(*(uint32_t *)_cp) != _magic) { \ - bu_log("RT_CK_DISKMAGIC: magic mis-match, got x%x, s/b x%x, file %s, line %d\n", \ - ntohl(*(uint32_t *)_cp), _magic, __FILE__, __LINE__); \ - bu_bomb("bad magic\n"); \ - } +#define RT_CK_DISKMAGIC(_cp, _magic) \ + if (bu_glong(_cp) != _magic) { \ + bu_log("RT_CK_DISKMAGIC: magic mis-match, got x%x, s/b x%x, file %s, line %d\n", \ + bu_glong(_cp), _magic, __FILE__, __LINE__); \ + bu_bomb("bad magic\n"); \ + } /* ---------------------------------------------------------------------- @@ -906,9 +906,9 @@ cp = base + ecnt[subscript].byte_offset; - if (ntohl(*(uint32_t *)cp) != DISK_DOUBLE_ARRAY_MAGIC) { + if (bu_glong(cp) != DISK_DOUBLE_ARRAY_MAGIC) { bu_log("magic mis-match, got x%x, s/b x%x, file %s, line %d\n", - ntohl(*(uint32_t *)cp), DISK_DOUBLE_ARRAY_MAGIC, __FILE__, __LINE__); + bu_glong(cp), DISK_DOUBLE_ARRAY_MAGIC, __FILE__, __LINE__); bu_log("subscript=%d, byte_offset=%d\n", subscript, ecnt[subscript].byte_offset); bu_bomb("rt_nmg_import4_fastf() bad magic\n"); @@ -917,7 +917,7 @@ if (pt_type) len *= RT_NURB_EXTRACT_COORDS(pt_type); - count = ntohl(*(uint32_t *)&cp[4]); + count = bu_glong(cp + 4); if (count != len) { bu_log("rt_nmg_import4_fastf() subscript=%d, expected len=%d, got=%d\n", subscript, len, count); @@ -967,11 +967,11 @@ * 0 substitute a null pointer when imported. * -1 substitute pointer to within-struct list head when imported. */ -long +int rt_nmg_reindex(genptr_t p, struct nmg_exp_counts *ecnt) { - long idx; - long ret=0; /* zero is NOT the default value, this is just to satisfy cray compilers */ + int idx; + int ret=0; /* zero is NOT the default value, this is just to satisfy cray compilers */ /* If null pointer, return new subscript of zero */ if (p == 0) { @@ -1346,29 +1346,29 @@ * * NOTE that the "< 0" test here is a comparison with DISK_INDEX_LISTHEAD. */ -#define INDEX(o, i, ty, elem) (i)->elem = (struct ty *)ptrs[ntohl(*(uint32_t *)(o)->elem)] +#define INDEX(o, i, ty, elem) (i)->elem = (struct ty *)ptrs[bu_glong((o)->elem)] #define INDEXL_HD(oo, ii, elem, hd) { \ - long sub; \ - if ((sub = (long)ntohl(*(uint32_t *)((oo)->elem.forw))) < 0) \ + int sub; \ + if ((sub = bu_glong((oo)->elem.forw)) < 0) \ (ii)->elem.forw = &(hd); \ else (ii)->elem.forw = (struct bu_list *)ptrs[sub]; \ - if ((sub = (long)ntohl(*(uint32_t *)((oo)->elem.back))) < 0) \ + if ((sub = bu_glong((oo)->elem.back)) < 0) \ (ii)->elem.back = &(hd); \ else (ii)->elem.back = (struct bu_list *)ptrs[sub]; } /* For use with the edgeuse l2 / edge_g eu2_hd secondary list */ /* The subscripts will point to the edgeuse, not the edgeuse's l2 rt_list */ #define INDEXL_HD2(oo, ii, elem, hd) { \ - long sub; \ + int sub; \ struct edgeuse *eu2; \ - if ((sub = (long)ntohl(*(uint32_t *)((oo)->elem.forw))) < 0) { \ + if ((sub = bu_glong((oo)->elem.forw)) < 0) { \ (ii)->elem.forw = &(hd); \ } else { \ eu2 = (struct edgeuse *)ptrs[sub]; \ NMG_CK_EDGEUSE(eu2); \ (ii)->elem.forw = &eu2->l2; \ } \ - if ((sub = (long)ntohl(*(uint32_t *)((oo)->elem.back))) < 0) { \ + if ((sub = bu_glong((oo)->elem.back)) < 0) { \ (ii)->elem.back = &(hd); \ } else { \ eu2 = (struct edgeuse *)ptrs[sub]; \ @@ -1466,7 +1466,7 @@ RT_CK_DISKMAGIC(d->magic, DISK_FACEUSE_MAGIC); INDEX(d, fu, shell, s_p); INDEX(d, fu, faceuse, fumate_p); - fu->orientation = ntohl(*(uint32_t *)d->orientation); + fu->orientation = bu_glong(d->orientation); INDEX(d, fu, face, f_p); INDEXL_HD(d, fu, lu_hd, fu->lu_hd); INDEXL_HD(d, fu, l, fu->s_p->fu_hd); /* after fu->s_p */ @@ -1483,9 +1483,9 @@ NMG_CK_FACE(f); RT_CK_DISKMAGIC(d->magic, DISK_FACE_MAGIC); INDEX(d, f, faceuse, fu_p); - g_index = ntohl(*(uint32_t *)d->g); + g_index = bu_glong(d->g); f->g.magic_p = ptrs[g_index]; - f->flip = ntohl(*(uint32_t *)d->flip); + f->flip = bu_glong(d->flip); /* Enrole this face on fg's list of users */ NMG_CK_FACE_G_EITHER(f->g.magic_p); INDEXL_HD(d, f, l, f->g.plane_p->f_hd); /* after fu->fg_p set */ @@ -1511,22 +1511,22 @@ NMG_CK_FACE_G_SNURB(fg); RT_CK_DISKMAGIC(d->magic, DISK_FACE_G_SNURB_MAGIC); INDEXL_HD(d, fg, f_hd, fg->f_hd); - fg->order[0] = ntohl(*(uint32_t *)d->u_order); - fg->order[1] = ntohl(*(uint32_t *)d->v_order); - fg->u.k_size = ntohl(*(uint32_t *)d->u_size); + fg->order[0] = bu_glong(d->u_order); + fg->order[1] = bu_glong(d->v_order); + fg->u.k_size = bu_glong(d->u_size); fg->u.knots = rt_nmg_import4_fastf(basep, ecnt, - ntohl(*(uint32_t *)d->u_knots), (matp_t)NULL, + bu_glong(d->u_knots), (matp_t)NULL, fg->u.k_size, 0); - fg->v.k_size = ntohl(*(uint32_t *)d->v_size); + fg->v.k_size = bu_glong(d->v_size); fg->v.knots = rt_nmg_import4_fastf(basep, ecnt, - ntohl(*(uint32_t *)d->v_knots), (matp_t)NULL, + bu_glong(d->v_knots), (matp_t)NULL, fg->v.k_size, 0); - fg->s_size[0] = ntohl(*(uint32_t *)d->us_size); - fg->s_size[1] = ntohl(*(uint32_t *)d->vs_size); - fg->pt_type = ntohl(*(uint32_t *)d->pt_type); + fg->s_size[0] = bu_glong(d->us_size); + fg->s_size[1] = bu_glong(d->vs_size); + fg->pt_type = bu_glong(d->pt_type); /* Transform ctl_points by 'mat' */ fg->ctl_points = rt_nmg_import4_fastf(basep, ecnt, - ntohl(*(uint32_t *)d->ctl_points), (matp_t)mat, + bu_glong(d->ctl_points), (matp_t)mat, fg->s_size[0] * fg->s_size[1], fg->pt_type); } @@ -1540,10 +1540,10 @@ d = &((struct disk_loopuse *)ip)[iindex]; NMG_CK_LOOPUSE(lu); RT_CK_DISKMAGIC(d->magic, DISK_LOOPUSE_MAGIC); - up_index = ntohl(*(uint32_t *)d->up); + up_index = bu_glong(d->up); lu->up.magic_p = ptrs[up_index]; INDEX(d, lu, loopuse, lumate_p); - lu->orientation = ntohl(*(uint32_t *)d->orientation); + lu->orientation = bu_glong(d->orientation); INDEX(d, lu, loop, l_p); up_kind = ecnt[up_index].kind; if (up_kind == NMG_KIND_FACEUSE) { @@ -1589,12 +1589,12 @@ d = &((struct disk_edgeuse *)ip)[iindex]; NMG_CK_EDGEUSE(eu); RT_CK_DISKMAGIC(d->magic, DISK_EDGEUSE_MAGIC); - up_index = ntohl(*(uint32_t *)d->up); + up_index = bu_glong(d->up); eu->up.magic_p = ptrs[up_index]; INDEX(d, eu, edgeuse, eumate_p); INDEX(d, eu, edgeuse, radial_p); INDEX(d, eu, edge, e_p); - eu->orientation = ntohl(*(uint32_t *)d->orientation); + eu->orientation = bu_glong(d->orientation); INDEX(d, eu, vertexuse, vu_p); up_kind = ecnt[up_index].kind; if (up_kind == NMG_KIND_LOOPUSE) { @@ -1602,7 +1602,7 @@ } else if (up_kind == NMG_KIND_SHELL) { INDEXL_HD(d, eu, l, eu->up.s_p->eu_hd); } else bu_log("bad edgeuse up, index=%d, kind=%d\n", up_index, up_kind); - eu->g.magic_p = ptrs[ntohl(*(uint32_t *)d->g)]; + eu->g.magic_p = ptrs[bu_glong(d->g)]; NMG_CK_EDGE(eu->e_p); NMG_CK_EDGEUSE(eu->eumate_p); NMG_CK_EDGEUSE(eu->radial_p); @@ -1625,7 +1625,7 @@ d = &((struct disk_edge *)ip)[iindex]; NMG_CK_EDGE(e); RT_CK_DISKMAGIC(d->magic, DISK_EDGE_MAGIC); - e->is_real = ntohl(*(uint32_t *)d->is_real); + e->is_real = bu_glong(d->is_real); INDEX(d, e, edgeuse, eu_p); NMG_CK_EDGEUSE(e->eu_p); } @@ -1654,17 +1654,17 @@ NMG_CK_EDGE_G_CNURB(eg); RT_CK_DISKMAGIC(d->magic, DISK_EDGE_G_CNURB_MAGIC); INDEXL_HD2(d, eg, eu_hd2, eg->eu_hd2); - eg->order = ntohl(*(uint32_t *)d->order); + eg->order = bu_glong(d->order); /* If order is zero, so is everything else */ if (eg->order == 0) return 0; - eg->k.k_size = ntohl(*(uint32_t *)d->k_size); + eg->k.k_size = bu_glong(d->k_size); eg->k.knots = rt_nmg_import4_fastf(basep, ecnt, - ntohl(*(uint32_t *)d->knots), (matp_t)NULL, + bu_glong(d->knots), (matp_t)NULL, eg->k.k_size, 0); - eg->c_size = ntohl(*(uint32_t *)d->c_size); - eg->pt_type = ntohl(*(uint32_t *)d->pt_type); + eg->c_size = bu_glong(d->c_size); + eg->pt_type = bu_glong(d->pt_type); /* * The curve's control points are in parameter space. * They do NOT get transformed! @@ -1673,13 +1673,13 @@ /* UV coords on snurb surface don't get xformed */ eg->ctl_points = rt_nmg_import4_fastf(basep, ecnt, - ntohl(*(uint32_t *)d->ctl_points), (matp_t)NULL, + bu_glong(d->ctl_points), (matp_t)NULL, eg->c_size, eg->pt_type); } else { /* XYZ coords on planar face DO get xformed */ eg->ctl_points = rt_nmg_import4_fastf(basep, ecnt, - ntohl(*(uint32_t *)d->ctl_points), (matp_t)mat, + bu_glong(d->ctl_points), (matp_t)mat, eg->c_size, eg->pt_type); } } @@ -1690,9 +1690,9 @@ d = &((struct disk_vertexuse *)ip)[iindex]; NMG_CK_VERTEXUSE(vu); RT_CK_DISKMAGIC(d->magic, DISK_VERTEXUSE_MAGIC); - vu->up.magic_p = ptrs[ntohl(*(uint32_t *)d->up)]; + vu->up.magic_p = ptrs[bu_glong(d->up)]; INDEX(d, vu, vertex, v_p); - vu->a.magic_p = ptrs[ntohl(*(uint32_t *)d->a)]; + vu->a.magic_p = ptrs[bu_glong(d->a)]; NMG_CK_VERTEX(vu->v_p); if (vu->a.magic_p)NMG_CK_VERTEXUSE_A_EITHER(vu->a.magic_p); INDEXL_HD(d, vu, l, vu->v_p->vu_hd); @@ -1980,7 +1980,7 @@ for (i=0; i < nkind; i++) { int ndouble; RT_CK_DISKMAGIC(cp + offset, DISK_DOUBLE_ARRAY_MAGIC); - ndouble = ntohl(*(uint32_t *)(cp + offset + 4)); + ndouble = bu_glong(cp + offset + 4); ecnt[subscript].kind = NMG_KIND_DOUBLE_ARRAY; /* Stored byte offset is from beginning of disk record */ ecnt[subscript].byte_offset = offset; @@ -2039,7 +2039,7 @@ /* Obtain counts of each kind of structure */ maxindex = 1; for (kind = 0; kind < NMG_N_KINDS; kind++) { - kind_counts[kind] = ntohl(*(uint32_t *)(rp->nmg.N_structs+4*kind)); + kind_counts[kind] = bu_glong(rp->nmg.N_structs+4*kind); maxindex += kind_counts[kind]; } @@ -2400,7 +2400,7 @@ { int version; - version = ntohl(*(uint32_t *)dp); + version = bu_glong(dp); dp+= SIZEOF_NETWORK_LONG; if (version != DISK_MODEL_VERSION) { bu_log("rt_nmg_import4: expected NMG '.g' format version %d, got %d, aborting nmg solid import\n", @@ -2410,7 +2410,7 @@ } maxindex = 1; for (kind =0; kind < NMG_N_KINDS; kind++) { - kind_counts[kind] = ntohl(*(uint32_t *)dp); + kind_counts[kind] = bu_glong(dp); dp+= SIZEOF_NETWORK_LONG; maxindex += kind_counts[kind]; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. ------------------------------------------------------------------------------ What You Don't Know About Data Connectivity CAN Hurt You This paper provides an overview of data connectivity, details its effect on application quality, and explores various alternative solutions. http://p.sf.net/sfu/progress-d2d _______________________________________________ BRL-CAD Source Commits mailing list brlcad-commits@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/brlcad-commits