Panda3D
Loading...
Searching...
No Matches
cullBin.h
Go to the documentation of this file.
1/**
2 * PANDA 3D SOFTWARE
3 * Copyright (c) Carnegie Mellon University. All rights reserved.
4 *
5 * All use of this software is subject to the terms of the revised BSD
6 * license. You should have received a copy of this license along
7 * with this source code in a file named "LICENSE."
8 *
9 * @file cullBin.h
10 * @author drose
11 * @date 2002-02-27
12 */
13
14#ifndef CULLBIN_H
15#define CULLBIN_H
16
17#include "pandabase.h"
18#include "cullBinEnums.h"
19#include "typedReferenceCount.h"
20#include "pStatCollector.h"
21#include "pointerTo.h"
22#include "luse.h"
23#include "geomNode.h"
24
25class CullableObject;
27class SceneSetup;
28class TransformState;
29class RenderState;
30class PandaNode;
31
32/**
33 * A collection of Geoms and their associated state, for a particular scene.
34 * The cull traversal (and the BinCullHandler) assigns Geoms to bins as it
35 * comes across them.
36 *
37 * This is an abstract base class; derived classes like CullBinStateSorted and
38 * CullBinBackToFront provide the actual implementation.
39 */
40class EXPCL_PANDA_PGRAPH CullBin : public TypedReferenceCount, public CullBinEnums {
41protected:
42 INLINE CullBin(const CullBin &copy);
43public:
44 INLINE CullBin(const std::string &name, BinType bin_type,
46 const PStatCollector &draw_region_pcollector);
47 virtual ~CullBin();
48
49 INLINE const std::string &get_name() const;
50 INLINE BinType get_bin_type() const;
51
52 virtual PT(CullBin) make_next() const;
53
54 virtual void add_object(CullableObject *object, Thread *current_thread)=0;
55 virtual void finish_cull(SceneSetup *scene_setup, Thread *current_thread);
56
57 virtual void draw(bool force, Thread *current_thread)=0;
58
59 PT(PandaNode) make_result_graph();
60
61 INLINE bool has_flash_color() const;
62 INLINE const LColor &get_flash_color() const;
63
64protected:
65 class ResultGraphBuilder;
66 virtual void fill_result_graph(ResultGraphBuilder &builder)=0;
67
68private:
69 void check_flash_color();
70
71protected:
72 std::string _name;
73 BinType _bin_type;
75
76 // Used in make_result_graph() and fill_result_graph().
77 class EXPCL_PANDA_PGRAPH ResultGraphBuilder {
78 public:
79 ResultGraphBuilder(PandaNode *root_node);
80 void add_object(CullableObject *object);
81
82 private:
83 void record_one_object(GeomNode *node, CullableObject *object);
84
85 private:
86 int _object_index;
87 CPT(TransformState) _current_transform;
88 CPT(RenderState) _current_state;
89 PT(PandaNode) _root_node;
90 PT(GeomNode) _current_node;
91 };
92
93 static PStatCollector _cull_bin_pcollector;
94 PStatCollector _cull_this_pcollector;
95 PStatCollector _draw_this_pcollector;
96
97public:
98 static TypeHandle get_class_type() {
99 return _type_handle;
100 }
101 static void init_type() {
102 TypedReferenceCount::init_type();
103 register_type(_type_handle, "CullBin",
104 TypedReferenceCount::get_class_type());
105 }
106 virtual TypeHandle get_type() const {
107 return get_class_type();
108 }
109 virtual TypeHandle force_init_type() {init_type(); return get_class_type();}
110
111private:
112 static TypeHandle _type_handle;
113};
114
115#include "cullBin.I"
116
117#endif
Provides scoping for the enumerated type shared by CullBin and CullBinManager.
A collection of Geoms and their associated state, for a particular scene.
Definition cullBin.h:40
The smallest atom of cull.
A node that holds Geom objects, renderable pieces of geometry.
Definition geomNode.h:34
This is a base class for the GraphicsStateGuardian class, which is itself a base class for the variou...
A lightweight class that represents a single element that may be timed and/or counted via stats.
A basic node of the scene graph or data graph.
Definition pandaNode.h:65
This represents a unique collection of RenderAttrib objects that correspond to a particular renderabl...
Definition renderState.h:47
This object holds the camera position, etc., and other general setup information for rendering a part...
Definition sceneSetup.h:32
A thread; that is, a lightweight process.
Definition thread.h:46
Indicates a coordinate-system transform on vertices.
TypeHandle is the identifier used to differentiate C++ class types.
Definition typeHandle.h:81
A base class for things which need to inherit from both TypedObject and from ReferenceCount.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
void register_type(TypeHandle &type_handle, const std::string &name)
This inline function is just a convenient way to call TypeRegistry::register_type(),...
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.