本文整理汇总了C++中WorkQueue::IsCompleting方法的典型用法代码示例。如果您正苦于以下问题:C++ WorkQueue::IsCompleting方法的具体用法?C++ WorkQueue::IsCompleting怎么用?C++ WorkQueue::IsCompleting使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类WorkQueue
的用法示例。
在下文中一共展示了WorkQueue::IsCompleting方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Raycast
void Octree::Raycast(RayOctreeQuery& query) const
{
PROFILE(Raycast);
query.result_.Clear();
WorkQueue* queue = GetSubsystem<WorkQueue>();
// If no worker threads or no triangle-level testing, or we are being called from a worker thread do not create work items
if (query.level_ < RAY_TRIANGLE || !queue->GetNumThreads() || !Thread::IsMainThread() || queue->IsCompleting())
GetDrawablesInternal(query);
else
{
// Threaded ray query: first get the drawables
rayQuery_ = &query;
rayQueryDrawables_.Clear();
GetDrawablesOnlyInternal(query, rayQueryDrawables_);
// Check that amount of drawables is large enough to justify threading
if (rayQueryDrawables_.Size() >= RAYCASTS_PER_WORK_ITEM * 2)
{
for (unsigned i = 0; i < rayQueryResults_.Size(); ++i)
rayQueryResults_[i].Clear();
PODVector<Drawable*>::Iterator start = rayQueryDrawables_.Begin();
while (start != rayQueryDrawables_.End())
{
SharedPtr<WorkItem> item = queue->GetFreeItem();
item->priority_ = M_MAX_UNSIGNED;
item->workFunction_ = RaycastDrawablesWork;
item->aux_ = const_cast<Octree*>(this);
PODVector<Drawable*>::Iterator end = rayQueryDrawables_.End();
if (end - start > RAYCASTS_PER_WORK_ITEM)
end = start + RAYCASTS_PER_WORK_ITEM;
item->start_ = &(*start);
item->end_ = &(*end);
queue->AddWorkItem(item);
start = end;
}
// Merge per-thread results
queue->Complete(M_MAX_UNSIGNED);
for (unsigned i = 0; i < rayQueryResults_.Size(); ++i)
query.result_.Insert(query.result_.End(), rayQueryResults_[i].Begin(), rayQueryResults_[i].End());
}
else
{
for (PODVector<Drawable*>::Iterator i = rayQueryDrawables_.Begin(); i != rayQueryDrawables_.End(); ++i)
(*i)->ProcessRayQuery(query, query.result_);
}
}
Sort(query.result_.Begin(), query.result_.End(), CompareRayQueryResults);
}