00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef ROP_RenderManager_h
00020 #define ROP_RenderManager_h
00021
00022 #include "ROP_API.h"
00023 #include <UT/UT_PtrArray.h>
00024 #include "ROP_RenderList.h"
00025
00026 class ROP_RenderCmdParms;
00027 class ROP_RenderItem;
00028 class ROP_Node;
00029
00030 class ROP_API ROP_RenderManager
00031 {
00032 public:
00033
00034 bool render(ROP_Node *render_node,
00035 float startframe, float endframe, float finc,
00036 bool single_rop,
00037 bool frame_by_frame,
00038 bool ignore_bypass,
00039 bool ignore_locks,
00040 ostream *verbose = 0);
00041
00042
00043 void buildFrameOrder(ROP_RenderList &order,
00044 ROP_Node *render_node,
00045 float startframe, float endframe, float finc,
00046 bool single_rop,
00047 bool frame_by_frame,
00048 bool ignore_bypass,
00049 bool ignore_locks);
00050
00051
00052 bool renderOrder(const ROP_RenderList &order,
00053 ostream *verbose = 0);
00054
00055 void getFrameOrder(ROP_Node *render_node,
00056 float startframe, float endframe, float finc,
00057 ROP_RenderCmdParms &render_parms);
00058
00059
00060 void getOutputFrameRange(fpreal &start, fpreal &end,
00061 fpreal &finc) const;
00062
00063 bool isActive() const { return (myRenderOrder != NULL); }
00064
00065 int getNumRenderedFrames(ROP_Node *for_node) const;
00066
00067
00068 static ROP_RenderManager *pushManager();
00069 static ROP_RenderManager *getManager();
00070 static void popManager();
00071
00072 private:
00073 ROP_RenderManager();
00074
00075
00076 void setCurrentPercent(float p);
00077
00078 fpreal myFrameStart;
00079 fpreal myFrameEnd;
00080 fpreal myFrameInc;
00081 ROP_RenderList *myRenderOrder;
00082 int myRenderSerial;
00083 int theCurrentCount;
00084 int theTotalCount;
00085 int theCurrentTotal;
00086
00087
00088 friend class ROP_Node;
00089 };
00090
00091 class ROP_API ROP_RenderManagerAutoPush
00092 {
00093 public:
00094 ROP_RenderManagerAutoPush() { ROP_RenderManager::pushManager(); }
00095 ~ROP_RenderManagerAutoPush() { ROP_RenderManager::popManager(); }
00096 };
00097
00098 #endif