From 47fdb9b748a807a672d1ffe5c677121fbae12510 Mon Sep 17 00:00:00 2001 From: rdb Date: Sat, 7 Nov 2015 16:42:06 +0100 Subject: [PATCH 1/2] Correct position of viewing axis for off-axis lens frustum (with thanks to tobspr) --- panda/src/gobj/lens.cxx | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/panda/src/gobj/lens.cxx b/panda/src/gobj/lens.cxx index c22174493c..b0e050a5e0 100644 --- a/panda/src/gobj/lens.cxx +++ b/panda/src/gobj/lens.cxx @@ -1817,12 +1817,13 @@ do_define_geom_data(CData *cdata) { if (!is_linear()) { num_segments = lens_geom_segments; } - + if (cdata->_geom_data == (GeomVertexData *)NULL) { cdata->_geom_data = new GeomVertexData ("lens", GeomVertexFormat::get_v3(), Geom::UH_dynamic); } + cdata->_geom_data->unclean_set_num_rows(num_segments * 8 + 2); GeomVertexWriter vertex(cdata->_geom_data, InternalName::get_vertex()); LPoint3 near_point, far_point; @@ -1835,8 +1836,8 @@ do_define_geom_data(CData *cdata) { // Hey, this point is off the lens! Can't do a frustum. return 0; } - vertex.add_data3(near_point); - vertex.add_data3(far_point); + vertex.set_data3(near_point); + vertex.set_data3(far_point); // Upper right, right edge. LPoint3 p2(1.0f, 1.0f - t, 0.0f); @@ -1844,8 +1845,8 @@ do_define_geom_data(CData *cdata) { // Hey, this point is off the lens! Can't do a frustum. return 0; } - vertex.add_data3(near_point); - vertex.add_data3(far_point); + vertex.set_data3(near_point); + vertex.set_data3(far_point); // Lower right, bottom edge. LPoint3 p3(1.0f - t, -1.0f, 0.0f); @@ -1853,8 +1854,8 @@ do_define_geom_data(CData *cdata) { // Hey, this point is off the lens! Can't do a frustum. return 0; } - vertex.add_data3(near_point); - vertex.add_data3(far_point); + vertex.set_data3(near_point); + vertex.set_data3(far_point); // Lower left, left edge. LPoint3 p4(-1.0f, -1.0f + t, 0.0f); @@ -1862,19 +1863,20 @@ do_define_geom_data(CData *cdata) { // Hey, this point is off the lens! Can't do a frustum. return 0; } - vertex.add_data3(near_point); - vertex.add_data3(far_point); + vertex.set_data3(near_point); + vertex.set_data3(far_point); } - // Finally, add one more pair for the viewing axis (or more - // specifically, the center of the lens). - LPoint3 pc(-cdata->_film_offset[0], -cdata->_film_offset[1], 0.0f); + + // Finally, add one more pair for the viewing axis (or more specifically, the + // center of the lens). + LPoint3 pc(0); if (!do_extrude(cdata, pc, near_point, far_point)) { - vertex.add_data3(0.0f, 0.0f, 0.0f); - vertex.add_data3(0.0f, 0.0f, 0.0f); + vertex.set_data3(0.0f, 0.0f, 0.0f); + vertex.set_data3(0.0f, 0.0f, 0.0f); } else { - vertex.add_data3(near_point); - vertex.add_data3(far_point); + vertex.set_data3(near_point); + vertex.set_data3(far_point); } return num_segments; From 6a263746cd0a7fad2e9cc745e54c009737cf6e9b Mon Sep 17 00:00:00 2001 From: rdb Date: Sat, 7 Nov 2015 21:55:51 +0100 Subject: [PATCH 2/2] Fix Cg crash at shutdown when multithreaded pipeline is active --- panda/src/display/graphicsStateGuardian.cxx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/panda/src/display/graphicsStateGuardian.cxx b/panda/src/display/graphicsStateGuardian.cxx index 9fbe8b9606..5faf282e53 100644 --- a/panda/src/display/graphicsStateGuardian.cxx +++ b/panda/src/display/graphicsStateGuardian.cxx @@ -2980,7 +2980,6 @@ close_gsg() { display_cat.debug() << this << " close_gsg " << get_type() << "\n"; } - free_pointers(); // As tempting as it may be to try to release all the textures and // geoms now, we can't, because we might not be the currently-active @@ -3005,6 +3004,8 @@ close_gsg() { #ifdef DO_PSTATS _pending_timer_queries.clear(); #endif + + free_pointers(); } ////////////////////////////////////////////////////////////////////