Skip to content

Commit

Permalink
Fix dirtying issues in affects() methods
Browse files Browse the repository at this point in the history
Attributes `affects` relationships have been corrected to fix
dirtying issues in Gaffer 0.58+.
  • Loading branch information
fdagenais-cinesite committed Nov 27, 2020
1 parent aebf15d commit 83ceb58
Show file tree
Hide file tree
Showing 3 changed files with 68 additions and 52 deletions.
7 changes: 7 additions & 0 deletions include/AtomsGaffer/AtomsCrowdGenerator.h
Original file line number Diff line number Diff line change
Expand Up @@ -81,24 +81,31 @@ class AtomsCrowdGenerator : public GafferScene::BranchCreator
void hash( const Gaffer::ValuePlug *output, const Gaffer::Context *context, IECore::MurmurHash &h ) const override;
void compute( Gaffer::ValuePlug *output, const Gaffer::Context *context ) const override;

bool affectsBranchBound( const Gaffer::Plug *input ) const override;
void hashBranchBound( const ScenePath &parentPath, const ScenePath &branchPath, const Gaffer::Context *context, IECore::MurmurHash &h ) const override;
Imath::Box3f computeBranchBound( const ScenePath &parentPath, const ScenePath &branchPath, const Gaffer::Context *context ) const override;

bool affectsBranchTransform( const Gaffer::Plug *input ) const override;
void hashBranchTransform( const ScenePath &parentPath, const ScenePath &branchPath, const Gaffer::Context *context, IECore::MurmurHash &h ) const override;
Imath::M44f computeBranchTransform( const ScenePath &parentPath, const ScenePath &branchPath, const Gaffer::Context *context ) const override;

bool affectsBranchAttributes( const Gaffer::Plug *input ) const override;
void hashBranchAttributes( const ScenePath &parentPath, const ScenePath &branchPath, const Gaffer::Context *context, IECore::MurmurHash &h ) const override;
IECore::ConstCompoundObjectPtr computeBranchAttributes( const ScenePath &parentPath, const ScenePath &branchPath, const Gaffer::Context *context ) const override;

bool affectsBranchObject( const Gaffer::Plug *input ) const override;
void hashBranchObject( const ScenePath &parentPath, const ScenePath &branchPath, const Gaffer::Context *context, IECore::MurmurHash &h ) const override;
IECore::ConstObjectPtr computeBranchObject( const ScenePath &parentPath, const ScenePath &branchPath, const Gaffer::Context *context ) const override;

bool affectsBranchChildNames( const Gaffer::Plug *input ) const override;
void hashBranchChildNames( const ScenePath &parentPath, const ScenePath &branchPath, const Gaffer::Context *context, IECore::MurmurHash &h ) const override;
IECore::ConstInternedStringVectorDataPtr computeBranchChildNames( const ScenePath &parentPath, const ScenePath &branchPath, const Gaffer::Context *context ) const override;

bool affectsBranchSetNames( const Gaffer::Plug *input ) const override;
void hashBranchSetNames( const ScenePath &parentPath, const Gaffer::Context *context, IECore::MurmurHash &h ) const override;
IECore::ConstInternedStringVectorDataPtr computeBranchSetNames( const ScenePath &parentPath, const Gaffer::Context *context ) const override;

bool affectsBranchSet( const Gaffer::Plug *input ) const override;
void hashBranchSet( const ScenePath &parentPath, const IECore::InternedString &setName, const Gaffer::Context *context, IECore::MurmurHash &h ) const override;
IECore::ConstPathMatcherDataPtr computeBranchSet( const ScenePath &parentPath, const IECore::InternedString &setName, const Gaffer::Context *context ) const override;

Expand Down
2 changes: 2 additions & 0 deletions src/AtomsGaffer/AtomsCrowdClothReader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,8 @@ const IntPlug* AtomsCrowdClothReader::refreshCountPlug() const

void AtomsCrowdClothReader::affects( const Plug *input, AffectedPlugsContainer &outputs ) const
{
SceneProcessor::affects(input, outputs);

if( input == inPlug()->objectPlug() || input == inPlug()->attributesPlug() ||
input == atomsClothFilePlug() || input == refreshCountPlug() )
{
Expand Down
111 changes: 59 additions & 52 deletions src/AtomsGaffer/AtomsCrowdGenerator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -139,62 +139,12 @@ void AtomsCrowdGenerator::affects( const Plug *input, AffectedPlugsContainer &ou
if(
input == inPlug()->objectPlug() ||
input == inPlug()->attributesPlug() ||
input == variationsPlug()->childNamesPlug()
input == variationsPlug()->childNamesPlug() ||
input == useInstancesPlug()
)
{
outputs.push_back( agentChildNamesPlug() );
}

if(
input == namePlug() ||
input == agentChildNamesPlug() ||
input == variationsPlug()->childNamesPlug()
)
{
outputs.push_back( outPlug()->childNamesPlug() );
}

if(
input == inPlug()->objectPlug() ||
input == inPlug()->attributesPlug() ||
input == namePlug() ||
input == variationsPlug()->boundPlug() ||
input == variationsPlug()->transformPlug() ||
input == agentChildNamesPlug() ||
input == boundingBoxPaddingPlug() ||
input == clothCachePlug()->objectPlug()
)
{
outputs.push_back( outPlug()->boundPlug() );
}

if(
input == inPlug()->objectPlug() ||
input == inPlug()->attributesPlug() ||
input == variationsPlug()->transformPlug()
)
{
outputs.push_back( outPlug()->transformPlug() );
}

if(
input == variationsPlug()->attributesPlug() ||
input == inPlug()->objectPlug() ||
input == inPlug()->attributesPlug()
)
{
outputs.push_back( outPlug()->attributesPlug() );
}

if( input == variationsPlug()->objectPlug() ||
input == variationsPlug()->attributesPlug() ||
input == inPlug()->objectPlug() ||
input == inPlug()->attributesPlug() ||
input == clothCachePlug()->objectPlug()
)
{
outputs.push_back( outPlug()->objectPlug() );
}
}

void AtomsCrowdGenerator::hash( const Gaffer::ValuePlug *output, const Gaffer::Context *context, MurmurHash &h ) const
Expand Down Expand Up @@ -371,6 +321,19 @@ void AtomsCrowdGenerator::compute( Gaffer::ValuePlug *output, const Gaffer::Cont
BranchCreator::compute( output, context );
}

bool AtomsCrowdGenerator::affectsBranchBound( const Gaffer::Plug *input ) const
{
return ( input == inPlug()->objectPlug() ||
input == inPlug()->attributesPlug() ||
input == inPlug()->boundPlug() ||
input == namePlug() ||
input == variationsPlug()->boundPlug() ||
input == variationsPlug()->transformPlug() ||
input == agentChildNamesPlug() ||
input == boundingBoxPaddingPlug() ||
input == clothCachePlug()->objectPlug() );
}

void AtomsCrowdGenerator::hashBranchBound( const ScenePath &parentPath, const ScenePath &branchPath, const Gaffer::Context *context, MurmurHash &h ) const
{
if( branchPath.size() < 4 )
Expand Down Expand Up @@ -518,6 +481,13 @@ Imath::Box3f AtomsCrowdGenerator::computeBranchBound( const ScenePath &parentPat
}
}

bool AtomsCrowdGenerator::affectsBranchTransform( const Gaffer::Plug *input ) const
{
return ( input == inPlug()->objectPlug() ||
input == inPlug()->attributesPlug() ||
input == variationsPlug()->transformPlug() );
}

void AtomsCrowdGenerator::hashBranchTransform( const ScenePath &parentPath, const ScenePath &branchPath, const Gaffer::Context *context, MurmurHash &h ) const
{

Expand Down Expand Up @@ -565,6 +535,13 @@ Imath::M44f AtomsCrowdGenerator::computeBranchTransform( const ScenePath &parent
}
}

bool AtomsCrowdGenerator::affectsBranchAttributes( const Gaffer::Plug *input ) const
{
return ( input == variationsPlug()->attributesPlug() ||
input == inPlug()->objectPlug() ||
input == inPlug()->attributesPlug() );
}

void AtomsCrowdGenerator::hashBranchAttributes( const ScenePath &parentPath, const ScenePath &branchPath, const Gaffer::Context *context, MurmurHash &h ) const
{
if( branchPath.size() < 1 )
Expand Down Expand Up @@ -842,6 +819,16 @@ ConstCompoundObjectPtr AtomsCrowdGenerator::computeBranchAttributes( const Scene
}
}

bool AtomsCrowdGenerator::affectsBranchObject( const Gaffer::Plug *input ) const
{
return ( input == variationsPlug()->objectPlug() ||
input == variationsPlug()->attributesPlug() ||
input == inPlug()->objectPlug() ||
input == inPlug()->attributesPlug() ||
input == clothCachePlug()->objectPlug() ||
input == useInstancesPlug() );
}

void AtomsCrowdGenerator::hashBranchObject( const ScenePath &parentPath, const ScenePath &branchPath, const Gaffer::Context *context, MurmurHash &h ) const
{
if( branchPath.size() <= 4 )
Expand Down Expand Up @@ -1030,6 +1017,13 @@ ConstObjectPtr AtomsCrowdGenerator::computeBranchObject( const ScenePath &parent
return result;
}

bool AtomsCrowdGenerator::affectsBranchChildNames( const Gaffer::Plug *input ) const
{
return ( input == namePlug() ||
input == agentChildNamesPlug() ||
input == variationsPlug()->childNamesPlug() );
}

void AtomsCrowdGenerator::hashBranchChildNames( const ScenePath &parentPath, const ScenePath &branchPath, const Gaffer::Context *context, MurmurHash &h ) const
{
if( branchPath.empty() )
Expand Down Expand Up @@ -1128,6 +1122,11 @@ ConstInternedStringVectorDataPtr AtomsCrowdGenerator::computeBranchChildNames( c
}
}

bool AtomsCrowdGenerator::affectsBranchSetNames( const Gaffer::Plug *input ) const
{
return ( input == variationsPlug()->setNamesPlug() );
}

void AtomsCrowdGenerator::hashBranchSetNames( const ScenePath &parentPath, const Gaffer::Context *context, MurmurHash &h ) const
{
h = variationsPlug()->setNamesPlug()->hash();
Expand All @@ -1138,6 +1137,14 @@ ConstInternedStringVectorDataPtr AtomsCrowdGenerator::computeBranchSetNames( con
return variationsPlug()->setNamesPlug()->getValue();
}

bool AtomsCrowdGenerator::affectsBranchSet( const Gaffer::Plug *input ) const
{
return ( input == variationsPlug()->childNamesPlug() ||
input == agentChildNamesPlug() ||
input == variationsPlug()->setPlug() ||
input == namePlug() );
}

void AtomsCrowdGenerator::hashBranchSet( const ScenePath &parentPath, const InternedString &setName, const Gaffer::Context *context, MurmurHash &h ) const
{
BranchCreator::hashBranchSet( parentPath, setName, context, h );
Expand Down

0 comments on commit 83ceb58

Please sign in to comment.