void ViewerNode::updateViewer(const UpdateViewerArgs& args) { OpenGLViewerI* uiContext = getUiContext(); assert(uiContext); uiContext->clearPartialUpdateTextures(); for (int i = 0; i < 2; ++i) { RectD rod; NodePtr viewerProcessNode = _imp->internalViewerProcessNode[i].lock(); GetRegionOfDefinitionResultsPtr actionResults; ActionRetCodeEnum stat = viewerProcessNode->getEffectInstance()->getRegionOfDefinition_public(args.time, RenderScale(1.), args.view, &actionResults); if (!isFailureRetCode(stat)) { rod = actionResults->getRoD(); } for (std::list<UpdateViewerArgs::TextureUpload>::const_iterator it = args.viewerUploads[i].begin(); it!= args.viewerUploads[i].end(); ++it) { OpenGLViewerI::TextureTransferArgs transferArgs; transferArgs.image = it->image; transferArgs.colorPickerImage = it->colorPickerImage; transferArgs.colorPickerInputImage = it->colorPickerInputImage; transferArgs.textureIndex = i; transferArgs.time = args.time; transferArgs.view = args.view; transferArgs.rod = rod; transferArgs.recenterViewer = args.recenterViewer; transferArgs.viewportCenter = args.viewerCenter; transferArgs.viewerProcessNodeKey = it->viewerProcessImageKey; transferArgs.type = args.type; uiContext->transferBufferFromRAMtoGPU(transferArgs); } } }
void TrackMarker::resetCenter() { KnobItemsTablePtr model = getModel(); if (!model) { return; } RectD rod; NodePtr input = model->getNode()->getInput(0); if (!input) { Format f; getApp()->getProject()->getProjectDefaultFormat(&f); rod = f.toCanonicalFormat(); } else { TimeValue time(input->getApp()->getTimeLine()->currentFrame()); RenderScale scale(1.); RectD rod; { GetRegionOfDefinitionResultsPtr results; ActionRetCodeEnum stat = input->getEffectInstance()->getRegionOfDefinition_public(time, scale, ViewIdx(0), &results); if (!isFailureRetCode(stat)) { rod = results->getRoD(); } } Point center; center.x = 0; center.y = 0; center.x = (rod.x1 + rod.x2) / 2.; center.y = (rod.y1 + rod.y2) / 2.; KnobDoublePtr centerKnob = getCenterKnob(); centerKnob->setValue(center.x, ViewSetSpec::all(), DimIdx(0)); centerKnob->setValue(center.y, ViewSetSpec::all(), DimIdx(1)); } }