mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-03 18:31:55 -04:00
fix problem with hidden PGui items still being active
This commit is contained in:
parent
f35a7469d0
commit
76252c5316
@ -199,18 +199,17 @@ traverse_below(CullTraverserData &data) {
|
|||||||
_nodes_pcollector.add_level(1);
|
_nodes_pcollector.add_level(1);
|
||||||
PandaNode *node = data.node();
|
PandaNode *node = data.node();
|
||||||
|
|
||||||
bool visible = !(data._draw_mask & PandaNode::get_overall_bit()).is_zero() &&
|
bool this_node_hidden = data.is_this_node_hidden(this);
|
||||||
!(data._draw_mask & _camera_mask).is_zero();
|
|
||||||
|
|
||||||
const RenderEffects *node_effects = node->get_effects();
|
const RenderEffects *node_effects = node->get_effects();
|
||||||
bool has_decal = visible && node_effects->has_decal();
|
bool has_decal = !this_node_hidden && node_effects->has_decal();
|
||||||
if (has_decal && !_depth_offset_decals) {
|
if (has_decal && !_depth_offset_decals) {
|
||||||
// Start the three-pass decal rendering if we're not using
|
// Start the three-pass decal rendering if we're not using
|
||||||
// DepthOffsetAttribs to implement decals.
|
// DepthOffsetAttribs to implement decals.
|
||||||
start_decal(data);
|
start_decal(data);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
if (visible && node->is_geom_node()) {
|
if (!this_node_hidden && node->is_geom_node()) {
|
||||||
_geom_nodes_pcollector.add_level(1);
|
_geom_nodes_pcollector.add_level(1);
|
||||||
GeomNode *geom_node = DCAST(GeomNode, node);
|
GeomNode *geom_node = DCAST(GeomNode, node);
|
||||||
|
|
||||||
|
@ -150,3 +150,18 @@ is_in_view(const DrawMask &camera_mask) {
|
|||||||
// Otherwise, compare the bounding volume to the frustum.
|
// Otherwise, compare the bounding volume to the frustum.
|
||||||
return is_in_view_impl();
|
return is_in_view_impl();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: CullTraverserData::is_this_node_hidden
|
||||||
|
// Access: Public
|
||||||
|
// Description: Returns true if this particular node is hidden, even
|
||||||
|
// though we might be traversing past this node to find
|
||||||
|
// a child node that has had show_through() called for
|
||||||
|
// it. If this returns true, the node should not be
|
||||||
|
// rendered.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
INLINE bool CullTraverserData::
|
||||||
|
is_this_node_hidden(const CullTraverser *trav) const {
|
||||||
|
return (_draw_mask & PandaNode::get_overall_bit()).is_zero() ||
|
||||||
|
(_draw_mask & trav->get_camera_mask()).is_zero();
|
||||||
|
}
|
||||||
|
@ -27,9 +27,9 @@
|
|||||||
#include "geometricBoundingVolume.h"
|
#include "geometricBoundingVolume.h"
|
||||||
#include "pointerTo.h"
|
#include "pointerTo.h"
|
||||||
#include "drawMask.h"
|
#include "drawMask.h"
|
||||||
|
#include "cullTraverser.h"
|
||||||
|
|
||||||
class PandaNode;
|
class PandaNode;
|
||||||
class CullTraverser;
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
// Class : CullTraverserData
|
// Class : CullTraverserData
|
||||||
@ -64,6 +64,7 @@ public:
|
|||||||
CPT(TransformState) get_net_transform(const CullTraverser *trav) const;
|
CPT(TransformState) get_net_transform(const CullTraverser *trav) const;
|
||||||
|
|
||||||
INLINE bool is_in_view(const DrawMask &camera_mask);
|
INLINE bool is_in_view(const DrawMask &camera_mask);
|
||||||
|
INLINE bool is_this_node_hidden(const CullTraverser *trav) const;
|
||||||
|
|
||||||
void apply_transform_and_state(CullTraverser *trav);
|
void apply_transform_and_state(CullTraverser *trav);
|
||||||
void apply_transform_and_state(CullTraverser *trav,
|
void apply_transform_and_state(CullTraverser *trav,
|
||||||
|
@ -184,7 +184,8 @@ has_cull_callback() const {
|
|||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
bool PGItem::
|
bool PGItem::
|
||||||
cull_callback(CullTraverser *trav, CullTraverserData &data) {
|
cull_callback(CullTraverser *trav, CullTraverserData &data) {
|
||||||
if (has_frame() && get_active()) {
|
bool this_node_hidden = data.is_this_node_hidden(trav);
|
||||||
|
if (!this_node_hidden && has_frame() && get_active()) {
|
||||||
// The item has a frame, so we want to generate a region for it
|
// The item has a frame, so we want to generate a region for it
|
||||||
// and update the MouseWatcher.
|
// and update the MouseWatcher.
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user