mirror of
https://github.com/panda3d/panda3d.git
synced 2025-09-30 16:58:40 -04:00
*** empty log message ***
This commit is contained in:
parent
77c8759668
commit
571e04feae
@ -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;
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user