void ExecutionSystem::execute() { const bNodeTree *editingtree = this->m_context.getbNodeTree(); editingtree->stats_draw(editingtree->sdh, (char *)"Compositing | Initializing execution"); DebugInfo::execute_started(this); unsigned int order = 0; for (vector<NodeOperation *>::iterator iter = this->m_operations.begin(); iter != this->m_operations.end(); ++iter) { NodeOperation *operation = *iter; if (operation->isReadBufferOperation()) { ReadBufferOperation *readOperation = (ReadBufferOperation *)operation; readOperation->setOffset(order); order++; } } unsigned int index; // First allocale all write buffer for (index = 0; index < this->m_operations.size(); index++) { NodeOperation *operation = this->m_operations[index]; if (operation->isWriteBufferOperation()) { operation->setbNodeTree(this->m_context.getbNodeTree()); operation->initExecution(); } } // Connect read buffers to their write buffers for (index = 0; index < this->m_operations.size(); index++) { NodeOperation *operation = this->m_operations[index]; if (operation->isReadBufferOperation()) { ReadBufferOperation *readOperation = (ReadBufferOperation *)operation; readOperation->updateMemoryBuffer(); } } // initialize other operations for (index = 0; index < this->m_operations.size(); index++) { NodeOperation *operation = this->m_operations[index]; if (!operation->isWriteBufferOperation()) { operation->setbNodeTree(this->m_context.getbNodeTree()); operation->initExecution(); } } for (index = 0; index < this->m_groups.size(); index++) { ExecutionGroup *executionGroup = this->m_groups[index]; executionGroup->setChunksize(this->m_context.getChunksize()); executionGroup->initExecution(); } WorkScheduler::start(this->m_context); executeGroups(COM_PRIORITY_HIGH); if (!this->getContext().isFastCalculation()) { executeGroups(COM_PRIORITY_MEDIUM); executeGroups(COM_PRIORITY_LOW); } WorkScheduler::finish(); WorkScheduler::stop(); editingtree->stats_draw(editingtree->sdh, (char *)"Compositing | Deinitializing execution"); for (index = 0; index < this->m_operations.size(); index++) { NodeOperation *operation = this->m_operations[index]; operation->deinitExecution(); } for (index = 0; index < this->m_groups.size(); index++) { ExecutionGroup *executionGroup = this->m_groups[index]; executionGroup->deinitExecution(); } }