Avoid filling up buffers when total buffer triangles are zero.
Better still would be to tag a node as hidden when doing recreation of
the PBVH tree by checking for any visible elements. Original bug report
probably has to do with OpenGL doing something funky but hidden nodes
should be tagged as hidden to completely avoid iterating for painting.
This is to be done in a later commit.
Also some naming cleanup for consistency, GPU_build_pbvh_mesh_buffers to
GPU_build_mesh_pbvh_buffers.
from particle edit mode.
Check for object particle edit mode, not psys->edit. This won't get
freed on exit (which might be worth considering doing, maybe?)
* If channel_index = -1, the pushdown operator will try to use the active AnimData
block. To see which one this will be, check the properties (NKEY) region in NLA Editor.
* Added more detailed error handling for the various cases where things are not
in a valid state for pushing down an action. This is notably to stop scripters
from putting the NLA into an inconsistent state.
This now works (barring one or two minor glitches and the operator on the pushdown
button being a bit of a hack). The old drawing code is still in place though, and
will be kept around for a little while yet while the last kinks are ironed out.
This commit lays some of the groundwork needed to port the last of the NLA Editor
channel types that's still defined using custom code. By moving this code over
to the newer standardised framework, this will enable widgets to have tooltips
to make it easier for users to find out what various buttons do.
Currently this isn't hooked up to anything though.
Updating object IPOs is not currently thread-safe since it also updates
children. This leads to problems when parents and children are both
animated. For now, updating object IPOs is done in its own loop to avoid
threading issues.
Instead of displaying the "tweaking action" status indicator icon on the right hand
side jammed against the mapping/no-mapping toggle (pin), this is now displayed as in
place of the action icon used on the left (as the type indicator). This is less messy
than the previous situation, which was needed partly due to the abuse of an unsuited
icon.
1) The "pushdown" operation is the actual name for the functionality
previously represented by the snowflake. That is, pushing the active
action onto the NLA stack as a new strip.
The icon that is introduced here is the icon I originally wanted to
use here for this purpose (but couldn't at the time the NLA was coded
as we didn't have the master SVG available yet). I'm making this change
now to hopefully make the "animation-layers" intentions behind the NLA
design a lot clearer than they have been so far.
2) Also added a dedicated icon for representing that the active action
is in the "tweaking" state (i.e. we're editing a particular strip's
action). Previously we were abusing an icon designed for an entirely
different purpose, mainly since its identifier looked like it would work.
* The automatically calculated influence was overriding the value we were passing
into the dummy strip, making this seem like it doesn't work
* Made some tweaks to prevent some potential memory-related bugs
- nlastrips_ctime_get_strip() actually saves off references to the list of strips
it gets, so declaring dummy_strip in an inner scope like this could potentially
be quite dangerous
- Prevented a potential memory leak for the early abort when there are no strips
for whatever reason (it shouldn't occur though)
The issue has been introduced in 0985bb4, made it so curves and masks
stick to old behavior.
FCurves are still flaky, namely, grabbing both handles selected would
change the length of one of the handles which is not nice imo.
The issue was caused by the temporary CD layers being allocated for subsurf
meshes, same as we've got back in 881fb43.
In the long run this temporary storage is to be re-considered, but it'll also
imply re-considering of the Derivedmesh interaction as well. For now let's
use a simpler solution which is forbidding modifiers to call getArray for other
objects' derivedMeshes but use an API calls which would allocate local copy of
the data preventing race condition of shared data in DM.