-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
描述
我发现 README.md 中关于 drcqOut_.consume() 函数的描述与实际代码逻辑存在不一致。这可能导致读者对项目的有序提交(in-order commit)和 AABB 检查逻辑产生误解。
具体不一致之处:
在 README.md 中有如下描述:
In-order commit also takes place at the `void RenderWorkerPool::renderAll(...)` function. ... The core chain and AABB checking logic is in `drcqOut_.consume()`; which then calls `bool DrawResource::canCollect(uint32_t currTaskDone, DrawTaskList *drawTaskList)`.
然而,在 Spars 项目的 drcqOut_.consume() 函数的最新实现中,并未调用 bool DrawResource::canCollect(...) 函数。该函数在 Spars/prf/app/src/main/cpp/engine2d/DrawResource.cpp 中似乎已被注释或移除。
实际代码逻辑:
drcqOut_.consume() 函数当前采用的是一段内联的 AABB 检查和任务收集逻辑。以下是相关的代码片段:
// 有后续已渲染完成任务,可以考虑提前。在已经堆积太多时不考虑
uint32_t taskRendered = taskRendered_.load();
if (taskRendered > priorityReturned_ && taskRendered <= priorityReturned_ + MAX_COLLECT_REORDER) {
std::vector<Rect> bbxs; // 所有需要检查的bbx
for (uint32_t i = priorityReturned_; i < priorityReturned_ + MAX_COLLECT_REORDER; i++) {
// 提前失败
if (i >= drawTaskList_->getTaskNum()) {
break;
}
DrawResourceStatus curr = statusList_[i].load();
// 试图让该节点提前收集
if (curr == DrawResourceStatus::RENDERED) {
bool canCollectNow = true;
for(Rect bbx : bbxs) {
if (isOverlap(bbx, drawTaskList_->getDrawTask(i)->boundingBox_)) {
canCollectNow = false;
break; // 一旦有重叠就不能提前收集
}
}
// 可以提前
if (canCollectNow) {
statusList_[i].store(DrawResourceStatus::COLLECTED);
return drawResourceQueue_[i]; // 不必去管priorityReturned_
} else {
break; // 提前失败
}
}
// 这是个需要被检查的bbx
else {
bbxs.push_back(drawTaskList_->getDrawTask(i)->boundingBox_);
}
}Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels