129 lines
4.0 KiB
C++
129 lines
4.0 KiB
C++
// Filename: cullState.h
|
|
// Created by: drose (07Apr00)
|
|
//
|
|
////////////////////////////////////////////////////////////////////
|
|
//
|
|
// PANDA 3D SOFTWARE
|
|
// Copyright (c) 2001, Disney Enterprises, Inc. All rights reserved
|
|
//
|
|
// All use of this software is subject to the terms of the Panda 3d
|
|
// Software license. You should have received a copy of this license
|
|
// along with this source code; you will also find a current copy of
|
|
// the license at http://www.panda3d.org/license.txt .
|
|
//
|
|
// To contact the maintainers of this program write to
|
|
// panda3d@yahoogroups.com .
|
|
//
|
|
////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef CULLSTATE_H
|
|
#define CULLSTATE_H
|
|
|
|
#include <pandabase.h>
|
|
|
|
#include "config_cull.h"
|
|
|
|
#include <geomNode.h>
|
|
#include <allTransitionsWrapper.h>
|
|
#include <allAttributesWrapper.h>
|
|
#include <pointerTo.h>
|
|
#include <pointerToArray.h>
|
|
#include <updateSeq.h>
|
|
#include <referenceCount.h>
|
|
#include <arcChain.h>
|
|
|
|
#include "pmap.h"
|
|
#include "pvector.h"
|
|
|
|
class GraphicsStateGuardian;
|
|
class GeomBin;
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Class : CullState
|
|
// Description : This is the basic grouping unit of the CullTraverser.
|
|
// A single CullState object represents all of the
|
|
// GeomNodes throughout the scene graph that share an
|
|
// identical state. The CullTraverser collects these as
|
|
// it traverses, and tries to cache them between
|
|
// subsequent frames.
|
|
////////////////////////////////////////////////////////////////////
|
|
class EXPCL_PANDA CullState : public ReferenceCount {
|
|
public:
|
|
typedef pvector<ArcChain> CurrentGeomNodes;
|
|
typedef pvector<ArcChain> CurrentDirectNodes;
|
|
|
|
public:
|
|
INLINE CullState(const AllTransitionsWrapper &trans);
|
|
INLINE ~CullState();
|
|
|
|
INLINE int compare_to(const CullState &other) const;
|
|
|
|
bool check_currency(Node *node,
|
|
const AllTransitionsWrapper &trans,
|
|
UpdateSeq as_of);
|
|
|
|
INLINE void mark_verified(Node *node, UpdateSeq now);
|
|
|
|
INLINE void clear_current_nodes();
|
|
INLINE void record_current_geom_node(const ArcChain &arc_chain);
|
|
INLINE void record_current_direct_node(const ArcChain &arc_chain);
|
|
INLINE bool is_empty() const;
|
|
INLINE int count_current_nodes() const;
|
|
INLINE int get_empty_frames_count() const;
|
|
|
|
INLINE void apply_to(const AllAttributesWrapper &initial_state);
|
|
INLINE const NodeAttributes &get_attributes() const;
|
|
INLINE const AllTransitionsWrapper &get_transitions() const;
|
|
|
|
INLINE bool has_bin() const;
|
|
INLINE GeomBin *get_bin() const;
|
|
|
|
void output(ostream &out) const;
|
|
void write(ostream &out, int indent_level = 0) const;
|
|
|
|
public:
|
|
// Functions and typedefs to support treating the CullState as a
|
|
// read-only STL container of current nodes. Beware! This
|
|
// interface is not safe to use outside of PANDA.DLL.
|
|
typedef CurrentGeomNodes::const_iterator geom_iterator;
|
|
typedef CurrentGeomNodes::const_iterator geom_const_iterator;
|
|
typedef CurrentGeomNodes::value_type geom_value_type;
|
|
typedef CurrentGeomNodes::size_type geom_size_type;
|
|
|
|
INLINE geom_size_type geom_size() const;
|
|
INLINE geom_iterator geom_begin() const;
|
|
INLINE geom_iterator geom_end() const;
|
|
|
|
typedef CurrentDirectNodes::const_iterator direct_iterator;
|
|
typedef CurrentDirectNodes::const_iterator direct_const_iterator;
|
|
typedef CurrentDirectNodes::value_type direct_value_type;
|
|
typedef CurrentDirectNodes::size_type direct_size_type;
|
|
|
|
INLINE direct_size_type direct_size() const;
|
|
INLINE direct_iterator direct_begin() const;
|
|
INLINE direct_iterator direct_end() const;
|
|
|
|
private:
|
|
AllTransitionsWrapper _trans;
|
|
NodeAttributes *_attrib;
|
|
|
|
typedef pmap<Node *, UpdateSeq> Verified;
|
|
Verified _verified;
|
|
|
|
CurrentGeomNodes _current_geom_nodes;
|
|
CurrentDirectNodes _current_direct_nodes;
|
|
int _empty_frames_count;
|
|
|
|
GeomBin *_bin;
|
|
friend class GeomBin;
|
|
};
|
|
|
|
INLINE ostream &operator << (ostream &out, const CullState &bs) {
|
|
bs.output(out);
|
|
return out;
|
|
}
|
|
|
|
#include "cullState.I"
|
|
|
|
#endif
|