34
34
TypeHandle MeshDrawer::_type_handle;
35
35
36
36
PN_stdfloat randFloat () {
37
- return ((PN_stdfloat) rand () / (PN_stdfloat) 0x7fffffff );
37
+ return ((PN_stdfloat)rand () / (PN_stdfloat)RAND_MAX );
38
38
}
39
39
40
40
// //////////////////////////////////////////////////////////////////
@@ -45,39 +45,43 @@ PN_stdfloat randFloat() {
45
45
void MeshDrawer::generator (int budget) {
46
46
// create enough triangles for budget:
47
47
_vdata = new GeomVertexData (_root.get_name (), GeomVertexFormat::get_v3n3c4t2 (), Geom::UH_static);// UH_dynamic);
48
- GeomVertexWriter *tvertex = new GeomVertexWriter (_vdata, " vertex" );
49
- GeomVertexWriter *tnormal = new GeomVertexWriter (_vdata, " normal" );
50
- GeomVertexWriter *tuv = new GeomVertexWriter (_vdata, " texcoord" );
51
- GeomVertexWriter *tcolor = new GeomVertexWriter (_vdata, " color" );
52
- _prim = new GeomTriangles (Geom::UH_static);
53
-
54
- // iterate and fill _up a geom with random data so that it will
55
- // not be optimized out by panda3d system
56
- for (int i = 0 ; i < budget; i++) {
57
- for ( int vert = 0 ; vert < 3 ; vert++) {
58
- LVector3 vec3 = LVector3 (randFloat ()+1000 ,randFloat (),randFloat ())*.001 ;
59
- LVector4 vec4 = LVector4 (1 ,1 ,1 ,randFloat ());
60
- LVector2 vec2 = LVector2 (0 ,randFloat ());
61
- tvertex->add_data3 (vec3);
62
- tcolor->add_data4 (vec4);
63
- tuv->add_data2 (vec2);
64
- tnormal->add_data3 (vec3);
48
+ _vdata->unclean_set_num_rows (budget * 3 );
49
+
50
+ {
51
+ GeomVertexWriter tvertex (_vdata, " vertex" );
52
+ GeomVertexWriter tnormal (_vdata, " normal" );
53
+ GeomVertexWriter tuv (_vdata, " texcoord" );
54
+ GeomVertexWriter tcolor (_vdata, " color" );
55
+
56
+ // iterate and fill _up a geom with random data so that it will not be
57
+ // optimized out by panda3d system
58
+ for (int i = 0 ; i < budget; i++) {
59
+ for (int vert = 0 ; vert < 3 ; vert++) {
60
+ LVector3 vec3 = LVector3 (randFloat ()+1000 ,randFloat (),randFloat ())*.001 ;
61
+ LVector4 vec4 = LVector4 (1 ,1 ,1 ,randFloat ());
62
+ LVector2 vec2 = LVector2 (0 ,randFloat ());
63
+ tvertex.set_data3 (vec3);
64
+ tcolor.set_data4 (vec4);
65
+ tuv.set_data2 (vec2);
66
+ tnormal.set_data3 (vec3);
67
+ }
65
68
}
66
- _prim->add_vertices (i * 3 , i * 3 + 1 , i * 3 + 2 );
67
69
}
70
+
68
71
// create our node and attach it to this node path
72
+ _prim = new GeomTriangles (Geom::UH_static);
73
+ _prim->add_next_vertices (budget * 3 );
69
74
_prim->close_primitive ();
70
75
_geom = new Geom (_vdata);
71
76
_geom->add_primitive (_prim);
72
- _geomnode = new GeomNode (" __MeshDrawer_GeomNode" );
77
+ if (_geomnode == NULL ) {
78
+ _geomnode = new GeomNode (" __MeshDrawer_GeomNode" );
79
+ _root.attach_new_node (_geomnode);
80
+ } else {
81
+ _geomnode->remove_all_geoms ();
82
+ }
73
83
_geomnode->add_geom (_geom);
74
- _root.attach_new_node (_geomnode);
75
84
_last_clear_index = budget;
76
-
77
- delete tvertex;
78
- delete tnormal;
79
- delete tuv;
80
- delete tcolor;
81
85
}
82
86
83
87
// //////////////////////////////////////////////////////////////////
@@ -492,8 +496,9 @@ link_segment(const LVector3 &pos, const LVector4 &frame,
492
496
LVector3 cam_stop3d = _camera.get_relative_point (_render, stop);
493
497
LPoint2 cam_stop2d = LVector2 ();
494
498
495
- PT (Camera) camera = DCAST (Camera, _camera.node ());
496
- PT (Lens) lens = camera->get_lens ();
499
+ const Camera *camera;
500
+ DCAST_INTO_V (camera, _camera.node ());
501
+ const Lens *lens = camera->get_lens ();
497
502
498
503
lens->project (cam_start3d, cam_start2d);
499
504
lens->project (cam_stop3d, cam_stop2d);
0 commit comments