void activateTargetAndCopySource(ImageOutport& outport, ImageInport& inport, ImageType type) { auto outImage = outport.getEditableData(); auto outImageGL = outImage->getEditableRepresentation<ImageGL>(); auto inImage = inport.getData(); auto inImageGL = inImage->getRepresentation<ImageGL>(); inImageGL->copyRepresentationsTo(outImageGL); outImageGL->activateBuffer(type); }
void Layer::copyRepresentationsTo(Layer* targetLayer) { // TODO: And also need to be tested on multiple representations_ such as LayerRAM, LayerDisk // TODO: optimize the code auto& targets = targetLayer->representations_; bool copyDone = false; for (auto& sourceElem : representations_) { auto sourceRepr = sourceElem.second; if (sourceRepr->isValid()) { for (auto& targetElem : targets) { auto targetRepr = targetElem.second; if (typeid(*sourceRepr) == typeid(*targetRepr)) { if (sourceRepr->copyRepresentationsTo(targetRepr.get())) { targetRepr->setValid(true); targetLayer->lastValidRepresentation_ = targetElem.second; copyDone = true; } } } } } if (!copyDone) { // Fallback ivwAssert(lastValidRepresentation_, "Last valid representation is expected."); for (auto& targetElem : targets) targetElem.second->setValid(false); targetLayer->createDefaultRepresentation(); auto clone = std::shared_ptr<LayerRepresentation>(lastValidRepresentation_->clone()); targetLayer->addRepresentation(clone); targetLayer->setDimensions(targetLayer->getDimensions()); if (lastValidRepresentation_->copyRepresentationsTo(clone.get())) { clone->setValid(true); targetLayer->lastValidRepresentation_ = clone; } } }
bool ImageGL::copyRepresentationsTo(DataRepresentation* targetRep) const { return copyRepresentationsTo(dynamic_cast<ImageGL*>(targetRep)); }