Ejemplo n.º 1
0
void CanvasProcessor::propagateEvent(Event* event, Outport* source) {
    if (event->hasVisitedProcessor(this)) return;
    event->markAsVisited(this);

    invokeEvent(event);
    if (event->hasBeenUsed()) return;

    if (event->hash() == ResizeEvent::chash()) {
        auto resizeEvent = static_cast<ResizeEvent*>(event);

        // Avoid continues evaluation when port dimensions changes
        NetworkLock lock(this);
        dimensions_.set(resizeEvent->size());
        if (enableCustomInputDimensions_) {
            sizeChanged();
        } else {
            inport_.propagateEvent(resizeEvent, nullptr);
            // Make sure this processor is invalidated.
            invalidate(InvalidationLevel::InvalidOutput);
        }
    } else {
        bool used = event->hasBeenUsed();
        for (auto inport : getInports()) {
            if (event->shouldPropagateTo(inport, this, source)) {
                inport->propagateEvent(event);
                used |= event->hasBeenUsed();
                event->markAsUnused();
            }
        }
        if (used) event->markAsUsed();
    }
}
Ejemplo n.º 2
0
void Processor::propagateEvent(Event* event) {
    invokeEvent(event);

    if (event->hasBeenUsed()) return;
    for (auto inport : getInports()) {
        inport->propagateEvent(event);
        if (event->hasBeenUsed()) return;
    }
}
Ejemplo n.º 3
0
 QList<Port*> PortOwnerGraphicsItem::getPorts() const {
    QList<Port*> result = getInports();
    result += getOutports();

    foreach (CoProcessorPort* p, getCoProcessorInports() + getCoProcessorOutports())
        result.append(p);

    return result;
}
Ejemplo n.º 4
0
void RenderProcessor::adjustRenderOutportSizes() {
    // detect dimension of first connected render inport
    tgt::ivec2 inputDim(-1);
    const std::vector<Port*> inports = getInports();
    for (size_t i=0; i<inports.size() && inputDim == tgt::ivec2(-1); ++i) {
        RenderPort* rp = dynamic_cast<RenderPort*>(inports[i]);
        if (rp && rp->hasRenderTarget()){
            inputDim = rp->getSize();
            break;
        }
    }

    // - assign inport dimension to all connected render outports, which are not size receivers
    // - if a outport is a size receiver, assign its received rendering size to it
    tgt::ivec2 resizeDim = tgt::ivec2(-1);
    const std::vector<Port*> outports = getOutports();
    for (size_t i=0; i<outports.size(); ++i) {
        RenderPort* rp = dynamic_cast<RenderPort*>(outports[i]);
        if (!rp || !rp->hasRenderTarget())
            continue;

        if (rp->getRenderSizePropagation() == RenderPort::RENDERSIZE_DEFAULT) {
            if (inputDim != rp->getSize() && inputDim != tgt::ivec2(-1)) {
                rp->resize(inputDim);
                if (resizeDim == tgt::ivec2(-1))
                    resizeDim = inputDim;
            }
        }
        else if (rp->getRenderSizePropagation() == RenderPort::RENDERSIZE_RECEIVER) {
            RenderSizeReceiveProperty* receiveProp = rp->getSizeReceiveProperty();
            tgtAssert(receiveProp, "Render outport is size receiver, but has no SizeReceiveProperty");
            if (receiveProp->get() != rp->getSize()) {
                rp->resize(receiveProp->get());
                if (resizeDim == tgt::ivec2(-1))
                    resizeDim = receiveProp->get();
            }
        }
        else if (rp->getRenderSizePropagation() == RenderPort::RENDERSIZE_STATIC) {
            // nothing to do
        }
        else {
            LERROR("Render outport has invalid render size propgation mode: " << rp->getQualifiedName());
        }
    }

    // resize private render ports to resizeDim
    if (resizeDim != tgt::ivec2(-1)) {
        for (size_t i=0; i<privateRenderPorts_.size(); i++)
            privateRenderPorts_.at(i)->resize(resizeDim);
    }
}
Ejemplo n.º 5
0
std::vector<Port*> Processor::getPorts() const {
    std::vector<Port*> result;

    const std::vector<Port*> inports = getInports();
    result.insert(result.begin(), inports.begin(), inports.end());

    const std::vector<Port*> outports = getOutports();
    result.insert(result.end(), outports.begin(), outports.end());

    const std::vector<CoProcessorPort*> coProcessorInports = getCoProcessorInports();
    result.insert(result.begin(), coProcessorInports.begin(), coProcessorInports.end());

    const std::vector<CoProcessorPort*> coProcessorOutports = getCoProcessorOutports();
    result.insert(result.end(), coProcessorOutports.begin(), coProcessorOutports.end());

    return result;
}