Merge branch 'release/1.9.x'

This commit is contained in:
rdb 2015-05-03 20:48:06 +02:00
commit f658283911
4 changed files with 54 additions and 13 deletions

View File

@ -1,4 +1,4 @@
.TH PVIEW 1 "27 December 2014" "" Panda3D .TH PVIEW 1 "1 May 2015" "" Panda3D
.SH NAME .SH NAME
pview \- quickly view a Panda model and/or animation pview \- quickly view a Panda model and/or animation
.SH SYNOPSIS .SH SYNOPSIS
@ -43,6 +43,15 @@ exit.
Delete the model files after loading them (presumably this option Delete the model files after loading them (presumably this option
will only be used when loading a temporary model file). will only be used when loading a temporary model file).
.TP .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 .B \-V
Report the current version of Panda, and exit. Report the current version of Panda, and exit.
.TP .TP

View File

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

View File

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

View File

@ -26,6 +26,7 @@
#include "virtualFileSystem.h" #include "virtualFileSystem.h"
#include "panda_getopt.h" #include "panda_getopt.h"
#include "preprocess_argv.h" #include "preprocess_argv.h"
#include "graphicsPipeSelection.h"
// By including checkPandaVersion.h, we guarantee that runtime // By including checkPandaVersion.h, we guarantee that runtime
// attempts to run pview will fail if it inadvertently links with the // 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" " Delete the model files after loading them (presumably this option\n"
" will only be used when loading a temporary model file).\n\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" " -V\n"
" Report the current version of Panda, and exit.\n\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; PartGroup::HMF_ok_anim_extra;
Filename screenshotfn; Filename screenshotfn;
bool delete_models = false; bool delete_models = false;
bool apply_lighting = false;
PointerTo<GraphicsPipe> pipe = NULL;
extern char *optarg; extern char *optarg;
extern int optind; extern int optind;
static const char *optflags = "acls:DVhi"; static const char *optflags = "acls:DVhiLP:";
int flag = getopt(argc, argv, optflags); int flag = getopt(argc, argv, optflags);
while (flag != EOF) { while (flag != EOF) {
@ -275,6 +287,19 @@ main(int argc, char **argv) {
delete_models = true; delete_models = true;
break; 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': case 'V':
report_version(); report_version();
return 1; return 1;
@ -296,7 +321,7 @@ main(int argc, char **argv) {
argc -= (optind - 1); argc -= (optind - 1);
argv += (optind - 1); argv += (optind - 1);
WindowFramework *window = framework.open_window(); WindowFramework *window = framework.open_window(pipe, NULL);
if (window != (WindowFramework *)NULL) { if (window != (WindowFramework *)NULL) {
// We've successfully opened a window. // We've successfully opened a window.
@ -348,6 +373,10 @@ main(int argc, char **argv) {
loading_np.remove_node(); loading_np.remove_node();
if (apply_lighting) {
window->set_lighting(true);
}
if (auto_center) { if (auto_center) {
window->center_trackball(framework.get_models()); window->center_trackball(framework.get_models());
} }