瀏覽代碼

add set_auto_recompute()

David Rose 14 年之前
父節點
當前提交
b405b6bfac
共有 3 個文件被更改,包括 58 次插入6 次删除
  1. 32 1
      panda/src/distort/projectionScreen.I
  2. 21 3
      panda/src/distort/projectionScreen.cxx
  3. 5 2
      panda/src/distort/projectionScreen.h

+ 32 - 1
panda/src/distort/projectionScreen.I

@@ -172,9 +172,39 @@ get_frame_color() const {
   return _frame_color;
 }
 
+////////////////////////////////////////////////////////////////////
+//     Function: ProjectionScreen::set_auto_recompute
+//       Access: Published
+//  Description: Sets the auto_recompute flag.  When this is true,
+//               the ProjectionScreen will always be recomputed if
+//               necessary before the frame is drawn; when it is
+//               false, an explicit call to recompute_if_stale() may
+//               be required.
+////////////////////////////////////////////////////////////////////
+INLINE void ProjectionScreen::
+set_auto_recompute(bool auto_recompute) {
+  _auto_recompute = auto_recompute;
+}
+
+
+////////////////////////////////////////////////////////////////////
+//     Function: ProjectionScreen::set_auto_recompute
+//       Access: Published
+//  Description: Returns the auto_recompute flag.  When this is true,
+//               the ProjectionScreen will always be recomputed if
+//               necessary before the frame is drawn; when it is
+//               false, an explicit call to recompute_if_stale() may
+//               be required.
+////////////////////////////////////////////////////////////////////
+INLINE bool ProjectionScreen::
+get_auto_recompute() const {
+  return _auto_recompute;
+}
+
+
 ////////////////////////////////////////////////////////////////////
 //     Function: ProjectionScreen::get_last_screen
-//       Access: Public
+//       Access: Published
 //  Description: Returns an UpdateSeq corresponding to the last time a
 //               screen mesh was generated for the ProjectionScreen.
 //               Each time generate_screen() is called, this number is
@@ -186,3 +216,4 @@ INLINE const UpdateSeq &ProjectionScreen::
 get_last_screen() const {
   return _last_screen;
 }
+

+ 21 - 3
panda/src/distort/projectionScreen.cxx

@@ -45,6 +45,7 @@ ProjectionScreen(const string &name) : PandaNode(name)
   _frame_color.set(1.0f, 1.0f, 1.0f, 1.0f);
   _computed_rel_top_mat = false;
   _stale = true;
+  _auto_recompute = true;
 }
 
 ////////////////////////////////////////////////////////////////////
@@ -69,7 +70,8 @@ ProjectionScreen(const ProjectionScreen &copy) :
   _texcoord_name(copy._texcoord_name),
   _vignette_on(copy._vignette_on),
   _vignette_color(copy._vignette_color),
-  _frame_color(copy._frame_color)
+  _frame_color(copy._frame_color),
+  _auto_recompute(copy._auto_recompute)
 {
   _computed_rel_top_mat = false;
   _stale = true;
@@ -115,7 +117,9 @@ make_copy() const {
 ////////////////////////////////////////////////////////////////////
 bool ProjectionScreen::
 cull_callback(CullTraverser *, CullTraverserData &data) {
-  recompute_if_stale(data._node_path.get_node_path());
+  if (_auto_recompute) {
+    recompute_if_stale(data._node_path.get_node_path());
+  }
   return true;
 }
 
@@ -337,7 +341,21 @@ recompute() {
 
 ////////////////////////////////////////////////////////////////////
 //     Function: ProjectionScreen::recompute_if_stale
-//       Access: Public
+//       Access: Published
+//  Description: Calls recompute() only if the relative transform
+//               between the ProjectionScreen and the projector has
+//               changed, or if any other relevant property has
+//               changed.
+////////////////////////////////////////////////////////////////////
+void ProjectionScreen::
+recompute_if_stale() {
+  NodePath this_np(NodePath::any_path(this));
+  recompute_if_stale(this_np);
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: ProjectionScreen::recompute_if_stale
+//       Access: Published
 //  Description: Calls recompute() only if the relative transform
 //               between the ProjectionScreen and the projector has
 //               changed, or if any other relevant property has

+ 5 - 2
panda/src/distort/projectionScreen.h

@@ -90,10 +90,12 @@ PUBLISHED:
   INLINE void set_frame_color(const LColor &frame_color);
   INLINE const LColor &get_frame_color() const;
 
-  void recompute();
+  INLINE void set_auto_recompute(bool auto_recompute);
+  INLINE bool get_auto_recompute() const;
 
-public:
+  void recompute();
   INLINE const UpdateSeq &get_last_screen() const;
+  void recompute_if_stale();
   void recompute_if_stale(const NodePath &this_np);
 
 private:
@@ -130,6 +132,7 @@ private:
   bool _stale;
   UpdateSeq _projector_lens_change;
   UpdateSeq _last_screen;
+  bool _auto_recompute;
 
 public:
   static TypeHandle get_class_type() {