Hello,
I noticed that the Shader Effector always returns true for IsDirty(DIRTYFLAGS::DATA)
. Even if it doesn't do anything.
This somehow destroys caching in our plugins that support Effectors.
Test it by simply creating a scene with just a Shader Effector, attaching a Python Tag to the effector, and putting in this code:
import c4d
def main():
effectorOp = doc.SearchObject("Shader")
dirtyMatrix = effectorOp.IsDirty(c4d.DIRTYFLAGS_MATRIX)
dirtyData = effectorOp.IsDirty(c4d.DIRTYFLAGS_DATA)
dirtyCache = effectorOp.IsDirty(c4d.DIRTYFLAGS_CACHE)
dirtyAll = effectorOp.IsDirty(c4d.DIRTYFLAGS_ALL)
print(str(effectorOp))
print("dirtyMatrix: " + str(dirtyMatrix) + ", " + "dirtyData: " + str(dirtyData) + ", " + "dirtyCache: " + str(dirtyCache) + ", " + "dirtyAll: " + str(dirtyAll))
Any time the tag is executed (be it by playing back the animation, changing anything in the scene, or just by wildly waving the mouse around), DIRTYFLAGS_DATA
returns true
.
Is there any way to know if the Effector is actually dirty?
Thanks & greetings,
Frank