Browse Source

Merge branch 'release/1.9.x'

rdb 10 years ago
parent
commit
f658283911

+ 10 - 1
doc/man/pview.1

@@ -1,4 +1,4 @@
-.TH PVIEW 1 "27 December 2014" "" Panda3D
+.TH PVIEW 1 "1 May 2015" "" Panda3D
 .SH NAME
 pview \- quickly view a Panda model and/or animation
 .SH SYNOPSIS
@@ -43,6 +43,15 @@ exit.
 Delete the model files after loading them (presumably this option
 will only be used when loading a temporary model file).
 .TP
+.B \-L
+Enable lighting in the scene.  This can also be achieved with 
+the 'l' hotkey at runtime.
+.TP
+.BI "\-P " pipename
+Select the given graphics pipe for the window, rather than using
+the platform default.  The allowed values for <pipe> are those 
+from the Config.prc variables 'load-display' and 'aux-display'.
+.TP
 .B \-V
 Report the current version of Panda, and exit.
 .TP

+ 3 - 3
panda/src/display/pStatGPUTimer.I

@@ -25,7 +25,7 @@ PStatGPUTimer(GraphicsStateGuardian *gsg, PStatCollector &collector) :
   PStatTimer(collector),
   _gsg(gsg)
 {
-  if (gsg->get_timer_queries_active()) {
+  if (gsg->get_timer_queries_active() && collector.is_active()) {
     gsg->issue_timer_query(collector.get_index());
     //cerr << "issuing " << collector << " active " << collector.is_active() << "\n";
   }
@@ -41,7 +41,7 @@ PStatGPUTimer(GraphicsStateGuardian *gsg, PStatCollector &collector, Thread *cur
   PStatTimer(collector, current_thread),
   _gsg(gsg)
 {
-  if (gsg->get_timer_queries_active()) {
+  if (gsg->get_timer_queries_active() && collector.is_active()) {
     gsg->issue_timer_query(collector.get_index());
   }
 }
@@ -53,7 +53,7 @@ PStatGPUTimer(GraphicsStateGuardian *gsg, PStatCollector &collector, Thread *cur
 ////////////////////////////////////////////////////////////////////
 INLINE PStatGPUTimer::
 ~PStatGPUTimer() {
-  if (_gsg->get_timer_queries_active()) {
+  if (_gsg->get_timer_queries_active() && _collector.is_active()) {
     _gsg->issue_timer_query(_collector.get_index() | 0x8000);
   }
 }

+ 10 - 7
panda/src/glstuff/glGraphicsStateGuardian_src.cxx

@@ -3803,7 +3803,7 @@ disable_standard_vertex_arrays() {
 ////////////////////////////////////////////////////////////////////
 bool CLP(GraphicsStateGuardian)::
 draw_triangles(const GeomPrimitivePipelineReader *reader, bool force) {
-  PStatGPUTimer timer(this, _draw_primitive_pcollector, reader->get_current_thread());
+  //PStatGPUTimer timer(this, _draw_primitive_pcollector, reader->get_current_thread());
 
 #ifndef NDEBUG
   if (GLCAT.is_spam()) {
@@ -3870,7 +3870,7 @@ draw_triangles(const GeomPrimitivePipelineReader *reader, bool force) {
 ////////////////////////////////////////////////////////////////////
 bool CLP(GraphicsStateGuardian)::
 draw_tristrips(const GeomPrimitivePipelineReader *reader, bool force) {
-  PStatGPUTimer timer(this, _draw_primitive_pcollector, reader->get_current_thread());
+  //PStatGPUTimer timer(this, _draw_primitive_pcollector, reader->get_current_thread());
 
   report_my_gl_errors();
 
@@ -3997,7 +3997,8 @@ draw_tristrips(const GeomPrimitivePipelineReader *reader, bool force) {
 ////////////////////////////////////////////////////////////////////
 bool CLP(GraphicsStateGuardian)::
 draw_trifans(const GeomPrimitivePipelineReader *reader, bool force) {
-  PStatGPUTimer timer(this, _draw_primitive_pcollector, reader->get_current_thread());
+  //PStatGPUTimer timer(this, _draw_primitive_pcollector, reader->get_current_thread());
+
 #ifndef NDEBUG
   if (GLCAT.is_spam()) {
     GLCAT.spam() << "draw_trifans: " << *(reader->get_object()) << "\n";
@@ -4077,7 +4078,7 @@ draw_trifans(const GeomPrimitivePipelineReader *reader, bool force) {
 ////////////////////////////////////////////////////////////////////
 bool CLP(GraphicsStateGuardian)::
 draw_patches(const GeomPrimitivePipelineReader *reader, bool force) {
-  PStatGPUTimer timer(this, _draw_primitive_pcollector, reader->get_current_thread());
+  //PStatGPUTimer timer(this, _draw_primitive_pcollector, reader->get_current_thread());
 
 #ifndef NDEBUG
   if (GLCAT.is_spam()) {
@@ -4153,7 +4154,8 @@ draw_patches(const GeomPrimitivePipelineReader *reader, bool force) {
 ////////////////////////////////////////////////////////////////////
 bool CLP(GraphicsStateGuardian)::
 draw_lines(const GeomPrimitivePipelineReader *reader, bool force) {
-  PStatGPUTimer timer(this, _draw_primitive_pcollector, reader->get_current_thread());
+  //PStatGPUTimer timer(this, _draw_primitive_pcollector, reader->get_current_thread());
+
 #ifndef NDEBUG
   if (GLCAT.is_spam()) {
     GLCAT.spam() << "draw_lines: " << *(reader->get_object()) << "\n";
@@ -4217,7 +4219,7 @@ draw_lines(const GeomPrimitivePipelineReader *reader, bool force) {
 ////////////////////////////////////////////////////////////////////
 bool CLP(GraphicsStateGuardian)::
 draw_linestrips(const GeomPrimitivePipelineReader *reader, bool force) {
-  PStatGPUTimer timer(this, _draw_primitive_pcollector, reader->get_current_thread());
+  //PStatGPUTimer timer(this, _draw_primitive_pcollector, reader->get_current_thread());
 
   report_my_gl_errors();
 
@@ -4341,7 +4343,8 @@ draw_linestrips(const GeomPrimitivePipelineReader *reader, bool force) {
 ////////////////////////////////////////////////////////////////////
 bool CLP(GraphicsStateGuardian)::
 draw_points(const GeomPrimitivePipelineReader *reader, bool force) {
-  PStatGPUTimer timer(this, _draw_primitive_pcollector, reader->get_current_thread());
+  //PStatGPUTimer timer(this, _draw_primitive_pcollector, reader->get_current_thread());
+
 #ifndef NDEBUG
   if (GLCAT.is_spam()) {
     GLCAT.spam() << "draw_points: " << *(reader->get_object()) << "\n";

+ 31 - 2
panda/src/testbed/pview.cxx

@@ -26,6 +26,7 @@
 #include "virtualFileSystem.h"
 #include "panda_getopt.h"
 #include "preprocess_argv.h"
+#include "graphicsPipeSelection.h"
 
 // By including checkPandaVersion.h, we guarantee that runtime
 // attempts to run pview will fail if it inadvertently links with the
@@ -209,6 +210,15 @@ help() {
     "      Delete the model files after loading them (presumably this option\n"
     "      will only be used when loading a temporary model file).\n\n"
 
+    "  -L\n"
+    "      Enable lighting in the scene.  This can also be achieved with\n"
+    "      the 'l' hotkey at runtime.\n\n"
+
+    "  -P <pipe>\n"
+    "      Select the given graphics pipe for the window, rather than using\n"
+    "      the platform default.  The allowed values for <pipe> are those\n"
+    "      from the Config.prc variables 'load-display' and 'aux-display'.\n\n"
+
     "  -V\n"
     "      Report the current version of Panda, and exit.\n\n"
     
@@ -241,10 +251,12 @@ main(int argc, char **argv) {
                               PartGroup::HMF_ok_anim_extra;
   Filename screenshotfn;
   bool delete_models = false;
+  bool apply_lighting = false;
+  PointerTo<GraphicsPipe> pipe = NULL;
 
   extern char *optarg;
   extern int optind;
-  static const char *optflags = "acls:DVhi";
+  static const char *optflags = "acls:DVhiLP:";
   int flag = getopt(argc, argv, optflags);
 
   while (flag != EOF) {
@@ -275,6 +287,19 @@ main(int argc, char **argv) {
       delete_models = true;
       break;
 
+    case 'L':
+      apply_lighting = true;
+      break;
+
+    case 'P': {
+      pipe = GraphicsPipeSelection::get_global_ptr()->make_module_pipe(optarg);
+      if (!pipe) {
+        cerr << "No such pipe '" << optarg << "' available." << endl;
+        return 1;
+      }
+      break;
+    }
+
     case 'V':
       report_version();
       return 1;
@@ -296,7 +321,7 @@ main(int argc, char **argv) {
   argc -= (optind - 1);
   argv += (optind - 1);
 
-  WindowFramework *window = framework.open_window();
+  WindowFramework *window = framework.open_window(pipe, NULL);
   if (window != (WindowFramework *)NULL) {
     // We've successfully opened a window.
 
@@ -348,6 +373,10 @@ main(int argc, char **argv) {
     
     loading_np.remove_node();
 
+    if (apply_lighting) {
+      window->set_lighting(true);
+    }
+
     if (auto_center) {
       window->center_trackball(framework.get_models());
     }