11 #ifndef hifi_render_TransitionStage_h
12 #define hifi_render_TransitionStage_h
15 #include "IndexedContainer.h"
17 #include "Transition.h"
22 class TransitionStage :
public render::Stage {
25 static const std::string& getName() {
return _name; }
27 using Index = indexed_container::Index;
28 static const Index INVALID_INDEX;
29 using TransitionIdList = indexed_container::Indices;
31 static bool isIndexInvalid(Index index) {
return index == INVALID_INDEX; }
33 bool isTransitionUsed(Index index)
const {
return _transitions.checkIndex(index) && !_transitions.isElementFreed(index); }
35 const Transition& getTransition(Index TransitionId)
const {
return _transitions.get(TransitionId); }
37 Transition& editTransition(Index TransitionId) {
return _transitions.edit(TransitionId); }
39 Index addTransition(ItemID itemId, Transition::Type type, ItemID boundId);
40 void removeTransition(Index index);
42 TransitionIdList::iterator begin() {
return _activeTransitionIds.begin(); }
43 TransitionIdList::iterator end() {
return _activeTransitionIds.end(); }
47 using Transitions = indexed_container::IndexedVector<Transition>;
49 static std::string _name;
51 Transitions _transitions;
52 TransitionIdList _activeTransitionIds;
54 using TransitionStagePointer = std::shared_ptr<TransitionStage>;
56 class TransitionStageSetup {
58 using JobModel = render::Job::Model<TransitionStageSetup>;
60 TransitionStageSetup();
61 void run(
const RenderContextPointer& renderContext);