MCPcopy Create free account
hub / github.com/NatronGitHub/Natron / tryConcatenateTransforms

Method tryConcatenateTransforms

Engine/EffectInstance.cpp:1868–1976  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1866} // EffectInstance::getImageFromCacheAndConvertIfNeeded
1867
1868void
1869EffectInstance::tryConcatenateTransforms(double time,
1870 bool draftRender,
1871 ViewIdx view,
1872 const RenderScale & scale,
1873 InputMatrixMap* inputTransforms)
1874{
1875 bool canTransform = getNode()->getCurrentCanTransform();
1876
1877 //An effect might not be able to concatenate transforms but can still apply a transform (e.g CornerPinMasked)
1878 std::list<int> inputHoldingTransforms;
1879 bool canApplyTransform = getInputsHoldingTransform(&inputHoldingTransforms);
1880
1881 assert(inputHoldingTransforms.empty() || canApplyTransform);
1882
1883 Transform::Matrix3x3 thisNodeTransform;
1884 EffectInstancePtr inputToTransform;
1885 bool getTransformSucceeded = false;
1886
1887 if (canTransform) {
1888 /*
1889 * If getting the transform does not succeed, then this effect is treated as any other ones.
1890 */
1891 StatusEnum stat = getTransform_public(time, scale, draftRender, view, &inputToTransform, &thisNodeTransform);
1892 if (stat == eStatusOK) {
1893 getTransformSucceeded = true;
1894 }
1895 }
1896
1897
1898 if ( (canTransform && getTransformSucceeded) || ( !canTransform && canApplyTransform && !inputHoldingTransforms.empty() ) ) {
1899 for (std::list<int>::iterator it = inputHoldingTransforms.begin(); it != inputHoldingTransforms.end(); ++it) {
1900 EffectInstancePtr input = getInput(*it);
1901 if (!input) {
1902 continue;
1903 }
1904 std::list<Transform::Matrix3x3> matricesByOrder; // from downstream to upstream
1905 InputMatrix im;
1906 im.newInputEffect = input;
1907 im.newInputNbToFetchFrom = *it;
1908
1909
1910 // recursion upstream
1911 bool inputCanTransform = false;
1912 bool inputIsDisabled = input->getNode()->isNodeDisabled();
1913
1914 if (!inputIsDisabled) {
1915 inputCanTransform = input->getNode()->getCurrentCanTransform();
1916 }
1917
1918
1919 while ( input && (inputCanTransform || inputIsDisabled) ) {
1920 //input is either disabled, or identity or can concatenate a transform too
1921 if (inputIsDisabled) {
1922 int prefInput;
1923 input = input->getNearestNonDisabled();
1924 prefInput = input ? input->getNode()->getPreferredInput() : -1;
1925 if (prefInput == -1) {

Callers 1

getInputsRoIsFunctorMethod · 0.80

Calls 15

matMulFunction · 0.85
emptyMethod · 0.80
isNodeDisabledMethod · 0.80
getNearestNonDisabledMethod · 0.80
getPreferredInputMethod · 0.80
getTransform_publicMethod · 0.80
getNodeFunction · 0.70
beginMethod · 0.45
endMethod · 0.45
getNodeMethod · 0.45

Tested by

no test coverage detected