Selaa lähdekoodia

rename dangerous PTA contructor to empty_array

cxgeorge 24 vuotta sitten
vanhempi
sitoutus
012486c12e
51 muutettua tiedostoa jossa 477 lisäystä ja 431 poistoa
  1. 5 5
      panda/src/builder/builderFuncs.I
  2. 2 2
      panda/src/builder/builderPrim.cxx
  3. 5 2
      panda/src/builder/builder_composite1.cxx
  4. 0 1
      panda/src/builder/builder_composite2.cxx
  5. 1 1
      panda/src/builder/mesherTempl.I
  6. 10 9
      panda/src/chan/animChannelMatrixXfmTable.cxx
  7. 1 1
      panda/src/chan/animChannelScalarTable.cxx
  8. 3 3
      panda/src/char/character.cxx
  9. 4 4
      panda/src/char/computedVertices.cxx
  10. 4 4
      panda/src/char/dynamicVertices.cxx
  11. 1 1
      panda/src/collide/collisionPlane.cxx
  12. 1 1
      panda/src/collide/collisionPolygon.cxx
  13. 1 1
      panda/src/collide/collisionRay.cxx
  14. 2 2
      panda/src/collide/collisionSegment.cxx
  15. 4 4
      panda/src/collide/collisionSphere.cxx
  16. 1 2
      panda/src/collide/collisionTraverser.cxx
  17. 34 33
      panda/src/effects/lensFlareNode.cxx
  18. 2 2
      panda/src/egg/parser.yxx
  19. 7 7
      panda/src/egg2sg/animBundleMaker.cxx
  20. 6 3
      panda/src/egg2sg/computedVerticesMaker.cxx
  21. 5 4
      panda/src/express/datagram.cxx
  22. 8 11
      panda/src/express/pointerToArray.I
  23. 8 1
      panda/src/express/pointerToArray.h
  24. 4 5
      panda/src/framework/framework.cxx
  25. 2 2
      panda/src/glgsg/glGraphicsStateGuardian.cxx
  26. 1 1
      panda/src/gobj/LOD.cxx
  27. 32 8
      panda/src/gobj/geom.cxx
  28. 10 4
      panda/src/gobj/geom.h
  29. 12 11
      panda/src/gobj/geomTrifan.cxx
  30. 5 5
      panda/src/gobj/geomTristrip.cxx
  31. 4 4
      panda/src/gobj/orthoProjection.cxx
  32. 4 4
      panda/src/gobj/perspectiveProjection.cxx
  33. 8 6
      panda/src/gobj/pixelBuffer.cxx
  34. 17 17
      panda/src/grutil/cardMaker.cxx
  35. 5 5
      panda/src/grutil/lineSegs.cxx
  36. 15 14
      panda/src/light/spotlight.cxx
  37. 3 3
      panda/src/particlesystem/lineParticleRenderer.cxx
  38. 3 3
      panda/src/particlesystem/pointParticleRenderer.cxx
  39. 3 3
      panda/src/particlesystem/sparkleParticleRenderer.cxx
  40. 8 8
      panda/src/particlesystem/spriteParticleRenderer.I
  41. 9 9
      panda/src/particlesystem/spriteParticleRenderer.cxx
  42. 8 8
      panda/src/pgui/pgButton.cxx
  43. 22 22
      panda/src/pgui/pgEntry.cxx
  44. 59 59
      panda/src/pgui/pgFrameStyle.cxx
  45. 3 2
      panda/src/putil/modifierButtons.cxx
  46. 1 1
      panda/src/sgattrib/drawBoundsTransition.cxx
  47. 2 2
      panda/src/sgmanip/nodePathCollection.cxx
  48. 2 2
      panda/src/sgraph/geomNode.cxx
  49. 4 4
      panda/src/sgraph/geomTransformer.cxx
  50. 2 4
      panda/src/text/textFont.cxx
  51. 114 111
      panda/src/text/textNode.cxx

+ 5 - 5
panda/src/builder/builderFuncs.I

@@ -671,7 +671,7 @@ build_geoms(InputIterator first, InputIterator last,
   }
   }
 
 
   if (want_lengths) {
   if (want_lengths) {
-    lengths = PTA_int(num_prims);
+    lengths = PTA_int::empty_array(num_prims);
     j = 0;
     j = 0;
     for (i = first; i != last; ++i) {
     for (i = first; i != last; ++i) {
       if ((*i).is_valid()) {
       if ((*i).is_valid()) {
@@ -682,10 +682,10 @@ build_geoms(InputIterator first, InputIterator last,
   }
   }
 
 
   // Now build up some arrays.
   // Now build up some arrays.
-  PTA(VType) coords(0);
-  PTA(NType) normals(0);
-  PTA(TType) texcoords(0);
-  PTA(CType) colors(0);
+  PTA(VType) coords=PTA(VType)::empty_array(0);
+  PTA(NType) normals=PTA(NType)::empty_array(0);
+  PTA(TType) texcoords=PTA(TType)::empty_array(0);
+  PTA(CType) colors=PTA(CType)::empty_array(0);
 
 
   int total_verts = 0;
   int total_verts = 0;
   int total_components = 0;
   int total_components = 0;

+ 2 - 2
panda/src/builder/builderPrim.cxx

@@ -139,7 +139,7 @@ fill_geom(Geom *geom, const PTA_BuilderV &v_array,
   // to a Vertexf, we can get away with casting this to a
   // to a Vertexf, we can get away with casting this to a
   // PTA_Vertexf.
   // PTA_Vertexf.
 
 
-  geom->set_coords((PTA_Vertexf &)v_array, G_PER_VERTEX);
+  geom->set_coords((PTA_Vertexf &)v_array);
 
 
   if (n_attr != G_OFF) {
   if (n_attr != G_OFF) {
     geom->set_normals((PTA_Normalf &)n_array, n_attr);
     geom->set_normals((PTA_Normalf &)n_array, n_attr);
@@ -243,7 +243,7 @@ fill_geom(Geom *geom, const PTA_ushort &v_array,
     }
     }
   }
   }
 
 
-  geom->set_coords(v_data, G_PER_VERTEX, v_array);
+  geom->set_coords(v_data, v_array);
 
 
   if (n_attr != G_OFF) {
   if (n_attr != G_OFF) {
     geom->set_normals(n_data, n_attr, n_array);
     geom->set_normals(n_data, n_attr, n_array);

+ 5 - 2
panda/src/builder/builder_composite1.cxx

@@ -1,10 +1,13 @@
 
 
+#include "config_builder.cxx"
+#include "builderTypes.cxx"
+#include "builderMisc.cxx"
 #include "builder.cxx"
 #include "builder.cxx"
 #include "builderAttrib.cxx"
 #include "builderAttrib.cxx"
 #include "builderBucket.cxx"
 #include "builderBucket.cxx"
 #include "builderBucketNode.cxx"
 #include "builderBucketNode.cxx"
-#include "builderMisc.cxx"
-#include "builderTypes.cxx"
+
+
 
 
 
 
 
 

+ 0 - 1
panda/src/builder/builder_composite2.cxx

@@ -1,5 +1,4 @@
 
 
-#include "config_builder.cxx"
 #include "builderNormalVisualizer.cxx"
 #include "builderNormalVisualizer.cxx"
 #include "builderPrim.cxx"
 #include "builderPrim.cxx"
 #include "builderProperties.cxx"
 #include "builderProperties.cxx"

+ 1 - 1
panda/src/builder/mesherTempl.I

@@ -325,7 +325,7 @@ void MesherTempl<PrimType>::
 finalize() {
 finalize() {
   if (!_colors.empty()) {
   if (!_colors.empty()) {
     // Create an array in the bucket we might use to add to geoms.
     // Create an array in the bucket we might use to add to geoms.
-    PTA_Colorf colors(_colors.size());
+    PTA_Colorf colors=PTA_Colorf::empty_array(_colors.size());
     for (int i = 0; i < (int)_colors.size(); i++) {
     for (int i = 0; i < (int)_colors.size(); i++) {
       colors[i] = _colors[i];
       colors[i] = _colors[i];
     }
     }

+ 10 - 9
panda/src/chan/animChannelMatrixXfmTable.cxx

@@ -37,7 +37,7 @@ AnimChannelMatrixXfmTable::_table_ids[AnimChannelMatrixXfmTable::num_tables] =
 
 
 const float
 const float
 AnimChannelMatrixXfmTable::_default_values[AnimChannelMatrixXfmTable::num_tables] =
 AnimChannelMatrixXfmTable::_default_values[AnimChannelMatrixXfmTable::num_tables] =
-{ 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 };
+{ 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f };
 
 
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 //     Function: AnimChannelMatrixXfmTable::Constructor
 //     Function: AnimChannelMatrixXfmTable::Constructor
@@ -107,9 +107,9 @@ get_value(int frame, LMatrix4f &mat) {
 void AnimChannelMatrixXfmTable::
 void AnimChannelMatrixXfmTable::
 get_value_no_scale(int frame, LMatrix4f &mat) {
 get_value_no_scale(int frame, LMatrix4f &mat) {
   float components[num_tables];
   float components[num_tables];
-  components[0] = 1.0;
-  components[1] = 1.0;
-  components[2] = 1.0;
+  components[0] = 1.0f;
+  components[1] = 1.0f;
+  components[2] = 1.0f;
 
 
   for (int i = 3; i < num_tables; i++) {
   for (int i = 3; i < num_tables; i++) {
     if (_tables[i].empty()) {
     if (_tables[i].empty()) {
@@ -339,7 +339,7 @@ fillin(DatagramIterator& scan, BamReader* manager)
     int i;
     int i;
     // First, read in the scales.
     // First, read in the scales.
     for(i = 0; i < 3; i++) {
     for(i = 0; i < 3; i++) {
-      PTA_float ind_table(0);
+      PTA_float ind_table=PTA_float::empty_array(0);
       compressor.read_reals(scan, ind_table.v());
       compressor.read_reals(scan, ind_table.v());
       _tables[i] = ind_table;
       _tables[i] = ind_table;
     }
     }
@@ -347,9 +347,10 @@ fillin(DatagramIterator& scan, BamReader* manager)
     // Read in the HPR array and store it back in the joint angles.
     // Read in the HPR array and store it back in the joint angles.
     vector_LVecBase3f hprs;
     vector_LVecBase3f hprs;
     compressor.read_hprs(scan, hprs);
     compressor.read_hprs(scan, hprs);
-    PTA_float h_table(hprs.size());
-    PTA_float p_table(hprs.size());
-    PTA_float r_table(hprs.size());
+    PTA_float h_table=PTA_float::empty_array(hprs.size());
+    PTA_float p_table=PTA_float::empty_array(hprs.size());
+    PTA_float r_table=PTA_float::empty_array(hprs.size());
+
     for (i = 0; i < (int)hprs.size(); i++) {
     for (i = 0; i < (int)hprs.size(); i++) {
       h_table[i] = hprs[i][0];
       h_table[i] = hprs[i][0];
       p_table[i] = hprs[i][1];
       p_table[i] = hprs[i][1];
@@ -361,7 +362,7 @@ fillin(DatagramIterator& scan, BamReader* manager)
 
 
     // Now read in the translations.
     // Now read in the translations.
     for (i = 6; i < 9; i++) {
     for (i = 6; i < 9; i++) {
-      PTA_float ind_table(0);
+      PTA_float ind_table=PTA_float::empty_array(0);
       compressor.read_reals(scan, ind_table.v());
       compressor.read_reals(scan, ind_table.v());
       _tables[i] = ind_table;
       _tables[i] = ind_table;
     }
     }

+ 1 - 1
panda/src/chan/animChannelScalarTable.cxx

@@ -247,7 +247,7 @@ fillin(DatagramIterator& scan, BamReader* manager)
 
 
   bool wrote_compressed = scan.get_bool();
   bool wrote_compressed = scan.get_bool();
 
 
-  PTA_float temp_table(0);
+  PTA_float temp_table=PTA_float::empty_array(0);
 
 
   if (!wrote_compressed) {
   if (!wrote_compressed) {
     // Regular floats.
     // Regular floats.

+ 3 - 3
panda/src/char/character.cxx

@@ -298,12 +298,12 @@ copy_geom(Geom *source, const Character *from) {
 
 
   PT(Geom) dest = source;
   PT(Geom) dest = source;
 
 
-  source->get_coords(coords, bind, index);
-  if (bind != G_OFF && coords == from->_cv._coords) {
+  source->get_coords(coords, index);
+  if ((coords != NULL) && (coords == (from->_cv._coords))) {
     if (dest == source) {
     if (dest == source) {
       dest = source->make_copy();
       dest = source->make_copy();
     }
     }
-    dest->set_coords(_cv._coords, bind, index);
+    dest->set_coords(_cv._coords, index);
   }
   }
 
 
   source->get_normals(norms, bind, index);
   source->get_normals(norms, bind, index);

+ 4 - 4
panda/src/char/computedVertices.cxx

@@ -243,28 +243,28 @@ make_orig(Character *character) {
   if (character->_cv._coords.empty()) {
   if (character->_cv._coords.empty()) {
     _orig_coords.clear();
     _orig_coords.clear();
   } else {
   } else {
-    _orig_coords = PTA_Vertexf(0);
+    _orig_coords = PTA_Vertexf::empty_array(0);
     _orig_coords.v() = character->_cv._coords.v();
     _orig_coords.v() = character->_cv._coords.v();
   }
   }
 
 
   if (character->_cv._norms.empty()) {
   if (character->_cv._norms.empty()) {
     _orig_norms.clear();
     _orig_norms.clear();
   } else {
   } else {
-    _orig_norms = PTA_Normalf(0);
+    _orig_norms = PTA_Normalf::empty_array(0);
     _orig_norms.v() = character->_cv._norms.v();
     _orig_norms.v() = character->_cv._norms.v();
   }
   }
 
 
   if (character->_cv._colors.empty()) {
   if (character->_cv._colors.empty()) {
     _orig_colors.clear();
     _orig_colors.clear();
   } else {
   } else {
-    _orig_colors = PTA_Colorf(0);
+    _orig_colors = PTA_Colorf::empty_array(0);
     _orig_colors.v() = character->_cv._colors.v();
     _orig_colors.v() = character->_cv._colors.v();
   }
   }
 
 
   if (character->_cv._texcoords.empty()) {
   if (character->_cv._texcoords.empty()) {
     _orig_texcoords.clear();
     _orig_texcoords.clear();
   } else {
   } else {
-    _orig_texcoords = PTA_TexCoordf(0);
+    _orig_texcoords = PTA_TexCoordf::empty_array(0);
     _orig_texcoords.v() = character->_cv._texcoords.v();
     _orig_texcoords.v() = character->_cv._texcoords.v();
   }
   }
 }
 }

+ 4 - 4
panda/src/char/dynamicVertices.cxx

@@ -62,19 +62,19 @@ DynamicVertices DynamicVertices::
 deep_copy(const DynamicVertices &copy) {
 deep_copy(const DynamicVertices &copy) {
   DynamicVertices dv;
   DynamicVertices dv;
   if (!copy._coords.empty()) {
   if (!copy._coords.empty()) {
-    dv._coords = PTA_Vertexf(0);
+    dv._coords = PTA_Vertexf::empty_array(0);
     dv._coords.v() = copy._coords.v();
     dv._coords.v() = copy._coords.v();
   }
   }
   if (!copy._norms.empty()) {
   if (!copy._norms.empty()) {
-    dv._norms = PTA_Normalf(0);
+    dv._norms = PTA_Normalf::empty_array(0);
     dv._norms.v() = copy._norms.v();
     dv._norms.v() = copy._norms.v();
   }
   }
   if (!copy._colors.empty()) {
   if (!copy._colors.empty()) {
-    dv._colors = PTA_Colorf(0);
+    dv._colors = PTA_Colorf::empty_array(0);
     dv._colors.v() = copy._colors.v();
     dv._colors.v() = copy._colors.v();
   }
   }
   if (!copy._texcoords.empty()) {
   if (!copy._texcoords.empty()) {
-    dv._texcoords = PTA_TexCoordf(0);
+    dv._texcoords = PTA_TexCoordf::empty_array(0);
     dv._texcoords.v() = copy._texcoords.v();
     dv._texcoords.v() = copy._texcoords.v();
   }
   }
   return dv;
   return dv;

+ 1 - 1
panda/src/collide/collisionPlane.cxx

@@ -254,7 +254,7 @@ recompute_viz(Node *parent) {
   verts.push_back(cp + p4 * plane_scale);
   verts.push_back(cp + p4 * plane_scale);
 
 
   GeomQuad *quad = new GeomQuad;
   GeomQuad *quad = new GeomQuad;
-  quad->set_coords(verts, G_PER_VERTEX);
+  quad->set_coords(verts);
   quad->set_num_prims(1);
   quad->set_num_prims(1);
 
 
   GeomNode *viz = new GeomNode("viz-plane");
   GeomNode *viz = new GeomNode("viz-plane");

+ 1 - 1
panda/src/collide/collisionPolygon.cxx

@@ -463,7 +463,7 @@ recompute_viz(Node *parent) {
   lengths.push_back(_points.size());
   lengths.push_back(_points.size());
 
 
   GeomPolygon *polygon = new GeomPolygon;
   GeomPolygon *polygon = new GeomPolygon;
-  polygon->set_coords(verts, G_PER_VERTEX);
+  polygon->set_coords(verts);
   polygon->set_num_prims(1);
   polygon->set_num_prims(1);
   polygon->set_lengths(lengths);
   polygon->set_lengths(lengths);
 
 

+ 1 - 1
panda/src/collide/collisionRay.cxx

@@ -149,7 +149,7 @@ recompute_viz(Node *parent) {
     colors.push_back(Colorf(1.0, 1.0, 1.0, 1.0) +
     colors.push_back(Colorf(1.0, 1.0, 1.0, 1.0) +
                      ((double)i / 100.0) * Colorf(0.0, 0.0, 0.0, -1.0));
                      ((double)i / 100.0) * Colorf(0.0, 0.0, 0.0, -1.0));
   }
   }
-  ray->set_coords(verts, G_PER_VERTEX);
+  ray->set_coords(verts);
   ray->set_colors(colors, G_PER_VERTEX);
   ray->set_colors(colors, G_PER_VERTEX);
 
 
   PTA_int lengths;
   PTA_int lengths;

+ 2 - 2
panda/src/collide/collisionSegment.cxx

@@ -163,8 +163,8 @@ recompute_viz(Node *parent) {
   PTA_Colorf colors;
   PTA_Colorf colors;
   verts.push_back(_a);
   verts.push_back(_a);
   verts.push_back(_b);
   verts.push_back(_b);
-  colors.push_back(Colorf(1.0, 1.0, 1.0, 1.0));
-  segment->set_coords(verts, G_PER_VERTEX);
+  colors.push_back(Colorf(1.0f, 1.0f, 1.0f, 1.0f));
+  segment->set_coords(verts);
   segment->set_colors(colors, G_OVERALL);
   segment->set_colors(colors, G_OVERALL);
 
 
   segment->set_num_prims(1);
   segment->set_num_prims(1);

+ 4 - 4
panda/src/collide/collisionSphere.cxx

@@ -68,7 +68,7 @@ xform(const LMatrix4f &mat) {
 
 
   // This is a little cheesy and fails miserably in the presence of a
   // This is a little cheesy and fails miserably in the presence of a
   // non-proportionate scale.
   // non-proportionate scale.
-  LVector3f radius_v = LVector3f(_radius, 0.0, 0.0) * mat;
+  LVector3f radius_v = LVector3f(_radius, 0.0f, 0.0f) * mat;
   _radius = length(radius_v);
   _radius = length(radius_v);
 
 
   clear_viz_arcs();
   clear_viz_arcs();
@@ -125,7 +125,7 @@ test_intersection_from_sphere(CollisionHandler *record,
 
 
   LPoint3f from_center = sphere->get_center() * entry.get_wrt_space();
   LPoint3f from_center = sphere->get_center() * entry.get_wrt_space();
   LVector3f from_radius_v =
   LVector3f from_radius_v =
-    LVector3f(sphere->get_radius(), 0.0, 0.0) * entry.get_wrt_space();
+    LVector3f(sphere->get_radius(), 0.0f, 0.0f) * entry.get_wrt_space();
   float from_radius = length(from_radius_v);
   float from_radius = length(from_radius_v);
 
 
   LPoint3f into_center = _center;
   LPoint3f into_center = _center;
@@ -268,8 +268,8 @@ recompute_viz(Node *parent) {
   GeomSphere *sphere = new GeomSphere;
   GeomSphere *sphere = new GeomSphere;
   PTA_Vertexf verts;
   PTA_Vertexf verts;
   verts.push_back(_center);
   verts.push_back(_center);
-  verts.push_back(_center + LVector3f(_radius, 0.0, 0.0));
-  sphere->set_coords(verts, G_PER_VERTEX);
+  verts.push_back(_center + LVector3f(_radius, 0.0f, 0.0f));
+  sphere->set_coords(verts);
   sphere->set_num_prims(1);
   sphere->set_num_prims(1);
 
 
   GeomNode *viz = new GeomNode("viz-sphere");
   GeomNode *viz = new GeomNode("viz-sphere");

+ 1 - 2
panda/src/collide/collisionTraverser.cxx

@@ -612,9 +612,8 @@ compare_collider_to_geom(CollisionEntry &entry, Geom *geom,
     nassertv(ci != _colliders.end());
     nassertv(ci != _colliders.end());
 
 
     PTA_Vertexf coords;
     PTA_Vertexf coords;
-    GeomBindType bind;
     PTA_ushort vindex;
     PTA_ushort vindex;
-    geom->get_coords(coords, bind, vindex);
+    geom->get_coords(coords, vindex);
     PTA_ushort tris = geom->get_tris();
     PTA_ushort tris = geom->get_tris();
 
 
     for (int i = 0; i < (int)tris.size(); i += 3) {
     for (int i = 0; i < (int)tris.size(); i += 3) {

+ 34 - 33
panda/src/effects/lensFlareNode.cxx

@@ -87,12 +87,12 @@ add_blind(PT(Texture) blind)
   //The lengths and number of prims will never change, so give
   //The lengths and number of prims will never change, so give
   //it valid values for those, but pass it an empty array of
   //it valid values for those, but pass it an empty array of
   //vertices
   //vertices
-  PTA_Vertexf coords(0);
-  PTA_float tex_scales(0);
+  PTA_Vertexf coords=PTA_Vertexf::empty_array(0);
+  PTA_float tex_scales=PTA_float::empty_array(0);
 
 
   tex_scales.push_back(_texel_scale);
   tex_scales.push_back(_texel_scale);
 
 
-  sprite->set_coords(coords, G_PER_VERTEX);
+  sprite->set_coords(coords);
   sprite->set_num_prims(1);
   sprite->set_num_prims(1);
   sprite->set_texture(_blind);
   sprite->set_texture(_blind);
 
 
@@ -112,9 +112,10 @@ set_geometry(GeomSprite *sprite, const PTA_float &geom_scales,
              const PTA_Colorf &geom_colors, const LVector3f &delta,
              const PTA_Colorf &geom_colors, const LVector3f &delta,
              const LPoint3f &light, const float &angle)
              const LPoint3f &light, const float &angle)
 {
 {
-  PTA_Vertexf coords(0);
-  PTA_float tex_scales(0);
-  PTA_Colorf colors(0);
+
+  PTA_Vertexf coords=PTA_Vertexf::empty_array(0);
+  PTA_float tex_scales=PTA_float::empty_array(0);
+  PTA_Colorf colors=PTA_Colorf::empty_array(0);
 
 
   //Sanity check
   //Sanity check
   nassertv(geom_scales.size() == geom_offsets.size());
   nassertv(geom_scales.size() == geom_offsets.size());
@@ -132,26 +133,26 @@ set_geometry(GeomSprite *sprite, const PTA_float &geom_scales,
     //will actually be the normal use of angle scales
     //will actually be the normal use of angle scales
     if (geom_angle_scales[i] < 0)
     if (geom_angle_scales[i] < 0)
     {
     {
-      view_scale = (1-pow(angle, 15)) * -geom_angle_scales[i];
+      view_scale = (1.0f-pow(angle, 15.0f)) * -geom_angle_scales[i];
     }
     }
     else
     else
     {
     {
-      view_scale = pow(angle, 15) * geom_angle_scales[i];
+      view_scale = pow(angle, 15.0f) * geom_angle_scales[i];
     }
     }
-    float offset = (angle - 1) / _flare_fall_off;
-    offset = (offset < 0) ? 0 : ((offset > 1) ? 1 : offset);
+    float offset = (angle - 1.0f) / _flare_fall_off;
+    offset = (offset < 0.0f) ? 0.0f : ((offset > 1.0f) ? 1.0f : offset);
     float r = geom_colors[i][0] - offset;
     float r = geom_colors[i][0] - offset;
     float g = geom_colors[i][1] - offset;
     float g = geom_colors[i][1] - offset;
     float b = geom_colors[i][2] - offset;
     float b = geom_colors[i][2] - offset;
-    r = (r < 0) ? 0 : r;
-    g = (g < 0) ? 0 : g;
-    b = (b < 0) ? 0 : b;
+    r = (r < 0.0f) ? 0.0f : r;
+    g = (g < 0.0f) ? 0.0f : g;
+    b = (b < 0.0f) ? 0.0f : b;
 
 
     coords.push_back(position); tex_scales.push_back(geom_scales[i] * (world_scale + view_scale));
     coords.push_back(position); tex_scales.push_back(geom_scales[i] * (world_scale + view_scale));
     colors.push_back(Colorf(r, g, b, 1));
     colors.push_back(Colorf(r, g, b, 1));
   }
   }
 
 
-  sprite->set_coords(coords, G_PER_VERTEX);
+  sprite->set_coords(coords);
   sprite->set_x_texel_ratio(tex_scales, G_PER_PRIM);
   sprite->set_x_texel_ratio(tex_scales, G_PER_PRIM);
   sprite->set_y_texel_ratio(tex_scales, G_PER_PRIM);
   sprite->set_y_texel_ratio(tex_scales, G_PER_PRIM);
   sprite->set_colors(colors, G_PER_PRIM);
   sprite->set_colors(colors, G_PER_PRIM);
@@ -185,9 +186,9 @@ prepare_flares(const LVector3f &delta, const LPoint3f &light, const float &angle
         //The lengths and number of prims will never change, so give
         //The lengths and number of prims will never change, so give
         //it valid values for those, but pass it an empty array of
         //it valid values for those, but pass it an empty array of
         //vertices
         //vertices
-        PTA_Vertexf coords(0);
+        PTA_Vertexf coords=PTA_Vertexf::empty_array(0);
 
 
-        sprite->set_coords(coords, G_PER_VERTEX);
+        sprite->set_coords(coords);
         sprite->set_num_prims(_flare_offsets[i].size());
         sprite->set_num_prims(_flare_offsets[i].size());
 
 
         node->add_geom(sprite);
         node->add_geom(sprite);
@@ -228,14 +229,14 @@ prepare_blind(const float &angle, const float &tnear)
     GeomNode *node = DCAST(GeomNode, _blind_arc->get_child());
     GeomNode *node = DCAST(GeomNode, _blind_arc->get_child());
     GeomSprite *sprite = DCAST(GeomSprite, node->get_geom(0));
     GeomSprite *sprite = DCAST(GeomSprite, node->get_geom(0));
 
 
-    float offset = (angle - 1) / _blind_fall_off;
+    float offset = (angle - 1.0f) / _blind_fall_off;
     //Make sure that it always blends some
     //Make sure that it always blends some
-    offset = (offset < 0.3) ? 0.3 : ((offset > 1) ? 1 : offset);
+    offset = (offset < 0.3f) ? 0.3f : ((offset > 1.0f) ? 1.0f : offset);
 
 
-    PTA_Vertexf coords(0);
-    PTA_Colorf colors(0);
-    PTA_float x_tex_scales(0);
-    PTA_float y_tex_scales(0);
+    PTA_Vertexf coords=PTA_Vertexf::empty_array(0);
+    PTA_Colorf colors=PTA_Colorf::empty_array(0);
+    PTA_float x_tex_scales=PTA_float::empty_array(0);
+    PTA_float y_tex_scales=PTA_float::empty_array(0);
 
 
     //The height and the width are set to two as sprites are always
     //The height and the width are set to two as sprites are always
     //drawn in a frustum of size 2.
     //drawn in a frustum of size 2.
@@ -244,15 +245,15 @@ prepare_blind(const float &angle, const float &tnear)
     float x_offset_scale = width / _blind->_pbuffer->get_xsize();
     float x_offset_scale = width / _blind->_pbuffer->get_xsize();
     float y_offset_scale = height / _blind->_pbuffer->get_ysize();
     float y_offset_scale = height / _blind->_pbuffer->get_ysize();
 
 
-    float inten = 1 - offset;
+    float inten = 1.0f - offset;
 
 
-    coords.push_back(Vertexf(0, 0, -tnear ));
-    colors.push_back(Colorf(inten,inten,inten,1));
+    coords.push_back(Vertexf(0.0f, 0.0f, -tnear ));
+    colors.push_back(Colorf(inten,inten,inten,1.0f));
     x_tex_scales.push_back(x_offset_scale); y_tex_scales.push_back(y_offset_scale);
     x_tex_scales.push_back(x_offset_scale); y_tex_scales.push_back(y_offset_scale);
 
 
     sprite->set_x_texel_ratio(x_tex_scales, G_PER_PRIM);
     sprite->set_x_texel_ratio(x_tex_scales, G_PER_PRIM);
     sprite->set_y_texel_ratio(y_tex_scales, G_PER_PRIM);
     sprite->set_y_texel_ratio(y_tex_scales, G_PER_PRIM);
-    sprite->set_coords(coords, G_PER_VERTEX);
+    sprite->set_coords(coords);
     sprite->set_colors(colors, G_PER_PRIM);
     sprite->set_colors(colors, G_PER_PRIM);
 
 
     //Tell it to recompute it's bounding volume
     //Tell it to recompute it's bounding volume
@@ -350,7 +351,7 @@ sub_render(const AllTransitionsWrapper &input_trans,
   LVector3f view_dir = center - origin;
   LVector3f view_dir = center - origin;
 
 
   float dot = view_dir.dot(light_dir);
   float dot = view_dir.dot(light_dir);
-  dot = (dot < 0) ? -dot : dot;
+  dot = (dot < 0.0f) ? -dot : dot;
 
 
   prepare_flares(delta, light_pos, dot);
   prepare_flares(delta, light_pos, dot);
   prepare_blind(dot, pp->get_frustum()._fnear);
   prepare_blind(dot, pp->get_frustum()._fnear);
@@ -462,7 +463,7 @@ fillin(DatagramIterator &scan, BamReader *manager)
   size = scan.get_uint16();
   size = scan.get_uint16();
   for(i = 0; i < size; i++)
   for(i = 0; i < size; i++)
   {
   {
-    PTA_float temp(0);
+    PTA_float temp=PTA_float::empty_array(0);
     READ_PTA(manager, scan, IPD_float::read_datagram, temp)
     READ_PTA(manager, scan, IPD_float::read_datagram, temp)
     _flare_scales.push_back(temp);
     _flare_scales.push_back(temp);
   }
   }
@@ -470,7 +471,7 @@ fillin(DatagramIterator &scan, BamReader *manager)
   size = scan.get_uint16();
   size = scan.get_uint16();
   for(i = 0; i < size; i++)
   for(i = 0; i < size; i++)
   {
   {
-    PTA_float temp(0);
+    PTA_float temp=PTA_float::empty_array(0);
     READ_PTA(manager, scan, IPD_float::read_datagram, temp)
     READ_PTA(manager, scan, IPD_float::read_datagram, temp)
     _flare_angle_scales.push_back(temp);
     _flare_angle_scales.push_back(temp);
   }
   }
@@ -478,7 +479,7 @@ fillin(DatagramIterator &scan, BamReader *manager)
   size = scan.get_uint16();
   size = scan.get_uint16();
   for(i = 0; i < size; i++)
   for(i = 0; i < size; i++)
   {
   {
-    PTA_float temp(0);
+    PTA_float temp=PTA_float::empty_array(0);
     READ_PTA(manager, scan, IPD_float::read_datagram, temp)
     READ_PTA(manager, scan, IPD_float::read_datagram, temp)
     _flare_offsets.push_back(temp);
     _flare_offsets.push_back(temp);
   }
   }
@@ -486,7 +487,7 @@ fillin(DatagramIterator &scan, BamReader *manager)
   size = scan.get_uint16();
   size = scan.get_uint16();
   for(i = 0; i < size; i++)
   for(i = 0; i < size; i++)
   {
   {
-    PTA_Colorf temp(0);
+    PTA_Colorf temp=PTA_Colorf::empty_array(0);
     READ_PTA(manager, scan, IPD_Colorf::read_datagram, temp)
     READ_PTA(manager, scan, IPD_Colorf::read_datagram, temp)
     _flare_colors.push_back(temp);
     _flare_colors.push_back(temp);
   }
   }
@@ -688,7 +689,7 @@ prepare_sparkles(vector_relation &arcs, const vector_texture &sparkles,
         //vertices
         //vertices
         PTA_Vertexf coords(0);
         PTA_Vertexf coords(0);
 
 
-        sprite->set_coords(coords, G_PER_VERTEX);
+        sprite->set_coords(coords);
         sprite->set_num_prims(1);
         sprite->set_num_prims(1);
 
 
         node->add_geom(sprite);
         node->add_geom(sprite);
@@ -717,7 +718,7 @@ prepare_sparkles(vector_relation &arcs, const vector_texture &sparkles,
 
 
       sprite_colors.push_back(colors[i]);
       sprite_colors.push_back(colors[i]);
 
 
-      sprite->set_coords(coords, G_PER_VERTEX);
+      sprite->set_coords(coords);
       sprite->set_x_texel_ratio(tex_scales, G_PER_PRIM);
       sprite->set_x_texel_ratio(tex_scales, G_PER_PRIM);
       sprite->set_y_texel_ratio(tex_scales, G_PER_PRIM);
       sprite->set_y_texel_ratio(tex_scales, G_PER_PRIM);
       sprite->set_colors(sprite_colors, G_PER_PRIM);
       sprite->set_colors(sprite_colors, G_PER_PRIM);

+ 2 - 2
panda/src/egg/parser.yxx

@@ -2159,7 +2159,7 @@ xfm_s_anim_body:
 integer_list:
 integer_list:
         empty
         empty
 {
 {
-  $$ = PTA_double(0);
+  $$ = PTA_double::empty_array(0);
 }
 }
         | integer_list integer
         | integer_list integer
 {
 {
@@ -2177,7 +2177,7 @@ integer_list:
 real_list:
 real_list:
         empty
         empty
 {
 {
-  $$ = PTA_double(0);
+  $$ = PTA_double::empty_array(0);
 }
 }
         | real_list real
         | real_list real
 {
 {

+ 7 - 7
panda/src/egg2sg/animBundleMaker.cxx

@@ -37,7 +37,7 @@
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 AnimBundleMaker::
 AnimBundleMaker::
 AnimBundleMaker(EggTable *root) : _root(root) {
 AnimBundleMaker(EggTable *root) : _root(root) {
-  _fps = 0.0;
+  _fps = 0.0f;
   _num_frames = 1;
   _num_frames = 1;
 
 
   _ok_fps = true;
   _ok_fps = true;
@@ -49,11 +49,11 @@ AnimBundleMaker(EggTable *root) : _root(root) {
     egg2sg_cat.warning()
     egg2sg_cat.warning()
       << "AnimBundle " << _root->get_name()
       << "AnimBundle " << _root->get_name()
       << " specifies contradictory frame rates.\n";
       << " specifies contradictory frame rates.\n";
-  } else if (_fps == 0.0) {
+  } else if (_fps == 0.0f) {
     egg2sg_cat.warning()
     egg2sg_cat.warning()
       << "AnimBundle " << _root->get_name()
       << "AnimBundle " << _root->get_name()
       << " does not specify a frame rate.\n";
       << " does not specify a frame rate.\n";
-    _fps = 24.0;
+    _fps = 24.0f;
   }
   }
 
 
   if (!_ok_num_frames) {
   if (!_ok_num_frames) {
@@ -109,7 +109,7 @@ inspect_tree(EggNode *egg_node) {
     // Check frame rate.
     // Check frame rate.
     EggAnimData *egg_anim = DCAST(EggAnimData, egg_node);
     EggAnimData *egg_anim = DCAST(EggAnimData, egg_node);
     if (egg_anim->has_fps()) {
     if (egg_anim->has_fps()) {
-      if (_fps == 0.0) {
+      if (_fps == 0.0f) {
         _fps = egg_anim->get_fps();
         _fps = egg_anim->get_fps();
       } else if (_fps != egg_anim->get_fps()) {
       } else if (_fps != egg_anim->get_fps()) {
         // Whoops!  This table differs in opinion from the other tables.
         // Whoops!  This table differs in opinion from the other tables.
@@ -123,7 +123,7 @@ inspect_tree(EggNode *egg_node) {
     // Check frame rate.
     // Check frame rate.
     EggXfmSAnim *egg_anim = DCAST(EggXfmSAnim, egg_node);
     EggXfmSAnim *egg_anim = DCAST(EggXfmSAnim, egg_node);
     if (egg_anim->has_fps()) {
     if (egg_anim->has_fps()) {
-      if (_fps == 0.0) {
+      if (_fps == 0.0f) {
         _fps = egg_anim->get_fps();
         _fps = egg_anim->get_fps();
       } else if (_fps != egg_anim->get_fps()) {
       } else if (_fps != egg_anim->get_fps()) {
         // Whoops!  This table differs in opinion from the other tables.
         // Whoops!  This table differs in opinion from the other tables.
@@ -240,7 +240,7 @@ create_s_channel(EggSAnimData *egg_anim, const string &name,
 
 
   // First we have to copy the table data from PTA_double to
   // First we have to copy the table data from PTA_double to
   // PTA_float.
   // PTA_float.
-  PTA_float new_data(egg_anim->get_num_rows());
+  PTA_float new_data=PTA_float::empty_array(egg_anim->get_num_rows());
   for (int i = 0; i < egg_anim->get_num_rows(); i++) {
   for (int i = 0; i < egg_anim->get_num_rows(); i++) {
     new_data[i] = (float)egg_anim->get_value(i);
     new_data[i] = (float)egg_anim->get_value(i);
   }
   }
@@ -325,7 +325,7 @@ create_xfm_channel(EggXfmSAnim *egg_anim, const string &name,
 
 
           // Now we have to copy the table data from PTA_double to
           // Now we have to copy the table data from PTA_double to
           // PTA_float.
           // PTA_float.
-          PTA_float new_data(child->get_num_rows());
+          PTA_float new_data=PTA_float::empty_array(child->get_num_rows());
           for (int i = 0; i < child->get_num_rows(); i++) {
           for (int i = 0; i < child->get_num_rows(); i++) {
             new_data[i] = (float)child->get_value(i);
             new_data[i] = (float)child->get_value(i);
           }
           }

+ 6 - 3
panda/src/egg2sg/computedVerticesMaker.cxx

@@ -34,10 +34,13 @@
 //  Description:
 //  Description:
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 ComputedVerticesMaker::
 ComputedVerticesMaker::
-ComputedVerticesMaker() :
-  _coords(0), _norms(0), _colors(0), _texcoords(0)
+ComputedVerticesMaker()
 {
 {
-  _current_vc = NULL;
+    _coords= PTA_Vertexf::empty_array(0);
+    _norms= PTA_Normalf::empty_array(0);
+    _colors= PTA_Colorf::empty_array(0);
+    _texcoords= PTA_TexCoordf::empty_array(0);
+    _current_vc = NULL;
 }
 }
 
 
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////

+ 5 - 4
panda/src/express/datagram.cxx

@@ -96,11 +96,12 @@ pad_bytes(size_t size) {
 
 
   if (_data == (uchar *)NULL) {
   if (_data == (uchar *)NULL) {
     // Create a new array.
     // Create a new array.
-    _data = PTA_uchar(0);
+//    _data = PTA_uchar(0);
+      _data = PTA_uchar::empty_array(0);
 
 
   } else if (_data.get_ref_count() == 1) {
   } else if (_data.get_ref_count() == 1) {
     // Copy on write.
     // Copy on write.
-    PTA_uchar new_data(0);
+    PTA_uchar new_data = PTA_uchar::empty_array(0);
     new_data.v() = _data.v();
     new_data.v() = _data.v();
     _data = new_data;
     _data = new_data;
   }
   }
@@ -129,11 +130,11 @@ append_data(const void *data, size_t size) {
 
 
   if (_data == (uchar *)NULL) {
   if (_data == (uchar *)NULL) {
     // Create a new array.
     // Create a new array.
-    _data = PTA_uchar(0);
+    _data = PTA_uchar::empty_array(0);
 
 
   } else if (_data.get_ref_count() != 1) {
   } else if (_data.get_ref_count() != 1) {
     // Copy on write.
     // Copy on write.
-    PTA_uchar new_data(0);
+    PTA_uchar new_data = PTA_uchar::empty_array(0);
     new_data.v() = _data.v();
     new_data.v() = _data.v();
     _data = new_data;
     _data = new_data;
   }
   }

+ 8 - 11
panda/src/express/pointerToArray.I

@@ -34,17 +34,14 @@ PointerToArray() :
 {
 {
 }
 }
 
 
-////////////////////////////////////////////////////////////////////
-//     Function: PointerToArray::Constructor
-//       Access: Published
-//  Description:
-////////////////////////////////////////////////////////////////////
-template<class Element>
-INLINE PointerToArray<Element>::
-PointerToArray(size_type n) :
-  PointerToBase<RefCountObj<pvector<Element> > >(new RefCountObj<pvector<Element> >) {
-  _ptr->reserve(n);
-  insert(begin(), n, Element());
+// return an empty array of size n
+template<class Element>
+INLINE PointerToArray<Element> 
+PointerToArray<Element>::empty_array(size_type n) {
+    PointerToArray<Element> temp;
+    temp.reserve(n);
+    temp._ptr->insert(temp._ptr->begin(), n, Element());
+    return temp;
 }
 }
 
 
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////

+ 8 - 1
panda/src/express/pointerToArray.h

@@ -74,6 +74,12 @@
 #include "pointerTo.h"
 #include "pointerTo.h"
 #include "pvector.h"
 #include "pvector.h"
 
 
+#if defined(WIN32_VC) || !defined(__INTEL_COMPILER)
+// disable mysterious MSVC warning for static inline PTA::empty_array method
+// need to chk if vc 7.0 still has this problem, would like to keep it enabled
+#pragma warning (disable : 4506)
+#endif
+
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 //       Class : PointerToArray
 //       Class : PointerToArray
 // Description : A special kind of PointerTo that stores an array of
 // Description : A special kind of PointerTo that stores an array of
@@ -97,7 +103,8 @@ public:
 
 
 PUBLISHED:
 PUBLISHED:
   INLINE PointerToArray();
   INLINE PointerToArray();
-  INLINE PointerToArray(size_type n);
+  //  INLINE PointerToArray(size_type n);  this is too dangerous to use, since arrays created automatically for any const parameter, use empty_array instead
+  INLINE static PointerToArray<Element> empty_array(size_type n);
   INLINE PointerToArray(size_type n, const Element &value);
   INLINE PointerToArray(size_type n, const Element &value);
   INLINE PointerToArray(const PointerToArray<Element> &copy);
   INLINE PointerToArray(const PointerToArray<Element> &copy);
 
 

+ 4 - 5
panda/src/framework/framework.cxx

@@ -236,15 +236,14 @@ reached_node(Node *node, NullTransitionWrapper &, NullLevelState &) {
       }
       }
     }
     }
     if (vert_count > 0) {
     if (vert_count > 0) {
-      PTA_Vertexf verts(2 * vert_count);
+      PTA_Vertexf verts=PTA_Vertexf::empty_array(2 * vert_count);
       for (i = 0; i < geom->get_num_geoms(); i++) {
       for (i = 0; i < geom->get_num_geoms(); i++) {
         dDrawable *d = geom->get_geom(i);
         dDrawable *d = geom->get_geom(i);
         if (d->is_of_type(Geom::get_class_type())) {
         if (d->is_of_type(Geom::get_class_type())) {
           PTA_Vertexf lverts;
           PTA_Vertexf lverts;
           PTA_ushort iverts;
           PTA_ushort iverts;
-          GeomBindType vbond;
           Geom *g = DCAST(Geom, d);
           Geom *g = DCAST(Geom, d);
-          g->get_coords(lverts, vbond, iverts);
+          g->get_coords(lverts, iverts);
           int vert_idx = 0;
           int vert_idx = 0;
           if (g->get_binding(G_NORMAL) == G_OFF) {
           if (g->get_binding(G_NORMAL) == G_OFF) {
             for (int j=0; j<g->get_num_prims(); ++j) {
             for (int j=0; j<g->get_num_prims(); ++j) {
@@ -269,7 +268,7 @@ reached_node(Node *node, NullTransitionWrapper &, NullLevelState &) {
         }
         }
       }
       }
       gn->set_num_prims(vert_count);
       gn->set_num_prims(vert_count);
-      gn->set_coords(verts, G_PER_VERTEX);
+      gn->set_coords(verts);
     }
     }
     geom->add_geom(gn);
     geom->add_geom(gn);
   }
   }
@@ -1327,7 +1326,7 @@ int framework_main(int argc, char *argv[]) {
 
 
     PT(GeomTri) geom = new GeomTri;
     PT(GeomTri) geom = new GeomTri;
     geom->set_num_prims(1);
     geom->set_num_prims(1);
-    geom->set_coords(coords, G_PER_VERTEX);
+    geom->set_coords(coords);
     geom->set_texcoords(uvs, G_PER_VERTEX);
     geom->set_texcoords(uvs, G_PER_VERTEX);
     geom->set_normals(norms, G_PER_PRIM);
     geom->set_normals(norms, G_PER_PRIM);
     geom->set_colors(colors, G_PER_VERTEX, cindex);
     geom->set_colors(colors, G_PER_VERTEX, cindex);

+ 2 - 2
panda/src/glgsg/glGraphicsStateGuardian.cxx

@@ -276,7 +276,7 @@ reset() {
   GLint max_clip_planes;
   GLint max_clip_planes;
   glGetIntegerv(GL_MAX_CLIP_PLANES, &max_clip_planes);
   glGetIntegerv(GL_MAX_CLIP_PLANES, &max_clip_planes);
   _max_clip_planes = max_clip_planes;
   _max_clip_planes = max_clip_planes;
-  _available_clip_plane_ids = PTA(PlaneNode*)(_max_clip_planes);
+  _available_clip_plane_ids = PTA(PlaneNode*)::empty_array(_max_clip_planes);
   _clip_plane_enabled = new bool[_max_clip_planes];
   _clip_plane_enabled = new bool[_max_clip_planes];
   _cur_clip_plane_enabled = new bool[_max_clip_planes];
   _cur_clip_plane_enabled = new bool[_max_clip_planes];
   int i;
   int i;
@@ -2185,7 +2185,7 @@ texture_to_pixel_buffer(TextureContext *tc, PixelBuffer *pb,
     int w = pb->get_xsize();
     int w = pb->get_xsize();
     int h = pb->get_ysize();
     int h = pb->get_ysize();
     draw_texture(tc, dr);
     draw_texture(tc, dr);
-    pb->_image = PTA_uchar(w * h * pb->get_num_components());
+    pb->_image = PTA_uchar::empty_array(w * h * pb->get_num_components());
     copy_pixel_buffer(pb, dr);
     copy_pixel_buffer(pb, dr);
   }
   }
   report_errors();
   report_errors();

+ 1 - 1
panda/src/gobj/LOD.cxx

@@ -41,7 +41,7 @@ TypeHandle LOD::_type_handle;
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 LOD::
 LOD::
 LOD(void) {
 LOD(void) {
-  _center.set(0, 0, 0);
+  _center.set(0.0f, 0.0f, 0.0f);
 }
 }
 
 
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////

+ 32 - 8
panda/src/gobj/geom.cxx

@@ -207,11 +207,10 @@ operator = (const Geom &copy) {
 //  Description:
 //  Description:
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 void Geom::
 void Geom::
-set_coords(const PTA_Vertexf &coords, GeomBindType bind,
+set_coords(const PTA_Vertexf &coords, 
            const PTA_ushort &vindex) {
            const PTA_ushort &vindex) {
   _coords = coords;
   _coords = coords;
-  assert(bind == G_PER_VERTEX);
-  _bind[G_COORD] = bind;
+  _bind[G_COORD] = G_PER_VERTEX;
 
 
   if ( vindex )
   if ( vindex )
     _vindex = vindex;
     _vindex = vindex;
@@ -220,6 +219,18 @@ set_coords(const PTA_Vertexf &coords, GeomBindType bind,
   make_dirty();
   make_dirty();
 }
 }
 
 
+////////////////////////////////////////////////////////////////////
+//     Function: Geom::set_coords
+//       Access: Public
+//  Description:
+////////////////////////////////////////////////////////////////////
+void Geom::
+set_coords(const PTA_Vertexf &coords, GeomBindType bind,
+           const PTA_ushort &vindex) {
+  nassertv(bind==G_PER_VERTEX);
+  set_coords(coords,vindex);
+}
+
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 //     Function: Geom::set_normals
 //     Function: Geom::set_normals
 //       Access: Public
 //       Access: Public
@@ -272,6 +283,20 @@ set_texcoords(const PTA_TexCoordf &texcoords, GeomBindType bind,
   make_dirty();
   make_dirty();
 }
 }
 
 
+////////////////////////////////////////////////////////////////////
+//     Function: Geom::get_coords
+//       Access: Public
+//  Description:
+////////////////////////////////////////////////////////////////////
+void Geom::
+get_coords(PTA_Vertexf &coords,
+           PTA_ushort &vindex) const {
+  coords = _coords;
+  vindex = _vindex;
+
+  // G_PER_VERTEX is implicit binding
+}
+
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 //     Function: Geom::get_coords
 //     Function: Geom::get_coords
 //       Access: Public
 //       Access: Public
@@ -807,7 +832,6 @@ describe_attr(ostream &out, const Geom *geom,
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 void Geom::
 void Geom::
 write_verbose(ostream &out, int indent_level) const {
 write_verbose(ostream &out, int indent_level) const {
-  GeomBindType bind_coords;
   GeomBindType bind_normals;
   GeomBindType bind_normals;
   GeomBindType bind_tcoords;
   GeomBindType bind_tcoords;
   GeomBindType bind_colors;
   GeomBindType bind_colors;
@@ -822,7 +846,7 @@ write_verbose(ostream &out, int indent_level) const {
   PTA_ushort i_tcoords;
   PTA_ushort i_tcoords;
   PTA_ushort i_colors;
   PTA_ushort i_colors;
 
 
-  get_coords(g_coords, bind_coords, i_coords);
+  get_coords(g_coords, i_coords);
   get_normals(g_normals, bind_normals, i_normals);
   get_normals(g_normals, bind_normals, i_normals);
   get_texcoords(g_tcoords, bind_tcoords, i_tcoords);
   get_texcoords(g_tcoords, bind_tcoords, i_tcoords);
   get_colors(g_colors, bind_colors, i_colors);
   get_colors(g_colors, bind_colors, i_colors);
@@ -832,18 +856,18 @@ write_verbose(ostream &out, int indent_level) const {
     << get_type() << " contains "
     << get_type() << " contains "
     << get_num_prims() << " primitives:\n";
     << get_num_prims() << " primitives:\n";
 
 
-  if (bind_coords == G_OFF) {
+  if ((i_coords == NULL) && (g_coords == NULL)) {
     indent(out, indent_level)
     indent(out, indent_level)
       << "No coords\n";
       << "No coords\n";
   } else if (i_coords!=(ushort*)0L) {
   } else if (i_coords!=(ushort*)0L) {
     indent(out, indent_level)
     indent(out, indent_level)
       << "Indexed coords = " << (void *)g_coords << ", length = "
       << "Indexed coords = " << (void *)g_coords << ", length = "
       << g_coords.size() << ":\n";
       << g_coords.size() << ":\n";
-    describe_attr(out, this, bind_coords, i_coords, false, indent_level + 2);
+    describe_attr(out, this, G_PER_VERTEX, i_coords, false, indent_level + 2);
   } else {
   } else {
     indent(out, indent_level)
     indent(out, indent_level)
       << "Nonindexed coords:\n";
       << "Nonindexed coords:\n";
-    describe_attr(out, this, bind_coords, g_coords, true, indent_level + 2);
+    describe_attr(out, this, G_PER_VERTEX, g_coords, true, indent_level + 2);
   }
   }
 
 
   if (bind_colors == G_OFF) {
   if (bind_colors == G_OFF) {

+ 10 - 4
panda/src/gobj/geom.h

@@ -140,11 +140,13 @@ public:
 
 
   void get_min_max(Vertexf &min, Vertexf &max) const;
   void get_min_max(Vertexf &min, Vertexf &max) const;
 
 
-
   void set_coords(const PTA_Vertexf &coords,
   void set_coords(const PTA_Vertexf &coords,
-                  GeomBindType bind,
-                  const PTA_ushort &vindex =
-                  PTA_ushort());
+                   const PTA_ushort &vindex =
+                   PTA_ushort());
+  void set_coords(const PTA_Vertexf &coords,
+                   GeomBindType bind,
+                   const PTA_ushort &vindex =
+                   PTA_ushort());
   void set_normals(const PTA_Normalf &norms,
   void set_normals(const PTA_Normalf &norms,
                    GeomBindType bind,
                    GeomBindType bind,
                    const PTA_ushort &nindex =
                    const PTA_ushort &nindex =
@@ -161,6 +163,10 @@ public:
   void get_coords(PTA_Vertexf &coords,
   void get_coords(PTA_Vertexf &coords,
                   GeomBindType &bind,
                   GeomBindType &bind,
                   PTA_ushort &vindex) const;
                   PTA_ushort &vindex) const;
+
+  void get_coords(PTA_Vertexf &coords,
+                  PTA_ushort &vindex) const;
+
   void get_normals(PTA_Normalf &norms,
   void get_normals(PTA_Normalf &norms,
                    GeomBindType &bind,
                    GeomBindType &bind,
                    PTA_ushort &nindex) const;
                    PTA_ushort &nindex) const;

+ 12 - 11
panda/src/gobj/geomTrifan.cxx

@@ -211,10 +211,10 @@ draw_immediate(GraphicsStateGuardianBase *gsg, GeomContext *gc) {
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 Geom *GeomTrifan::
 Geom *GeomTrifan::
 explode() const {
 explode() const {
-  PTA_Vertexf coords(0);
-  PTA_Normalf normals(0);
-  PTA_TexCoordf texcoords(0);
-  PTA_Colorf colors(0);
+  PTA_Vertexf coords=PTA_Vertexf::empty_array(0);
+  PTA_Normalf normals=PTA_Normalf::empty_array(0);
+  PTA_TexCoordf texcoords=PTA_TexCoordf::empty_array(0);
+  PTA_Colorf colors=PTA_Colorf::empty_array(0);
 
 
   VertexIterator vi = make_vertex_iterator();
   VertexIterator vi = make_vertex_iterator();
   NormalIterator ni = make_normal_iterator();
   NormalIterator ni = make_normal_iterator();
@@ -295,12 +295,12 @@ explode() const {
       }
       }
 
 
       // Per-vertex attributes.
       // Per-vertex attributes.
-      if (get_binding(G_COORD) == G_PER_VERTEX) {
-        f3vertex[2] = get_next_vertex(vi);
-        coords.push_back(f3vertex[0]);
-        coords.push_back(f3vertex[1]);
-        coords.push_back(f3vertex[2]);
-      }
+      assert(get_binding(G_COORD) == G_PER_VERTEX);
+      f3vertex[2] = get_next_vertex(vi);
+      coords.push_back(f3vertex[0]);
+      coords.push_back(f3vertex[1]);
+      coords.push_back(f3vertex[2]);
+
       if (get_binding(G_NORMAL) == G_PER_VERTEX) {
       if (get_binding(G_NORMAL) == G_PER_VERTEX) {
         f3normal[2] = get_next_normal(ni);
         f3normal[2] = get_next_normal(ni);
         normals.push_back(f3normal[0]);
         normals.push_back(f3normal[0]);
@@ -323,7 +323,8 @@ explode() const {
   }
   }
 
 
   Geom *tris = new GeomTri;
   Geom *tris = new GeomTri;
-  tris->set_coords(coords, get_binding(G_COORD));
+  tris->set_coords(coords);
+
   tris->set_normals(normals,
   tris->set_normals(normals,
                     get_binding(G_NORMAL) == G_PER_COMPONENT ?
                     get_binding(G_NORMAL) == G_PER_COMPONENT ?
                     G_PER_PRIM : get_binding(G_NORMAL));
                     G_PER_PRIM : get_binding(G_NORMAL));

+ 5 - 5
panda/src/gobj/geomTristrip.cxx

@@ -298,10 +298,10 @@ GeomTristrip::get_num_tris() const {
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 Geom *GeomTristrip::
 Geom *GeomTristrip::
 explode() const {
 explode() const {
-  PTA_Vertexf coords(0);
-  PTA_Normalf normals(0);
-  PTA_TexCoordf texcoords(0);
-  PTA_Colorf colors(0);
+  PTA_Vertexf coords=PTA_Vertexf::empty_array(0);
+  PTA_Normalf normals=PTA_Normalf::empty_array(0);
+  PTA_TexCoordf texcoords=PTA_TexCoordf::empty_array(0);
+  PTA_Colorf colors=PTA_Colorf::empty_array(0);
 
 
   VertexIterator vi = make_vertex_iterator();
   VertexIterator vi = make_vertex_iterator();
   NormalIterator ni = make_normal_iterator();
   NormalIterator ni = make_normal_iterator();
@@ -420,7 +420,7 @@ explode() const {
   }
   }
 
 
   Geom *tris = new GeomTri;
   Geom *tris = new GeomTri;
-  tris->set_coords(coords, get_binding(G_COORD));
+  tris->set_coords(coords);
   tris->set_normals(normals,
   tris->set_normals(normals,
                     get_binding(G_NORMAL) == G_PER_COMPONENT ?
                     get_binding(G_NORMAL) == G_PER_COMPONENT ?
                     G_PER_PRIM : get_binding(G_NORMAL));
                     G_PER_PRIM : get_binding(G_NORMAL));

+ 4 - 4
panda/src/gobj/orthoProjection.cxx

@@ -85,9 +85,9 @@ make_geometry(const Colorf &color,
   lbf = yf + ((zb + xl) * fs);
   lbf = yf + ((zb + xl) * fs);
   rbf = yf + ((zb + xr) * fs);
   rbf = yf + ((zb + xr) * fs);
 
 
-  PTA_Vertexf coords(0);
-  PTA_ushort vindex(0);
-  PTA_Colorf colors(0);
+  PTA_Vertexf coords=PTA_Vertexf::empty_array(0);
+  PTA_ushort vindex=PTA_ushort::empty_array(0);
+  PTA_Colorf colors=PTA_Colorf::empty_array(0);
 
 
   // We just specify overall color
   // We just specify overall color
   colors.push_back(color);
   colors.push_back(color);
@@ -121,7 +121,7 @@ make_geometry(const Colorf &color,
   vindex.push_back(8); vindex.push_back(7);
   vindex.push_back(8); vindex.push_back(7);
 
 
   GeomLine* gline = new GeomLine;
   GeomLine* gline = new GeomLine;
-  gline->set_coords(coords, G_PER_VERTEX, vindex);
+  gline->set_coords(coords, vindex);
   gline->set_colors(colors, G_OVERALL);
   gline->set_colors(colors, G_OVERALL);
   gline->set_num_prims(12);
   gline->set_num_prims(12);
 
 

+ 4 - 4
panda/src/gobj/perspectiveProjection.cxx

@@ -86,9 +86,9 @@ make_geometry(const Colorf &color,
   lbf = yf + ((zb + xl) * fs);
   lbf = yf + ((zb + xl) * fs);
   rbf = yf + ((zb + xr) * fs);
   rbf = yf + ((zb + xr) * fs);
 
 
-  PTA_Vertexf coords(0);
-  PTA_ushort vindex(0);
-  PTA_Colorf colors(0);
+  PTA_Vertexf coords=PTA_Vertexf::empty_array(0);
+  PTA_ushort vindex=PTA_ushort::empty_array(0);
+  PTA_Colorf colors=PTA_Colorf::empty_array(0);
 
 
   // We just specify overall color
   // We just specify overall color
   colors.push_back(color);
   colors.push_back(color);
@@ -122,7 +122,7 @@ make_geometry(const Colorf &color,
   vindex.push_back(8); vindex.push_back(7);
   vindex.push_back(8); vindex.push_back(7);
 
 
   GeomLine* gline = new GeomLine;
   GeomLine* gline = new GeomLine;
-  gline->set_coords(coords, G_PER_VERTEX, vindex);
+  gline->set_coords(coords, vindex);
   gline->set_colors(colors, G_OVERALL);
   gline->set_colors(colors, G_OVERALL);
   gline->set_num_prims(12);
   gline->set_num_prims(12);
 
 

+ 8 - 6
panda/src/gobj/pixelBuffer.cxx

@@ -15,6 +15,7 @@
 // [email protected] .
 // [email protected] .
 //
 //
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
+
 #include "pixelBuffer.h"
 #include "pixelBuffer.h"
 #include "config_gobj.h"
 #include "config_gobj.h"
 
 
@@ -64,7 +65,7 @@ PixelBuffer(int xsize, int ysize, int components, int component_width,
   _component_width = component_width;
   _component_width = component_width;
   _type = type;
   _type = type;
   _format = format;
   _format = format;
-  _image = PTA_uchar(_xsize * _ysize * _components * _component_width);
+  _image = PTA_uchar::empty_array((unsigned int)(_xsize * _ysize * _components * _component_width));
   _loaded = true;
   _loaded = true;
 }
 }
 
 
@@ -219,7 +220,7 @@ bool PixelBuffer::load(const PNMImage& pnmimage)
     // Most common case: one byte per pixel, and the source image
     // Most common case: one byte per pixel, and the source image
     // shows a maxval of 255.  No scaling is necessary.
     // shows a maxval of 255.  No scaling is necessary.
     _type = T_unsigned_byte;
     _type = T_unsigned_byte;
-    _image = PTA_uchar(_xsize * _ysize * _components);
+    _image = PTA_uchar::empty_array((int)(_xsize * _ysize * _components));
     int idx = 0;
     int idx = 0;
     
     
     for (int j = _ysize-1; j >= 0; j--) {
     for (int j = _ysize-1; j >= 0; j--) {
@@ -241,7 +242,7 @@ bool PixelBuffer::load(const PNMImage& pnmimage)
     // Another possible case: two bytes per pixel, and the source
     // Another possible case: two bytes per pixel, and the source
     // image shows a maxval of 65535.  Again, no scaling is necessary.
     // image shows a maxval of 65535.  Again, no scaling is necessary.
     _type = T_unsigned_short;
     _type = T_unsigned_short;
-    _image = PTA_uchar(_xsize * _ysize * _components * 2);
+//    _image = PTA_uchar::empty_array(_xsize * _ysize * _components * 2);
     int idx = 0;
     int idx = 0;
     
     
     for (int j = _ysize-1; j >= 0; j--) {
     for (int j = _ysize-1; j >= 0; j--) {
@@ -264,7 +265,7 @@ bool PixelBuffer::load(const PNMImage& pnmimage)
     // something other than 255.  In this case, we should scale the
     // something other than 255.  In this case, we should scale the
     // pixel values up to the appropriate amount.
     // pixel values up to the appropriate amount.
     _type = T_unsigned_byte;
     _type = T_unsigned_byte;
-    _image = PTA_uchar(_xsize * _ysize * _components);
+    _image = PTA_uchar::empty_array(_xsize * _ysize * _components);
     int idx = 0;
     int idx = 0;
     double scale = 255.0 / (double)maxval;
     double scale = 255.0 / (double)maxval;
     
     
@@ -288,7 +289,7 @@ bool PixelBuffer::load(const PNMImage& pnmimage)
     // something other than 65535.  Again, we must scale the pixel
     // something other than 65535.  Again, we must scale the pixel
     // values.
     // values.
     _type = T_unsigned_short;
     _type = T_unsigned_short;
-    _image = PTA_uchar(_xsize * _ysize * _components * 2);
+    _image = PTA_uchar::empty_array(_xsize * _ysize * _components * 2);
     int idx = 0;
     int idx = 0;
     double scale = 65535.0 / (double)maxval;
     double scale = 65535.0 / (double)maxval;
     
     
@@ -384,7 +385,7 @@ copy(const PixelBuffer *pb) {
   _border = pb->_border;
   _border = pb->_border;
   _components = pb->_components;
   _components = pb->_components;
   _format = pb->_format;
   _format = pb->_format;
-  _image = PTA_uchar(0);
+  _image = PTA_uchar::empty_array(0);
   if (!pb->_image.empty())
   if (!pb->_image.empty())
     _image.v() = pb->_image.v();
     _image.v() = pb->_image.v();
 }
 }
@@ -411,3 +412,4 @@ void PixelBuffer::draw(GraphicsStateGuardianBase *gsg, const DisplayRegion *dr,
                         const RenderBuffer &rb) {
                         const RenderBuffer &rb) {
   gsg->draw_pixel_buffer(this, dr, rb);
   gsg->draw_pixel_buffer(this, dr, rb);
 }
 }
+

+ 17 - 17
panda/src/grutil/cardMaker.cxx

@@ -33,13 +33,13 @@
 void CardMaker::
 void CardMaker::
 reset() {
 reset() {
   _has_uvs = true;
   _has_uvs = true;
-  _ll.set(0.0, 0.0);
-  _ur.set(1.0, 1.0);
-  _frame.set(0.0, 1.0, 0.0, 1.0);
+  _ll.set(0.0f, 0.0f);
+  _ur.set(1.0f, 1.0f);
+  _frame.set(0.0f, 1.0f, 0.0f, 1.0f);
   _has_color = false;
   _has_color = false;
-  _color.set(1.0, 1.0, 1.0, 1.0);
+  _color.set(1.0f, 1.0f, 1.0f, 1.0f);
   _source_geometry = (Node *)NULL;
   _source_geometry = (Node *)NULL;
-  _source_frame.set(0.0, 0.0, 0.0, 0.0);
+  _source_frame.set(0.0f, 0.0f, 0.0f, 0.0f);
 }
 }
 
 
 
 
@@ -64,19 +64,19 @@ generate() {
   float bottom = _frame[2];
   float bottom = _frame[2];
   float top = _frame[3];
   float top = _frame[3];
 
 
-  PTA_int lengths(0);
+  PTA_int lengths=PTA_int::empty_array(0);
   lengths.push_back(4);
   lengths.push_back(4);
 
 
   PTA_Vertexf verts;
   PTA_Vertexf verts;
-  verts.push_back(Vertexf::rfu(left, 0.0, top));
-  verts.push_back(Vertexf::rfu(left, 0.0, bottom));
-  verts.push_back(Vertexf::rfu(right, 0.0, top));
-  verts.push_back(Vertexf::rfu(right, 0.0, bottom));
+  verts.push_back(Vertexf::rfu(left, 0.0f, top));
+  verts.push_back(Vertexf::rfu(left, 0.0f, bottom));
+  verts.push_back(Vertexf::rfu(right, 0.0f, top));
+  verts.push_back(Vertexf::rfu(right, 0.0f, bottom));
 
 
   geom->set_num_prims(1);
   geom->set_num_prims(1);
   geom->set_lengths(lengths);
   geom->set_lengths(lengths);
 
 
-  geom->set_coords(verts, G_PER_VERTEX);
+  geom->set_coords(verts);
 
 
   PTA_Colorf colors;
   PTA_Colorf colors;
   colors.push_back(_color);
   colors.push_back(_color);
@@ -107,20 +107,20 @@ rescale_source_geometry() {
     new RenderRelation(root, _source_geometry->copy_subgraph(RenderRelation::get_class_type()));
     new RenderRelation(root, _source_geometry->copy_subgraph(RenderRelation::get_class_type()));
 
 
   // Determine the translate and scale appropriate for our geometry.
   // Determine the translate and scale appropriate for our geometry.
-  float geom_center_x = (_source_frame[0] + _source_frame[1]) / 2.0;
-  float geom_center_y = (_source_frame[2] + _source_frame[3]) / 2.0;
+  float geom_center_x = (_source_frame[0] + _source_frame[1]) * 0.5f;
+  float geom_center_y = (_source_frame[2] + _source_frame[3]) * 0.5f;
 
 
-  float frame_center_x = (_frame[0] + _frame[1]) / 2.0;
-  float frame_center_y = (_frame[2] + _frame[3]) / 2.0;
+  float frame_center_x = (_frame[0] + _frame[1]) * 0.5f;
+  float frame_center_y = (_frame[2] + _frame[3]) * 0.5f;
 
 
   float scale_x = 
   float scale_x = 
     (_frame[1] - _frame[0]) / (_source_frame[1] - _source_frame[0]);
     (_frame[1] - _frame[0]) / (_source_frame[1] - _source_frame[0]);
   float scale_y = 
   float scale_y = 
     (_frame[3] - _frame[2]) / (_source_frame[3] - _source_frame[2]);
     (_frame[3] - _frame[2]) / (_source_frame[3] - _source_frame[2]);
 
 
-  LVector3f trans = LVector3f::rfu(frame_center_x - geom_center_x, 0.0, 
+  LVector3f trans = LVector3f::rfu(frame_center_x - geom_center_x, 0.0f, 
                                    frame_center_y - geom_center_y);
                                    frame_center_y - geom_center_y);
-  LVector3f scale = LVector3f::rfu(scale_x, 1.0, scale_y);
+  LVector3f scale = LVector3f::rfu(scale_x, 1.0f, scale_y);
 
 
   LMatrix4f mat = 
   LMatrix4f mat = 
     LMatrix4f::scale_mat(scale) *
     LMatrix4f::scale_mat(scale) *

+ 5 - 5
panda/src/grutil/lineSegs.cxx

@@ -31,8 +31,8 @@
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 LineSegs::
 LineSegs::
 LineSegs() {
 LineSegs() {
-  _color.set(1.0, 1.0, 1.0, 1.0);
-  _thick = 1.0;
+  _color.set(1.0f, 1.0f, 1.0f, 1.0f);
+  _thick = 1.0f;
 }
 }
 
 
 
 
@@ -122,7 +122,7 @@ const Vertexf &LineSegs::
 get_current_position() {
 get_current_position() {
   if (_list.empty()) {
   if (_list.empty()) {
     // Our pen isn't anywhere.  We'll put it somewhere.
     // Our pen isn't anywhere.  We'll put it somewhere.
-    move_to(Vertexf(0.0, 0.0, 0.0));
+    move_to(Vertexf(0.0f, 0.0f, 0.0f));
   }
   }
 
 
   return _list.back().back()._point;
   return _list.back().back()._point;
@@ -202,7 +202,7 @@ create(GeomNode *previous, bool) {
       }
       }
 
 
       geom->set_colors(_created_colors, G_PER_VERTEX, line_index);
       geom->set_colors(_created_colors, G_PER_VERTEX, line_index);
-      geom->set_coords(_created_verts, G_PER_VERTEX, line_index);
+      geom->set_coords(_created_verts, line_index);
 
 
       previous->add_geom(geom);
       previous->add_geom(geom);
     }
     }
@@ -215,7 +215,7 @@ create(GeomNode *previous, bool) {
       geom->set_num_prims(point_index.size());
       geom->set_num_prims(point_index.size());
       geom->set_size(_thick);
       geom->set_size(_thick);
       geom->set_colors(_created_colors, G_PER_VERTEX, point_index);
       geom->set_colors(_created_colors, G_PER_VERTEX, point_index);
-      geom->set_coords(_created_verts, G_PER_VERTEX, point_index);
+      geom->set_coords(_created_verts, point_index);
 
 
       previous->add_geom(geom);
       previous->add_geom(geom);
     }
     }

+ 15 - 14
panda/src/light/spotlight.cxx

@@ -183,26 +183,26 @@ make_geometry(float intensity, float length, int num_facets)
 {
 {
   Colorf diffuse = _color;
   Colorf diffuse = _color;
   diffuse[3] = intensity;
   diffuse[3] = intensity;
-  Colorf black(0.0, 0.0, 0.0, intensity);
+  Colorf black(0.0f, 0.0f, 0.0f, intensity);
   float radius = length * (float)tan(deg_2_rad(get_cutoff_angle()));
   float radius = length * (float)tan(deg_2_rad(get_cutoff_angle()));
   float ang_inc = 2.0f*MathNumbers::pi_f / (float)num_facets;
   float ang_inc = 2.0f*MathNumbers::pi_f / (float)num_facets;
   int num_verts = num_facets + 1;
   int num_verts = num_facets + 1;
   int num_indices = num_facets + 2;
   int num_indices = num_facets + 2;
-  LVector3f offset(0.0, length, 0.0);
-  LPoint3f first_last_vert(radius, length, 0.0);
+  LVector3f offset(0.0f, length, 0.0f);
+  LPoint3f first_last_vert(radius, length, 0.0f);
 
 
-  PTA_Vertexf coords(num_verts);
-  PTA_ushort vindex(num_indices);
-  PTA_Colorf colors(2);
-  PTA_ushort cindex(num_indices);
-  PTA_int lengths(1);
+  PTA_Vertexf coords=PTA_Vertexf::empty_array(num_verts);
+  PTA_ushort vindex=PTA_ushort::empty_array(num_indices);
+  PTA_Colorf colors=PTA_Colorf::empty_array(2);
+  PTA_ushort cindex=PTA_ushort::empty_array(num_indices);
+  PTA_int lengths=PTA_int::empty_array(1);
 
 
   lengths[0] = num_indices;
   lengths[0] = num_indices;
 
 
   float ang = ang_inc;
   float ang = ang_inc;
-  LPoint3f origin(0.0, 0.0, 0.0);
-  LVector3f x_axis(1.0, 0.0, 0.0);
-  LVector3f z_axis(0.0, 0.0, 1.0);
+  LPoint3f origin(0.0f, 0.0f, 0.0f);
+  LVector3f x_axis(1.0f, 0.0f, 0.0f);
+  LVector3f z_axis(0.0f, 0.0f, 1.0f);
   LPoint3f dx, dz;
   LPoint3f dx, dz;
   float t;
   float t;
 
 
@@ -214,8 +214,9 @@ make_geometry(float intensity, float length, int num_facets)
 
 
   int i;
   int i;
   for (i = 2; i < num_indices-1; i++) {
   for (i = 2; i < num_indices-1; i++) {
-        float sine,cosine;
-        csincos(ang,&sine,&cosine);
+    float sine,cosine;
+
+    csincos(ang,&sine,&cosine);
     t = cosine * radius;
     t = cosine * radius;
     dx = x_axis * t;
     dx = x_axis * t;
     t = sine * radius;
     t = sine * radius;
@@ -232,7 +233,7 @@ make_geometry(float intensity, float length, int num_facets)
     cindex[i] = 1;
     cindex[i] = 1;
 
 
   GeomTrifan* tfan = new GeomTrifan;
   GeomTrifan* tfan = new GeomTrifan;
-  tfan->set_coords(coords, G_PER_VERTEX, vindex);
+  tfan->set_coords(coords, vindex);
   tfan->set_colors(colors, G_PER_VERTEX, cindex);
   tfan->set_colors(colors, G_PER_VERTEX, cindex);
   tfan->set_num_prims(1);
   tfan->set_num_prims(1);
   tfan->set_lengths(lengths);
   tfan->set_lengths(lengths);

+ 3 - 3
panda/src/particlesystem/lineParticleRenderer.cxx

@@ -117,10 +117,10 @@ kill_particle(int) {
 
 
 void LineParticleRenderer::
 void LineParticleRenderer::
 resize_pool(int new_size) {
 resize_pool(int new_size) {
-  _vertex_array = PTA_Vertexf(new_size * 2);
-  _color_array = PTA_Colorf(new_size * 2);
+  _vertex_array = PTA_Vertexf::empty_array(new_size * 2);
+  _color_array = PTA_Colorf::empty_array(new_size * 2);
 
 
-  _line_primitive->set_coords(_vertex_array, G_PER_VERTEX);
+  _line_primitive->set_coords(_vertex_array);
   _line_primitive->set_colors(_color_array, G_PER_VERTEX);
   _line_primitive->set_colors(_color_array, G_PER_VERTEX);
 
 
   _max_pool_size = new_size;
   _max_pool_size = new_size;

+ 3 - 3
panda/src/particlesystem/pointParticleRenderer.cxx

@@ -94,10 +94,10 @@ resize_pool(int new_size) {
 
 
   _max_pool_size = new_size;
   _max_pool_size = new_size;
 
 
-  _vertex_array = PTA_Vertexf(new_size);
-  _color_array = PTA_Colorf(new_size);
+  _vertex_array = PTA_Vertexf::empty_array(new_size);
+  _color_array = PTA_Colorf::empty_array(new_size);
 
 
-  _point_primitive->set_coords(_vertex_array, G_PER_VERTEX);
+  _point_primitive->set_coords(_vertex_array);
   _point_primitive->set_colors(_color_array, G_PER_VERTEX);
   _point_primitive->set_colors(_color_array, G_PER_VERTEX);
 
 
   init_geoms();
   init_geoms();

+ 3 - 3
panda/src/particlesystem/sparkleParticleRenderer.cxx

@@ -125,10 +125,10 @@ kill_particle(int) {
 
 
 void SparkleParticleRenderer::
 void SparkleParticleRenderer::
 resize_pool(int new_size) {
 resize_pool(int new_size) {
-  _vertex_array = PTA_Vertexf(new_size * 12);
-  _color_array = PTA_Colorf(new_size * 12);
+  _vertex_array = PTA_Vertexf::empty_array(new_size * 12);
+  _color_array = PTA_Colorf::empty_array(new_size * 12);
 
 
-  _line_primitive->set_coords(_vertex_array, G_PER_VERTEX);
+  _line_primitive->set_coords(_vertex_array);
   _line_primitive->set_colors(_color_array, G_PER_VERTEX);
   _line_primitive->set_colors(_color_array, G_PER_VERTEX);
 
 
   _max_pool_size = new_size;
   _max_pool_size = new_size;

+ 8 - 8
panda/src/particlesystem/spriteParticleRenderer.I

@@ -35,8 +35,8 @@ get_source_type() const {
 INLINE void SpriteParticleRenderer::
 INLINE void SpriteParticleRenderer::
 set_texture(Texture *tex) {
 set_texture(Texture *tex) {
   _sprite_primitive->set_texture(tex);
   _sprite_primitive->set_texture(tex);
-  _sprite_primitive->set_ll_uv(TexCoordf(0.0, 0.0));
-  _sprite_primitive->set_ur_uv(TexCoordf(1.0, 1.0));
+  _sprite_primitive->set_ll_uv(TexCoordf(0.0f, 0.0f));
+  _sprite_primitive->set_ur_uv(TexCoordf(1.0f, 1.0f));
   _source_type = ST_texture;
   _source_type = ST_texture;
 }
 }
 
 
@@ -82,11 +82,11 @@ set_color(const Colorf &color) {
 INLINE void SpriteParticleRenderer::
 INLINE void SpriteParticleRenderer::
 set_x_scale_flag(bool animate_x_ratio) {
 set_x_scale_flag(bool animate_x_ratio) {
   if (animate_x_ratio == true && _animate_x_ratio == false) {
   if (animate_x_ratio == true && _animate_x_ratio == false) {
-    _x_texel_array = PTA_float(_pool_size);
+    _x_texel_array = PTA_float::empty_array(_pool_size);
     _sprite_primitive->set_x_texel_ratio(_x_texel_array, G_PER_PRIM);
     _sprite_primitive->set_x_texel_ratio(_x_texel_array, G_PER_PRIM);
   }
   }
   else if (animate_x_ratio == false && _animate_x_ratio == true) {
   else if (animate_x_ratio == false && _animate_x_ratio == true) {
-    _x_texel_array = PTA_float(1);
+    _x_texel_array = PTA_float::empty_array(1);
     _sprite_primitive->set_x_texel_ratio(_x_texel_array, G_OVERALL);
     _sprite_primitive->set_x_texel_ratio(_x_texel_array, G_OVERALL);
   }
   }
 
 
@@ -100,11 +100,11 @@ set_x_scale_flag(bool animate_x_ratio) {
 INLINE void SpriteParticleRenderer::
 INLINE void SpriteParticleRenderer::
 set_y_scale_flag(bool animate_y_ratio) {
 set_y_scale_flag(bool animate_y_ratio) {
   if (animate_y_ratio == true && _animate_y_ratio == false) {
   if (animate_y_ratio == true && _animate_y_ratio == false) {
-    _y_texel_array = PTA_float(_pool_size);
+    _y_texel_array = PTA_float::empty_array(_pool_size);
     _sprite_primitive->set_y_texel_ratio(_y_texel_array, G_PER_PRIM);
     _sprite_primitive->set_y_texel_ratio(_y_texel_array, G_PER_PRIM);
   }
   }
   else if (animate_y_ratio == false && _animate_y_ratio == true) {
   else if (animate_y_ratio == false && _animate_y_ratio == true) {
-    _y_texel_array = PTA_float(1);
+    _y_texel_array = PTA_float::empty_array(1);
     _sprite_primitive->set_y_texel_ratio(_y_texel_array, G_OVERALL);
     _sprite_primitive->set_y_texel_ratio(_y_texel_array, G_OVERALL);
   }
   }
 
 
@@ -118,11 +118,11 @@ set_y_scale_flag(bool animate_y_ratio) {
 INLINE void SpriteParticleRenderer::
 INLINE void SpriteParticleRenderer::
 set_anim_angle_flag(bool animate_theta) {
 set_anim_angle_flag(bool animate_theta) {
   if (animate_theta == true && _animate_theta == false) {
   if (animate_theta == true && _animate_theta == false) {
-    _theta_array = PTA_float(_pool_size);
+    _theta_array = PTA_float::empty_array(_pool_size);
     _sprite_primitive->set_thetas(_theta_array, G_PER_PRIM);
     _sprite_primitive->set_thetas(_theta_array, G_PER_PRIM);
   }
   }
   else if (animate_theta == false && _animate_theta == true) {
   else if (animate_theta == false && _animate_theta == true) {
-    _theta_array = PTA_float(_pool_size);
+    _theta_array = PTA_float::empty_array(_pool_size);
     _sprite_primitive->set_thetas(_theta_array, G_OVERALL);
     _sprite_primitive->set_thetas(_theta_array, G_OVERALL);
   }
   }
 
 

+ 9 - 9
panda/src/particlesystem/spriteParticleRenderer.cxx

@@ -197,38 +197,38 @@ resize_pool(int new_size) {
 
 
   // handle the x texel ratio
   // handle the x texel ratio
   if (_animate_x_ratio == true) {
   if (_animate_x_ratio == true) {
-    _x_texel_array = PTA_float(new_size);
+    _x_texel_array = PTA_float::empty_array(new_size);
     _x_bind = G_PER_PRIM;
     _x_bind = G_PER_PRIM;
   }
   }
   else {
   else {
-    _x_texel_array = PTA_float(1);
+    _x_texel_array = PTA_float::empty_array(1);
     _x_bind = G_OVERALL;
     _x_bind = G_OVERALL;
   }
   }
 
 
   // handle the y texel ratio
   // handle the y texel ratio
   if (_animate_y_ratio == true) {
   if (_animate_y_ratio == true) {
-    _y_texel_array = PTA_float(new_size);
+    _y_texel_array = PTA_float::empty_array(new_size);
     _y_bind = G_PER_PRIM;
     _y_bind = G_PER_PRIM;
   }
   }
   else {
   else {
-    _y_texel_array = PTA_float(1);
+    _y_texel_array = PTA_float::empty_array(1);
     _y_bind = G_OVERALL;
     _y_bind = G_OVERALL;
   }
   }
 
 
   // handle the theta vector
   // handle the theta vector
   if (_animate_theta == true) {
   if (_animate_theta == true) {
-    _theta_array = PTA_float(new_size);
+    _theta_array = PTA_float::empty_array(new_size);
     _theta_bind = G_PER_PRIM;
     _theta_bind = G_PER_PRIM;
   }
   }
   else {
   else {
-    _theta_array = PTA_float(1);
+    _theta_array = PTA_float::empty_array(1);
     _theta_bind = G_OVERALL;
     _theta_bind = G_OVERALL;
   }
   }
 
 
-  _vertex_array = PTA_Vertexf(new_size);
-  _color_array = PTA_Colorf(new_size);
+  _vertex_array = PTA_Vertexf::empty_array(new_size);
+  _color_array = PTA_Colorf::empty_array(new_size);
 
 
-  _sprite_primitive->set_coords(_vertex_array, G_PER_VERTEX);
+  _sprite_primitive->set_coords(_vertex_array);
   _sprite_primitive->set_colors(_color_array, G_PER_PRIM);
   _sprite_primitive->set_colors(_color_array, G_PER_PRIM);
   _sprite_primitive->set_x_texel_ratio(_x_texel_array, _x_bind);
   _sprite_primitive->set_x_texel_ratio(_x_texel_array, _x_bind);
   _sprite_primitive->set_y_texel_ratio(_y_texel_array, _y_bind);
   _sprite_primitive->set_y_texel_ratio(_y_texel_array, _y_bind);

+ 8 - 8
panda/src/pgui/pgButton.cxx

@@ -190,7 +190,7 @@ setup(const string &label) {
   PT_Node geom = text_node->generate();
   PT_Node geom = text_node->generate();
 
 
   LVecBase4f frame = text_node->get_card_actual();
   LVecBase4f frame = text_node->get_card_actual();
-  set_frame(frame[0] - 0.4, frame[1] + 0.4, frame[2] - 0.15, frame[3] + 0.15);
+  set_frame(frame[0] - 0.4f, frame[1] + 0.4f, frame[2] - 0.15f, frame[3] + 0.15f);
 
 
   new RenderRelation(get_state_def(S_ready), geom);
   new RenderRelation(get_state_def(S_ready), geom);
   NodeRelation *down = new RenderRelation(get_state_def(S_depressed), geom);
   NodeRelation *down = new RenderRelation(get_state_def(S_depressed), geom);
@@ -198,24 +198,24 @@ setup(const string &label) {
   NodeRelation *inact = new RenderRelation(get_state_def(S_inactive), geom);
   NodeRelation *inact = new RenderRelation(get_state_def(S_inactive), geom);
 
 
   PGFrameStyle style;
   PGFrameStyle style;
-  style.set_color(0.8, 0.8, 0.8, 1.0);
-  style.set_width(0.1, 0.1);
+  style.set_color(0.8f, 0.8f, 0.8f, 1.0);
+  style.set_width(0.1f, 0.1f);
 
 
   style.set_type(PGFrameStyle::T_bevel_out);
   style.set_type(PGFrameStyle::T_bevel_out);
   set_frame_style(S_ready, style);
   set_frame_style(S_ready, style);
 
 
-  style.set_color(0.9, 0.9, 0.9, 1.0);
+  style.set_color(0.9f, 0.9f, 0.9f, 1.0);
   set_frame_style(S_rollover, style);
   set_frame_style(S_rollover, style);
 
 
-  ColorTransition *ct = new ColorTransition(Colorf(0.8, 0.8, 0.8, 1.0));
+  ColorTransition *ct = new ColorTransition(Colorf(0.8f, 0.8f, 0.8f, 1.0f));
   inact->set_transition(ct);
   inact->set_transition(ct);
-  style.set_color(0.6, 0.6, 0.6, 1.0);
+  style.set_color(0.6f, 0.6f, 0.6f, 1.0);
   set_frame_style(S_inactive, style);
   set_frame_style(S_inactive, style);
 
 
   style.set_type(PGFrameStyle::T_bevel_in);
   style.set_type(PGFrameStyle::T_bevel_in);
-  style.set_color(0.8, 0.8, 0.8, 1.0);
+  style.set_color(0.8f, 0.8f, 0.8f, 1.0);
   set_frame_style(S_depressed, style);
   set_frame_style(S_depressed, style);
-  LMatrix4f translate = LMatrix4f::translate_mat(0.05, 0.0, -0.05);
+  LMatrix4f translate = LMatrix4f::translate_mat(0.05f, 0.0f, -0.05f);
   TransformTransition *tt = new TransformTransition(translate);
   TransformTransition *tt = new TransformTransition(translate);
   down->set_transition(tt);
   down->set_transition(tt);
 }
 }

+ 22 - 22
panda/src/pgui/pgEntry.cxx

@@ -45,12 +45,12 @@ PGEntry(const string &name) : PGItem(name)
   _cursor_position = 0;
   _cursor_position = 0;
   _cursor_stale = true;
   _cursor_stale = true;
   _max_chars = 0;
   _max_chars = 0;
-  _max_width = 0.0;
+  _max_width = 0.0f;
   _num_lines = 1;
   _num_lines = 1;
   _last_text_def = (TextNode *)NULL;
   _last_text_def = (TextNode *)NULL;
   _text_geom_stale = true;
   _text_geom_stale = true;
-  _blink_start = 0.0;
-  _blink_rate = 1.0;
+  _blink_start = 0.0f;
+  _blink_rate = 1.0f;
 
 
   _text_render_root = new NamedNode("text_root");
   _text_render_root = new NamedNode("text_root");
   _current_text_arc = (NodeRelation *)NULL;
   _current_text_arc = (NodeRelation *)NULL;
@@ -262,7 +262,7 @@ press(const MouseWatcherParameter &param, bool background) {
               
               
               // Check the length.
               // Check the length.
               bool too_long = false;
               bool too_long = false;
-              if (_max_width > 0.0) {
+              if (_max_width > 0.0f) {
                 TextNode *text_node = get_text_def(S_focus);
                 TextNode *text_node = get_text_def(S_focus);
                 if (_num_lines <= 1) {
                 if (_num_lines <= 1) {
                   // If we have only one line, we can check the length
                   // If we have only one line, we can check the length
@@ -420,10 +420,10 @@ setup(float width, int num_lines) {
   float line_height = text_node->get_line_height();
   float line_height = text_node->get_line_height();
 
 
   // Define determine the four corners of the frame.
   // Define determine the four corners of the frame.
-  LPoint3f ll(0.0, 0.0, -0.3 * line_height - (line_height * (num_lines - 1)));
-  LPoint3f ur(width, 0.0, line_height);
-  LPoint3f lr(ur[0], 0.0, ll[2]);
-  LPoint3f ul(ll[0], 0.0, ur[2]);
+  LPoint3f ll(0.0f, 0.0f, -0.3f * line_height - (line_height * (num_lines - 1)));
+  LPoint3f ur(width, 0.0f, line_height);
+  LPoint3f lr(ur[0], 0.0f, ll[2]);
+  LPoint3f ul(ll[0], 0.0f, ur[2]);
 
 
   // Transform each corner by the TextNode's transform.
   // Transform each corner by the TextNode's transform.
   LMatrix4f mat = text_node->get_transform();
   LMatrix4f mat = text_node->get_transform();
@@ -453,31 +453,31 @@ setup(float width, int num_lines) {
 
 
   case TM_ALIGN_RIGHT:
   case TM_ALIGN_RIGHT:
     frame[0] = -width;
     frame[0] = -width;
-    frame[1] = 0.0;
+    frame[1] = 0.0f;
     break;
     break;
   }
   }
 
 
-  set_frame(frame[0] - 0.15, frame[1] + 0.15, frame[2], frame[3]);
+  set_frame(frame[0] - 0.15f, frame[1] + 0.15f, frame[2], frame[3]);
 
 
   PGFrameStyle style;
   PGFrameStyle style;
-  style.set_width(0.1, 0.1);
+  style.set_width(0.1f, 0.1f);
   style.set_type(PGFrameStyle::T_bevel_in);
   style.set_type(PGFrameStyle::T_bevel_in);
-  style.set_color(0.8, 0.8, 0.8, 1.0);
+  style.set_color(0.8f, 0.8f, 0.8f, 1.0f);
 
 
   set_frame_style(S_no_focus, style);
   set_frame_style(S_no_focus, style);
 
 
-  style.set_color(0.9, 0.9, 0.9, 1.0);
+  style.set_color(0.9f, 0.9f, 0.9f, 1.0f);
   set_frame_style(S_focus, style);
   set_frame_style(S_focus, style);
 
 
-  style.set_color(0.6, 0.6, 0.6, 1.0);
+  style.set_color(0.6f, 0.6f, 0.6f, 1.0f);
   set_frame_style(S_inactive, style);
   set_frame_style(S_inactive, style);
 
 
   // Set up a default cursor: a vertical bar.
   // Set up a default cursor: a vertical bar.
   clear_cursor_def();
   clear_cursor_def();
   LineSegs ls;
   LineSegs ls;
-  ls.set_color(0.0, 0.0, 0.0, 1.0);
-  ls.move_to(0.0, 0.0, -0.15 * line_height);
-  ls.draw_to(0.0, 0.0, 0.85 * line_height);
+  ls.set_color(0.0f, 0.0f, 0.0f, 1.0f);
+  ls.move_to(0.0f, 0.0f, -0.15f * line_height);
+  ls.draw_to(0.0f, 0.0f, 0.85f * line_height);
   new RenderRelation(get_cursor_def(), ls.create());
   new RenderRelation(get_cursor_def(), ls.create());
 
 
   // An underscore cursor would work too.
   // An underscore cursor would work too.
@@ -501,7 +501,7 @@ setup(float width, int num_lines) {
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 void PGEntry::
 void PGEntry::
 set_text_def(int state, TextNode *node) {
 set_text_def(int state, TextNode *node) {
-  nassertv(state >= 0 && state < 1000);  // Sanity check.
+  nassertv(state >= 0 && state < 1.0f);  // Sanity check.
   if (node == (TextNode *)NULL && state >= (int)_text_defs.size()) {
   if (node == (TextNode *)NULL && state >= (int)_text_defs.size()) {
     // If we're setting it to NULL, we don't need to slot a new one.
     // If we're setting it to NULL, we don't need to slot a new one.
     return;
     return;
@@ -614,7 +614,7 @@ update_text() {
     // We need to regenerate.
     // We need to regenerate.
     _last_text_def = node;
     _last_text_def = node;
 
 
-    if (_max_width > 0.0 && _num_lines > 1) {
+    if (_max_width > 0.0f && _num_lines > 1) {
       // Fold the text into multiple lines.
       // Fold the text into multiple lines.
       string ww_text = 
       string ww_text = 
         _last_text_def->wordwrap_to(display_text, _max_width, true);
         _last_text_def->wordwrap_to(display_text, _max_width, true);
@@ -629,7 +629,7 @@ update_text() {
         line._str = ww_text.substr(p, q - p);
         line._str = ww_text.substr(p, q - p);
 
 
         // Get the left edge of the text at this line.
         // Get the left edge of the text at this line.
-        line._left = 0.0;
+        line._left = 0.0f;
         if (_last_text_def->get_align() != TM_ALIGN_LEFT) {
         if (_last_text_def->get_align() != TM_ALIGN_LEFT) {
           _last_text_def->set_text(line._str);
           _last_text_def->set_text(line._str);
           line._left = _last_text_def->get_left();
           line._left = _last_text_def->get_left();
@@ -643,7 +643,7 @@ update_text() {
       line._str = ww_text.substr(p);
       line._str = ww_text.substr(p);
       
       
       // Get the left edge of the text at this line.
       // Get the left edge of the text at this line.
-      line._left = 0.0;
+      line._left = 0.0f;
       if (_last_text_def->get_align() != TM_ALIGN_LEFT) {
       if (_last_text_def->get_align() != TM_ALIGN_LEFT) {
         _last_text_def->set_text(line._str);
         _last_text_def->set_text(line._str);
         line._left = _last_text_def->get_left();
         line._left = _last_text_def->get_left();
@@ -703,7 +703,7 @@ update_cursor() {
       _last_text_def->calc_width(_ww_lines[row]._str.substr(0, column));
       _last_text_def->calc_width(_ww_lines[row]._str.substr(0, column));
     float line_height = _last_text_def->get_line_height();
     float line_height = _last_text_def->get_line_height();
 
 
-    LVecBase3f trans(_ww_lines[row]._left + width, 0.0, -line_height * row);
+    LVecBase3f trans(_ww_lines[row]._left + width, 0.0f, -line_height * row);
     LMatrix4f mat = LMatrix4f::translate_mat(trans) * node->get_transform();
     LMatrix4f mat = LMatrix4f::translate_mat(trans) * node->get_transform();
     _cursor_def->set_transition(new TransformTransition(mat));
     _cursor_def->set_transition(new TransformTransition(mat));
 
 

+ 59 - 59
panda/src/pgui/pgFrameStyle.cxx

@@ -147,7 +147,7 @@ generate_into(Node *node, const LVecBase4f &frame) {
     arc = new RenderRelation(node, gnode, -1);
     arc = new RenderRelation(node, gnode, -1);
   }
   }
 
 
-  if (arc != (NodeRelation *)NULL && _color[3] != 1.0) {
+  if (arc != (NodeRelation *)NULL && _color[3] != 1.0f) {
     // We've got some alpha on the color; we need transparency.
     // We've got some alpha on the color; we need transparency.
     TransparencyProperty::Mode mode = TransparencyProperty::M_alpha;
     TransparencyProperty::Mode mode = TransparencyProperty::M_alpha;
     TransparencyTransition *tt = new TransparencyTransition(mode);
     TransparencyTransition *tt = new TransparencyTransition(mode);
@@ -174,19 +174,19 @@ generate_flat_geom(const LVecBase4f &frame) {
   float bottom = frame[2];
   float bottom = frame[2];
   float top = frame[3];
   float top = frame[3];
 
 
-  PTA_int lengths(0);
+  PTA_int lengths=PTA_int::empty_array(0);
   lengths.push_back(4);
   lengths.push_back(4);
 
 
   PTA_Vertexf verts;
   PTA_Vertexf verts;
-  verts.push_back(Vertexf(left, 0.0, top));
-  verts.push_back(Vertexf(left, 0.0, bottom));
-  verts.push_back(Vertexf(right, 0.0, top));
-  verts.push_back(Vertexf(right, 0.0, bottom));
+  verts.push_back(Vertexf(left, 0.0f, top));
+  verts.push_back(Vertexf(left, 0.0f, bottom));
+  verts.push_back(Vertexf(right, 0.0f, top));
+  verts.push_back(Vertexf(right, 0.0f, bottom));
 
 
   geom->set_num_prims(1);
   geom->set_num_prims(1);
   geom->set_lengths(lengths);
   geom->set_lengths(lengths);
 
 
-  geom->set_coords(verts, G_PER_VERTEX);
+  geom->set_coords(verts);
 
 
   PTA_Colorf colors;
   PTA_Colorf colors;
   colors.push_back(_color);
   colors.push_back(_color);
@@ -316,14 +316,14 @@ generate_bevel_geom(const LVecBase4f &frame, bool in) {
   // Tristrip 1.
   // Tristrip 1.
   lengths.push_back(8);
   lengths.push_back(8);
     
     
-  verts.push_back(Vertexf(right, 0.0, bottom));
-  verts.push_back(Vertexf(inner_right, 0.0, inner_bottom));
-  verts.push_back(Vertexf(left, 0.0, bottom));
-  verts.push_back(Vertexf(inner_left, 0.0, inner_bottom));
-  verts.push_back(Vertexf(left, 0.0, top));
-  verts.push_back(Vertexf(inner_left, 0.0, inner_top));
-  verts.push_back(Vertexf(right, 0.0, top));
-  verts.push_back(Vertexf(inner_right, 0.0, inner_top));
+  verts.push_back(Vertexf(right, 0.0f, bottom));
+  verts.push_back(Vertexf(inner_right, 0.0f, inner_bottom));
+  verts.push_back(Vertexf(left, 0.0f, bottom));
+  verts.push_back(Vertexf(inner_left, 0.0f, inner_bottom));
+  verts.push_back(Vertexf(left, 0.0f, top));
+  verts.push_back(Vertexf(inner_left, 0.0f, inner_top));
+  verts.push_back(Vertexf(right, 0.0f, top));
+  verts.push_back(Vertexf(inner_right, 0.0f, inner_top));
   
   
   colors.push_back(cbottom);
   colors.push_back(cbottom);
   colors.push_back(cbottom);
   colors.push_back(cbottom);
@@ -335,12 +335,12 @@ generate_bevel_geom(const LVecBase4f &frame, bool in) {
   // Tristrip 2.
   // Tristrip 2.
   lengths.push_back(6);
   lengths.push_back(6);
 
 
-  verts.push_back(Vertexf(right, 0.0, bottom));
-  verts.push_back(Vertexf(right, 0.0, top));
-  verts.push_back(Vertexf(inner_right, 0.0, inner_bottom));
-  verts.push_back(Vertexf(inner_right, 0.0, inner_top));
-  verts.push_back(Vertexf(inner_left, 0.0, inner_bottom));
-  verts.push_back(Vertexf(inner_left, 0.0, inner_top));
+  verts.push_back(Vertexf(right, 0.0f, bottom));
+  verts.push_back(Vertexf(right, 0.0f, top));
+  verts.push_back(Vertexf(inner_right, 0.0f, inner_bottom));
+  verts.push_back(Vertexf(inner_right, 0.0f, inner_top));
+  verts.push_back(Vertexf(inner_left, 0.0f, inner_bottom));
+  verts.push_back(Vertexf(inner_left, 0.0f, inner_top));
 
 
   colors.push_back(cright);
   colors.push_back(cright);
   colors.push_back(cright);
   colors.push_back(cright);
@@ -349,7 +349,7 @@ generate_bevel_geom(const LVecBase4f &frame, bool in) {
 
 
   geom->set_num_prims(2);
   geom->set_num_prims(2);
   geom->set_lengths(lengths);
   geom->set_lengths(lengths);
-  geom->set_coords(verts, G_PER_VERTEX);
+  geom->set_coords(verts);
   geom->set_colors(colors, G_PER_COMPONENT);
   geom->set_colors(colors, G_PER_COMPONENT);
   
   
   return gnode.p();
   return gnode.p();
@@ -468,26 +468,26 @@ generate_groove_geom(const LVecBase4f &frame, bool in) {
   float bottom = frame[2];
   float bottom = frame[2];
   float top = frame[3];
   float top = frame[3];
 
 
-  float mid_left = left + 0.5 * _width[0];
-  float mid_right = right - 0.5 * _width[0];
-  float mid_bottom = bottom + 0.5 * _width[1];
-  float mid_top = top - 0.5 * _width[1];
+  float mid_left = left + 0.5f * _width[0];
+  float mid_right = right - 0.5f * _width[0];
+  float mid_bottom = bottom + 0.5f * _width[1];
+  float mid_top = top - 0.5f * _width[1];
 
 
   float inner_left = left + _width[0];
   float inner_left = left + _width[0];
   float inner_right = right - _width[0];
   float inner_right = right - _width[0];
   float inner_bottom = bottom + _width[1];
   float inner_bottom = bottom + _width[1];
   float inner_top = top - _width[1];
   float inner_top = top - _width[1];
 
 
-  float left_color_scale = 1.2;
-  float right_color_scale = 0.8;
-  float bottom_color_scale = 0.7;
-  float top_color_scale = 1.3;
+  float left_color_scale = 1.2f;
+  float right_color_scale = 0.8f;
+  float bottom_color_scale = 0.7f;
+  float top_color_scale = 1.3f;
 
 
   if (in) {
   if (in) {
-    right_color_scale = 1.2;
-    left_color_scale = 0.8;
-    top_color_scale = 0.7;
-    bottom_color_scale = 1.3;
+    right_color_scale = 1.2f;
+    left_color_scale = 0.8f;
+    top_color_scale = 0.7f;
+    bottom_color_scale = 1.3f;
   }
   }
 
 
   // Clamp all colors at white, and don't scale the alpha.
   // Clamp all colors at white, and don't scale the alpha.
@@ -522,14 +522,14 @@ generate_groove_geom(const LVecBase4f &frame, bool in) {
   // Tristrip 1.
   // Tristrip 1.
   lengths.push_back(8);
   lengths.push_back(8);
     
     
-  verts.push_back(Vertexf(right, 0.0, bottom));
-  verts.push_back(Vertexf(mid_right, 0.0, mid_bottom));
-  verts.push_back(Vertexf(left, 0.0, bottom));
-  verts.push_back(Vertexf(mid_left, 0.0, mid_bottom));
-  verts.push_back(Vertexf(left, 0.0, top));
-  verts.push_back(Vertexf(mid_left, 0.0, mid_top));
-  verts.push_back(Vertexf(right, 0.0, top));
-  verts.push_back(Vertexf(mid_right, 0.0, mid_top));
+  verts.push_back(Vertexf(right, 0.0f, bottom));
+  verts.push_back(Vertexf(mid_right, 0.0f, mid_bottom));
+  verts.push_back(Vertexf(left, 0.0f, bottom));
+  verts.push_back(Vertexf(mid_left, 0.0f, mid_bottom));
+  verts.push_back(Vertexf(left, 0.0f, top));
+  verts.push_back(Vertexf(mid_left, 0.0f, mid_top));
+  verts.push_back(Vertexf(right, 0.0f, top));
+  verts.push_back(Vertexf(mid_right, 0.0f, mid_top));
   
   
   colors.push_back(cbottom);
   colors.push_back(cbottom);
   colors.push_back(cbottom);
   colors.push_back(cbottom);
@@ -541,14 +541,14 @@ generate_groove_geom(const LVecBase4f &frame, bool in) {
   // Tristrip 2.
   // Tristrip 2.
   lengths.push_back(8);
   lengths.push_back(8);
     
     
-  verts.push_back(Vertexf(mid_right, 0.0, mid_bottom));
-  verts.push_back(Vertexf(inner_right, 0.0, inner_bottom));
-  verts.push_back(Vertexf(mid_left, 0.0, mid_bottom));
-  verts.push_back(Vertexf(inner_left, 0.0, inner_bottom));
-  verts.push_back(Vertexf(mid_left, 0.0, mid_top));
-  verts.push_back(Vertexf(inner_left, 0.0, inner_top));
-  verts.push_back(Vertexf(mid_right, 0.0, mid_top));
-  verts.push_back(Vertexf(inner_right, 0.0, inner_top));
+  verts.push_back(Vertexf(mid_right, 0.0f, mid_bottom));
+  verts.push_back(Vertexf(inner_right, 0.0f, inner_bottom));
+  verts.push_back(Vertexf(mid_left, 0.0f, mid_bottom));
+  verts.push_back(Vertexf(inner_left, 0.0f, inner_bottom));
+  verts.push_back(Vertexf(mid_left, 0.0f, mid_top));
+  verts.push_back(Vertexf(inner_left, 0.0f, inner_top));
+  verts.push_back(Vertexf(mid_right, 0.0f, mid_top));
+  verts.push_back(Vertexf(inner_right, 0.0f, inner_top));
   
   
   colors.push_back(ctop);
   colors.push_back(ctop);
   colors.push_back(ctop);
   colors.push_back(ctop);
@@ -560,14 +560,14 @@ generate_groove_geom(const LVecBase4f &frame, bool in) {
   // Tristrip 3.
   // Tristrip 3.
   lengths.push_back(8);
   lengths.push_back(8);
 
 
-  verts.push_back(Vertexf(right, 0.0, bottom));
-  verts.push_back(Vertexf(right, 0.0, top));
-  verts.push_back(Vertexf(mid_right, 0.0, mid_bottom));
-  verts.push_back(Vertexf(mid_right, 0.0, mid_top));
-  verts.push_back(Vertexf(inner_right, 0.0, inner_bottom));
-  verts.push_back(Vertexf(inner_right, 0.0, inner_top));
-  verts.push_back(Vertexf(inner_left, 0.0, inner_bottom));
-  verts.push_back(Vertexf(inner_left, 0.0, inner_top));
+  verts.push_back(Vertexf(right, 0.0f, bottom));
+  verts.push_back(Vertexf(right, 0.0f, top));
+  verts.push_back(Vertexf(mid_right, 0.0f, mid_bottom));
+  verts.push_back(Vertexf(mid_right, 0.0f, mid_top));
+  verts.push_back(Vertexf(inner_right, 0.0f, inner_bottom));
+  verts.push_back(Vertexf(inner_right, 0.0f, inner_top));
+  verts.push_back(Vertexf(inner_left, 0.0f, inner_bottom));
+  verts.push_back(Vertexf(inner_left, 0.0f, inner_top));
 
 
   colors.push_back(cright);
   colors.push_back(cright);
   colors.push_back(cright);
   colors.push_back(cright);
@@ -578,7 +578,7 @@ generate_groove_geom(const LVecBase4f &frame, bool in) {
 
 
   geom->set_num_prims(3);
   geom->set_num_prims(3);
   geom->set_lengths(lengths);
   geom->set_lengths(lengths);
-  geom->set_coords(verts, G_PER_VERTEX);
+  geom->set_coords(verts);
   geom->set_colors(colors, G_PER_COMPONENT);
   geom->set_colors(colors, G_PER_COMPONENT);
   
   
   return gnode.p();
   return gnode.p();

+ 3 - 2
panda/src/putil/modifierButtons.cxx

@@ -27,9 +27,9 @@
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 ModifierButtons::
 ModifierButtons::
 ModifierButtons() :
 ModifierButtons() :
-  _button_list(0),
   _state(0)
   _state(0)
 {
 {
+   _button_list= PTA(ButtonHandle)::empty_array(0);
 }
 }
 
 
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
@@ -319,7 +319,8 @@ void ModifierButtons::
 modify_button_list() {
 modify_button_list() {
   if (_button_list.get_ref_count() > 1) {
   if (_button_list.get_ref_count() > 1) {
     PTA(ButtonHandle) old_list = _button_list;
     PTA(ButtonHandle) old_list = _button_list;
-    _button_list = PTA(ButtonHandle)(0);
+
+    _button_list = PTA(ButtonHandle)::empty_array(0);
 
 
     // This forces a new allocation and memberwise copy, instead of
     // This forces a new allocation and memberwise copy, instead of
     // just a reference-counting pointer copy.
     // just a reference-counting pointer copy.

+ 1 - 1
panda/src/sgattrib/drawBoundsTransition.cxx

@@ -126,7 +126,7 @@ sub_render(NodeRelation *arc, const AllTransitionsWrapper &input_trans,
       verts.push_back(center);
       verts.push_back(center);
       center[0] += sphere->get_radius();
       center[0] += sphere->get_radius();
       verts.push_back(center);
       verts.push_back(center);
-      geom.set_coords(verts, G_PER_VERTEX);
+      geom.set_coords(verts);
       geom.set_num_prims(1);
       geom.set_num_prims(1);
 
 
       gsg->draw_sphere(&geom, NULL);
       gsg->draw_sphere(&geom, NULL);

+ 2 - 2
panda/src/sgmanip/nodePathCollection.cxx

@@ -81,7 +81,7 @@ add_path(const NodePath &node_path) {
 
 
   if (_node_paths.get_ref_count() > 1) {
   if (_node_paths.get_ref_count() > 1) {
     PTA(ArcChain) old_node_paths = _node_paths;
     PTA(ArcChain) old_node_paths = _node_paths;
-    _node_paths = PTA(ArcChain)(0);
+    _node_paths = PTA(ArcChain)::empty_array(0);
     _node_paths.v() = old_node_paths.v();
     _node_paths.v() = old_node_paths.v();
   }
   }
 
 
@@ -116,7 +116,7 @@ remove_path(const NodePath &node_path) {
 
 
   if (_node_paths.get_ref_count() > 1) {
   if (_node_paths.get_ref_count() > 1) {
     PTA(ArcChain) old_node_paths = _node_paths;
     PTA(ArcChain) old_node_paths = _node_paths;
-    _node_paths = PTA(ArcChain)(0);
+    _node_paths = PTA(ArcChain)::empty_array(0);
     _node_paths.v() = old_node_paths.v();
     _node_paths.v() = old_node_paths.v();
   }
   }
 
 

+ 2 - 2
panda/src/sgraph/geomNode.cxx

@@ -367,7 +367,7 @@ add_geom(dDrawable *geom) {
     _geoms.push_back(geom);
     _geoms.push_back(geom);
   } else {
   } else {
     // Copy on write.
     // Copy on write.
-    Geoms new_geoms(0);
+    Geoms new_geoms = Geoms::empty_array(0);
     if (_geoms.size() != 0) {
     if (_geoms.size() != 0) {
       new_geoms.v() = _geoms.v();
       new_geoms.v() = _geoms.v();
     }
     }
@@ -397,7 +397,7 @@ add_geoms_from(const GeomNode *other) {
 
 
   } else {
   } else {
     // Copy on write.
     // Copy on write.
-    Geoms new_geoms(0);
+    Geoms new_geoms = Geoms::empty_array(0);
     if (_geoms.size() != 0) {
     if (_geoms.size() != 0) {
       new_geoms.v() = _geoms.v();
       new_geoms.v() = _geoms.v();
     }
     }

+ 4 - 4
panda/src/sgraph/geomTransformer.cxx

@@ -52,12 +52,11 @@ transform_vertices(Geom *geom, const LMatrix4f &mat) {
   nassertr(geom != (Geom *)NULL, false);
   nassertr(geom != (Geom *)NULL, false);
 
 
   PTA_Vertexf coords;
   PTA_Vertexf coords;
-  GeomBindType bind;
   PTA_ushort index;
   PTA_ushort index;
 
 
-  geom->get_coords(coords, bind, index);
+  geom->get_coords(coords, index);
 
 
-  if (bind != G_OFF) {
+  if (coords != NULL) {
     // Look up the Geom's coords in our table--have we already
     // Look up the Geom's coords in our table--have we already
     // transformed this array?
     // transformed this array?
     SourceVertices sv;
     SourceVertices sv;
@@ -76,12 +75,13 @@ transform_vertices(Geom *geom, const LMatrix4f &mat) {
       nassertr(new_coords.size() == coords.size(), false);
       nassertr(new_coords.size() == coords.size(), false);
     }
     }
 
 
-    geom->set_coords(new_coords, bind, index);
+    geom->set_coords(new_coords, index);
     transformed = true;
     transformed = true;
   }
   }
 
 
   // Now do the same thing for normals.
   // Now do the same thing for normals.
   PTA_Normalf norms;
   PTA_Normalf norms;
+  GeomBindType bind;
 
 
   geom->get_normals(norms, bind, index);
   geom->get_normals(norms, bind, index);
 
 

+ 2 - 4
panda/src/text/textFont.cxx

@@ -422,9 +422,8 @@ find_characters(Node *root) {
       // origin of the next character.
       // origin of the next character.
       PTA_Vertexf alist;
       PTA_Vertexf alist;
       PTA_ushort ilist;
       PTA_ushort ilist;
-      GeomBindType bind;
       float width;
       float width;
-      dot->get_coords(alist, bind, ilist);
+      dot->get_coords(alist, ilist);
       if (ilist.empty()) {
       if (ilist.empty()) {
         width = alist[0][0];
         width = alist[0][0];
       } else {
       } else {
@@ -447,8 +446,7 @@ find_characters(Node *root) {
       // design size indicator.
       // design size indicator.
       PTA_Vertexf alist;
       PTA_Vertexf alist;
       PTA_ushort ilist;
       PTA_ushort ilist;
-      GeomBindType bind;
-      dot->get_coords(alist, bind, ilist);
+      dot->get_coords(alist, ilist);
       if (ilist.empty()) {
       if (ilist.empty()) {
         _font_height = alist[0][2];
         _font_height = alist[0][2];
       } else {
       } else {

+ 114 - 111
panda/src/text/textNode.cxx

@@ -44,34 +44,34 @@ TypeHandle TextNode::_type_handle;
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 TextNode::
 TextNode::
 TextNode(const string &name) : NamedNode(name) {
 TextNode(const string &name) : NamedNode(name) {
-  _slant = 0.0;
+  _slant = 0.0f;
 
 
   _flags = 0;
   _flags = 0;
   _align = TM_ALIGN_LEFT;
   _align = TM_ALIGN_LEFT;
-  _wordwrap_width = 1.0;
+  _wordwrap_width = 1.0f;
 
 
-  _text_color.set(1.0, 1.0, 1.0, 1.0);
-  _frame_color.set(1.0, 1.0, 1.0, 1.0);
-  _card_color.set(1.0, 1.0, 1.0, 1.0);
-  _shadow_color.set(1.0, 1.0, 1.0, 1.0);
+  _text_color.set(1.0f, 1.0f, 1.0f, 1.0f);
+  _frame_color.set(1.0f, 1.0f, 1.0f, 1.0f);
+  _card_color.set(1.0f, 1.0f, 1.0f, 1.0f);
+  _shadow_color.set(1.0f, 1.0f, 1.0f, 1.0f);
 
 
-  _frame_width = 1.0;
+  _frame_width = 1.0f;
 
 
-  _frame_ul.set(0.0, 0.0);
-  _frame_lr.set(0.0, 0.0);
-  _card_ul.set(0.0, 0.0);
-  _card_lr.set(0.0, 0.0);
-  _shadow_offset.set(0.0, 0.0);
+  _frame_ul.set(0.0f, 0.0f);
+  _frame_lr.set(0.0f, 0.0f);
+  _card_ul.set(0.0f, 0.0f);
+  _card_lr.set(0.0f, 0.0f);
+  _shadow_offset.set(0.0f, 0.0f);
 
 
   _draw_order = 1;
   _draw_order = 1;
 
 
   _transform = LMatrix4f::ident_mat();
   _transform = LMatrix4f::ident_mat();
   _coordinate_system = CS_default;
   _coordinate_system = CS_default;
 
 
-  _ul2d.set(0.0, 0.0);
-  _lr2d.set(0.0, 0.0);
-  _ul3d.set(0.0, 0.0, 0.0);
-  _lr3d.set(0.0, 0.0, 0.0);
+  _ul2d.set(0.0f, 0.0f);
+  _lr2d.set(0.0f, 0.0f);
+  _ul3d.set(0.0f, 0.0f, 0.0f);
+  _lr3d.set(0.0f, 0.0f, 0.0f);
   _num_rows = 0;
   _num_rows = 0;
 
 
   _freeze_level = 0;
   _freeze_level = 0;
@@ -214,10 +214,10 @@ generate() {
   // horizontally and vertically, and for each row, there is another
   // horizontally and vertically, and for each row, there is another
   // node for each character.
   // node for each character.
 
 
-  _ul2d.set(0.0, 0.0);
-  _lr2d.set(0.0, 0.0);
-  _ul3d.set(0.0, 0.0, 0.0);
-  _lr3d.set(0.0, 0.0, 0.0);
+  _ul2d.set(0.0f, 0.0f);
+  _lr2d.set(0.0f, 0.0f);
+  _ul3d.set(0.0f, 0.0f, 0.0f);
+  _lr3d.set(0.0f, 0.0f, 0.0f);
   _num_rows = 0;
   _num_rows = 0;
 
 
   // Now build a new sub-tree for all the text components.
   // Now build a new sub-tree for all the text components.
@@ -269,8 +269,8 @@ generate() {
   _num_rows = num_rows;
   _num_rows = num_rows;
   _ul2d = ul;
   _ul2d = ul;
   _lr2d = lr;
   _lr2d = lr;
-  _ul3d.set(ul[0], 0.0, ul[1]);
-  _lr3d.set(lr[0], 0.0, lr[1]);
+  _ul3d.set(ul[0], 0.0f, ul[1]);
+  _lr3d.set(lr[0], 0.0f, lr[1]);
 
 
   _ul3d = _ul3d * _transform;
   _ul3d = _ul3d * _transform;
   _lr3d = _lr3d * _transform;
   _lr3d = _lr3d * _transform;
@@ -286,13 +286,13 @@ generate() {
     // this will need to be addressed in the future.
     // this will need to be addressed in the future.
 
 
     LMatrix4f offset =
     LMatrix4f offset =
-      LMatrix4f::translate_mat(_shadow_offset[0], 0.0, -_shadow_offset[1]);
+      LMatrix4f::translate_mat(_shadow_offset[0], 0.0f, -_shadow_offset[1]);
     RenderRelation *shadow_arc =
     RenderRelation *shadow_arc =
       new RenderRelation(sub_root, text_root, _draw_order + 1);
       new RenderRelation(sub_root, text_root, _draw_order + 1);
     shadow_arc->set_transition(new TransformTransition(offset));
     shadow_arc->set_transition(new TransformTransition(offset));
     shadow_arc->set_transition(new ColorTransition(_shadow_color));
     shadow_arc->set_transition(new ColorTransition(_shadow_color));
 
 
-    if (_shadow_color[3] != 1.0) {
+    if (_shadow_color[3] != 1.0f) {
       shadow_arc->set_transition
       shadow_arc->set_transition
         (new TransparencyTransition(TransparencyProperty::M_alpha));
         (new TransparencyTransition(TransparencyProperty::M_alpha));
     }
     }
@@ -308,7 +308,7 @@ generate() {
     RenderRelation *frame_arc =
     RenderRelation *frame_arc =
       new RenderRelation(sub_root, frame_root, _draw_order + 1);
       new RenderRelation(sub_root, frame_root, _draw_order + 1);
     frame_arc->set_transition(new ColorTransition(_frame_color));
     frame_arc->set_transition(new ColorTransition(_frame_color));
-    if (_frame_color[3] != 1.0) {
+    if (_frame_color[3] != 1.0f) {
       frame_arc->set_transition
       frame_arc->set_transition
         (new TransparencyTransition(TransparencyProperty::M_alpha));
         (new TransparencyTransition(TransparencyProperty::M_alpha));
     }
     }
@@ -328,7 +328,7 @@ generate() {
     RenderRelation *card_arc =
     RenderRelation *card_arc =
       new RenderRelation(sub_root, card_root, _draw_order);
       new RenderRelation(sub_root, card_root, _draw_order);
     card_arc->set_transition(new ColorTransition(_card_color));
     card_arc->set_transition(new ColorTransition(_card_color));
-    if (_card_color[3] != 1.0) {
+    if (_card_color[3] != 1.0f) {
       card_arc->set_transition
       card_arc->set_transition
         (new TransparencyTransition(TransparencyProperty::M_alpha));
         (new TransparencyTransition(TransparencyProperty::M_alpha));
     }
     }
@@ -394,10 +394,10 @@ do_rebuild() {
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 void TextNode::
 void TextNode::
 do_measure() {
 do_measure() {
-  _ul2d.set(0.0, 0.0);
-  _lr2d.set(0.0, 0.0);
-  _ul3d.set(0.0, 0.0, 0.0);
-  _lr3d.set(0.0, 0.0, 0.0);
+  _ul2d.set(0.0f, 0.0f);
+  _lr2d.set(0.0f, 0.0f);
+  _ul3d.set(0.0f, 0.0f, 0.0f);
+  _lr3d.set(0.0f, 0.0f, 0.0f);
   _num_rows = 0;
   _num_rows = 0;
 
 
   if (_text.empty() || _font.is_null()) {
   if (_text.empty() || _font.is_null()) {
@@ -416,8 +416,8 @@ do_measure() {
   _num_rows = num_rows;
   _num_rows = num_rows;
   _ul2d = ul;
   _ul2d = ul;
   _lr2d = lr;
   _lr2d = lr;
-  _ul3d.set(ul[0], 0.0, ul[1]);
-  _lr3d.set(lr[0], 0.0, lr[1]);
+  _ul3d.set(ul[0], 0.0f, ul[1]);
+  _lr3d.set(lr[0], 0.0f, lr[1]);
 
 
   _ul3d = _ul3d * _transform;
   _ul3d = _ul3d * _transform;
   _lr3d = _lr3d * _transform;
   _lr3d = _lr3d * _transform;
@@ -434,15 +434,15 @@ do_measure() {
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 float TextNode::
 float TextNode::
 assemble_row(const char *&source, Node *dest) {
 assemble_row(const char *&source, Node *dest) {
-  nassertr(_font != (TextFont *)NULL, 0.0);
+  nassertr(_font != (TextFont *)NULL, 0.0f);
 
 
-  float xpos = 0.0;
+  float xpos = 0.0f;
   while (*source != '\0' && *source != '\n') {
   while (*source != '\0' && *source != '\n') {
     int character = (unsigned char)*source;
     int character = (unsigned char)*source;
 
 
     if (character == ' ') {
     if (character == ' ') {
       // A space is a special case.
       // A space is a special case.
-      xpos += 0.25;
+      xpos += 0.25f;
 
 
     } else {
     } else {
       // A printable character.
       // A printable character.
@@ -465,7 +465,7 @@ assemble_row(const char *&source, Node *dest) {
         const AllTransitionsWrapper &trans = def->_trans;
         const AllTransitionsWrapper &trans = def->_trans;
 
 
         LMatrix4f mat = LMatrix4f::ident_mat();
         LMatrix4f mat = LMatrix4f::ident_mat();
-        mat.set_row(3, LVector3f(xpos, 0, 0));
+        mat.set_row(3, LVector3f(xpos, 0.0f, 0.0f));
         if (char_geom != NULL) {
         if (char_geom != NULL) {
           string ch(1, (char)character);
           string ch(1, (char)character);
           GeomNode *geode = new GeomNode(ch);
           GeomNode *geode = new GeomNode(ch);
@@ -497,13 +497,13 @@ assemble_text(const char *source, LVector2f &ul, LVector2f &lr,
   nassertr(_font != (TextFont *)NULL, (Node *)NULL);
   nassertr(_font != (TextFont *)NULL, (Node *)NULL);
   float line_height = get_line_height();
   float line_height = get_line_height();
 
 
-  ul.set(0.0, 0.8 * line_height);
-  lr.set(0.0, 0.0);
+  ul.set(0.0f, 0.8f * line_height);
+  lr.set(0.0f, 0.0f);
 
 
   // Make a group node to hold our formatted text geometry.
   // Make a group node to hold our formatted text geometry.
   Node *root_node = new NamedNode("text");
   Node *root_node = new NamedNode("text");
 
 
-  float posy = 0.0;
+  float posy = 0.0f;
   int row_index = 0;
   int row_index = 0;
   while (*source != '\0') {
   while (*source != '\0') {
     char numstr[20];
     char numstr[20];
@@ -519,26 +519,27 @@ assemble_text(const char *source, LVector2f &ul, LVector2f &lr,
 
 
     LMatrix4f mat = LMatrix4f::ident_mat();
     LMatrix4f mat = LMatrix4f::ident_mat();
     if (_align == TM_ALIGN_LEFT) {
     if (_align == TM_ALIGN_LEFT) {
-      mat.set_row(3, LVector3f(0, 0, posy));
+      mat.set_row(3, LVector3f(0.0f, 0.0f, posy));
       lr[0] = max(lr[0], row_width);
       lr[0] = max(lr[0], row_width);
 
 
     } else if (_align == TM_ALIGN_RIGHT) {
     } else if (_align == TM_ALIGN_RIGHT) {
-      mat.set_row(3, LVector3f(-row_width, 0, posy));
+      mat.set_row(3, LVector3f(-row_width, 0.0f, posy));
       ul[0] = min(ul[0], -row_width);
       ul[0] = min(ul[0], -row_width);
 
 
     } else {
     } else {
-      mat.set_row(3, LVector3f(-row_width / 2.0, 0, posy));
-      lr[0] = max(lr[0], row_width / 2);
-      ul[0] = min(ul[0], -row_width / 2);
+      float half_row_width=0.5f*row_width;
+      mat.set_row(3, LVector3f(-half_row_width, 0.0f, posy));
+      lr[0] = max(lr[0], half_row_width);
+      ul[0] = min(ul[0], -half_row_width);
     }
     }
 
 
     // Also apply whatever slant the user has asked for to the entire
     // Also apply whatever slant the user has asked for to the entire
     // row.  This is an X shear.
     // row.  This is an X shear.
-    if (_slant != 0.0) {
-      LMatrix4f shear(1, 0, 0, 0,
-                      0, 1, 0, 0,
-                      _slant, 0, 1, 0,
-                      0, 0, 0, 1);
+    if (_slant != 0.0f) {
+      LMatrix4f shear(1.0f, 0.0f, 0.0f, 0.0f,
+                      0.0f, 1.0f, 0.0f, 0.0f,
+                      _slant, 0.0f, 1.0f, 0.0f,
+                      0.0f, 0.0f, 0.0f, 1.0f);
       mat = shear * mat;
       mat = shear * mat;
     }
     }
 
 
@@ -549,7 +550,7 @@ assemble_text(const char *source, LVector2f &ul, LVector2f &lr,
     num_rows++;
     num_rows++;
   }
   }
 
 
-  lr[1] = posy + 0.8 * line_height;
+  lr[1] = posy + 0.8f * line_height;
 
 
   return root_node;
   return root_node;
 }
 }
@@ -563,13 +564,13 @@ assemble_text(const char *source, LVector2f &ul, LVector2f &lr,
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 float TextNode::
 float TextNode::
 measure_row(const char *&source) {
 measure_row(const char *&source) {
-  float xpos = 0.0;
+  float xpos = 0.0f;
   while (*source != '\0' && *source != '\n') {
   while (*source != '\0' && *source != '\n') {
     int character = (unsigned char)*source;
     int character = (unsigned char)*source;
 
 
     if (character == ' ') {
     if (character == ' ') {
       // A space is a special case.
       // A space is a special case.
-      xpos += 0.25;
+      xpos += 0.25f;
 
 
     } else {
     } else {
       // A printable character.
       // A printable character.
@@ -598,10 +599,10 @@ measure_text(const char *source, LVector2f &ul, LVector2f &lr,
   nassertv(_font != (TextFont *)NULL);
   nassertv(_font != (TextFont *)NULL);
   float line_height = get_line_height();
   float line_height = get_line_height();
 
 
-  ul.set(0.0, 0.8 * line_height);
-  lr.set(0.0, 0.0);
+  ul.set(0.0f, 0.8f * line_height);
+  lr.set(0.0f, 0.0f);
 
 
-  float posy = 0.0;
+  float posy = 0.0f;
   while (*source != '\0') {
   while (*source != '\0') {
     float row_width = measure_row(source);
     float row_width = measure_row(source);
     if (*source != '\0') {
     if (*source != '\0') {
@@ -616,15 +617,17 @@ measure_text(const char *source, LVector2f &ul, LVector2f &lr,
       ul[0] = min(ul[0], -row_width);
       ul[0] = min(ul[0], -row_width);
 
 
     } else {
     } else {
-      lr[0] = max(lr[0], row_width / 2);
-      ul[0] = min(ul[0], -row_width / 2);
+      float half_row_width=0.5f*row_width;
+
+      lr[0] = max(lr[0], half_row_width);
+      ul[0] = min(ul[0], -half_row_width);
     }
     }
 
 
     posy -= line_height;
     posy -= line_height;
     num_rows++;
     num_rows++;
   }
   }
 
 
-  lr[1] = posy + 0.8 * line_height;
+  lr[1] = posy + 0.8f * line_height;
 }
 }
 
 
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
@@ -643,19 +646,19 @@ make_frame() {
   float top = dimensions[3];
   float top = dimensions[3];
 
 
   GeomLinestrip *geoset = new GeomLinestrip;
   GeomLinestrip *geoset = new GeomLinestrip;
-  PTA_int lengths(0);
+  PTA_int lengths=PTA_int::empty_array(0);
   PTA_Vertexf verts;
   PTA_Vertexf verts;
   lengths.push_back(5);
   lengths.push_back(5);
-  verts.push_back(Vertexf(left, 0.0, top));
-  verts.push_back(Vertexf(left, 0.0, bottom));
-  verts.push_back(Vertexf(right, 0.0, bottom));
-  verts.push_back(Vertexf(right, 0.0, top));
-  verts.push_back(Vertexf(left, 0.0, top));
+  verts.push_back(Vertexf(left, 0.0f, top));
+  verts.push_back(Vertexf(left, 0.0f, bottom));
+  verts.push_back(Vertexf(right, 0.0f, bottom));
+  verts.push_back(Vertexf(right, 0.0f, top));
+  verts.push_back(Vertexf(left, 0.0f, top));
 
 
   geoset->set_num_prims(1);
   geoset->set_num_prims(1);
   geoset->set_lengths(lengths);
   geoset->set_lengths(lengths);
 
 
-  geoset->set_coords(verts, G_PER_VERTEX);
+  geoset->set_coords(verts);
   geoset->set_width(_frame_width);
   geoset->set_width(_frame_width);
   frame_geode->add_geom(geoset);
   frame_geode->add_geom(geoset);
 
 
@@ -663,7 +666,7 @@ make_frame() {
     GeomPoint *geoset = new GeomPoint;
     GeomPoint *geoset = new GeomPoint;
 
 
     geoset->set_num_prims(4);
     geoset->set_num_prims(4);
-    geoset->set_coords(verts, G_PER_VERTEX);
+    geoset->set_coords(verts);
     geoset->set_size(_frame_width);
     geoset->set_size(_frame_width);
     frame_geode->add_geom(geoset);
     frame_geode->add_geom(geoset);
   }
   }
@@ -687,26 +690,26 @@ make_card() {
   float top = dimensions[3];
   float top = dimensions[3];
 
 
   GeomTristrip *geoset = new GeomTristrip;
   GeomTristrip *geoset = new GeomTristrip;
-  PTA_int lengths(0);
+  PTA_int lengths=PTA_int::empty_array(0);
   lengths.push_back(4);
   lengths.push_back(4);
 
 
   PTA_Vertexf verts;
   PTA_Vertexf verts;
-  verts.push_back(Vertexf::rfu(left, 0.02, top));
-  verts.push_back(Vertexf::rfu(left, 0.02, bottom));
-  verts.push_back(Vertexf::rfu(right, 0.02, top));
-  verts.push_back(Vertexf::rfu(right, 0.02, bottom));
+  verts.push_back(Vertexf::rfu(left, 0.02f, top));
+  verts.push_back(Vertexf::rfu(left, 0.02f, bottom));
+  verts.push_back(Vertexf::rfu(right, 0.02f, top));
+  verts.push_back(Vertexf::rfu(right, 0.02f, bottom));
 
 
   geoset->set_num_prims(1);
   geoset->set_num_prims(1);
   geoset->set_lengths(lengths);
   geoset->set_lengths(lengths);
 
 
-  geoset->set_coords(verts, G_PER_VERTEX);
+  geoset->set_coords(verts);
 
 
   if (has_card_texture()) {
   if (has_card_texture()) {
     PTA_TexCoordf uvs;
     PTA_TexCoordf uvs;
-    uvs.push_back(TexCoordf(0.0, 1.0));
-    uvs.push_back(TexCoordf(0.0, 0.0));
-    uvs.push_back(TexCoordf(1.0, 1.0));
-    uvs.push_back(TexCoordf(1.0, 0.0));
+    uvs.push_back(TexCoordf(0.0f, 1.0f));
+    uvs.push_back(TexCoordf(0.0f, 0.0f));
+    uvs.push_back(TexCoordf(1.0f, 1.0f));
+    uvs.push_back(TexCoordf(1.0f, 0.0f));
 
 
     geoset->set_texcoords(uvs, G_PER_VERTEX);
     geoset->set_texcoords(uvs, G_PER_VERTEX);
   }
   }
@@ -749,29 +752,29 @@ make_card_with_border() {
 
 
   PTA_Vertexf verts;
   PTA_Vertexf verts;
   // verts 1,2,3,4
   // verts 1,2,3,4
-  verts.push_back(Vertexf::rfu(left, 0.02, top));
-  verts.push_back(Vertexf::rfu(left, 0.02, top - _card_border_size));
-  verts.push_back(Vertexf::rfu(left + _card_border_size, 0.02, top));
-  verts.push_back(Vertexf::rfu(left + _card_border_size, 0.02,
+  verts.push_back(Vertexf::rfu(left, 0.02f, top));
+  verts.push_back(Vertexf::rfu(left, 0.02f, top - _card_border_size));
+  verts.push_back(Vertexf::rfu(left + _card_border_size, 0.02f, top));
+  verts.push_back(Vertexf::rfu(left + _card_border_size, 0.02f,
                                top - _card_border_size));
                                top - _card_border_size));
   // verts 5,6,7,8
   // verts 5,6,7,8
-  verts.push_back(Vertexf::rfu(right - _card_border_size, 0.02, top));
-  verts.push_back(Vertexf::rfu(right - _card_border_size, 0.02,
+  verts.push_back(Vertexf::rfu(right - _card_border_size, 0.02f, top));
+  verts.push_back(Vertexf::rfu(right - _card_border_size, 0.02f,
                                top - _card_border_size));
                                top - _card_border_size));
-  verts.push_back(Vertexf::rfu(right, 0.02, top));
-  verts.push_back(Vertexf::rfu(right, 0.02, top - _card_border_size));
+  verts.push_back(Vertexf::rfu(right, 0.02f, top));
+  verts.push_back(Vertexf::rfu(right, 0.02f, top - _card_border_size));
   // verts 9,10,11,12
   // verts 9,10,11,12
-  verts.push_back(Vertexf::rfu(left, 0.02, bottom + _card_border_size));
-  verts.push_back(Vertexf::rfu(left, 0.02, bottom));
-  verts.push_back(Vertexf::rfu(left + _card_border_size, 0.02,
+  verts.push_back(Vertexf::rfu(left, 0.02f, bottom + _card_border_size));
+  verts.push_back(Vertexf::rfu(left, 0.02f, bottom));
+  verts.push_back(Vertexf::rfu(left + _card_border_size, 0.02f,
                                bottom + _card_border_size));
                                bottom + _card_border_size));
-  verts.push_back(Vertexf::rfu(left + _card_border_size, 0.02, bottom));
+  verts.push_back(Vertexf::rfu(left + _card_border_size, 0.02f, bottom));
   // verts 13,14,15,16
   // verts 13,14,15,16
-  verts.push_back(Vertexf::rfu(right - _card_border_size, 0.02,
+  verts.push_back(Vertexf::rfu(right - _card_border_size, 0.02f,
                                bottom + _card_border_size));
                                bottom + _card_border_size));
-  verts.push_back(Vertexf::rfu(right - _card_border_size, 0.02, bottom));
-  verts.push_back(Vertexf::rfu(right, 0.02, bottom + _card_border_size));
-  verts.push_back(Vertexf::rfu(right, 0.02, bottom));
+  verts.push_back(Vertexf::rfu(right - _card_border_size, 0.02f, bottom));
+  verts.push_back(Vertexf::rfu(right, 0.02f, bottom + _card_border_size));
+  verts.push_back(Vertexf::rfu(right, 0.02f, bottom));
 
 
   PTA_ushort indices;
   PTA_ushort indices;
   // tristrip #1
   // tristrip #1
@@ -805,30 +808,30 @@ make_card_with_border() {
   geoset->set_num_prims(3);
   geoset->set_num_prims(3);
   geoset->set_lengths(lengths);
   geoset->set_lengths(lengths);
 
 
-  geoset->set_coords(verts, G_PER_VERTEX, indices);
+  geoset->set_coords(verts,indices);
 
 
   if (has_card_texture()) {
   if (has_card_texture()) {
     PTA_TexCoordf uvs;
     PTA_TexCoordf uvs;
-    uvs.push_back(TexCoordf(0.0, 1.0)); //1
-    uvs.push_back(TexCoordf(0.0, 1.0 - _card_border_uv_portion)); //2
-    uvs.push_back(TexCoordf(0.0 + _card_border_uv_portion, 1.0)); //3
-    uvs.push_back(TexCoordf(0.0 + _card_border_uv_portion,
-      1.0 - _card_border_uv_portion)); //4
-    uvs.push_back(TexCoordf( 1.0 -_card_border_uv_portion, 1.0)); //5
-    uvs.push_back(TexCoordf( 1.0 -_card_border_uv_portion,
-      1.0 - _card_border_uv_portion)); //6
-    uvs.push_back(TexCoordf(1.0, 1.0)); //7
-    uvs.push_back(TexCoordf(1.0, 1.0 - _card_border_uv_portion)); //8
-
-    uvs.push_back(TexCoordf(0.0, _card_border_uv_portion)); //9
-    uvs.push_back(TexCoordf(0.0, 0.0)); //10
+    uvs.push_back(TexCoordf(0.0f, 1.0f)); //1
+    uvs.push_back(TexCoordf(0.0f, 1.0f - _card_border_uv_portion)); //2
+    uvs.push_back(TexCoordf(0.0f + _card_border_uv_portion, 1.0f)); //3
+    uvs.push_back(TexCoordf(0.0f + _card_border_uv_portion,
+      1.0f - _card_border_uv_portion)); //4
+    uvs.push_back(TexCoordf( 1.0f -_card_border_uv_portion, 1.0f)); //5
+    uvs.push_back(TexCoordf( 1.0f -_card_border_uv_portion,
+      1.0f - _card_border_uv_portion)); //6
+    uvs.push_back(TexCoordf(1.0f, 1.0f)); //7
+    uvs.push_back(TexCoordf(1.0f, 1.0f - _card_border_uv_portion)); //8
+
+    uvs.push_back(TexCoordf(0.0f, _card_border_uv_portion)); //9
+    uvs.push_back(TexCoordf(0.0f, 0.0f)); //10
     uvs.push_back(TexCoordf(_card_border_uv_portion, _card_border_uv_portion)); //11
     uvs.push_back(TexCoordf(_card_border_uv_portion, _card_border_uv_portion)); //11
-    uvs.push_back(TexCoordf(_card_border_uv_portion, 0.0)); //12
+    uvs.push_back(TexCoordf(_card_border_uv_portion, 0.0f)); //12
 
 
-    uvs.push_back(TexCoordf(1.0 - _card_border_uv_portion, _card_border_uv_portion));//13
-    uvs.push_back(TexCoordf(1.0 - _card_border_uv_portion, 0.0));//14
-    uvs.push_back(TexCoordf(1.0, _card_border_uv_portion));//15
-    uvs.push_back(TexCoordf(1.0, 0.0));//16
+    uvs.push_back(TexCoordf(1.0f - _card_border_uv_portion, _card_border_uv_portion));//13
+    uvs.push_back(TexCoordf(1.0f - _card_border_uv_portion, 0.0f));//14
+    uvs.push_back(TexCoordf(1.0f, _card_border_uv_portion));//15
+    uvs.push_back(TexCoordf(1.0f, 0.0f));//16
 
 
     // we can use same ref's as before (same order)
     // we can use same ref's as before (same order)
     geoset->set_texcoords(uvs, G_PER_VERTEX, indices);
     geoset->set_texcoords(uvs, G_PER_VERTEX, indices);