Commit Graph

49420 Commits

Author SHA1 Message Date
Brecht Van Lommel
42f6136da8 Fix #35991: show warning message to when trying to edit driven values in number buttons. 2013-07-03 20:37:07 +00:00
Gaia Clary
7eed4d5c4f Fix Weight Paint(Weight-Transfer): active vgroup does not match active bone when new vgroups where created during transfer 2013-07-03 20:31:38 +00:00
Brecht Van Lommel
3181c4ecd5 Fix #35935: make links > groups, which copies group membership between objects,
would also copy object dupligroups (next item in the menu).
2013-07-03 17:16:24 +00:00
Brecht Van Lommel
76b3f6edcc Fix #35933: setting shortcut keys in object mode menu didn't work correct. 2013-07-03 17:11:33 +00:00
Brecht Van Lommel
721237cf29 Fix #35986: "Full sample AA not supported without 3d rendering" message was
displayed even with antialiasing disabled.
2013-07-03 17:02:09 +00:00
Sergey Sharybin
c9e56955cf Fix deadlock in coordinate wrapping operation with zero dimension 2013-07-03 15:33:14 +00:00
Sergey Sharybin
9b72621958 Fix crash when getting active ID from a node tree with missing groups 2013-07-03 15:33:11 +00:00
Sergey Sharybin
5185a82e4d Merging r57954 through r57961 from trunk into soc-2013-depsgraph_mt 2013-07-03 12:38:30 +00:00
Sergey Sharybin
98ff660186 Code cleanup: more explicit list base initialization 2013-07-03 12:33:28 +00:00
Sergey Sharybin
2fe0981fad Made curves almost thread-safe
Now modifier stack wouldn't modify original curve's nurbs
and will operate on a copy of nurbs.

This makes it possible to process curve object update with
shared curve datablocks from multiple threads. There's no
big overhead for creating a copy of nurbs comparing to old
behavior which was allocating original vertex array and
apply coordinates on curve after all modifier are applied.

The only remained issue with curves is curve's bounding box
and texture space. It's not thread-safe, but it wouldn't
lead to crashes -- it just could lead to either memory
leak or wrong texture coordinates due to difference in
modifiers stacks of objects which shares the same curve.
2013-07-03 12:32:42 +00:00
Sergey Sharybin
fc4c736989 Remove unused argument from utility curve functions
So far it was harmless, but with upcoming changes
having this argument could be confusing from logic
point of view.
2013-07-03 12:32:35 +00:00
Sergey Sharybin
d595f9985e Wrap runtime curve members into own structure
This allows easier assignment on file loading,
keeps curve-specific runtime data grouped and
saves couple of bytes in Object for non-curve
types.
2013-07-03 12:32:29 +00:00
Sergey Sharybin
f49e441927 Get rid of crazy DAG nodes coloring when doing threaded update
DAG node already has got type field, so we could just check whether
type is ID_OB to distinguish whether object_handle_update need to
be called for node->ob.

This saves iterating via scene's bases when preparing threaded
update. This also will very much likely update objects which are
not in the scene base are used in dupli groups.

So now objects form dupli_groups are likely already properly updated
white traversing the DAG with threaded update and special hacks
are needed from main thread to update objects from dupli_groups
which was added in previous commit.

However, kept this hack for a while, need some more thoughts
and investigation.
2013-07-03 12:32:17 +00:00
Campbell Barton
6d9de6a72b fix [#35975] "Select Linked" = "Select All" in Weight Paint mode?
looks like this was broken since bmesh merge.
2013-07-03 09:53:06 +00:00
Sergey Sharybin
4e9d469dfd Merging r57934 through r57953 from trunk into soc-2013-depsgraph_mt 2013-07-03 08:31:46 +00:00
Campbell Barton
905cb1639a update doxygen congfig and tweaks to warnings when running doxygen. 2013-07-03 04:47:50 +00:00
Campbell Barton
e60a33ba07 fix for own error in 57226, broke subsurf-uv 2013-07-02 21:47:42 +00:00
Campbell Barton
4848ca09c0 style cleanup 2013-07-02 20:36:52 +00:00
Sergey Sharybin
7c7a3f7879 Fix for dupli-groups update going wrong
Dupli-groups used to have special case for updating
which is BKE_group_handle_recalc_and_update. This
function calls BKE_object_handle_update for every
object in the group.

This isn't thread-safe, because object could be
updating in separate thread already. And what's
worse dependencies are not known for objects inside
the group, which makes it impossible to schedule
objects from the group in a safe way.

It's even impossible to schedule groups as different
tasks, because groups could share the same objects.

For now used simple but robust solution which is
updating dupli-groups in main thread, handling
groups one-by-one and updating objects from the
group one-by-one as well.

Will work on a proper solution for this later.
2013-07-02 19:23:23 +00:00
Sergey Sharybin
e4f7260bac Move bevel list and path from Curve to Object datablock
I know this is not so much nice to have this guys hanging
around in a general Object datablock and ideally they better
be wrapped around into a structure like DerivedMesh or
something like this. But this is pure runtime only stuff and
we could re-wrap them around later.

Main purpose of this is making curves more thread safe,
so no separate threads will ever start freeing the same path
or the same bevel list.

It also makes sense because path and bevel shall include
deformation coming from modifiers which are applying on
pre-tesselation point and different objects could have
different set of modifiers. This used to be really confusing
in the past and now dtaa which depends on object is stored
in an object, making things clear for understanding even.

This doesn't make curve code fully thread-safe due to
pre-tesselation modifiers still modifies actual nurbs and
lock is still needed in makeDispListsCurveTypes, but this
change makes usage of paths safe for threading.

Once modifiers will stop modifying actual nurbs, curves
will be fully safe for threading.
2013-07-02 19:23:19 +00:00
Sergey Sharybin
79c678be89 Fix issue when the same task gets added twice to the queue
Issue was caused by worker threads updating nodes valency
at the same time while we're filling the queue with "root"
nodes (leaf nodes which don't depend on others).
2013-07-02 19:23:12 +00:00
Sergey Sharybin
bae2a2c3b2 Added missing mutex lock around do_exit assignment in task scheduler
Without this lock it's possible that thread_wait_pop will stuck
at the point where it await for new task in the queue but in
fact exit was requested already.

This ended up in deadlock in some circumstances. Really random
because it totally depends on timings.
2013-07-02 19:23:09 +00:00
Sergey Sharybin
a03437cb1a Initial idea of running post-modifiers out of lock wasn't correct
The tihng here is: curve is getting modified by modifier stack
and then it's coordinates are restored. To be really safe we
need to do all this locked.
2013-07-02 19:23:06 +00:00
Sergey Sharybin
d50ff36d3d Add workaroud to make threaded object update stable
Added threading lock around unsafe part of do_makeDispListCurveTypes
(parts which touches Curve->bev and Curve->path). Namely it means
pre-tesselation modifiers, bevel, path and non-modified display
list will be calculated inside a locked thread.

Post-tessellation modifiers will eb calculated outside of locked
thread, which means heavy constructive or deformation modifiers
applying on tesselated spline will be nicely threaded.

This makes it possible to use threaded object update by default
in the branch, so everyone could start testing it.
2013-07-02 19:23:03 +00:00
Sergey Sharybin
41f0c137ba Get rid of a display list stored in Curve datablock
This display list was only used for texture space calculation,
and even there this display list was only used for bounding
box calulation.

Since we alreayd do have boundgind box in a curve datablock
there's no reason to duplicate non-modified display list
just to calculate bounding box later, let's just calculate
boundding box at the first point.

This makes code a little be more thread-safe but curves are
still not safe for threads at all because of bevel list and
path. That would be solved later.
2013-07-02 19:22:59 +00:00
Sergey Sharybin
6d9366b0a7 Always use ob->bb when drawing the curve types
It used to be a check for ob->bb ? ob->bb : cu->bb but
in fact it doesn't make sense and only makes code more
crappy.

Making displist for mballs and curves/surfaces/fonts
already ensures object has walid bounding box.
2013-07-02 19:22:55 +00:00
Sergey Sharybin
e607825f6b Replace mutex lock with spinlock in threaded object update
It's not so much happening inside the lock and using spin
lock instead of mutex lock will give some speedup due to
smaller latency of resuming the thread when mutex was locked.
2013-07-02 19:22:52 +00:00
Sergey Sharybin
06e2d967ae Simplify debug print macro in WM even system 2013-07-02 19:22:49 +00:00
Sergey Sharybin
f129393408 Put debug prints in threaded debug into G.debug & G_DEBUG check. 2013-07-02 19:22:46 +00:00
Sergey Sharybin
8c67e9d799 Merging r57925 through r57933 from trunk into soc-2013-depsgraph_mt 2013-07-02 19:18:10 +00:00
Brecht Van Lommel
a30dc7c74e Fix #35966: remesh modifier + particle use modifier stack option did not work
well together.
2013-07-02 19:17:34 +00:00
Brecht Van Lommel
d6c14ed855 Fix #35964: viewport render not updating with linking materials with ctrl+L. 2013-07-02 17:21:40 +00:00
Brecht Van Lommel
6449af5d38 Fix #35958: texture timeout with value 0 not preserved when saving user preferences. 2013-07-02 16:02:56 +00:00
Brecht Van Lommel
1a493533c3 Fix #35944: adding keyframes or drivers on image sequences offset did not work
for cycles image texture node.
2013-07-02 15:56:32 +00:00
Howard Trickey
994a937a97 Fix Bevel bug #34321, making bevel keep UVs contiguous when possible. 2013-07-02 13:18:56 +00:00
Brecht Van Lommel
08225cf670 Fix #35954: missing cycles viewport render update when changing the object
or material pass index.
2013-07-02 12:52:37 +00:00
Campbell Barton
418011907c remove nan copyrights from code added since blender become opensource (copy paste errors), also remove BKE_script.h 2013-07-02 10:14:59 +00:00
Campbell Barton
1f091fd234 add missing gpl headers 2013-07-02 09:47:22 +00:00
Campbell Barton
7e73b6b701 fix for error reading defaults from custom properties, would read out of bounds memory.
recent change to animsys r57904 exposed this error in some sintel files.
2013-07-02 08:06:45 +00:00
Sergey Sharybin
311d4e15ec Merging r57897 through r57924 from trunk into soc-2013-depsgraph_mt 2013-07-02 06:40:05 +00:00
Campbell Barton
83411dab07 fix for crash in demo-mode, caused by r51702 2013-07-02 05:54:28 +00:00
Campbell Barton
4c779f72f3 remove unused defines 2013-07-02 05:14:18 +00:00
Campbell Barton
b96aa8800e bump up openmp limit for release,
also remove 'Vertex ' prefix for items in the vertex menu.
2013-07-02 04:34:39 +00:00
Campbell Barton
d0ce73c548 fix [#35939] [Edit - Vertex mode] [Select]-[Mirror] did not returns right result. 2013-07-01 21:56:59 +00:00
Sergey Sharybin
ded22d7060 Replace stupid static balancing with task-based one
Initially i wanted to have some really simple and basic
threading scheduler and wrote one based on traversing
depsgraph in advance. But it ended up in some issues with
the single-pass traverse i did which didn't gather all
the dependencies actually.

That was for sure solvable, but it ended up in a bit of
time consuming thing and with huge help of Brecht's
patch it was faster just to write proper balancing.

But it's again really basic thing, which could be
easily changed depending on feedback and design decisions
from Joshua,

So for now it works in the following way:

- Currently DagNode is used for threaded evaluaiton,
  meaning traversing actually happens for DagNodes.

  This is easier than converting DAG to a graph where
  only objects are stored, but required adding one int
  field to DagNode for faster runtime checks.

  We could change this later when it'll be clear how
  and where we'll store evaluation data, but for now
  it work pretty ok.

- The new field is called "valency" and it's basically
  number of node parents which needs to be evaluated
  before the node itself could be evaluated.

- Nodes' valency is getting initialized before threading,
  and when node finished to update valency of it's childs
  is getting decreased by one. And if it happens so
  child's valency became zero, it's adding to task pool.

- There's thread lock around valency update, it'll be
  replaced with spinlock in nearest future.

- Another update runtime data is node color. White nodes
  represents objects, gray one non-objects.

  Currently it's needed to distinguish whether we need to
  call object_handle_update on node->ob or not. In the
  future it could be replaced with node->type to support
  granularity, meaning we then could update object data
  separately from object itself.

- Needed to add some public depsgraph functions to make
  it possible to traverse depsgraph without including
  depsgraph private header to other files.

This change doesn't make code anyhow more stable, but
solves update order issues noticed while working on
fixing underlying bugs.

Threaded update is still ifdef-ed for until curves and
armatures are considered thread-safe, which is next
step to be done.
2013-07-01 21:23:25 +00:00
Sergey Sharybin
e00f5d1c0a Task scheduler ported to C
Patch by Brecht, which in original version also
gets rid of ThreadedWorker in favor of new task
scheduler and ports some areas to it.

Kudos to Brecht for this work!
2013-07-01 21:23:20 +00:00
Campbell Barton
3d845b4a17 move api functions from r57909 into BKE. 2013-07-01 20:27:03 +00:00
Gaia Clary
11145c7c22 Restrict Weight Edit Panel to mesh/lattice Edit and Weight Paint vertex selection mode 2013-07-01 19:30:41 +00:00
Thomas Dinges
465a7195b4 Merged revision(s) 57828-57907 from trunk/blender into soc-2013-dingto 2013-07-01 15:23:48 +00:00
Joshua Leung
472f746485 NLA Bugfix: When clicking on a channel name in the channel list while still in
tweakmode, this will now result in tweakmode being exited instead of going into
a weird limbo-land where channel selection has changed (but tweakmode is still
active but not drawn)
2013-07-01 14:58:59 +00:00