mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-03 02:15:43 -04:00
pgraph prepare scene
This commit is contained in:
parent
2e1ba33307
commit
9e8307ca53
@ -43,6 +43,7 @@
|
|||||||
#include "qpsceneGraphReducer.h"
|
#include "qpsceneGraphReducer.h"
|
||||||
#include "textureCollection.h"
|
#include "textureCollection.h"
|
||||||
#include "globPattern.h"
|
#include "globPattern.h"
|
||||||
|
#include "config_gobj.h"
|
||||||
|
|
||||||
// stack seems to overflow on Intel C++ at 7000. If we need more than
|
// stack seems to overflow on Intel C++ at 7000. If we need more than
|
||||||
// 7000, need to increase stack size.
|
// 7000, need to increase stack size.
|
||||||
@ -2322,7 +2323,9 @@ void qpNodePath::
|
|||||||
prepare_scene(GraphicsStateGuardianBase *gsg, bool force_retained_mode) {
|
prepare_scene(GraphicsStateGuardianBase *gsg, bool force_retained_mode) {
|
||||||
nassertv_always(!is_empty());
|
nassertv_always(!is_empty());
|
||||||
|
|
||||||
// **** do something.
|
CPT(RenderState) net_state = get_net_state();
|
||||||
|
r_prepare_scene(node(), net_state, gsg,
|
||||||
|
retained_mode || force_retained_mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
@ -2959,3 +2962,46 @@ r_find_all_textures(PandaNode *node, const RenderState *state,
|
|||||||
r_find_all_textures(cr.get_child(i), next_state, textures);
|
r_find_all_textures(cr.get_child(i), next_state, textures);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: qpNodePath::r_prepare_scene
|
||||||
|
// Access: Private
|
||||||
|
// Description: The recursive implementation of prepare_scene.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
void qpNodePath::
|
||||||
|
r_prepare_scene(PandaNode *node, const RenderState *state,
|
||||||
|
GraphicsStateGuardianBase *gsg, bool do_retained_mode) {
|
||||||
|
if (node->is_geom_node()) {
|
||||||
|
qpGeomNode *gnode;
|
||||||
|
DCAST_INTO_V(gnode, node);
|
||||||
|
|
||||||
|
/*
|
||||||
|
Not implemented yet in pgraph. Maybe we don't need this anyway.
|
||||||
|
if (do_retained_mode) {
|
||||||
|
gnode->prepare(gsg);
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
int num_geoms = gnode->get_num_geoms();
|
||||||
|
for (int i = 0; i < num_geoms; i++) {
|
||||||
|
CPT(RenderState) geom_state = state->compose(gnode->get_geom_state(i));
|
||||||
|
const RenderAttrib *attrib =
|
||||||
|
geom_state->get_attrib(TextureAttrib::get_class_type());
|
||||||
|
if (attrib != (const RenderAttrib *)NULL) {
|
||||||
|
const TextureAttrib *ta;
|
||||||
|
DCAST_INTO_V(ta, attrib);
|
||||||
|
Texture *texture = ta->get_texture();
|
||||||
|
if (texture != (Texture *)NULL) {
|
||||||
|
texture->prepare(gsg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int num_children = node->get_num_children();
|
||||||
|
for (int i = 0; i < num_children; i++) {
|
||||||
|
PandaNode *child = node->get_child(i);
|
||||||
|
CPT(RenderState) child_state = state->compose(child->get_state());
|
||||||
|
r_prepare_scene(child, child_state, gsg, do_retained_mode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -522,6 +522,8 @@ private:
|
|||||||
const GlobPattern &glob) const;
|
const GlobPattern &glob) const;
|
||||||
void r_find_all_textures(PandaNode *node, const RenderState *state,
|
void r_find_all_textures(PandaNode *node, const RenderState *state,
|
||||||
Textures &textures) const;
|
Textures &textures) const;
|
||||||
|
void r_prepare_scene(PandaNode *node, const RenderState *state,
|
||||||
|
GraphicsStateGuardianBase *gsg, bool do_retained_mode);
|
||||||
|
|
||||||
PT(qpNodePathComponent) _head;
|
PT(qpNodePathComponent) _head;
|
||||||
ErrorType _error_type;
|
ErrorType _error_type;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user