Commit Graph

18975 Commits

Author SHA1 Message Date
Campbell Barton
724370b2f9 Cleanup: use BLI_path_join in appdir.c to simplify logic
Change `test_path` function so:

- Joining paths calls a function instead of being performed inline.
- Optional NULL paths must always be ordered last (easier to follow).

Other minor changes:

- Remove FIXME comment is it's handled properly by BLI_path_join.
- The wrong size was being used copying into `targetpath`.
2020-10-04 00:45:35 +10:00
Julian Eisel
0bae2662f4 Cleanup: Remove/replace C standard library assert() and header usages
We have our own assert implementation, `BLI_assert()` that is prefered over the
C standard library one. Its output is more consistent across compilers and
makes termination on assert failure optional (through `WITH_ASSERT_ABORT`).

In many places we'd include the C library header without ever accessing it.
2020-10-03 16:10:15 +02:00
Campbell Barton
44397a683c Cleanup: use doxy sections for appdir.c
Keep related functionality grouped.
2020-10-03 21:12:52 +10:00
Campbell Barton
f29e9e0d3c Cleanup: comments for appdir
Use doxy syntax & minor improvements.
2020-10-03 21:09:44 +10:00
Campbell Barton
0863ae0a58 Cleanup: move temp directory environment checks into a loop
Minimizes ifdef'd code for WIN32.
2020-10-03 18:50:42 +10:00
Campbell Barton
9b602a8020 Preferences: remove temp directory initialization for WIN32
Revert 76b1a27f96 since there is no
reason windows should behave differently to other platforms.

This was added so Windows users wouldn't see "/tmp/" in the UI.

Since then the default temporary directory is a blank string,
leave blank on all systems as Python script authors may accidentally
use this instead of `bpy.app.tempdir`.
2020-10-03 18:50:35 +10:00
Campbell Barton
10ae2ea4ae Cleanup: remove unused temp directory initialization
This last worked in v2.27 (2003) where all paths were initialized to "/"
which was still checked to initialize the temp directory.

This hasn't been the case since 932e9e8316
where it changed to "/tmp/", then an empty string (current default).
2020-10-03 18:49:15 +10:00
Campbell Barton
28a2c84948 Cleanup: remove unused code in blend file loading
v2.4x could cancel loading files that warned of being a newer,
unsupported version.

Remove this logic since it's no longer in use.
2020-10-03 07:25:36 +10:00
Campbell Barton
8cd8b3e9bd readfile: always run setup_app_data after updating defaults
When blend files were loaded with app-templates,
setup_app_data was running before defaults were updated.

This is likely to cause problems with order of initialization
so always update the startup file beforehand.
2020-10-03 07:25:36 +10:00
Brecht Van Lommel
38cdc7bcc1 Fix non-thread safe code in view layer object hash
Found as part of D8324, multithreaded Cycles object sync, where it caused
a crash on concurrent access to object holdout state.
2020-10-02 19:42:20 +02:00
Sybren A. Stüvel
90a27d5aa9 Cleanup: Use enum for return values in context callbacks
Define enum `eContextResult` and use its values for returns, instead of
just returning 1, 0, or -1 (and always having some comment that explains
what -1 means).

This also cleans up the mixup between returning `0` and `false`, and `1`
and `true`. An inconsistency was discovered during this cleanup, and
marked with `TODO(sybren)`. It's not fixed here, as it would consititute
a functional change.

The enum isn't used everywhere, as enums in C and C++ can have different
storage sizes. To prevent issues, callback functions are still declared
as returning`int`. To at least make things easier to understand for
humans, I marked those with `int /*eContextResult*/`.

This is a followup of D9090, and is intended to unify how context
callbacks return values. This will make it easier to extend the approach
in D9090 to those functions.

No functional changes.

Differential Revision: https://developer.blender.org/D9095
2020-10-02 18:56:25 +02:00
Bastien Montagne
4b36552967 Fix T81345: part three, armature free_data was not handling editbones properly.
Armature freeing would not correctly free its editbone IDProperties.

Add a utils to free the whole list of edit bones, and properly handle
their potential IDProperties.
2020-10-02 17:40:51 +02:00
Bastien Montagne
f393452394 Fix T81345, part two: crash in depsgraph when freeing COW armature.
Freeing of bones' IDproerties from Armature `free_data` callback would always
attempt to do user refcounting, which should never be done from that code.

This would generate crashes in depsgraph/COW context e.g.
2020-10-02 17:40:51 +02:00
Bastien Montagne
619e52eb82 Fix T81345: Part one: Missing handling of ID pointers from EditBone IDProperties.
So far data management code would simply fully ignore potential ID
pointers in custom properties of edit bones (which are a copy of those
from regular `Bone`). This would lead to all kind of issues, among which
refcounting inconsistencies, missing clearing of data uppon deletion,
etc.
2020-10-02 17:40:51 +02:00
Bastien Montagne
5fc992e76a Cleanup: Move EditBone structure definition from ED to BKE area.
Access to this structure will be needed in BKE's armature code.
2020-10-02 17:40:51 +02:00
Bastien Montagne
2b90dd1ac5 Fix (unreported) assert in texture code when loading some old 2.74 blend file.
Trying to open the 2.74 Fishy Cat file would generate endless asserts in
customdata code. This commit refactors and cleans up the code of
`psys_get_dupli_texture` to avoid useless calls and data access, and
validate data before trying to further access it.

No behavioral changes expected here (besides getting rid of the assert).
2020-10-02 11:47:35 +02:00
Bastien Montagne
6219d0d145 Fix (unreported) design flow in how workspace's relation data are read from .blend file.
Relying on pointer addresses across different data-blocks is extremely
not recommended (and should be strictly forbidden ideally), in
particular in direct_link step of blend file reading.
- It assumes a specific order in reading of data, which is not ensured
  in future, and is in any case a very bad, non explicit, hidden
  dependency on behaviors of other parts of the codebase.
- It is intrinsically unsafe (as in, it makes writing bad code and making
  mistakes easy, see e.g. fix in rB84b3f6e049b35f9).
- It makes advanced handling of data-blocks harder (thinking about
  partial undo code e.g., even though in this specific case it was not
  an issue as we do not re-read neither windowmanagers nor worspaces
  during undo).

New code uses windows' `winid` instead as 'anchor' to find again proper
workspace hook in windows at read time.

As a bonus, it will also cleanup the list of relations from any invalid
ones (afaict it was never done previously).

Differential Revision: https://developer.blender.org/D9073
2020-10-02 11:47:34 +02:00
Campbell Barton
e2e31b9bac Cleanup: compiler warnings 2020-10-02 11:58:33 +10:00
Hans Goudey
c3238bd500 Cleanup: Use DNA defaults for cloth modifier
Followup for rB8398050695
This requires moving a few enum definitions to DNA instead of BKE, and
adding default definitions for the two structs the cloth modifier where
the cloth modifier stores its settings. The defaults are also reordered
to be consistent with the order of each item in the struct.
2020-10-01 12:56:34 -05:00
Hans Goudey
4c0ef4f788 Cleanup: Clang tidy fixes
Fix a redundant return statement at the end of void function and
an inconsistent declaration parameter names.
2020-10-01 12:45:21 -05:00
Pablo Dobarro
8ef353fa50 Sculpt: Cloth Simulation Dynamic area mode
This simulation area mode moves the active area with the brush. When
enabled, the cloth brush has no restrictions on stroke length, area or
mesh vertex count.

In order to work, this enables PBVH nodes dynamically for simulation as
the stroke location moves and builds the constraints for new nodes
during the stroke. When a node is not inside the simulated area, all the
constraints that were created for it and vertex collisions are not
computed. The simulation limits falloff areas and constraints tweaking
control how the simulated and no simulated nodes blend.

Reviewed By: sergey, zeddb

Differential Revision: https://developer.blender.org/D8726
2020-10-01 19:11:45 +02:00
Philipp Oeser
cd81c38688 Cleanup: typo in comment 2020-10-01 18:38:31 +02:00
Jacques Lucke
ec723ad25c remove foreachObjectLink callback
This removes `foreachObjectLink` from `ModifierTypeInfo`, `GpencilModifierTypeInfo`
and `ShaderFxTypeInfo`. There is no need to have both, `foreachObjectLink` and `foreachIDLink`.
There is not code that actually depends on `foreachObjectLink`.

Reviewers: brecht

Differential Revision: https://developer.blender.org/D9078
2020-10-01 18:05:23 +02:00
Jacques Lucke
365bf103d1 Volumes: support lower resolution in viewport
The adds a new option to simplify volumes in the viewport.
The setting can be found in the Simplify panel in the render properties.

Volume objects use OpenVDB grids, which are sparse. For rendering,
we have to convert sparse grids to dense grids (for now). Those require
significantly more memory. Therefore, it's often a good idea to reduce
the resolution of volumes in the viewport.

Reviewers: brecht

Differential Revision: https://developer.blender.org/D9040

Ref T73201.
2020-10-01 17:59:04 +02:00
Brecht Van Lommel
5b8503425a Fix subdivision surface wrong for non-limit surface and subdivision level 1
Remove the workaround for T59395 that increases the minimal refinement to 2
to work around an OpenSubdiv bug. This bug appears to be fixed in the latest
OpenSubdiv version we are using.

Problem found by Piotr Ostrowski.

Ref D9076
2020-10-01 17:43:41 +02:00
Jacques Lucke
958fc6944f Cleanup: make texture coordinates const 2020-10-01 16:57:00 +02:00
Jacques Lucke
5e6459ac1c Volumes: copy display settings in BKE_volume_new_for_eval 2020-10-01 15:54:01 +02:00
Philipp Oeser
f79b4850fb Fix T81248: World nodetree action is linked after duplication
This was already changed for Material nodetrees on duplication in
rBa75ac18638f4.
Since it is not obvious from the UI how change World actions - and to be
consistent with Material actions, it is best to copy the action as the
default behavior.
So use generic BKE_id_copy functions with LIB_ID_COPY_ACTIONS flag [which
also enables us to get rid of `BKE_world_copy`]

Note: taking the User Preference `USER_DUP_ACT` into account here (for
both material and world actions) could be a followup step.

Maniphest Tasks: T81248

Differential Revision: https://developer.blender.org/D9046
2020-10-01 15:42:51 +02:00
Bastien Montagne
91f061003c Fix T81267: bad handling of usercount for actions duplicated with some animdata.
Those actions are full proper IDs and should therefore not be affected
by flags used to duplicate 'owner' ID own data.
2020-10-01 15:03:31 +02:00
Brecht Van Lommel
2caa6dd7f8 Cleanup: clang-format 2020-10-01 14:29:45 +02:00
Hans Goudey
8cbd09672d Cleanup: Remove unused View2D variables and function
It looks like this code was left over from tabbed panels in the
properties editor. It wasn't used anywhere except for in one line of
the horizontally-aligned panel code that was recently removed.

Differential Revision: https://developer.blender.org/D8651
2020-09-30 12:21:35 -05:00
Piotr Ostrowski
6070f92ab9 Subdivision Surfaces: add boundary smooth option to modifiers
This adds the option to either smooth the entire boundary, or to keep
corners sharp, for the Subdivision Surface and Multiresolution modifiers.

This mainly helps with compatibility with other software. The default
behavior remains to smooth the entire boundary.

Differential Revision: https://developer.blender.org/D8485
2020-09-30 17:20:29 +02:00
Ivan Perevala
3a7d62cd1f Tracking: Implement Brown-Conrady distortion model
Implemented Brown-Conrady lens distortion model with 4 radial and
2 tangential coefficients to improve compatibility with other software,
such as Agisoft Photoscan/Metashapes, 3DF Zephir, RealityCapture,
Bentley ContextCapture, Alisevision Meshroom(opensource).

Also older programs: Bundler, CPMVS.
In general terms, most photogrammetric software.

The new model is available under the distortion model menu in Lens
settings.

For tests and demos check the original patch.

Reviewed By: sergey

Differential Revision: https://developer.blender.org/D9037
2020-09-30 15:54:24 +02:00
Valentin
5ac4778056 Cleanup: convert gforge task ID's to phabricator format
Cleanup old tracker task format to the new. e.g: [#34039] to T34039

Ref D8718
2020-09-30 20:11:06 +10:00
Campbell Barton
dbaa9291f2 Cleanup: spelling 2020-09-30 12:25:58 +10:00
Campbell Barton
0863316745 Cleanup: use angle-brackets for email addresses
This is already the most widely used convention.

Use this so `make check_spelling_c` will ignore all email addresses.
2020-09-30 12:05:56 +10:00
Campbell Barton
38a66903e5 Cleanup: sort struct declarations 2020-09-30 11:51:13 +10:00
Pablo Dobarro
53804b333a Sculpt: Preserve Mesh visibility from edit mode using the Face Sets
Before this change, when users switch from edit mode to sculpt mode, the
entire mesh would be visible. Even if in the edit mesh mode part of it was
set to invisible.

With this change the visibility is preserved, by creating a separate face set
for the visible and invisible parts of the mesh and setting their initial visibility.

Implementation details: This adds a function to initialize a new Face Set
 datalayer taking the current mesh visibility into account which is stored
in the ME_HIDE flag of the vertices.

Reviewed By: sergey

Differential Revision: https://developer.blender.org/D8901
2020-09-29 22:54:36 +02:00
Bastien Montagne
ebf752625e Fix unreported Eisenbug leading to a crash when reading a blend file.
This took more than a day to fully investigate and understand, one of
the reasons being that the probability of the issue to show up was
extremely low, and subjected to very specific random factors.

Root of the issue is that, in some very rare cases, a newly read ID
might get the exact same memory address as the one it had when the blend
file was saved.

In that case, `BKE_workspace_active_set` would return immediately, since
the pointer to the active workspace would remain unchanged. But that
lead to having an unset NULL active layout pointer, which would crash
when attempting to get e.g. the active screen.

For the record, I ran into this when running a specific build (master
with one flag added to the `LIB_ID_CREATE` ones, with value `1 << 3`),
using a specific set of options (`--background --factory-startup -noaudio`),
and passing the .blend file from T80090 as argument.
2020-09-29 17:08:44 +02:00
Sybren A. Stüvel
bab2260b59 Fix T71981: Alembic vertex interpolation can jumble mesh
Add an option to disable Alembic vertex interpolation.
Bump subversion from 5 to 6.

Alembic stores mesh samples at specific time keys; when a frame in
Blender maps to a timecode between two samples, Blender will interpolate
the mesh vertex positions. This interpolation only happens when the mesh
has a constant topology, but sometimes this was not detected properly
when the vertices change order, but the number of mesh elements remains
the same. This would result in a mesh with jumbled up vertices (T71981).
With this patch, users have the ability to disable vertex interpolation.

An alternative would be to have better detection of topology changes,
but that that'll cause a considerable slowdown.

Maniphest Tasks: T71981

Differential Revision: https://developer.blender.org/D9041
2020-09-29 16:10:16 +02:00
Jacques Lucke
5845c06a63 Volumes: new Mesh to Volume modifier
This modifier can only be added to Volume objects. It takes a mesh
as input and generates a "density" grid near the surface or in
the enclosed volume.

Ref T73201.

Reviewers: brecht

Differential Revision: https://developer.blender.org/D9032
2020-09-29 16:03:30 +02:00
Jacques Lucke
e12767a035 Volumes: support selection and outlines in viewport
Previously, one could only select a volume object in the outliner
or by clicking on the object origin. This patch allows you to click
on the actual volume.

Furthermore, the generated (invisible) mesh that is used for
selection is also used to draw an outline for the volume object now.

Reviewers: brecht

Differential Revision: https://developer.blender.org/D9022
2020-09-29 12:39:41 +02:00
Jacques Lucke
b41fb5542a Quiet unused variable warning 2020-09-29 12:15:00 +02:00
Campbell Barton
58b8724a48 Cleanup: spelling 2020-09-29 13:58:16 +10:00
Sybren A. Stüvel
f808f2a495 Fix T81214: Crash on Action constraint without action
A `NULL` pointer check was missing.
2020-09-28 11:23:34 +02:00
Pablo Dobarro
4c74980e7b Fix Face Set overlay rendering wrong color with modifiers
face_set_color_default was not copied when copying meshes, so when
extracting the colors in the draw cache it was using a wrong default
color ID.

Reviewed By: sergey

Differential Revision: https://developer.blender.org/D8957
2020-09-26 21:58:13 +02:00
Sybren A. Stüvel
64583f3e8d Animation: set Action idroot at assignment instead of just at evaluation
Actions are either locked to a specific ID type, or "floating". Actions
in the floating state are now locked when they are assigned to an ID block.
Previously (rB94b99b5d4a7c20cf2) this was done at evaluation time, which
caused various problems:
- The ID type was set on the evaluated copy, and inconsistently flushed
  back to the original.
- A newly created Action could not be assigned to an Action constraint,
  unless a depsgraph evaluation was be forced first.

This is now resolved by calling `BKE_animdata_set_action()` to set the
action (instead of direct assignment) where possible, and calling
`BKE_animdata_action_ensure_idroot()` otherwise.

Manifest Task: https://developer.blender.org/T80986
2020-09-25 14:20:59 +02:00
Sybren A. Stüvel
2ef68edad8 Cleanup: animation, deduplicate "can edit action" logic
Move "action editable" check from RNA code to Blender kernel
`BKE_animdata_action_editable()`.

No functional changes.
2020-09-25 14:20:59 +02:00
Sybren A. Stüvel
2e1339bc0b Cleanup: document and simplify BKE_animdata_set_action()
Simplify `BKE_animdata_set_action()` by flipping some conditions and using
early returns, and document which parameters can be `NULL`.

No functional changes.
2020-09-25 14:20:59 +02:00
Jacques Lucke
d587027015 Modifiers: add StructRNA pointer field to ModifierTypeInfo
This reduces the number of places that have to be modified
when a new modifier is added.

Reviewers: campbellbarton

Differential Revision: https://developer.blender.org/D9000
2020-09-25 12:49:18 +02:00