void Frame::cycleData(const uint32_t frameNumber, const Compound* compound) { _masterFrameData = 0; for (unsigned i = 0; i < NUM_EYES; ++i) { _inputFrames[i].clear(); const Eye eye = Eye(1 << i); if (!compound->isInheritActive(eye)) // eye pass not used { _frameData[i] = 0; continue; } // reuse unused frame data FrameData* data = _datas.empty() ? 0 : _datas.back(); const uint32_t latency = getAutoObsolete(); const uint32_t dataAge = data ? data->getFrameNumber() : 0; if (data && dataAge < frameNumber - latency && frameNumber > latency) // not used anymore _datas.pop_back(); else // still used - allocate new data { data = new FrameData; getLocalNode()->registerObject(data); data->setAutoObsolete(1); // current + in use by render nodes } data->setFrameNumber(frameNumber); _datas.push_front(data); _frameData[i] = data; _getInputNodes(i).clear(); _getInputNetNodes(i).clear(); if (!_masterFrameData) _masterFrameData = data; } }