Panda3D
cullBinFixed.cxx
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 cullBinFixed.cxx
10  * @author drose
11  * @date 2002-05-29
12  */
13 
14 #include "cullBinFixed.h"
17 #include "cullableObject.h"
18 #include "cullHandler.h"
19 #include "pStatTimer.h"
20 
21 #include <algorithm>
22 
23 
24 TypeHandle CullBinFixed::_type_handle;
25 
26 /**
27  *
28  */
29 CullBinFixed::
30 ~CullBinFixed() {
31  Objects::iterator oi;
32  for (oi = _objects.begin(); oi != _objects.end(); ++oi) {
33  CullableObject *object = (*oi)._object;
34  delete object;
35  }
36 }
37 
38 /**
39  * Factory constructor for passing to the CullBinManager.
40  */
42 make_bin(const std::string &name, GraphicsStateGuardianBase *gsg,
43  const PStatCollector &draw_region_pcollector) {
44  return new CullBinFixed(name, gsg, draw_region_pcollector);
45 }
46 
47 /**
48  * Adds a geom, along with its associated state, to the bin for rendering.
49  */
50 void CullBinFixed::
51 add_object(CullableObject *object, Thread *current_thread) {
52  int draw_order = object->_state->get_draw_order();
53  _objects.push_back(ObjectData(object, draw_order));
54 }
55 
56 /**
57  * Called after all the geoms have been added, this indicates that the cull
58  * process is finished for this frame and gives the bins a chance to do any
59  * post-processing (like sorting) before moving on to draw.
60  */
61 void CullBinFixed::
62 finish_cull(SceneSetup *, Thread *current_thread) {
63  PStatTimer timer(_cull_this_pcollector, current_thread);
64  std::stable_sort(_objects.begin(), _objects.end());
65 }
66 
67 /**
68  * Draws all the geoms in the bin, in the appropriate order.
69  */
70 void CullBinFixed::
71 draw(bool force, Thread *current_thread) {
72  PStatTimer timer(_draw_this_pcollector, current_thread);
73 
74  Objects::const_iterator oi;
75  for (oi = _objects.begin(); oi != _objects.end(); ++oi) {
76  CullableObject *object = (*oi)._object;
77 
78  if (object->_draw_callback == nullptr) {
79  nassertd(object->_geom != nullptr) continue;
80 
81  _gsg->set_state_and_transform(object->_state, object->_internal_transform);
82 
83  GeomPipelineReader geom_reader(object->_geom, current_thread);
84  GeomVertexDataPipelineReader data_reader(object->_munged_data, current_thread);
85  data_reader.check_array_readers();
86  geom_reader.draw(_gsg, &data_reader, force);
87  } else {
88  // It has a callback associated.
89  object->draw_callback(_gsg, force, current_thread);
90  // Now the callback has taken care of drawing.
91  }
92  }
93 }
94 
95 /**
96  * Called by CullBin::make_result_graph() to add all the geoms to the special
97  * cull result scene graph.
98  */
99 void CullBinFixed::
100 fill_result_graph(CullBin::ResultGraphBuilder &builder) {
101  Objects::const_iterator oi;
102  for (oi = _objects.begin(); oi != _objects.end(); ++oi) {
103  CullableObject *object = (*oi)._object;
104  builder.add_object(object);
105  }
106 }
A specific kind of CullBin that sorts geometry in the order specified by the user-specified draw_orde...
Definition: cullBinFixed.h:33
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
virtual void draw(bool force, Thread *current_thread)
Draws all the geoms in the bin, in the appropriate order.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
A collection of Geoms and their associated state, for a particular scene.
Definition: cullBin.h:40
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
virtual void finish_cull(SceneSetup *scene_setup, Thread *current_thread)
Called after all the geoms have been added, this indicates that the cull process is finished for this...
A lightweight class that can be used to automatically start and stop a PStatCollector around a sectio...
Definition: pStatTimer.h:30
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
Encapsulates the data from a Geom, pre-fetched for one stage of the pipeline.
Definition: geom.h:405
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
bool draw(GraphicsStateGuardianBase *gsg, const GeomVertexDataPipelineReader *data_reader, bool force) const
The implementation of Geom::draw().
Definition: geom.cxx:1849
virtual void add_object(CullableObject *object, Thread *current_thread)
Adds a geom, along with its associated state, to the bin for rendering.
A lightweight class that represents a single element that may be timed and/or counted via stats.
The smallest atom of cull.
static CullBin * make_bin(const std::string &name, GraphicsStateGuardianBase *gsg, const PStatCollector &draw_region_pcollector)
Factory constructor for passing to the CullBinManager.
This is a base class for the GraphicsStateGuardian class, which is itself a base class for the variou...
A thread; that is, a lightweight process.
Definition: thread.h:46
Encapsulates the data from a GeomVertexData, pre-fetched for one stage of the pipeline.
TypeHandle is the identifier used to differentiate C++ class types.
Definition: typeHandle.h:81
This object holds the camera position, etc., and other general setup information for rendering a part...
Definition: sceneSetup.h:32