bool Hd_ImmediateDrawBatch::Validate(bool deepValidation) { if (not TF_VERIFY(not _drawItemInstances.empty())) return false; HdDrawItem const* batchItem = _drawItemInstances.front()->GetDrawItem(); // immediate batch doesn't need to verify buffer array hash unlike indirect // batch. if (deepValidation) { // look through all draw items to be still compatible size_t numDrawItemInstances = _drawItemInstances.size(); for (size_t item = 0; item < numDrawItemInstances; ++item) { HdDrawItem const * drawItem = _drawItemInstances[item]->GetDrawItem(); if (not _IsAggregated(batchItem, drawItem)) { return false; } } } return true; }
bool HdSt_DrawBatch::Append(HdStDrawItemInstance * drawItemInstance) { if (!TF_VERIFY(!_drawItemInstances.empty())) { return false; } // XXX: we'll soon refactor this function out and centralize batch // bucketing and reordering logic in HdStCommandBuffer. HdStDrawItem const* drawItem = static_cast<const HdStDrawItem*>( drawItemInstance->GetDrawItem()); HdStDrawItem const* batchItem = static_cast<const HdStDrawItem*>( _drawItemInstances.front()->GetDrawItem()); TF_VERIFY(batchItem); if (_IsAggregated(drawItem, batchItem)) { drawItemInstance->SetBatchIndex(_drawItemInstances.size()); drawItemInstance->SetBatch(this); _drawItemInstances.push_back(drawItemInstance); return true; } else { return false; } }