From e344a6dc1e4d0c64bf5cf8e262abcb043797e4ee Mon Sep 17 00:00:00 2001 From: David Rose Date: Wed, 7 Feb 2001 00:22:45 +0000 Subject: [PATCH] *** empty log message *** --- direct/src/showbase/ShowBase.py | 9 +++++- direct/src/showbase/showBase.cxx | 47 +++++++++++--------------------- direct/src/showbase/showBase.h | 8 ++---- 3 files changed, 26 insertions(+), 38 deletions(-) diff --git a/direct/src/showbase/ShowBase.py b/direct/src/showbase/ShowBase.py index 43b7a1425d..b700893a74 100644 --- a/direct/src/showbase/ShowBase.py +++ b/direct/src/showbase/ShowBase.py @@ -55,9 +55,13 @@ class ShowBase: self.win = makeGraphicsWindow(self.pipe, self.renderTop.node(), self.camera.node(), - self.dataRoot.node(), self.initialState) + # This is a placeholder for a CollisionTraverser. If someone + # stores a CollisionTraverser pointer here, we'll traverse it + # in the igloop task. + self.cTrav = 0 + # This is a list of cams associated with the display region's cameras self.camList = [] for camera in self.cameraList: @@ -187,6 +191,9 @@ class ShowBase: self.tkroot = None def igloop(self, state): + directTraverseDataGraph(self.dataRoot.node()) + if self.cTrav: + self.cTrav.traverse(self.render) self.win.update() return Task.cont diff --git a/direct/src/showbase/showBase.cxx b/direct/src/showbase/showBase.cxx index 2a8ed76dc1..b203207a45 100644 --- a/direct/src/showbase/showBase.cxx +++ b/direct/src/showbase/showBase.cxx @@ -34,9 +34,9 @@ #include #include #include -#include #include #include +#include ConfigureDef(config_showbase); ConfigureFn(config_showbase) { @@ -48,8 +48,6 @@ get_particle_path() { return get_config_path("particle-path", particle_path); } -static CollisionTraverser *collision_traverser = NULL; - // Default channel config std::string chan_config = "single"; std::string window_title = "Panda3D"; @@ -67,35 +65,24 @@ void render_frame(GraphicsPipe *pipe, class WindowCallback : public GraphicsWindow::Callback { public: - WindowCallback(GraphicsPipe *pipe, Node *render, Node *data_root, - NodeAttributes *initial_state) : + WindowCallback(GraphicsPipe *pipe, Node *render, + NodeAttributes *initial_state) : _pipe(pipe), _render(render), - _data_root(data_root), _initial_state(initial_state), _app_traverser(RenderRelation::get_class_type()) { } virtual ~WindowCallback() { } virtual void draw(bool) { _app_traverser.traverse(_render); - // Initiate the data traversal, to send device data down its - // respective pipelines. - traverse_data_graph(_data_root); - if (collision_traverser != (CollisionTraverser *)NULL) { - collision_traverser->traverse(_render); - } render_frame(_pipe, *_initial_state); } virtual void idle(void) { - // We used to do the collision traversal here, but it's better to - // do it immediately before the draw, so we don't get one frame of - // lag in collision updates. } PT(GraphicsPipe) _pipe; PT(Node) _render; - PT(Node) _data_root; NodeAttributes *_initial_state; AppTraverser _app_traverser; }; @@ -127,7 +114,6 @@ PT(GraphicsPipe) make_graphics_pipe() { PT(GraphicsWindow) make_graphics_window(GraphicsPipe *pipe, NamedNode *render, NamedNode *camera, - NamedNode *data_root, NodeAttributes &initial_state) { PT(GraphicsWindow) main_win; ChanCfgOverrides override; @@ -152,7 +138,7 @@ PT(GraphicsWindow) make_graphics_window(GraphicsPipe *pipe, assert(main_win != (GraphicsWindow*)0L); WindowCallback *wcb = - new WindowCallback(pipe, render, data_root, &initial_state); + new WindowCallback(pipe, render, &initial_state); // Set draw and idle callbacks main_win->set_draw_callback(wcb); @@ -217,20 +203,18 @@ add_render_layer(GraphicsWindow *win, Node *render_top, Camera *camera) { dr->set_camera(camera); } -// Enable the collision traversal using a particular traverser. -void set_collision_traverser(CollisionTraverser *traverser) { - collision_traverser = traverser; -} -CollisionTraverser *get_collision_traverser() { - return collision_traverser; -} -// Stop the collision traversal. -void clear_collision_traverser() { - collision_traverser = NULL; + +// This function is just a simple wrapper around traverse_data_graph() +// in Panda. It's just here for the very short term, until everyone +// can build a fresh Panda with traverse_data_graph() properly +// exposed. +void +direct_traverse_data_graph(Node *node) { + traverse_data_graph(node); } - -void toggle_wireframe(NodeAttributes &initial_state) { +void +toggle_wireframe(NodeAttributes &initial_state) { static bool wireframe_mode = false; wireframe_mode = !wireframe_mode; @@ -255,7 +239,8 @@ void toggle_wireframe(NodeAttributes &initial_state) { } -void toggle_backface(NodeAttributes &initial_state) { +void +toggle_backface(NodeAttributes &initial_state) { static bool backface_mode = false; // Toggle the state variable diff --git a/direct/src/showbase/showBase.h b/direct/src/showbase/showBase.h index 4785846385..dd0447f59d 100644 --- a/direct/src/showbase/showBase.h +++ b/direct/src/showbase/showBase.h @@ -33,17 +33,13 @@ EXPCL_DIRECT PT(GraphicsWindow) make_graphics_window(GraphicsPipe *pipe, NamedNode *render, NamedNode *camera, - NamedNode *data_root, - NodeAttributes &initial_state - ); + NodeAttributes &initial_state); EXPCL_DIRECT NodePath setup_panda_2d(GraphicsWindow *win, const string &name); EXPCL_DIRECT void add_render_layer(GraphicsWindow *win, Node *render_top, Camera *camera); -EXPCL_DIRECT void set_collision_traverser(CollisionTraverser *traverser); -EXPCL_DIRECT CollisionTraverser *get_collision_traverser(); -EXPCL_DIRECT void clear_collision_traverser(); +EXPCL_DIRECT void direct_traverse_data_graph(Node *node); EXPCL_DIRECT void toggle_wireframe(NodeAttributes &initial_state); EXPCL_DIRECT void toggle_texture(NodeAttributes &initial_state);