*** empty log message ***

This commit is contained in:
David Rose 2000-12-16 01:11:37 +00:00
parent 77c8759668
commit 571e04feae
2 changed files with 22 additions and 27 deletions

View File

@ -57,47 +57,38 @@ void render_frame(GraphicsPipe *pipe,
throw_event("NewFrame");
}
// to be used with new display callback system
class DisplayCallback : public GraphicsWindow::Callback {
class WindowCallback : public GraphicsWindow::Callback {
public:
DisplayCallback(GraphicsPipe *pipe, Node *render, NodeAttributes *initial_state) :
WindowCallback(GraphicsPipe *pipe, Node *render, Node *data_root,
NodeAttributes *initial_state) :
_pipe(pipe),
_render(render),
_data_root(data_root),
_initial_state(initial_state),
_app_traverser(RenderRelation::get_class_type()) { }
virtual void draw(bool) {
_app_traverser.traverse(_render);
render_frame(_pipe, *_initial_state);
}
PT(GraphicsPipe) _pipe;
PT(Node) _render;
NodeAttributes *_initial_state;
AppTraverser _app_traverser;
};
// to be used with new display callback system
class IdleCallback : public GraphicsWindow::Callback {
public:
IdleCallback(Node *render, Node *data_root) {
_render = render;
_data_root = data_root;
}
virtual void idle(void) {
// 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;
};
@ -151,12 +142,12 @@ PT(GraphicsWindow) make_graphics_window(GraphicsPipe *pipe,
main_win = ChanConfig(pipe, conf, camera, render, override);
assert(main_win != (GraphicsWindow*)0L);
DisplayCallback *dcb = new DisplayCallback(pipe, render, &initial_state);
IdleCallback *icb = new IdleCallback(render, data_root);
WindowCallback *wcb =
new WindowCallback(pipe, render, data_root, &initial_state);
// Set draw and idle callbacks
main_win->set_draw_callback(dcb);
main_win->set_idle_callback(icb);
main_win->set_draw_callback(wcb);
main_win->set_idle_callback(wcb);
return main_win;
}
@ -207,6 +198,9 @@ setup_panda_2d(PT(GraphicsWindow) win) {
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;

View File

@ -42,6 +42,7 @@ EXPCL_DIRECT PT(GraphicsWindow)
EXPCL_DIRECT NodePath setup_panda_2d(PT(GraphicsWindow) win);
EXPCL_DIRECT void set_collision_traverser(CollisionTraverser *traverser);
EXPCL_DIRECT CollisionTraverser *get_collision_traverser();
EXPCL_DIRECT void clear_collision_traverser();
EXPCL_DIRECT void toggle_wireframe(NodeAttributes &initial_state);