PDA

View Full Version : API: instant data update without downstream request


sciLoop
09-20-2010, 09:15 AM
Hi guys!

For viewport display ( openGL ) of some data I want my node to do calculations without a output trigger.

Obviously, we have 3 ways of generally getting a custom node to do something.
1. valid for all MPxNodes:
Use "attributeAffects"/"setDependentsDirty"
Then we need a downstream node which asks for information.
That way, the "::compute" is called

2. valid only for MPxTransform
Set a input attribute with "::mustCallValidateAndSetValue"
Then we do not need another node to request for data update.
By simply changing the input attribute, the "::validateAndSetValue" is called and we can do the calculation there ( if the attribute is the child of another attribute, the "::compute" is called insted ).

3. valid for all MPxNodes
Set a input attribute with "::setInternal".
The behaviour here is different under different conditions.
a. The input attribute is not connected to a upstream attribute.
Then, when the value of the attribute is changed directly, the "::setInternalValueInContext" is immediately called and we can do calculations there.
b. The input attribute is connected to a upstream attribute.
Then, when the upstream attribute is changed, nothing happens to our attribute ( its just set to "dirty" ).
So, the bahaviour is not consistent here. I have no idea why this is so.
If the developers of Maya don`t want a "normal" node to do anything when there`s no downstream request, then why can we do calculations in the case of 3.a.?


As the title says, I need the node to do calculations for ( instant ) viewport display of some data.
I know I can create a "fake" downstream node, which starts evaluation and asks my node for computation. And I know that I could create callbacks for the attributes. But thats a really bad workaround. I don`t want one more node in my scene just for the purpose of constantly asking the main node for evaluation and I don`t want 15 callbacks permanently running for monitoring changes in the attributes.

I know the "philosophy" behind the DG evaluation ( do only computation when it must be done ). But that doesn`t take into account the case where I want a immediate openGL update of my data.

So, does anyone know other ways we could get a custom MPxNode to do calculations without a downstream request?


thanks!

CGTalk Moderation
09-20-2010, 09:15 AM
This thread has been automatically closed as it remained inactive for 12 months. If you wish to continue the discussion, please create a new thread in the appropriate forum.