Compare commits

..

2968 Commits

Author SHA1 Message Date
55ee66be4d Merge branch 'functions' into builtin-simulation-nodes 2020-04-09 12:02:02 +02:00
dabd59ba23 Merge branch 'master' into functions 2020-04-09 11:59:24 +02:00
80255e67e3 Silence assert on ID usercount for deprecated IPO.
We do not really care about those, so just avoid the noise when loading
very old files...

Re T75389.
2020-04-09 11:21:02 +02:00
36746474fd Tracking: Forward compatibility code for distortion models
Allows to open newer files in older Blender after new distortion model
has been added.

It will behave as if this is a polynomial model with all 0 coefficients
which are then being refined and assigned explicitly after solving the
motion.
2020-04-09 10:59:31 +02:00
b5e277ed05 Cleanup: Fix typo error 2020-04-09 10:58:42 +02:00
ee5cec4a50 Fix T75122: Annotations: Only visible scene annotations in dopesheet
The loop of datablocks was using the scene datablock (3D View) only, but all others datablocks were ignored.

Now the loop consider any annotation datablock.
2020-04-09 10:56:59 +02:00
bd59781c66 Fix T75425: Bone selection cycling not working
Edit-mode bone selection now cycles on successive clicks.
This now cycles through multiple edit-objects & bones.
2020-04-09 18:46:47 +10:00
726cf93f8a allow using shader texture nodes in simulation node tree 2020-04-06 14:11:28 +02:00
e2c567efe6 fix after merge 2020-04-06 11:22:43 +02:00
a96af79259 Merge branch 'functions' into builtin-simulation-nodes 2020-04-06 11:22:32 +02:00
43f895a592 Merge branch 'master' into functions 2020-04-06 11:10:19 +02:00
480ff89bf7 Fix T75311, T75310: Edit Weight Paint Overlay Render Artifacts
During recent refactoring of the edit weight overlay we moved a
assignment before it was valid. Making everything one frame off what
resulted in a flashing frame during TAA, not drawing the overlay until a
second action happened, making overlays too bright.

The reason whas that the painting overlay wasn't initialized in the
first sample, but the draw passes and groups were filled. Resulting in
rendering the overlay twice or not at all.

This change moves the assignment to where it is valid.
2020-04-06 10:28:31 +02:00
999134b7ca Cleanup: Add some comments removed in rB0d0036cb53f8 2020-04-06 09:58:57 +02:00
f1bf7bfa1b Cleanup: spelling 2020-04-06 16:02:29 +10:00
6526c3ced8 Fix displaying edit-mesh measurements with deform modifiers
Resolves regression from 2.7x
2020-04-06 15:26:27 +10:00
0ca5b7b69b Fix T74602: Sequencer slip operator ignores offset constraints
Limit offsets, so each strip contains at least 1 frame of content.

Reviewed By: campbellbarton

Differential Revision: https://developer.blender.org/D7288
2020-04-06 02:09:20 +02:00
d0d20de183 VSE: Draw f-curves for opacity and volume values on the strips
Feature can be enabled or disabled in timeline view menu item "Show F-Curves".

Author a.monti

Reviewed By: ISS

Differential Revision: https://developer.blender.org/D7205
2020-04-06 00:52:29 +02:00
0e7599bc15 VSE: don't allow strip preview when clicking on the scrubbing region
Don't set 'special preview' or Solo mode if scrubbing in scrubbing region.

Author: a.monti

Reviewed By: Severin

Differential Revision: https://developer.blender.org/D7234
2020-04-06 00:11:55 +02:00
0d0036cb53 Cleanup: Fix comment style and check if they are valid or make sense. 2020-04-05 23:55:51 +02:00
43cc2f3195 Cleanup: Use _fn as a suffix for callbacks in VSE code 2020-04-05 23:39:20 +02:00
9d4300b0c6 Volumes: add volume.grids.frame_filepath to get the current frame filepath
This can be used by external renderers that can load OpenVDB files.
2020-04-05 21:27:30 +02:00
bae1c243ce Build: hide USD symbols, make Blender symbols visible again
Following up to b555b8d.

Building Blender with hidden symbols but using libraries with visible symbols
was giving linker warnings, specifically for USD. So revert that for now, as
it was not needed for the bugfix.

Hide USD symbols (some of which are not in the USD namespace) to avoid potential
conflicts. May potentially help with AMD OpenCL issues in T74262.
2020-04-05 21:04:10 +02:00
f1573731bc UI: Support split property layout for pointer search buttons
Pointer search buttons created with `uiItemPointerR()` (which allows
also passing a collection property to search in) did not work with the
split property layout (i.e. `uiLayout.use_property_split`).
For example vertex group search buttons typically use this.

Note that decorators (`uiLayout.use_property_decorate`) are not
supported yet. Although if they are enabled, the decorator column is
still created to keep the layout alignment visually intact. Also re-uses
the existing hack to allow placing multiple items in the row before the
decorator column.

Needed for some in-progress changes to the modifier stack UI.
2020-04-05 14:49:28 +02:00
19352bca16 Cleanup: spelling 2020-04-05 22:22:21 +10:00
7df787b2c1 UI: English as Default Language
Set language setting for new profiles to English.

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

Reviewed by Brecht Van Lommel
2020-04-08 16:10:48 -07:00
1239cab11f Fix T75203: Crash when changing active keying set
When updating the active button, the search data wasn't updated, so it
kept using the old pointers. A check in `ui_rna_collection_search_cb()`
relied on this incorrect behavior so I had to fix that too. Note that
the previous commit was also needed for the second fix to work.

Caused by c46dcdf887.
2020-04-08 23:23:44 +02:00
74fa8787d8 Fix error in UI_butstore_ API
If the `uiButStore` data was freed after the buttons/blocks were updated
from previous instances (see `UI_block_update_from_old()`), e.g. by
delaying that to the "afterfuncs" (`ui_apply_but_funcs_after()`), the
data would get lost. As result, the button pointers that the API is
supposed to keep valid would point to freed memory.

This wasn't an issue so far since the API didn't happen to be used this
way. That changes with the next commit.
2020-04-08 23:22:33 +02:00
c13aa95eda Fix T75288: crash in Cycles image loading with multithreaded shader compilation 2020-04-08 22:01:04 +02:00
cc53c9e476 Fix T75290: Cycles crash with out of bounds memory access in volume mesh build 2020-04-08 21:58:17 +02:00
8360bfb75c Cleanup: clang-format 2020-04-08 21:58:17 +02:00
f405934fe3 Fix T75445: Filmic transform not working when using Turkish locale
This is a bug in OpenColorIO that we work around (see "Turkish I" problem),
a proper fix will be submitted upstream.
2020-04-08 20:50:50 +02:00
d41d4d0593 GPencil: Small changes to brush defaults 2020-04-08 19:03:17 +02:00
4a6f715421 Fix T73552: Mantaflow - liquid particles show up in organized unrealistic structure
Issue was being caused by a particle offset which was random but the same for every particle.
2020-04-08 18:29:26 +02:00
2328599e97 NewUndo: Fix (studio-reported) discrepency in proxies when undoing.
Took me an unreasonable amount of time to understand what was happening
here... Our beloved proxies, as usual, need some specific careful
handling.
2020-04-08 17:43:40 +02:00
b0f229dd27 Tracking: Fix missing distortion update on focal length change 2020-04-08 17:19:21 +02:00
020d1e23ae Fluid: Fix issue with mesh not being loaded
Fixed an issue that was likely introduced in a past cleanup.
2020-04-08 16:26:20 +02:00
34b28850bf Fix wrong material indicated in the error message when baking
The material displayed in the error message due to the lack of active
texture was that of the previous slot.
2020-04-08 09:44:43 -03:00
91d7f5d246 Fix T74572: adaptive sampling still not working correct with shader AOVs 2020-04-08 14:09:10 +02:00
fd487b1f4e Fix build error with WITH_X11_XINPUT=OFF after recent changes 2020-04-08 14:03:54 +02:00
ff2c67d7e8 Fluid: Disable subframes when using adaptive time-steps in the first frame
First frame should only produce inflow once and not compute the emission for the frame before the first frame. Problem became evident in T74062.
2020-04-08 13:42:40 +02:00
c2cb87f897 Fluid: Fix problem with inconsistent noise when using multiple adaptive time-steps
Problem was mentioned in T74062.
2020-04-08 13:27:12 +02:00
a1ddb63329 Fluid: Update Mantaflow source files
Update includes new grid helper functions and some cleanups.
2020-04-08 13:25:16 +02:00
7cafdc57e0 Fluid: Manta clang-format update
Do not use sort-includes in Manta source files for now when applying clang-format. Too many conflicts.
2020-04-08 13:20:18 +02:00
ea5a2efb57 Fix manual reference error after removal of use_international_fonts 2020-04-08 12:43:49 +02:00
Nicholas Rishel
ea3e0b3e8c Windows: support high resolution tablet pen events for Wintab
Together with Windows Ink support, this should fully resolve T70765.

Differential Revision: https://developer.blender.org/D6675
2020-04-08 12:25:40 +02:00
Nicholas Rishel
d571d615a5 Windows: support high resolution tablet pen events for Windows Ink
Rather than using the last state of the tablet, we now query the history of
pointer events so strokes can follow the pen even if Blender does not handle
events at the same rate.

Differential Revision: https://developer.blender.org/D6675
2020-04-08 12:25:40 +02:00
Nicholas Rishel
3d8c57f4da Cleanup: minor refactoring of pointer event handling
Ref D6675
2020-04-08 12:25:40 +02:00
Nicholas Rishel
4e4bf241c8 Cleanup: add utility functions for milliseconds conversion
Ref D6675
2020-04-08 12:25:40 +02:00
c43473e884 Cleanup: remove GHOST API to query tablet state from Window
It's not used by Blender anymore and it's unreliable since this state really
only makes sense associated with events in a particular order.

Ref D6675
2020-04-08 12:25:40 +02:00
Miguel Pozo
d478cc71dd Fix Windows Tablet API preference not being used
It was sometimes set before reading preferences, now it's passed to GHOST every
time preferences are read.

Differential Revision: https://developer.blender.org/D5641
2020-04-08 12:25:40 +02:00
a3c1605581 Cleanup: rename to BLI_path_cwd to BLI_path_abs_from_cwd
This is now more clearly a function that makes the path absolute
using the current working directory.
2020-04-08 16:46:16 +10:00
57468ae37e Cleanup: missed renaming BLI_cleanup_unc_16 in recent refactor
Missed from d14e768069
2020-04-08 16:29:46 +10:00
b0d565e5b6 Cleanup: reduce scope of variables in custom data copying 2020-04-08 16:27:59 +10:00
35861a49ee Fix T67098: Inset causes shape keys to reset exiting edit-mode
Edit-mesh interactive redo reset the meshes shape-key index.

Also copy the selection mode when copying meshes.
2020-04-08 16:26:54 +10:00
bd45ec0b06 Cleanup: disable clang-format for character table 2020-04-08 13:29:51 +10:00
1c58311440 Fix status bar message showing saved when saving failed
Resolves the following issues:

- For the first time you save a .blend file, there was no feedback.
- If the file fails to save (eg "No space left on device") the status
  bar message replaces the error with an invalid "Saved" message.

  While there is a popup, the user may cancel it with mouse motion
  and be left with the status bar message saying the file saved.

D7371 by @XDroid with edits.
2020-04-08 13:22:00 +10:00
056ebb56b1 Cleanup: clang-format 2020-04-08 10:34:39 +10:00
1ec2f8d1f2 Cleanup: spelling 2020-04-08 10:33:56 +10:00
161c13e12b Fix building without translations enabled 2020-04-08 10:24:33 +10:00
1ee3def5d3 UI: Splash Screen Language Selection
Quick Setup splash now includes language selection.

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

Reviewed by Brecht Van Lommel
2020-04-07 16:33:52 -07:00
9d0f452076 Fix missed depsgraph update after undo in some cases
Forgot to take into account legacy DEG_id_tag_update with zero flag.
2020-04-07 23:56:07 +02:00
a2243f1b51 Debugging: change Undo/Redo redraw timer to include dependency graph update
This is often the slowest part and was not counted before.
2020-04-07 23:43:55 +02:00
968619d036 UI: Language Selection Changes
Removal of 'Translation' checkbox. Enable translation options when selecting non-English languages.

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

Reviewed by Brecht Van Lommel
2020-04-07 13:25:49 -07:00
53981c7fb6 Cleanup: refactor adaptive sampling to more easily change some parameters
No functional changes yet, this is work towards making CPU and GPU results
match more closely.
2020-04-07 20:29:48 +02:00
7b4b07a7dd GPencil: Fix unreported problems with Chisel brush
With the new sampling, the arc points were not using the angle of the brush and the line was with the same thickness in all orientations.
2020-04-07 20:07:58 +02:00
6b58571813 UI: Don't collapse all panels for subpanels
The behavior for subpanels was incorrect, and the ideal behavior isn't even clear.

This disables the "collapse all" ctrl click feature for panels that have parents.

Differential Revision: https://developer.blender.org/D7355
2020-04-07 11:51:08 -05:00
c5ed2eb95e Undo: change depsgraph recalc flags handling to improve performance
These changes only have an effect when the experimental Undo Speedup preference
is enabled.

* For DEG_id_tag_update, accumulate recalc flags immediately before the undo
  push happens instead of afterwards. Otherwise the undo state does not
  contain enough flags, and the current state may contain too many flags.

  This also means we call DEG_id_tag_update after undo with the accumulated
  flags to ensure they are flushed to other datablocks.

* For undo, accumulate recalc flags in id->recalc and clear accumulated flags
  immediately. Not clearing would cause circular behavior where accumulated
  flags may never end up being cleared.

  This matches what happens after an undo push where these are also cleared,
  indicating that the undo state and current in-memory state match exactly.

* Don't change id->recalc of identical datablocks, it should not be needed.
  There is one exception for armatures where pointers across datablocks
  exist which otherwise would cause problems. There may be a better solution
  to this but it seems to work in agent 327 production files.

* This contains a change in undofile.c to avoid detecting all datablocks as
  changed for the first of the two undo steps, where we restore to the state
  of the last undo push before going to the one before.

  Without this the whole system is much less efficient. However this is unsafe
  in the sense that if an app handler or operators edits a datablock after an
  undo push, that change will not be undone.

  It can be argued that this is acceptable behavior, since a following undo push
  will include that change and this may already have unexpected side effects.

Ref T60695

Differential Revision: https://developer.blender.org/D7339
2020-04-07 17:14:19 +02:00
02598e629e Fix T73566: Mesh analysis, error showing intersecting faces 2020-04-08 00:43:47 +10:00
3a5c16f1c9 Fix T74720: bmesh.ops.delete default context argument does nothing 2020-04-07 23:23:17 +10:00
1de5cb6a31 Cleanup: use doxy sections 2020-04-07 23:23:17 +10:00
3a65397473 Fix T75471: Outliner: crash selecting modifier objects/targets that are in a excluded collection
There is no garuantee 'outliner_find_id()' can find those corresponding
TreeElements, safeguard against failure now.

note: not sure why this was no problem in Release builds? (could only
reproduce crashes in Debug builds...)

Maniphest Tasks: T75471

Differential Revision: https://developer.blender.org/D7365
2020-04-07 15:08:50 +02:00
5e0465e4ec Fix T75343: Wireframe overylay is not working properly with multiple modifiers
Since rBcf258b02f449, only wires and edges that are mapped to the
original mesh were drawn if the mesh was modified by modifiers.
Above commit was only meant for showing orig wires for paint mask
overlays [where final wireframe is not desired], so now only use
MR_EXTRACT_MAPPED when we are in a paint mode.

Maniphest Tasks: T75343

Differential Revision: https://developer.blender.org/D7333
2020-04-07 14:47:06 +02:00
4a83832120 Fix T74828: Fluid: Crash with Fire/Smoke Noise
Issue was that the noise simulation was trying to bake with a minimized domain size (adaptive domain initializes domain with size (1,1,1)). Similarly to the base resolution bake, there should be no noise baking happening at those domain sizes - a domain at this size is considered empty.
2020-04-07 14:31:33 +02:00
ea78f9922e Fluid: Fixed assertion error
Fix for new assertion statements that were introduced in bfdc42d990.
2020-04-07 14:31:33 +02:00
5892622d68 Revert "Fix memory leak in recent panel drag widget cache"
This reverts commit 58e20b432a.

Was calling discard twice, tsk.
Although for some reason it did quiet the leak.

Reverting because this is causing a crash.
2020-04-07 22:09:37 +10:00
ee43cf5722 Fix T66751: Symmetrizing armature does not symmetrize constraints.
The symmetrize operator now tries to make sure that the armature
constraints are correctly mirrored.

Before it would only mirror the subtargets for the constraints (and that
failed too in some cases).

Reviewed By: Sybren

Differential Revision: http://developer.blender.org/D6009
2020-04-07 13:54:22 +02:00
6feeede47f Fix Blender not rebuilding when changing linker script 2020-04-07 13:44:18 +02:00
58e20b432a Fix memory leak in recent panel drag widget cache
Memory leak from 60d873bd22.
2020-04-07 21:34:25 +10:00
aaaa0a43af Build: use -no-pie for portable builds on Linux
Otherwise file browsers do not recognize the Blender executable. This is
already done for official releases.

We leave it off for non-portable builds, since that's how Linux distribution
packages will typically build Blender and we can continue to follow the OS
default there. Using a file browser to launch executables from e.g. /usr/bin
would be rare as wel.

Differential Revision: https://developer.blender.org/D7363
2020-04-07 13:32:42 +02:00
e953ada0bb Cleanup: avoid memory allocation for unchanged datablocks in undo
Differential Revision: https://developer.blender.org/D7336
2020-04-07 13:19:52 +02:00
c786f95871 Cleanup: split partial undo code off into functions, tweak debug prints
Differential Revision: https://developer.blender.org/D7331
2020-04-07 13:19:52 +02:00
7bc99fdb32 Cleanup: simplify logic for partial undo in ID read
Differential Revision: https://developer.blender.org/D7330
2020-04-07 13:19:52 +02:00
826e4ba99c Cleanup: skip reading UI datablocks entirely for undo
Other types of datablocks pointing to UI datablocks is unsupported, so
there is no need to store them in fd->libmap. With the experimental undo
speedup enabled preserving such pointers was done. But it didn't work in
2.82 and such pointers are easily lost in cases other than undo.

Differential Revision: https://developer.blender.org/D7329
2020-04-07 13:19:52 +02:00
d2a07c7b78 Cleanup: delay creating datamap until it's actually needed
Differential Revision: https://developer.blender.org/D7328
2020-04-07 13:19:52 +02:00
44e5f7a8cf Cleanup: don't use global variable for test if IDs are identical
Differential Revision: https://developer.blender.org/D7327
2020-04-07 13:19:52 +02:00
c75aaf5329 Cleanup: split off library and linked datablock undo restore
Differential Revision: https://developer.blender.org/D7326
2020-04-07 13:19:52 +02:00
624b231ec4 Cleanup: early out on invalid ID data to simplify control flow
Differential Revision: https://developer.blender.org/D7325
2020-04-07 13:19:52 +02:00
0aac74f18f Cleanup: split off direct_link_id() function
Differential Revision: https://developer.blender.org/D7324
2020-04-07 13:19:52 +02:00
c4def7992b Fix T73598: Pose options - Auto IK. Bones move on release
The issue was that the code tried to use the bones transformation matrix
as a rotation matrix. This works fine as long as the scale is 1.

Now we simply make sure that we only get a pure rotation matrix when
extracting it for the bone's transformation matrix.
2020-04-07 13:15:43 +02:00
9fca9b9953 Fix crash using object.to_mesh() when in edit mode
The root of the issue was caused by mesh which was a result of to_mesh()
had the same edit_mesh pointer as the input object, causing double-free
error.

This fix makes it so result mesh does not have edit mesh pointer.
Motivation part behind this is to make the result of to_mesh() to be
somewhat independent from the input.

Differential Revision: https://developer.blender.org/D7361
2020-04-07 12:50:45 +02:00
49deda4ca2 GPUBatch: Correctly Free Panel Widget Batch
The GPU Batch for the panel drag widget wasn't freed anywhere. This
patch will free the GPUBatch.
2020-04-07 10:46:44 +02:00
cdbb61704d Fix T75128: Select Linked fails when the selection is a delimiter
Starting select linked failed when the selected vertex or edge
was it's self delimiting.

Support using these elements for linked select
as long as they're part of an isolated selection.
2020-04-07 17:43:27 +10:00
ffe599b4bd Fix T68159: Normals point target crashes when exiting edit-mode
When the modal operator passes events, free the internal state of
the operator as we can't be sure those events don't cause the mesh data
to be re-allocated or removed.

Longer term it might be best to make this into a tool since
the main purpose of this operator is to run other actions.
2020-04-07 16:28:29 +10:00
284d28acbc Cleanup: remove unused BM_total_loop_select function 2020-04-07 15:32:09 +10:00
17193f6c76 UI: rename 'smoothen' to 'smooth'
Other smooth operators use term 'smooth'.
2020-04-07 15:12:18 +10:00
a1eb5ec81c Cleanup: doxy sections, move utility function to editmesh_utils.c 2020-04-07 14:46:13 +10:00
7c4391e6aa Fix T60069: repeated extrusion uses wrong axis 2020-04-07 13:42:50 +10:00
d14e768069 Cleanup: BLI_path.h function renaming
Use BLI_path_ prefix, more consistent names:

  BLI_parent_dir              -> BLI_path_parent_dir
  BLI_parent_dir_until_exists -> BLI_path_parent_dir_until_exists
  BLI_ensure_filename         -> BLI_path_filename_ensure
  BLI_first_slash             -> BLI_path_slash_find
  BLI_last_slash              -> BLI_path_slash_rfind
  BLI_add_slash               -> BLI_path_slash_ensure
  BLI_del_slash               -> BLI_path_slash_rstrip
  BLI_path_native_slash       -> BLI_path_slash_native

Rename 'cleanup' to 'normalize', similar to Python's `os.path.normpath`.

  BLI_cleanup_path  -> BLI_path_normalize
  BLI_cleanup_dir   -> BLI_path_normalize_dir
  BLI_cleanup_unc   -> BLI_path_normalize_unc
  BLI_cleanup_unc16 -> BLI_path_normalize_unc16

Clarify naming for extracting, creating numbered paths:

  BLI_stringenc -> BLI_path_sequence_encode
  BLI_stringdec -> BLI_path_sequence_decode

Part of T74506 proposal.
2020-04-07 12:10:36 +10:00
d54757e389 Cleanup: clang-format 2020-04-07 11:57:36 +10:00
4e7c65035b UI: Use Consitent Menu Layout for Bone Names 2020-04-06 21:45:41 -04:00
e9b4d2ca68 UI: Use Consistent Operator Name
Was called "Subdivide Multi" in Bone Edit and "Subdivide" in Mesh Edit
2020-04-06 21:05:53 -04:00
10f0e003a9 Fix T74572: adaptive sampling not scaling AOVs correctly 2020-04-06 23:23:48 +02:00
e05552f7c4 Revert "Fix T74572: adaptive sampling not scaling render passes correctly"
This reverts commit 82a8da0ec3. It was completely
wrong. Fixes T75388.
2020-04-06 23:23:48 +02:00
29b87b5615 Fix T75357: USD export broken on windows
Path to the jsons was wrong so they were not copied
2020-04-06 14:38:52 -06:00
71a52bbe2a Fluid: Ensure correct velocities for noise bake
Make sure that noise uses the unaltered velocity grid. This is particularly important once external velocities get added to the velocity grid.
2020-04-06 17:48:32 +02:00
60d873bd22 GPU: Panel Drag Widget Drawing Performance
The 10g Intel/Win driver doesn't work well with our emulated
intermediate mode. This patch alters the drawing of the drag widget of
the panels to reduce unneeded drawing.

The previous method would draw 16 boxes per widget. This new way would
cache this drawing in a GPU batch and just move the matrix around.

Reviewed By: Clément Foucault

Differential Revision: https://developer.blender.org/D7345
2020-04-06 16:51:48 +02:00
71b1ee940b Don't take into account time remapping when scrubbing with AV sync.
It would cause the playhead to be remapped to an other frame than the
one you clicked on.
2020-04-06 16:34:15 +02:00
Maxim Vasiliev
c544df997e Fix user counting when ungrouping a node group.
Existing code for ungrouping did not correctly handle user counters:

- counter for the group was not decremented
- counters for containing nodes were not incremented

The latter resulted in losing some nodes after orphan cleaning or several save/reload cycles.

The bug did not have destructive consequences until recently,
because it was compensated by another bug (fixed in rBe993667a46c2).

Maniphest Tasks: T74665, T74682

Differential Revision: https://developer.blender.org/D7332
2020-04-06 16:27:52 +02:00
Roman Kornev
95f51bb01d Keymap: sort exported key-maps
This makes the resulting key-maps easier to compare.
2020-04-06 23:37:54 +10:00
3d439aa29b Cleanup: keep parameter docs above the function body 2020-04-06 23:22:11 +10:00
5dde5dd44e Libmv: Use static scheduler for threading
For a real-world distortion the payload is quite uniformly
distributed across scanlines. Surely, in the corners more
iterations of minimizer is needed, but that happens in threads
without scheduling overhead.
2020-04-06 15:18:32 +02:00
7e93d4eea3 Tracking: Fix (un)distortion happen in single thread
Need to communicate available number of threads to the camera
intrinsics implementation, otherwise default value of 1 is used.

Must have been single-threaded for a very long time.
2020-04-06 15:18:32 +02:00
2903fb6929 Fix T75444: typo in tooltip 2020-04-06 15:13:16 +02:00
9ddbb03861 Fix T74111: Animation Playback Delayed With Time Remapping And AV-Sync
When setting the current playback time in BKE_sound_play_scene we didn't
account for the frame length. So the current frame/time would be wrong
when we asked the audio playback what time it was.

This would lead to playback being offset when using time remapping and
AV sync.

Reviewed By: Richard Antalik and Sybren A. Stüvel

Differential Revision: http://developer.blender.org/D7248
2020-04-06 13:57:03 +02:00
ded7af53b4 Fix T74889 Baking to current action doesn't work properly
Before this commit, baking an action would only insert keys that are
necessary (i.e. using `INSERTKEY_NEEDED`). When baking to the current
Action, if there are no constraints that influence the final animation,
there are no additional keys necessary. This makes it appear as if
nothing happened. However, when baking to a new Action every additional
frame is necessary and thus a key is added for every frame.

@mont29 and I agreed that this behaviour is confusing, so this commit
changes the behaviour such that baking to the current action and to a
new action result in the same baked animation (that is, keyed on every
frame).
2020-04-06 13:39:46 +02:00
c03e5e7830 Fix T75418: Outliner Blender File view has UNKNOWN category for armatures
Typo in rB57daecc2cf88.

Maniphest Tasks: T75418

Differential Revision: https://developer.blender.org/D7346
2020-04-06 13:27:23 +02:00
cc0819aee1 Fix (unreported) wrong hair vertex colors
This was already fixed in rB985f33719ce9 once.
But resurfaced after rB7070e4c15e6c [which just reverted a bit too much
;)].

Spotted while looking into T75263.

Differential Revision: https://developer.blender.org/D7308
2020-04-06 12:19:02 +02:00
ccaf6c7404 Tracking: Fix slow undistored display
TH distortion model was not cached properly, making it so frame is
undistorted on every redraw.
2020-04-06 12:16:28 +02:00
5d3c7d1218 usual PY API doc gen fix after adding a new member to Context... 2020-04-06 12:16:07 +02:00
f9c05f3fc0 Fix f-curve sequencer versioning logic
Screen loop was inside an existing screen loop,
in the body of a function used to initialize the toolbar region.
2020-04-06 20:07:05 +10:00
2fc30978bc Fix T75297: Apply base inflates meshes with Simple subdivision 2020-04-06 11:47:17 +02:00
2a2d0d463a i18n: Disable es_ES locale.
We already have generic `es` one, having more only makes sense if poeple
actually maintain them and they have different contents...
2020-04-06 11:23:29 +02:00
3e8a818419 Cleanup: use const for 'clnors' argument where possible 2020-04-05 17:12:10 +10:00
9fe0505db0 Cleanup: macro hygiene, parenthesize arguments 2020-04-05 13:53:32 +10:00
93806ba82b Cleanup: differentiate the evaluation mesh 2020-04-05 12:48:38 +10:00
505a19ed75 Cleanup: Split up Window-Manager VR file (and related changes)
Splits up wm_xr.c into multiple files in their own folder:
source/blender/windowmanager/xr. So this matches how the message bus and
gizmo code have their own folder and files.

This allows better structuring and should make the code scale better.
I rather do this early on than to wait until we end up with a single,
huge file.

Also improves a bit how data is prepared and updated for drawing.
2020-04-04 18:55:24 +02:00
e455536943 UI: 3D Viewport text edit menus
- Adds select menu
- Removes undo/redo controls
- Adds delete menu
- Refactor
- Combines font and text menu

The goal is to match other edit menus better and match the text editor.
2020-04-04 12:41:58 -04:00
a702b095a1 UI: Remove 'Simulation' from 'Fluid Simulation' modifier
This is conistent with other modifiers and is reduntent
with the 'Simulate' menu header.
2020-04-04 12:32:28 -04:00
fe98d8c0ea Cleanup: remove unused method 2020-04-04 14:13:53 +02:00
6fa904765a Cleanup: Rename Panel * variables from pa to panel 2020-04-03 22:20:25 -05:00
7c0e285948 Cleanup: Move Detail Operators and Dyntopo to their own files 2020-04-03 23:41:54 +02:00
17931f3b51 Cleanup: Move Mask Filter and Mask Expand to their own files 2020-04-03 21:46:08 +02:00
f2f30db98d Cleanup: Move Mesh Filter, Smooth and Automasking to their own files 2020-04-03 21:05:54 +02:00
d38023f2f3 fix (unreported): Weld Modifier: possible use of uninitialized variable 2020-04-03 15:09:05 -03:00
82774a9d24 Cleanup: Move all sculpt transform functionality to its own file 2020-04-03 19:42:55 +02:00
d138cbfb47 Code Quality: Replace for loops with LISTBASE_FOREACH
Note this only changes cases where the variable was declared inside
the for loop. To handle it outside as well is a different challenge.

Differential Revision: https://developer.blender.org/D7320
2020-04-03 19:27:46 +02:00
b0c1184875 Cleanup: Including "BLI_listbase.h" for LISTBASE_FOREACH macro
These headers are not needed right away, but will be in the upcoming
commit.
2020-04-03 19:27:42 +02:00
200cc531bd Cleanup: Missing clang format in previous commit 2020-04-03 19:23:05 +02:00
cfc8d73546 Cleanup: Move all Face Set functionality to its own file 2020-04-03 19:17:28 +02:00
63922c5056 Cleanup: Rename ExtensionRNA variables from ext to rna_ext
Makes it more clear that code using this is related to the RNA
integration of a type.
Part of T74432.

Also ran clang-format on affected files.
2020-04-03 18:25:52 +02:00
70b061b4fd Fluid: Refactored caching in main Mantaflow class
This refactor cleans up code for the Manta file IO. It also improves the cache 'Replay' option.
2020-04-03 17:37:37 +02:00
bfdc42d990 Fluid: Refactored MANTA class
Refactored the caching system so that return values are no longer ignored. The aim of this refactor was to make the caching more robust.
2020-04-03 17:37:25 +02:00
d1011c9e64 Cleanup: clarification of 'name' in BKE_idtype functions
The 'name' parameter of `BKE_idtype_idcode_from_name()`, and the `str`
parameter of `idtype_get_info_from_name()`, are expected to be the
'user visible name' of an `IDTypeInfo` struct. This is made clearer in
the code by renaming those parameters to `idtype_name` and mentioning
it in the documentation of the `BKE_idtype_idcode_from_name()`
function.

Differential Revision: https://developer.blender.org/D7317
2020-04-03 16:54:31 +02:00
3208454aa8 Cleanup: Animation, move AnimData API to anim_data.c/BKE_anim_data.h
The `BKE_animsys.h` and `anim_sys.c` files already had a an "AnimData
API" section. The code in that section has now been split off, and
placed into `BKE_anim_data.h` and `anim_data.c`.

All files that used to include `BKE_animsys.h` have been adjusted to
only include the animation headers they need (sometimes none).

No functional changes.
2020-04-03 16:46:48 +02:00
33ab613655 Cleanup: Fix build warning with MSVC
SubdivCCG was unknown when compiling gpuinit_exit.c
2020-04-03 08:29:09 -06:00
49289f31ff Fix T74495: Shrink/Fatten gives strange results with Individual Origins
The island `axismtx` is only necessary in some transform modes.

In the case of `Shrink/Fatten`, the calculated `axismtx` brings an
undesirable result.

This commit rearrange the struct `TransIslandData` in order to
calculate and reference only the arrays that will be used for each
transform mode.

Differential Revision: https://developer.blender.org/D7305
2020-04-03 11:13:42 -03:00
d8b0b8d3db New Undo: Fix crash in some complex production files.
There is no guarantee that depsgraph is ran between two undo steps, so
when re-using an existing data-block we should never wipe completly its
recalc flags, but instead complement them with new ones from accumulated
'storage' as needed.
2020-04-03 16:07:27 +02:00
ad85989a3f Cleanup: Rename bScreen variables from sc/scr to screen
Part of T74432.

Mostly a careful batch rename but had to do few smaller fixes.

Also ran clang-format on affected files.
2020-04-03 14:42:24 +02:00
cff49e625f Cleanup: add missing #includes to some headers
It should be possible to `#include` any header without having to worry
about its dependencies.

I didn't go and check all include files for this, just the ones that caused
me errors while I was refactoring the `anim_sys.c` file.

No functional changes.
2020-04-03 14:28:22 +02:00
905c0269f3 Cleanup: Rename ScrArea variables from sa to area
Follow up of b2ee1770d4 and 10c2254d41, part of T74432.
Now the area and region naming conventions should be less confusing.

Mostly a careful batch rename but had to do few smaller fixes.

Also ran clang-format on affected files.
2020-04-03 13:34:50 +02:00
Asad-ullah Khan
1a69384e76 Fix T74205: crash cancelling transfrom operation in sculpt mode
Differential Revision: https://developer.blender.org/D7018
2020-04-03 13:13:26 +02:00
80513d8574 Fix T75287: other Cycles render passes wrong when using Cryptomatte 2020-04-03 13:13:26 +02:00
82a8da0ec3 Fix T74572: adaptive sampling not scaling render passes correctly 2020-04-03 13:13:26 +02:00
10c2254d41 Cleanup: Continue renaming ARegion variables from ar to region
Continuation of b2ee1770d4, now non-single word variables are also
renamed.
Part of T74432.

Also ran clang-format on affected files.
2020-04-03 12:54:28 +02:00
7ec59cc7b7 Cleanup: split ED_mesh_mirror_*_table into multiple functions
Spatial & topology mirror table each used a single function
taking a char as an identifier.

Split these into begin/end/lookup functions.
2020-04-03 21:52:13 +11:00
b5253159b6 Cleanup: split BKE_anim.h and anim.c into smaller pieces
The files are now split up into the following sections:
- `BKE_anim_path.h` and `anim_path.c` for path/curve functions.
- `BKE_anim_visualization.h` and `anim_visualizationanim_path.c` for
  animation visualization (mostly motion paths).
- `BKE_duplilist.h` for DupliList function declarations. These were
  already implemented in `object_dupli.c`, so they were rather out of
  place being declared in `BKE_anim.h` in the first place.

No functional changes.
2020-04-03 12:13:51 +02:00
736f9f5a69 Fix accidentally reverted changes in VR merge due to merge error
dc2df8307f unintentionally reverted part of 07bdbeda84.
2020-04-03 11:42:27 +02:00
cecb25273e Cleanup: Font, added initialisation for two variables
My compiler (GCC 7.5.0) was warning about these variables potentially not
being initialised. Since the function is highly complex, instead of
analysing it I just trust my compiler and added initial values.

This should be no functional change.
2020-04-03 11:34:25 +02:00
fe7ea8a24c Fix T75250: setting greasepencil active layer not refreshing the dopesheet
This was only reported for the 'Change Active Layer' operator [which was
not setting the channel as selected in the dopesheet], but this is also
the case elsewhere [where BKE_gpencil_layer_active_set is used], namely:
- gp_layer_remove_exec
- gp_layer_copy_exec
- gp_merge_layer_exec
- gp_layer_change_exec
- gp_layer_active_exec
- gp_stroke_separate_exec

We could set GP_LAYER_SELECT "by hand" in
BKE_gpencil_layer_active_set(), but there is already
animchan_sync_gplayer() that does that. For this, we need the
NA_SELECTED notifier though.

Maniphest Tasks: T75250

Differential Revision: https://developer.blender.org/D7311
2020-04-03 10:37:21 +02:00
a2a70cfc41 Cleanup: typo in comment 2020-04-03 10:34:18 +02:00
9aad06db88 Fix T75315: typo in automasking UI text 2020-04-03 10:19:45 +02:00
973e1f9d9a Cleanup: use term 'attr' instead of 'attrib'
This was already the case in most parts of the GPU API.
Use full name for descriptive-comments.
2020-04-03 17:25:58 +11:00
05dcb007e1 Cleanup: use tern 'sync' instead of 'synchronization' for function names
This is a common, unambiguous abbreviation
already used throughout the code-base.
2020-04-03 16:46:34 +11:00
600a627f6e Cleanup: use abbreviated names for unsigned types in editors 2020-04-03 16:21:24 +11:00
04fe37f931 Cleanup: quiet shadow warnings with ghost & mantaflow 2020-04-03 16:15:57 +11:00
71e543c68b Cleanup: replace static list with argument for curve merging 2020-04-03 16:04:02 +11:00
b18608f3e9 Cleanup: bone cursor picking API
There was one function to access both pose/edit bones,
which returned a void pointer type.

Split these into 3 functions which return EditBone, bPoseChannel or Bone
types.

Internally the logic is still shared, this just makes it clearer to
callers which type is expected.

Also use more conventional prefix for picking API:

  - ED_armature_pick_(ebone/pchan/bone)
  - ED_armature_pick_(ebone/pchan/bone)_from_selectbuffer
2020-04-03 15:52:26 +11:00
09071e2799 Fix T75330: Select linked crashes without a bone near the cursor
Own error with recent improvements to select link.
2020-04-03 13:43:03 +11:00
eae40c6c76 Cleanup: improve & use doxy sections for armature_naming.c 2020-04-03 13:16:38 +11:00
d52326bab3 Cleanup: spelling 2020-04-03 12:38:04 +11:00
c154f265de Cleanup: move curve picking functions into 'editcurve_query.c' 2020-04-03 12:32:04 +11:00
6f4dbb661f Revert "Writefile: Cleanup Scene runtime data."
This reverts commit ee0d91df5d. This is
modifying scene data on write, which causes crashes. It can only do that
on a copy of the data.
2020-04-03 02:24:33 +02:00
c4ba0d1508 Fix Linux link error with pcre after recent changes, must use absolute path 2020-04-02 22:05:03 +02:00
75f6e6b39e Fix link error on Linux buildbot with libxml2
On macOS this is part of the collada folder, but for Linux xml2 is in its own
folder for precompiled libraries.
2020-04-02 18:54:58 +02:00
6eb409bb9c Fix warnings caused by own earlier commit
Caused by 34465a7fb0.
2020-04-02 18:46:12 +02:00
12628e0794 Fix Cycles AVX unit test still failing to build with old GCC 2020-04-02 18:19:49 +02:00
Pablo Dobarro
b8d9b5e331 Sculpt: Delay Viewport Updates
In Blender 2.81 we update and draw all nodes inside the view planes.
When navigating with a pen tablet after an operation that tags the whole
mesh to update (like undo or inverting the mask), this introduces some
lag as nodes are updating when they enter the view. The viewport is not
fully responsive again until all nodes have entered the view after the
operation.

This commit delays nodes updates until the view navigation stops, so the
viewport navigation is always fully responsive. This introduces some
artifacts while navigating,  so it can be disabled if you don't want to
see them.

I'm storing the update planes in the PBVH. This way I can add support
for some tools to update in real-time only the nodes inside this plane
while running the operator, like the mesh filter.

Reviewed By: jbakker

Differential Revision: https://developer.blender.org/D6269
2020-04-02 18:00:51 +02:00
34465a7fb0 VR: Refactor DirectX context management
All DirectX management happens on Ghost level now, higher level code can
just assume everything is OpenGL (except of the upside-down drawing that
still needs to be done for DirectX). This is similar to how the
metal-layer is hidden outside of Ghost.

The Ghost-XR graphics binding for DirectX is responsible for managing
the DirectX compatibility now.
2020-04-02 17:43:45 +02:00
868d4526a8 Fix more build errors/warnings after recent AVX changes
Thanks to Sergey and Ray for the help identifying the problem.
2020-04-02 17:30:56 +02:00
343a874831 add memory address to undo steps print.
Helps identifying who is what in debugger...
2020-04-02 17:22:44 +02:00
9672605938 Fix build error on Windows/Linux after recent AVX changes 2020-04-02 17:09:01 +02:00
5159ba6b33 Fix (harmless) PCRE not found warning when configuring CMake on Linux
Differential Revision: https://developer.blender.org/D7309
2020-04-02 17:09:01 +02:00
2aa938b0ae Cleanup: simplify Linux buildbot config, where default values already match
Ref D7309
2020-04-02 17:09:01 +02:00
1f745e2c72 Sculpt: Add global automasking options for all brushes
This adds the automasking options to the Sculpt Tool options in a way
that they affect all brushes. This is more convenient when working with
some of these options while switching brushes as they don't need to be
enabled/disabled per brush.
An automasking option is enabled if it is enabled in the brush or in the
sculpt options.

Reviewed By: jbakker

Differential Revision: https://developer.blender.org/D7304
2020-04-02 16:56:44 +02:00
e276558a50 Fix T74983: Material preview icons don't refresh
The root cause of the issue reported in T74983 is that an `IDNode` would
not be marked as user-modified. This marking happened while looping over
outgoing relations of one of its operation nodes. Since rBff60dd8b18ed
unused relations are removed, and as a result the `IDNode` would not be
marked.

The solution was to move the responsible code outside the loop; this is
probably a good idea anyway, as the code did not actually use the
looped-over relations at all, and was thus repeated unnecessarily.
2020-04-02 16:54:17 +02:00
b75a7c2f8f Fix T75302: GPencil fill does not work on python generated strokes 2020-04-02 16:48:00 +02:00
e6c732e0cb GPencil: Cleanup typo error for hardness
The variable cannot be names because it was already renamed.
2020-04-02 16:48:00 +02:00
7c88968c89 Scultp: Face Set boundary automasking
With this brush option it is possible to mask the boundary vertices of
all face sets. This is especially useful in the cloth brush, where face
sets can be used to simulate seams between different patches of cloth
and produce different patterns and effects.

Reviewed By: jbakker

Differential Revision: https://developer.blender.org/D7230
2020-04-02 16:42:20 +02:00
3dad6294da Sculpt: Store explicit value for multires sculpt level
Allows to know what level sculpting has been done after the value has
been changed in the MultiresModifierData.

No functional changes, just preparing code to have everything needed
for propagation undo.

Differential Revision: https://developer.blender.org/D7307
2020-04-02 16:32:33 +02:00
f868d51bdd Sculpt Undo: Allow Geometry undo step to be non-exclusive
Before this change it was not possible to have base geometry
and grid coordinates to be stored in the same undo step.

Differential Revision: https://developer.blender.org/D7298
2020-04-02 16:29:51 +02:00
009dde69cd Fix Face Sets painting and selection precision
This fixes the following issues:
- Previously, the face set from the active vertex was used directly. Vertices always return the most recently created face set, so in some cases there may be some face sets that were not possible to select as active. Now the active face set is set in the ray intersection, so it always matches the face under the cursor.
- When drawing face sets they were set per vertex, so it was not possible to paint one face at a time. Now face sets are painted per poly when using the brush on meshes, testing the distance to the center of each poly.
- The code for the active vertex on PBVH_GRIDS was not correct, so I also fixed that to test if everything was working correctly.
{F8441699}

Reviewed By: jbakker

Differential Revision: https://developer.blender.org/D7303
2020-04-02 15:43:37 +02:00
6cc4c68dad Fix T75121: Memory leak in Surface Smooth
The brush was allocating new memory for storing the displacemnets at the
beginning of each stroke step and not freeing them.

Reviewed By: jbakker

Maniphest Tasks: T75121

Differential Revision: https://developer.blender.org/D7254
2020-04-02 15:36:10 +02:00
43f748a32f Fix mesh boundary automask curve falloff
As the main use case of this feature is to work with cloth, using this
curve makes more sense than a smoothstep to simulate cloth tension near
the edges.

Reviewed By: jbakker

Differential Revision: https://developer.blender.org/D7262
2020-04-02 15:35:12 +02:00
b26bebd59f Missed file in previous commit 2020-04-02 15:32:17 +02:00
88362565f6 Fix T72688: Vertex Group Weights in Edit Mode Occludes In Front Armatures
Due to legacy this overlay was implemented twice (Edit Mesh and Weight
Painting) with different results. This patch consolidates both drawing
and uses only the Weight Painting drawing.
2020-04-02 15:12:32 +02:00
f5e4f20dc1 Fix: Build error when building with python off 2020-04-02 07:08:51 -06:00
fa8a3c8f26 Revert "Fix T72688: Vertex Group Weights in Edit Mode Occludes In Front Armatures"
This reverts commit 782e6ea4ed.

Said fix introduced a crash the moment one goes to edit mode.
2020-04-02 15:07:56 +02:00
7bffdab93c CMake: Add alembic boost dependency
When building lite + alembic + boost cmake would turn
boost off because it deemed it not needed leading to
build errors.
2020-04-02 07:03:36 -06:00
53d029d6da Cleanup: Avoid complex template type for XR-Swapchain
I rather avoid types like
`std::vector<std::unique_ptr<GHOST_XrSwapchain>>`, which is easy to do
in this case.
2020-04-02 13:50:27 +02:00
782e6ea4ed Fix T72688: Vertex Group Weights in Edit Mode Occludes In Front Armatures
Due to legacy this overlay was implemented twice (Edit Mesh and Weight
Painting) with different results. This patch consolidates both drawing
and uses only the Weight Painting drawing.

Reviewed By: Clément Foucault

Differential Revision: https://developer.blender.org/D7289
2020-04-02 11:49:39 +02:00
1c3ded12f4 Fluids: improve subframe handling
Reviewers: sebbas

Differential Revision: https://developer.blender.org/D7256
2020-04-02 10:34:05 +02:00
06cb321f33 Sculpt: Give a brief explanation of undo stack
Should make it a bit more clear overview of what is going on in this
module. While some of the details might still be missing, having some
sort of top-level overview is better than nothing.

Differential Revision: https://developer.blender.org/D7300
2020-04-02 09:39:38 +02:00
3ebebe62d7 Sculpt Undo: Fix multires undo for interleaved nodes
Made it so grids array is properly allocated when first node in the
undo list does not contain grid data.

Differential Revision: https://developer.blender.org/D7299
2020-04-02 09:38:26 +02:00
a9963669f9 Fix T75283: GPencil Stroke created by Merge points can't have fill material 2020-04-01 19:35:35 +02:00
c4374bc919 Fix T75271: GPencil Segment select mode doesn't work
The selection was workring with the evaluated data, but need work with the original data.
2020-04-01 18:00:49 +02:00
25b2b6724d Fix T74224: Add missing depsgraph relations for boid particles
Reviewers: brecht

Differential Revision: https://developer.blender.org/D7302
2020-04-01 16:21:34 +02:00
f047d47e24 Cycles: AVX implantation of Perlin noise.
This patch adds an AVX implementation of Perlin noise in Cycles.
An avxi type was also added as a utility based on the respective
type in Intel Embree.

Only 3D and 4D noise were implemented, there is no benefit for
utilizing AVX in 1D and 2D noise. The SSE trilinear interpolation
function was used in the AVX implementation because there is no
benefit from using AVX in interpolating the last three dimensions.

Differential Revision: https://developer.blender.org/D6680
2020-04-01 14:48:01 +02:00
5e176d67e1 Writefile: Cleanup Volume runtime data. 2020-04-01 12:39:06 +02:00
d66519f197 Writefile: Cleanup CacheFile runtime data. 2020-04-01 12:39:06 +02:00
d31f79a9bc Writefile: Cleanup MovieClip runtime data. 2020-04-01 12:39:06 +02:00
1f065df03e Writefile: Cleanup GPencil data.
Note: Not clearing the whole runtime data here, as this is not done in
matching read code, not sure why, needs further investigation...
2020-04-01 12:39:06 +02:00
ec351c7a65 Writefile: Cleanup Nodetree runtime data.
Note: As with collections, this does not affect embedded nodetrees from
material etc. We prpbably need to tackle those as well at some point...
2020-04-01 12:39:06 +02:00
e0dc4130fd Writefile: Cleanup Armature runtime data. 2020-04-01 12:39:06 +02:00
358f8b484f Writefile: Cleanup Collection runtime data. 2020-04-01 12:39:06 +02:00
e24553ca0f Writefile: Cleanup Soung runtime data. 2020-04-01 12:39:06 +02:00
8d63135da3 Writefile: Cleanup World runtime data. 2020-04-01 12:39:06 +02:00
254748c3e7 Writefile: Cleanup Lattice runtime data. 2020-04-01 12:39:06 +02:00
4f509db181 Writefile: Cleanup Text runtime data. 2020-04-01 12:39:06 +02:00
33a622cbf4 Writefile: Cleanup VFont runtime data. 2020-04-01 12:39:06 +02:00
e790aa1f19 Writefile: Cleanup material runtime data. 2020-04-01 12:39:06 +02:00
27b9f1f626 Writefile: Cleanup MBall runtime data. 2020-04-01 12:39:06 +02:00
ee0d91df5d Writefile: Cleanup Scene runtime data. 2020-04-01 12:39:06 +02:00
9532ce4605 Writefile: Cleanup Object runtime data. 2020-04-01 12:39:06 +02:00
80280acc93 Writefile: Cleanup Curve runtime data. 2020-04-01 12:39:06 +02:00
ca0dcd830c Fix T75222: Crash activating menu search 2020-04-01 20:59:50 +11:00
186ac84210 Cleanup: clang-format 2020-04-01 20:47:02 +11:00
60ff3a7daf Fix T66494: Alt+ clicking (assign to all selected) does not work for NLA
strips

This uses the new "selected_nla_strips" context member in
UI_context_copy_to_selected_list().

bonus: this also makes the "Copy To Selected" button operator [in the
button context menu] work for anything NLA Strip related.

Maniphest Tasks: T66494

Differential Revision: https://developer.blender.org/D7281
2020-04-01 10:24:16 +02:00
f8c4f5e308 Add a "selected_nla_strips" context member
Needed for upcomming fix for T66494.

ref T66494 / D7281
2020-04-01 10:22:34 +02:00
029a714fc7 Fix T75234: Saving UDIM tiled texture as OpenEXR saves only the first
tile

This happened when the UDIM tiled image needed to be colormanaged, so
- when you set up the image as sRGB, then save as EXR/HDR/...
- other way around as well: when you set up the images as Linear then
save as PNG/JPG/...

Reason being that for UDIM tiled images, `image_save_single` is called
multiple times [once for each tile] and everytime `image_save_post` will
fire the `IMA_SIGNAL_COLORMANAGE` signal which clears the cache if any of
the above two is the case. Without the cache, the next tiles cannot be
saved.

Now determine if the colorspace changed from
`image_save_single`/'image_save_post' and only fire
IMA_SIGNAL_COLORMANAGE once from BKE_image_save in the end.
(thx @brecht for suggesting this alternative to the original fix)

Maniphest Tasks: T75234

Differential Revision: https://developer.blender.org/D7296
2020-04-01 10:11:54 +02:00
59e001cbf6 GPencil: Cleanup typo error 2020-04-01 10:02:04 +02:00
Bastien Montagne
2ad0ae8dad Tweak write code to allow cleaning up runtime data before write.
This basically generalizes what was being done in `write_mesh`,
since we need to clean up ID tags anyway, it's easier to do it for all IDs.

Then ID write funcs themsleves can do whatever they want on the passed
struct, without risking interferring with regular Blender operations.

Note that Text write function is doing a suspicious change on one of its
flags, but this seems to be by-passed anyway by read code currently, so
think it's OK to not do that on orig data-block.

Reviewed By: brecht

Differential Revision: https://developer.blender.org/D7294
2020-04-01 09:43:21 +02:00
7952274cf0 Sculpt Undo: Refactor Geometry undo nodes
Made it so there is a single UNDO node in the list which has
both original and modified mesh state.

Makes it easier to achieve "interleaved" undo nodes stored in
the undo step (as opposite of either storing geometry or other
data).

Should be no functional changes, just preparing for an upcoming
work to support undo of operation like Apply Base.

Differential Revision: https://developer.blender.org/D7290
2020-04-01 09:39:58 +02:00
60d3a801db Subdiv: Split evaluation begin+refine into separate steps
Actually, begin will do the entire initialization.

Refine will only refine if there is a topology refiner associated
with the Subdiv descriptor.

Allows to refine Subdiv to new coarse positions without touching
displacement evaluation. Will be needed to update SubdivCCG during
sculpt undo.
2020-04-01 09:32:46 +02:00
29eb891658 Fix curve shortest path picking with right-click select 2020-04-01 17:33:24 +11:00
9bcc83a5d6 Fix problem extruding curve segments with selected handles
Issue introduced in 38685b5a39
2020-04-01 17:08:41 +11:00
8d116e9956 Cleanup: use doxy sections 2020-04-01 16:19:32 +11:00
b157abebe5 UI: avoid term 'Region', use 'Edges & Faces' instead
Change to recent renaming of "Edge Collapse" as it has multiple uses,
as it collapses edge-rings, but isn't limited to collapsing single edges,
it can be used to collapse faces with arbitrary topology.

The name "Collapse Regions" is too vague, users might not think to use
this to collapse edge-rings.

Use a more verbose name "Collapse Edges & Faces", referencing edge-rings
in the tool-tip.
2020-04-01 14:18:21 +11:00
b7868c0b89 Grease Pencil: Fix typo in labels and comments.
Hardeness -> Hardness

Only changed the labels/tooltips, will leave the internal change to @antoniov.
2020-04-01 03:52:58 +02:00
6a1f0c1eaa Cleanup: use doxy sections for 'idprop' API 2020-04-01 11:30:08 +11:00
2d39e46f84 Cleanup: use doxy sections for wm_draw.c 2020-04-01 11:30:08 +11:00
9b0d72aa3d Cleanup: use sections for object_remesh.c
Add missing sections.
2020-04-01 11:29:45 +11:00
18fc4155fd Fix customdata interpolation being done multiple times in Weld Modifier 2020-03-31 20:57:33 -03:00
bcd3c3cb57 UI: rename "Edge Collapse" to "Collapse Regions"
This is useful for collapsing regions of faces & edges,
similar to a 'Merge -> Collapse' which can operate on multiple regions,
merging UV's so they don't need to be manually corrected.

The name & description didn't mention this.
2020-04-01 10:50:21 +11:00
91604279c9 Fix missing break statement in recent face-set support 2020-04-01 10:50:21 +11:00
f9f0f44be8 Cleanup: quiet discarded-qualifiers, unused warnings 2020-04-01 10:50:21 +11:00
e819f67500 Cleanup: Organize Weld Modifier in alphabetical order 2020-03-31 20:39:37 -03:00
74b5e5f6e1 Fix T74588: Weld Modifier: Vertex colors and UVs get incorrect values 2020-03-31 20:27:54 -03:00
da3cb514e5 Multires: Initial Face Sets support
This implements the Sculpt Mode API functions needed for Face Sets and
visibility management for PBVH_GRIDS. No major changes were needed in
the operators and the sculpt mode code. This implementation stores the
face sets in the base mesh, so faces created in higher subdivision
levels can't be modified individually. Also, we are not checking for
multiple face sets per vertex (that can be added in the future), so
relax tools don't work yet. The rest of the features (paint, undo,
visibility operators..) work as expected.

Reviewed By: brecht

Differential Revision: https://developer.blender.org/D7168
2020-04-01 01:07:47 +02:00
0062813c73 make.bat: Improve messaging when not detecting MSVC
Inspired by @mrwhite in D7295
2020-03-31 13:14:16 -06:00
5b88ab25bd Fix T75219: Move to New Layer not working
This was an old design problem.
2020-03-31 18:54:50 +02:00
6c036a65c9 Add Voxel Mode to the Remesh modifier
This adds the Voxel Mode to the current remesh modifier. It works
exactly the same way as the voxel remesh operator and uses the same
properties to control the remeshing. We can exand this with more options
in the future (fix poles, reprojection...)

Reviewed By: brecht

Differential Revision: https://developer.blender.org/D7292
2020-03-31 18:27:37 +02:00
38685b5a39 Edit Curve: Improve Curve extrude
The original code has two logics, extrude the end points or duplicate points (making new splines).
Now all the logic has been redone by extruding contiguous selected segments.

Fix T47169

Reviewed By: campbellbarton

Differential Revision: https://developer.blender.org/D6982
2020-03-31 12:39:53 -03:00
1c1a14dcdf Voxel Remesh: Edit Voxel Size operator
This operator lets the user control the voxel/detail size of the voxel remesher directly from the 3D view in a similar way the Brush radius and strength are controlled.  The shorcut from sculpt mode is Shift + R (similar to Shift + F for brush strength).
It shows a grid that represents the real voxel size of the object. The grid and the text are automatically aligned to the view to avoid rendering all voxels with thousands of lines.

It also has a slow mode when pressing shift that works like the slow mode of the brush radius control.

This operator controls the value changes sensitivity automatically to avoid jumping to extremelly high resolutions and run out of memory.
This way, adjusments done in lower voxel sizes are more precise. Pressing Ctrl disables this functionality and allows changing the voxel size directly in a linear way.

Reviewed By: jbakker, #user_interface, billreynish

Differential Revision: https://developer.blender.org/D6449
2020-03-31 17:31:13 +02:00
f149d5e4b2 Fix VR session toggle not changing reliably on session start/end
The text and icon were supposed to change but didn't reliably, which was
a race condition I think. It depended on how fast the OpenXR runtime
would transition the session state.
This also makes sure the correct notifier is sent on session exit.
2020-03-31 16:49:38 +02:00
afe707cc3a Fix missing XR space destruction
I think destructing the XrSession would destruct this anyway, but rather
have this done explicitly, consistently and in a controlled manner.
2020-03-31 16:49:38 +02:00
b0bd9b4c70 Fix T75244: Screw Modifier Crash
Draw batch extraction wrongly assumed that when mapped extraction
happened that all original data could be found. This is not the case as
mapped extraction is also enabled when part of the data is present.

This fix does additional nullptr checks.
2020-03-31 16:05:19 +02:00
39684e4554 Cleanup: remove duplicate function 2020-03-31 22:37:25 +11:00
17a409e223 Cleanup: use '_recursive' suffix instead of '_rec'
This convention isn't very clear and wasn't used much.
Use the more verbose term instead.
2020-03-31 22:23:33 +11:00
b74e388617 Fix T75210: Frame range does not go down to 0 in the physics tab for mantaflow when clicking the left arrow
Added nore flexibility to cache frame range and ensured validity of frame range.
2020-03-31 12:18:15 +02:00
155f917403 Fix T73513: Facing Overlay Intervene With Selection
Do not draw the facing overlay during selection.
2020-03-31 11:47:09 +02:00
4783e80502 Merge branch 'functions' into builtin-simulation-nodes 2020-03-31 11:17:08 +02:00
52606afaa6 Merge branch 'master' into functions 2020-03-31 11:16:32 +02:00
d8217ec6d0 UI: improve names for mesh split operations 2020-03-31 19:45:26 +11:00
039d619c76 Fix T74898: Multiresolution Ghost After Orbiting
EEVEE and Workbench both had the same issue that they continue with the
last sample when leaving navigating. This is ok for regular meshes as
they are all the same. For multiresolution it ain't as a low res version
of the mesh is used during navigation.

This patch also resets the AA samples when the user leaves navigation.
2020-03-31 10:29:34 +02:00
24f8c8491d UI: group edit-mesh Separate with Split & Merge
This was already the case for curve & armature.
2020-03-31 18:21:21 +11:00
c1722a3a8c Keymap: 'M' for edit-mesh merge menu, 'Alt-M' for split menu
As the 'M' key is free, it's convenient to use for the merge menu,
especially since this contains "Merge by Distance",
a frequently used action.

Use 'Alt-M' for a new split menu, following our convention of Alt being
used for opposite functionality.

Also move merge/split menu's into the "Mesh" menu as neither operate
solely on a single mesh element type.
2020-03-31 18:21:21 +11:00
61f9bbbdea Edit Mesh: support splitting vertices
The edge split operator can now split faces & edges
from selected vertices.

This has the same functionality as manually ripping all
faces and edges away from a vertex.
2020-03-31 18:20:06 +11:00
07add4b485 Cleanup: use sections for armature-select 2020-03-31 15:24:06 +11:00
0f5c94bbd1 Armature: add Select Linked (Ctrl-L)
This matches select linked for other modes (curve, mesh)
2020-03-31 15:11:11 +11:00
b555b8dedc Build: hide most symbols on macOS on Linux to avoid conflicts
This means symbols from Blender itself and most external libraries. We can't
just hide all because that breaks some libraries. The better solution would
be to rebuild all library dependencies with hidden visibility.

Fixes T75223: Luxrender add-on failing to load on macOS
2020-03-31 00:07:55 +02:00
899bfdc412 Audaspace: Update From Upstream (For API Docs)
No functional changes:

- Cleanup Spelling, Line Length
- Use proper class method styling for py docs
- Fix Broken Links

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

Fixes T75191
2020-03-30 17:47:40 -04:00
22677d8e1d Fix undo incorrectly detecting mesh as always changed after edits
Mesh writes a modified copy, which meant recalc_undo_accumulated was never
cleared on the actual datablock. Also clear mesh->runtime on write to avoid
detecting changes, since it's cleared on read anyway.

Differential Revision: https://developer.blender.org/D7274
2020-03-30 20:09:15 +02:00
f4982b555c Fix undo misdetecting identical future chunk in some cases
Clear is_identical_future before adding a next undo step, to avoid wrong
values for cases where we undo and then add a step with different changes
than what was previously the next step.

Ref D7274
2020-03-30 20:09:20 +02:00
2e60226f23 Fix undo debug logging not printing all types of undo pushes
Ref D7274
2020-03-30 20:09:15 +02:00
91b334b2f2 Fix T74547 EEVEE: Image texture crash with use after free
Same fix than for the other mapping types.
2020-03-30 19:57:24 +02:00
248873603f GPencil: Remove is_edit_mode from cache data
This value is not used by new engine.
2020-03-30 18:56:46 +02:00
4c40468856 GPencil: Remove GP_DATA_PYTHON_UPDATED used by old engine 2020-03-30 18:54:41 +02:00
2c9e27f209 Fix T75144 Grease Pencil: Python generated strokes flicker and crash
This was caused by a flag not being reset in time, causing discard of
batches already queued to be drawn.
2020-03-30 18:38:15 +02:00
100896e080 GPencil: Rename Overlay blend mode to Hard Light
Differential Revision: https://developer.blender.org/D7280
2020-03-30 18:23:36 +02:00
6428da84ed Fix T74663 GPencil: Fills are Flickering on Nvidia
This was caused by an unitialized variable.
2020-03-30 17:57:31 +02:00
af1e3b0270 GPencil: Fix overlay blend mode creating inverted colors 2020-03-30 17:57:31 +02:00
9371c051b1 EEVEE: Bloom: Fix inverted source and base buffer
This does not change the ouput much.
2020-03-30 17:57:31 +02:00
6f15bc3b52 Fluid: Removed Empty Space option for liquid domains
The option only makes sense for gas domains where there is some density.
2020-03-30 17:34:16 +02:00
1280f3c0ae Fluid: Optimization for mesh file loading
Improved loading times for mesh files by reading bigger chunks of data from the disk at once.
2020-03-30 17:32:38 +02:00
a2d19c1f78 NormalOverlay: Center Dot Normal Drawing With Modifiers
When using generative modifiers too many center dots were rendered in
the normal overlay. This patch only renders the normals of original
center dots.

Known issue: decoding the `norAndFlag` has issues on Intel GPU.
2020-03-30 14:39:16 +02:00
54602b70f0 add switch node ui 2020-03-30 14:15:09 +02:00
57d8bde088 Normal Overlay: Hide Normals Of Generated Loops
The loop normals were always drawn. We used to only draw the normals if
it was mapped to an original loop of the mesh. Due to recent changes we
can not find the correct loop and decide if we need to draw them.

Note still need to check the face dots normals. This is more complicated
as facedot normals needs to be encoded in a different way
2020-03-30 14:06:54 +02:00
b91b06b76e add a couple more node uis 2020-03-30 13:37:37 +02:00
a6a9a12e8f Fix T75142: No autokeying with pose mode X-Mirror
This was caused by the removal of some `BONE_TRANSFORM_MIRROR` flag
handling in rBde530a95dc7b482dc22c933b9b8b2a98c79b5663. I simply
restored those lines that caused this issue.
2020-03-30 13:26:26 +02:00
ef7229d69a Cleanup: reduce code indentation in autokeyframe_pose()
This makes the code a bit simpler to follow, by replacing
`if (x) { all the code here }` with `if (!x) { continue; }` and un-indenting
the remaining code, and by returning early.

No functional changes.
2020-03-30 13:26:26 +02:00
ca5b24ce8e add Float Compare node 2020-03-30 13:19:18 +02:00
cf258b02f4 Fix T75053: Paint Overlay Show Modified Wires and Edges
The paint mask overlay showed the wires and edges of the final mesh.
This change will only draw wires and edges that are mapped to the
original mesh.

This change enables mapping data in regular Mesh extraction. This
can also be used for better drawing of the normal overlay.

Reviewed By: Clément Foucault

Differential Revision: https://developer.blender.org/D7277
2020-03-30 13:13:42 +02:00
1189582e39 add boolean math node ui 2020-03-30 12:51:46 +02:00
d6e0d27816 Fix help message misc argument grouping
Correct reference to non-existent argument.
2020-03-30 21:47:07 +11:00
3351a2655d Subdiv: Extend some comments 2020-03-30 12:26:45 +02:00
5a0e84a6ce Merge branch 'functions' into builtin-simulation-nodes 2020-03-30 12:05:25 +02:00
cd5f9516db Merge branch 'master' into functions 2020-03-30 12:04:42 +02:00
513885a991 Fix armature edit-mode selected linked
Selecting linked would only select a single arbitrary chain.

Now select linked follows all child-chains of the bone.

Also add support for following all links, similar to how this would work
if it were a mesh with connected edges instead of only child chains.

Leave this off by default to match pose mode.
2020-03-30 19:18:28 +11:00
15cb567c8e Armature: remove merge function, use dissolve instead
This was crashing, when looking into a fix I noticed that it gave
hap-hazard results dissolving past forks in the parent/child hierarchy
arbitrarily following one chain.

This functionality is almost identical to "dissolve" which delimits
forks in the chain predictably.

So remove this in favor of dissolve (available from the delete menu).
2020-03-30 19:18:09 +11:00
6462ea2a8d UI: center align icon-only pull-down menus
Resolve issue noted in D5482, texture slots '+' icon for example
was noticeably off-center.
2020-03-30 14:45:05 +11:00
7b347b225a Cleanup: remove print left in recent fix for T66655 2020-03-30 14:34:32 +11:00
ec3da20896 UI: use operator name for extrude repeat
Match names between the redo popup and the menu item.
2020-03-30 11:41:44 +11:00
9ccaf9899e Extrude Repeat: support storing the offset vector
Without this, adjusting properties always re-initialized
from the view-vector.
2020-03-30 11:41:35 +11:00
e252d2c990 Fix extrude repeat leaving selection history unselected 2020-03-30 10:39:10 +11:00
6b24f7d87c UI: move extrude repeat out of the vertex menu
This works for all selection modes,
include last below a separator since it's a specialized function.

Note that the previous commit was raising an exception as operator
properties don't support 'or'.
2020-03-30 10:29:32 +11:00
086bfffe74 Theme: adjust lamp alpha to visually match 2.82 2020-03-30 10:12:08 +11:00
6c48a36962 DRW: match edge opacity to 2.82
Edges were hard to see in some cases in edit-mesh vertex/face modes.

Since 804e90b42d alpha is handled differently,
update edge alpha to visually match 2.82.
2020-03-30 10:12:08 +11:00
a103d09df4 UI: Move Array Extrude Below Verticies 2020-03-29 17:36:34 -04:00
7d59f84708 Fluid: Optimization for liquid / secondary particle file loading
Improved loading times for particles files by reading bigger chunks of data from the disk at once.
2020-03-29 21:31:20 +02:00
b023c91118 Fluid: Use dynamic mode whenever active rigid bodies are in the scene
Required for collisions with moving rigid bodies. Otherwise the static optimization mode will be kept and the obstacles would be calculated only once at the beginning.
2020-03-29 21:31:20 +02:00
bf3b0db785 Overlay: Edit Mesh: Add offset for thicker edges
Edges with sharpness, seam and bevel are thicker and thus needs more offset
to not appear aliased.

Based on D5448 by @oficsu
2020-03-29 20:49:07 +02:00
0b57ecc665 Overlay: Edit Mesh: Make offset depth dependent (w.r.t depth precision)
The previous offset was done in view space. It is now done in NDC space
to avoid differences when adjusting the near/far plane distances.
2020-03-29 20:46:42 +02:00
a022cb8f62 UI: Add missing operators to menus in the 3D Viewport Mesh Edit mode
Differential Revision: https://developer.blender.org/D7263
2020-03-29 14:09:39 -04:00
bd74f5f7ab Fix T73945: Don't grey out "Calculate to Frames" in some cases
The button seems to behave more as I'd expect without these
additional checks. Previously, the button was often grayed out when
it was actually working.

Reviewers: ISS

Differential Revision: https://developer.blender.org/D7252
2020-03-29 15:09:42 +02:00
Wayde Moss
5b8b6b4c1e RNA: expose the pin flag for AnimData and ActionGroup 2020-03-29 23:05:30 +11:00
Henrik Dick
d8e2cc9f4d Fix missing Surface Deform strength versioning 2020-03-29 22:52:06 +11:00
Yevgeny Makarov
a3d5b949d2 UI: Fix text padding for labels without an icon 2020-03-29 22:47:59 +11:00
c6143da27c Cleanup: remove DNA_view2d_types.h from DNA_sound_types.h 2020-03-29 20:32:45 +11:00
Henrik Dick
fc37318fe7 Screw Modifier: support 1-2 steps
The Screw Modifier had a lower limit for the steps value, which not only
was inconsistent between render and viewport steps, but also was capped
to 2 in UI and also in the code internally.
2020-03-29 20:25:14 +11:00
Cody Winchester
e8dd6128b5 Fix warp modifier using pose matrix without object matrix applied
Error in recent patch D6820
2020-03-29 18:58:37 +11:00
b9faf53182 Fix T72075: Incorrect Grid Fill error message 2020-03-29 18:36:00 +11:00
424fed3cc7 Cleanup: remove unicode character printing
Was added when utf8 was originally introduced - for testing,
but is no longer needed.
2020-03-29 17:11:46 +11:00
aec9e0e1b6 Cleanup: spelling, comments 2020-03-29 17:11:41 +11:00
d5163e06c3 Cleanup: strict-prototypes warning 2020-03-29 16:37:57 +11:00
ac02c702e5 Fix T75156: Cast modifier crash in edit-mode
Add NULL checks to other deform modifiers too.
2020-03-29 16:09:09 +11:00
a24f52c51c Fix T75088: Add tooltips for custom properties 2020-03-28 16:40:49 -04:00
a882debee0 Fix T75161: Random UV doesn´t work with fats drawing
Also fixed T75162
2020-03-28 15:08:13 +01:00
7dbf7255c2 GPencil: Fix error when stroke has 0 points
It's possible create a stroke with 0 points using python
2020-03-28 12:33:32 +01:00
bdec24b40d Cleanup: Removing unused parameter. 2020-03-28 09:14:07 +01:00
10bd3fb4cb Fix T74604: A.N.T Landscape Erode function reports error
Although indicated, the `rna_Object_active_vertex_group_set`
function was missing.
2020-03-27 22:14:47 -03:00
79b391f3a0 Fix missing NULL terminator for new brush option 2020-03-28 02:08:06 +01:00
Asher
e0030d53bc Fix key detection issues introduced by D7229
Removing the GHOST_kKeyUnknown check from processKeyEvent() produces
epeated unknown key events whenever a modifier key is held down, due
to the way ghost uses GHOST_kKeyUnknown as a filter value for modifier
key events.

Differential Revision: https://developer.blender.org/D7257
2020-03-27 20:59:20 -03:00
1f949121cd Fix T74969: Crash in gpencil edit mode
Result of poor shader pre-processing on Intel HD 4000 drivers
2020-03-27 20:12:05 -03:00
90aa771b30 Cleanup: compiler warnings 2020-03-27 23:21:16 +01:00
d85026db15 Overlay: Outline: Fix unreported feedback loop when smooth wire is disabled 2020-03-27 20:11:43 +01:00
a7110618ff Cleanup: GPUShader: Remove unused shaders 2020-03-27 20:00:27 +01:00
Ankit
0c0170f77a Fix error in macOS system file detection in recent changes
Differential Revision: https://developer.blender.org/D7250
2020-03-27 18:56:58 +01:00
9120191fe2 Sculpt: Pose Brush Face Sets origin mode
This commit introduces a new mode for calculating the positions and
weights of the IK segments in the Pose Brush based on the Face Sets.

The first segment of the chain will always include all face sets inside
the brush radius and it will propagate until the boundary of the last
face sets added in the flood fill. Then consecutive connected face sets
are added to the chain until the chain length limit is reached or all
face sets of the mesh are already part of the chain.

This feature enables complete control over the pose brush origins in
case that is needed. Also, with this mode, the user can have a library
of base meshes with face sets already configured to get to the initial
pose as fast as possible.

Reviewed By: jbakker

Differential Revision: https://developer.blender.org/D7235
2020-03-27 18:15:42 +01:00
4c0cca78eb Rename Edge Automasking to Mesh Boundary Automasking
This makes more clear what this automasking operation does and helps to differenciate it from the future face sets boundary automasking.

Reviewed By: jbakker

Differential Revision: https://developer.blender.org/D7185
2020-03-27 18:05:10 +01:00
015c084bda Sculpt: Weight normal and area sampling towards the brush center
Previously, all vertices inside the brush radius were taken into account
equally when calculating the sculpt normal and area. This was causing
artifacts and unpredictable results with large brushes or meshes with
curvatures, as the strongest deformation point of all brushes is usually
in the center. By weighting the vertex normal and position towards the
center when sampling, all brushes should now behave in a more
predictable way in non-uniform surfaces.

Reviewed By: jbakker

Differential Revision: https://developer.blender.org/D6989
2020-03-27 17:55:00 +01:00
7eacda5a2b Fix T74637: Reset face set data when disabling dyntopo
Last time I checked Face Sets were preserved in a more or less
predictable way when modifying the mesh with dyntopo. As it looks that
in some problems this may cause bugs and you can't see or use face sets
when modifying the topology of the mesh whith dyntopo active, it is
probably better to reset them when going from dyntopo to mesh. This way
you know that you are always going to get a predictable face sets state.

Reviewed By: jbakker

Maniphest Tasks: T74637

Differential Revision: https://developer.blender.org/D7099
2020-03-27 17:52:00 +01:00
0db055338a GPencil: Small tweaks to Fill material panel 2020-03-27 16:38:22 +01:00
671d811323 Install_deps: Do not wipe out WITH_PYTHON CMake options.
This is annoying when one want to use system python and hence disables
the `WITH_PYTHON_INSTALL` options...
2020-03-27 15:46:47 +01:00
Mateusz Grzeliński
0a02c288aa install_deps: Enable PIC in Python static library.
Update for D3078, I think it should be fixed

Benefits:
- after installing python 3.7 with `./build_files/build_environment/install_deps.sh`, user will be able to run `make bpy` without linking error:
  - https://blender.stackexchange.com/questions/102933/a-working-guidance-for-building-blender-as-bpy-python-module
  - https://stackoverflow.com/questions/36779834/compiling-blender-bpy-recompile-with-fpic

To prevent errors like `/opt/lib/python-3.7.4/bin/python3.7: error while loading shared libraries: libpython3.7m.so.1.0: cannot open shared object file: No such file or directory`, add python .so lib to ldconfig

Reviewed By: mont29

Differential Revision: https://developer.blender.org/D7177
2020-03-27 15:23:58 +01:00
Daniel Santana
2632ba6703 Fix Optix build error after recent changes
Differential Revision: https://developer.blender.org/D7253
2020-03-27 14:26:26 +01:00
31bd8e6bf3 Fix T74642: Take gravity field weight into account
Reviewers: sebbas

Differential Revision: https://developer.blender.org/D7227
2020-03-27 12:41:14 +01:00
7fd71c1694 GPencil: More cleanups missing in previous commit 2020-03-27 12:39:18 +01:00
70f56167d0 UI: Add missing Annotation tool to Paint modes 2020-03-27 12:36:24 +01:00
8a62fa9855 GPencil: Cleanup of unused code a arguments 2020-03-27 12:36:24 +01:00
25e8550739 CPencil: Cleanup unused fill code
This is now replaced by draw engine and annotations don't use fill.
2020-03-27 12:36:24 +01:00
5ce41e6f57 Fix T75111: Crash when using subframes for animated fluid collider
This is not dependent on having an armature as mentioned in T75111.
The collider simply has to be animated.

Reviewers: sebbas

Differential Revision: https://developer.blender.org/D7251
2020-03-27 12:33:33 +01:00
Cody Winchester
6e505a45a1 Surface Deform modifier: add vertex group and strength control.
This commit aims to add functionality to the surface deform modifier that
gives more control and allows it to work better with the modifier stack.
* Maintains compatibility with older files. The default settings keep it
  so that the whole object is bound and vertex coordinates get overwritten
  as the modifier currently does.
* Turns the deformations from an absolute vertex coordinate overwrite into
  an additive offset from the vertex location before the modifier to the
  resulting bound deformation. This gives the ability to control the
  strength of the deformation and mix the deformation of the modifier
  with the modifier stack that comes before it.
* Also adds in a vertex group with the invert option. This is applied after
  the bind deformation is added. So the whole object is still bound to target,
  and the vertex group filters afterwards what parts get affected.
  I experimented with a version to only binds the geometry weighted to the
  vertex group, but that would break compatibility with old files.
  I may bring it in later as a separate option/mode for the surface deform.

With several fixes from @mont29.

Reviewed By: mont29

Differencial Revision: https://developer.blender.org/D6894
2020-03-27 12:25:37 +01:00
1bb7d42cf6 Cleanup: Silence uninitialized variable warning 2020-03-27 11:12:27 +00:00
da91329291 GPencil: Cleanup unused parameter 2020-03-27 11:43:36 +01:00
b498edb189 Fix T75118: Remove Texture Opacity parameter for Fill materials
This parameter was used in previous version and must be removed from UI panel.
2020-03-27 11:33:09 +01:00
e7af825ded Multires: Fix unwanted assignment of sculpt session pointers
Might have happened when Apply Base is used in sculpt mode.

In practice this probably was fine, since the operator tags object
for update, so the pointers will be restored back to what they should
be.
2020-03-27 11:29:41 +01:00
Cody Winchester
bd86edf116 Solidify modifier: add option to assign shell & rim geometry to selected vertex groups.
This commit gives the solidify modifier the ability to assign the newly created shell
and rim geometries to selected vertex groups. This expands the procedural control over
the modifier stack by letting users apply modifiers to the shell geometry without affecting
the original geometry.

This will be especially helpful for NPR users that use solidify to create backface
culling lines on their characters giving them the ability to add displace noise
and other effects.

Differential Revision: https://developer.blender.org/D6903
2020-03-27 11:12:57 +01:00
Cody Winchester
ba1f7acc3f Warp modifier: add bone from and bone to options when using armature objects
This commit adds the option to use armature bones for the From and To targets
when using armature objects.

The changes are based on the UV Warp modifier.

Reviewed By: mont29

Differential Revision: https://developer.blender.org/D6820
2020-03-27 10:42:40 +01:00
3441862c96 Cleanup: Silence warnings 2020-03-27 10:29:33 +01:00
96b3463e25 Cleanup: Remove debug print
Leftover from rB3b59c111821b.
2020-03-27 10:23:34 +01:00
ff62481f65 Fix T69060: File Output Node does not work with Time Remapping
Problem is that the RenderEngines will change the RenderData cfra when
rendering (when time remapping is used -- at least workbench/eevee/
gpencil do a combination of BKE_scene_frame_get() plus
RE_GetCameraWindow() which alters the RenderData cfra).

Later on in the pipeline, the Compositor will use this RenderData cfra
to determine the output file name for the FileOutput node. (In contrast
to this, the 'regular' Output will use the Scene's RenderData -- not the
Render's -- cfra [which hasnt been altered])

It is not entirely clear why RE_GetCameraWindow was setting the cfra on
the Render, but it appears to be legacy OGL rendering related and is not
needed anymore.
Removing this will keep the cfra as needed for the Compositor FileOutput
node.
2020-03-27 10:10:54 +01:00
d0b0a0a894 Fix T74927: Slow playback using Auto Normalization
Caused by rBedb3b7a323a1.

Using evaluate_fcurve_only_curve actually causes quite a bit of slowdown
[6x] compared to bezier forward differencing [which was used prior to
rBedb3b7a323a1]. But full fcurve evaluation is desired with Dynamic
Interpolation Effects [Back/Elastic] since their min/max will not be
captured with forward differencing.

So now gain back speed [using bezier forward differencing] and only do
the full fcurve evaluation for dynamic interpolation effects.

Maniphest Tasks: T74927

Differential Revision: https://developer.blender.org/D7196
2020-03-27 09:58:21 +01:00
6eb1004d50 Fix T58439: Info Editor does not show operator reports immediately when
operator cancelled.

Lots of operators return OPERATOR_CANCELLED when no data really changed.
Reports from those operators do not show immediately in the Info Editor
[they only do if the operator returns OPERATOR_FINISHED].

Now also notify the Info Editor in case of OPERATOR_CANCELLED.

Maniphest Tasks: T58439

Differential Revision: https://developer.blender.org/D7238
2020-03-27 09:41:33 +01:00
3b59c11182 Fix T66655: Add-on tool keymap not working after restart
- Use addon keyconfig for registered tools so reloading the keymap
  doesn't clear them.

- Ensure there is a default keymap, needed for addon keymaps
  to be available in the user keyconfig.
2020-03-27 17:38:13 +11:00
95247b4b14 UI: Use Title Case 2020-03-26 21:34:27 -04:00
03ac301102 UI: Spelling Inconsistencies 2020-03-26 21:20:31 -04:00
e1ee4dff8d Cleanup: redundant mask includes 2020-03-27 11:47:04 +11:00
c8b85d32c5 Cleanup: quiet unused function warning 2020-03-27 11:28:46 +11:00
ed86f3edb6 Cleanup: rename WM_modalkeymap API names, matching WM_keymap
Rename:
- WM_modalkeymap_add to WM_modalkeymap_ensure
- WM_modalkeymap_get to WM_modalkeymap_find
2020-03-27 11:28:46 +11:00
5c74b0964b Cleanup: add iterator macros to clang-format
Also rename START to BEGIN (matching BEGIN/END for most iterator macros).
2020-03-27 11:28:20 +11:00
2f149ebbe9 Cleanup: uppercase macros for sculpt iterators, add to clang-format
Also use sculpt prefix for SCULPT_CLAY_STABILIZER_LEN.
2020-03-27 11:27:10 +11:00
Adrian Newton
f1fb3eb975 UI: use pixel unit for generated image dimensions
Differential Revision: https://developer.blender.org/D7171
2020-03-27 00:49:15 +01:00
Adrian Newton
d663c9d8da UI: fix inconsistent modifier menu order for fluid and multiple strokes
Differential Revision: https://developer.blender.org/D7172
2020-03-27 00:45:49 +01:00
Robert Guetzkow
fcd6fac0a7 Fix T74996: material custom properties not displayed for Cycles
Differential Revision: https://developer.blender.org/D7223
2020-03-27 00:44:18 +01:00
Stephan Seitz
02518be634 Cleanup: suppress warning about float-to-int conversion
Differential Revision: https://developer.blender.org/D7212
2020-03-27 00:43:17 +01:00
5cf6689019 Fluid: Removed obstacle levelset optimization
Currently results in unstable particle behavior and incorrect meshing.
2020-03-27 00:16:34 +01:00
b7666f27d3 UI: Address Issues with recent fluid ui changes
See rB337e86148688aa608d007381ee9ca78879050754
2020-03-26 18:49:54 -04:00
Aaron Carlisle
a921a4daad Mantaflow: remove reminents of high res smoke
It appears this slipped through the code review

Reviewed By: sebbas

Differential Revision: https://developer.blender.org/D6760
2020-03-26 16:29:08 -04:00
56e0249489 GPU: Add workaround for faulty default attrib values on some drivers
On some drivers, the default values is not respected correctly.

To workaround this we create a small VBO that contains only 1 vec4 worth of
data and just bind it using glBindVertexBuffer to ensure 0 stride.

This fixes T75069 Instances not rendered correctly by workbench.
2020-03-26 21:10:44 +01:00
afb1a64ccb Fix T60682: adds macOS alias redirection for directories
This adds support for macOS aliases in addition to symlinks. It also adds
support for hidden, readonly and system file attributes.

Contributed by Ankit (ankitm) with modifications by me.

Differential Revision: https://developer.blender.org/D6679
2020-03-26 19:57:30 +01:00
Chris Clyne
d1972e50cb Add option to Copy the active view layer, and add an empty view layer
Modify the view layer add operator (and underlying `BKE_view_layer_add`)
to allow for copying the current view layer, as well as adding a new one
but with all LayerCollections disabled by default (this is important for
heavy scenes where currently adding view layers can take a long time due
to enabling every collection by default).

Reviewed By: mont29

Differential Revision: https://developer.blender.org/D6862
2020-03-26 19:36:51 +01:00
839f0cfa41 Overlay: Fix crash caused by NULL passes 2020-03-26 19:16:57 +01:00
86c61ce64f Cycles: Restore cycles_cubin_cc to working order
Reviewed by: brecht pmoursnv
Differential Revision: https://developer.blender.org/D7136
2020-03-26 11:41:44 -06:00
58ea0d93f1 Cycles/Optix: Add CYCLES_OPTIX_TEST override
This works similarly to the CYCLES_OPENCL_TEST
environment variable to allow testing on unsupported
hardware.

Note: like the OPENCL test override, this is
for *testing* only and bug reports on unsupported
hardware will *not* be accepted at this point in
time.
2020-03-26 11:30:17 -06:00
48ea173a7d Sculpt: Create Face Set by Edit Mode Selection
This implements a new mode in the Face Sets Create operator to create a
new face sets from the faces selection in edit mode. This can be used
when the user considers that the edit mode tools are more convenient for
a more precise control or a certain type of selection, like creating a
face set from a face loop.

Reviewed By: jbakker

Differential Revision: https://developer.blender.org/D7211
2020-03-26 16:24:21 +01:00
99530ef4ed Sculpt: Face Sets Init operator
This operator initializes all face sets in the sculpt at once using
different mesh properties. It can create face sets by mesh connectivity,
material slots, face normals, UV seams, creases, sharp edges, bevel
weights and face maps.

For properties that are already in the faces, this is implemented as a
loop. Properties that depend on edge attributes use a similar operation
to sculpt flood fill, but using face adjacency instead of edge vertex
connectivity.

As Multires also stores the face sets in the base mesh, this should work
in the face sets Multires implementation without any changes.

This is implemented as a separate operator as this resets the visibility
and creates all face sets at once, while the create face set operator
creates a single face sets, leaving the rest of the face sets in the
mesh as they are.

Reviewed By: jbakker

Differential Revision: https://developer.blender.org/D7209
2020-03-26 16:20:24 +01:00
Pablo Dobarro
a218be3080 Sculpt: Surface Smooth Brush and Mesh Filter
This implements the Surface Smooth Brush as a mode inside the Smooth tool,
which uses the HC algorithm from "Improved Laplacian Smoothing of Noisy Surface Meshes".
Comparted to the regular smooth brush with laplacian smooth, this brush removes
the surface while preserving the volume of the object.
The smooth result can be controlled by tweaing the original shape preservation,
displacement and iteration count.
The same surface smooth operation is also available as a mesh filter.

Reviewed By: jbakker

Differential Revision: https://developer.blender.org/D7057
2020-03-26 16:13:47 +01:00
a0437c3f73 Fix T75087 Workbench: DoF: Divide By Zero when antialiasing is disabled 2020-03-26 16:03:48 +01:00
f5ac118fb3 Sculpt: Use uchar to store the sculpt mask in the GPU
Using a float to store and render the mask seems like a waste of memory
without any noticeable difference in the viewport for its use case.
After this commit, the mask and the face sets combined should take the
same amount of GPU memory than only the mask in previous versions.

Reviewed By: jbakker

Differential Revision: https://developer.blender.org/D7148
2020-03-26 16:02:30 +01:00
e000dcb849 Overlay: Wireframe: New method to avoid zfighting with geometry
This new method is only enabled if Overlay Smooth Wire is enabled.

This method gives really nice results but has some downside:
- Require a depth copy or loose the ability to write wire depth to the
  depth buffer and have correct depth ordering of wires. This patch use the former, with its associated cost.
- Require some depth sampling and prevent early depth test (i.e: has
  some performance impact).
- Has some relatively minor instability with geometry that are perpendicular
  to the view and intersecting with other geometry.

Pros:
- Compared to a fullpass approach this is surely going to have less
  performance impact and much higher quality.
- Removes the additional vertex offset. (see T74961)
- Fixes all half edges z-fighting.

{F8428014}

{F8428015}

Reviewed By: brecht

Differential Revision: https://developer.blender.org/D7233
2020-03-26 15:55:16 +01:00
458f50ba73 Fix T74780: Face sets operators not aware of SCULPT_FACE_SET_NONE
SCULPT_FACE_SET_NONE default value is 0 and it is rendered hidden, so
the invert sign operation to show it was not working. Now the show all
function sets this face set to ID 1 before setting its sign.

I also refactored this check in gpu_buffers.

Not related to the reported issue, but the mesh in attached contains non
manifold geometry with hidden loose vertices, so the visibility state
was not syncing correctly to those vertices. Now the toggle operators
checks the current visibility only on the face sets, so no manifold
vertices are ignored (as they are in the rest of operations in sculpt
mode).

Reviewed By: jbakker

Maniphest Tasks: T74780

Differential Revision: https://developer.blender.org/D7188
2020-03-26 15:50:25 +01:00
83947ea253 Fix T74761: Reimplement vertex to face sets visibility sync
This fixes multiple issues:
- Adds tag to update shading when changing vertex visibiliyt. This makes the mesh visibility update when the operator ends.
- Sync vertex to face sets no longer requires the pmap, so it does not crash. (Maybe we can initialize the pmap on undo to avoid these problems in the future).
- Sync vertex to face sets now works in a coherent way with the rest of visibility operations. Hide Box and Hide mask now sync the visibility changes to the face sets, so the all the operations are now getting a correct visibility state.

Reviewed By: brecht

Maniphest Tasks: T74761

Differential Revision: https://developer.blender.org/D7187
2020-03-26 15:44:50 +01:00
c286fa309e Fix T74899: Add Draw Face Sets brush to versioning defaults
Brushes are created automatically when the tools is enabled, but this
way it gets correct defaults and it is accesible from scripts.

Reviewed By: jbakker

Maniphest Tasks: T74899

Differential Revision: https://developer.blender.org/D7199
2020-03-26 15:41:10 +01:00
32bb848838 Fix T74692: Do not draw nodes with the default face set
The default face set color is white, so we can skip drawing the default
face set. This allows to enable again the optimization of not drawing
overlays in nodes where the mask is empty.

This will still slow down the viewport when a new face set is created
for the whole mesh or when inverting the mask, like in previous
versions.

I also renamed the function to make more clear that now it is checking
for both mask and face sets.

Reviewed By: brecht

Maniphest Tasks: T74692

Differential Revision: https://developer.blender.org/D7207
2020-03-26 15:39:41 +01:00
c32cf06e42 Fix T74808: Division by 0 in Cloth brush solver with overlapping vertices
This checks that the distance of the current positions of two connected
vertices is not 0 before calculating the correction vectors for those
vertices.

Reviewed By: jbakker

Maniphest Tasks: T74808

Differential Revision: https://developer.blender.org/D7184
2020-03-26 15:38:17 +01:00
4ff3d5aded Fix T75089: Missing pmap when using Face Sets in the mesh filter
When using Face Sets to mask the mesh filter the pmap needs to be
initialized to check the face sets of each vertex, otherwise it will
crash because it is null.

Probably now we should just initalize the pmap when building the PBVH as
almost all tools need it, so we can avoid these crashes in the future.

Reviewed By: jbakker

Maniphest Tasks: T75089

Differential Revision: https://developer.blender.org/D7236
2020-03-26 15:36:35 +01:00
Jeroen Bakker
7ed3ebbc6e Fix T67888: Incorrect Wireframe After Applying SubSurf/MultiRes
Show control edges stores the control edges in the mesh which is
picked up by the draw manager. When applyng a subsurf (or multires) we
don't want that data present in the base mesh. Any rebuilding of the mesh
would overwrite the data anyway.

This patch introduces a new flag for applying modifiers
that can be checked to ignore storing display specific data in
the base mesh.

Reviewed By: Brecht van Lommel

Differential Revision: https://developer.blender.org/D7163
2020-03-26 15:34:53 +01:00
Jeroen Bakker
2e8fb95e7c SubDiv: Incorrect normals loose edges
The normals of loose edges can be non uniform as they aren't normalized.
Checked with what happens with edit loose edges and synchronized the
implementation.

Reviewed By: Brecht van Lommel

Differential Revision: https://developer.blender.org/D7127
2020-03-26 14:35:27 +01:00
0545a84729 Fix Crash In Paint Overlay
The previous implementation tested the normal behavior and ignored some
edge cases. This patch will also test for NULL in all cases
2020-03-26 14:16:17 +01:00
Jeroen Bakker
1ca1744c29 Fix T70807: Weight Paint Overlay XRay
Weight paint overlay was not working when XRay was turned on.

The Weight Paint overlay is rendered directly into the default
framebuffer with a depth equal test. This test fails as the depth won't match.
This patch will update the depth buffer in these cases.

Reviewed By: fclem

Differential Revision: https://developer.blender.org/D7176
2020-03-26 13:35:06 +01:00
1b1c683f74 Fix missing text input on Windows with certain keyboard layouts
Events for keys specific to certain keyboard layouts unknown to Blender
were ignored. Now pass them along as unknown key events for which we
can still handle text input, like we already do for Linux and macOS.

Differential Revision: https://developer.blender.org/D7229
2020-03-26 09:22:47 -03:00
622e1591da GPencil: Fix unreported fade object when no Gpencil object is selected
Only must fade if the active object is a GPencil.
2020-03-26 13:17:22 +01:00
a093112696 CMake: Fix compilation with Xcode generation on Xcode 11.4
Need to give correct SDKROOT.
2020-03-26 13:07:52 +01:00
bd2b1a67a7 Fix T74939: Random Walk subsurface appearance in OptiX does not match other engines
Random Walk subsurface scattering did look different with OptiX because transmittance is
calculated based on the hit distance, but the OptiX implementation of `scene_intersect_local`
would return the distance in world space, while the Cycles BVH version returns it in object
space. This fixes the problem by simply skipping the object->world transforms in all the
places using the result of `scene_intersect_local` with OptiX.

Reviewed By: brecht

Differential Revision: https://developer.blender.org/D7232
2020-03-26 13:00:09 +01:00
08b9b95147 Fix T75047: Number input advanced mode is not working in JP keyboard
Check for special ascii values for number input first so that we can
quickly decide if we should go into advanced mode.

Reviewed By: Bastien
2020-03-26 12:45:09 +01:00
90e8f94558 Fix T75094: Gpencil Selection mode crash in Vertex Paint when build modifier is used 2020-03-26 12:34:02 +01:00
671b6d41c4 CMake: Fix Blender.app creation/modification time
It was failing on first run of CMake since the Blender.app is not yet
created.
2020-03-26 11:35:51 +01:00
ef2bde11d2 CMake: Fix spelling for OpenImageDenoise package
The spelling should match exactly between how package is called in
find_package and in FIND_PACKAGE_HANDLE_STANDARD_ARGS.
2020-03-26 11:35:51 +01:00
a22471f1d1 CMake: Fix macOS SDK detection with latest Xcode and macOS
Happens on macOS 10.15.4 and Xcode 11.4.

The reason of failure is caused by following factors:

- xcodebuild reports full semantic macOS SDK version 10.15.4
- The actual SDK file path will only include major and minor part
  of the version (10.15, MacOSX10.15.sdk)
- Previous CMake code of ours expected direct match between SDK
  version and file path.

The solution is to make our detection code a bit more flexible and
additionally check for major.minor macOS SDK version in the path.
2020-03-26 11:35:51 +01:00
f9590c8eaa CMake: Remove support of Xcode prior to 8.2
The specific goal of this change is to get rid of separate code paths
for older and newer Xcode versions.

The version 8.2 is picked since it's the latest version which runs on
macOS 10.11 (which is our current deployment target). If that turns
out too new for some reason the alternative would be to require Xcode
version 5.
2020-03-26 11:35:51 +01:00
c547d431eb Fix T75093: GPencil eraser selection in draw mode erase previous selected points
The selection in Draw mode works as a quick eraser and must erase only the points selected in that operation and not any previous selected point.

Now, before erase, unselect any previous selected point.

Note: It's planned to split select & erase operators for Draw mode.
2020-03-26 10:19:16 +01:00
e8dd96516c Keymap: disallow modal key-maps in add-ons keyconfig
Disable functionality reported in T60766 & only partially worked.

This could be used if the key-map was added after Blender started
as a way to customize modal key-maps, however it didn't work with
the add-on enabled on startup.

Add-on key-maps are intended to extend existing key-maps
so they can call the add-on, not as a way to change modal key-maps
for Blender's built-in functionality.

Disable this since it's not needed as add-ons
can't yet define modal key-maps.
2020-03-26 19:11:50 +11:00
03b2fc1a61 CMake: Cleanup, remove unneeded version requirement
The main CMakeLists already requires CMake 3.5, so there is no point of
requiring "newer" CMake on macOS.

This was a code from a while back where CMake 3 was not required on all
platforms.
2020-03-26 09:02:10 +01:00
fd262d3196 CMake: Fix detection of Xcode version
Legacy code did not take into account the fact that major version can
be two digits. This was causing "Xcode 11.4" to be detected as "11.".
2020-03-26 08:59:08 +01:00
09b8cdb25e Subsurf: Enable Optimal Display by default
Affects both Subdivision Surface and Multires modifiers.
2020-03-26 08:42:29 +01:00
b2f04fce2d Fix T75062: Frame Flashes During 3D Viewport Animation Playback
This issue became visible after fixing other TAA issues recently.
The sample count of the first frame wasn't reset resulting that the
incorrect resolve took place. This issue was already there beforehand,
it is just much clearer during the recent changes.

Now the `taa_sample will be reset when performing an animation playback
in the 3d viewport.
2020-03-26 08:22:52 +01:00
bae9553848 Test: update bl_run_operators blacklist, add volume object 2020-03-26 15:42:52 +11:00
Matt Rossman
eca52402bc Fix T75081: RNA path For FFMPEGSettings missing 2020-03-26 15:38:46 +11:00
b2b6099666 Cleanup: redundant cast, unused arguments 2020-03-26 15:37:33 +11:00
e990e55eba Fix crash with missing NULL check accessing grease pencil paint 2020-03-26 15:32:40 +11:00
a9394aa48e Fix crashes accessing inactive screen properties 2020-03-26 15:32:40 +11:00
38b211b581 Fix crash accessing length unit settings 2020-03-26 15:32:40 +11:00
0a34e5b300 Fix crash accessing the tool with no active space 2020-03-26 15:32:40 +11:00
33da997193 Fix crashes from various missing checks in operator poll functions
Issues exposed by 'bl_run_operators.py' utility.
2020-03-26 15:32:40 +11:00
52cff88f72 Fix crash when make proxy failed to assign a proxy 2020-03-26 15:32:40 +11:00
a8e749f624 Fix crash setting the brush with the current brush was unset 2020-03-26 15:32:40 +11:00
ffd26b420c Fix crash closing a window in background mode 2020-03-26 15:32:40 +11:00
7354f07ead Cleanup: use doxy sections & add missing sections 2020-03-26 15:32:40 +11:00
ba8d819c9b Fix T74417: Freestyle render removes image texture users
This simplifies freestyle render pipeline integration so we don't have to do
much manual ID user management at all. The complexity here was legacy from
Blender Internal.

Based on fix provided by Sybren A. Stüvl.
2020-03-26 01:29:20 +01:00
366cb3a059 Fix T74711: tiling brush option in image editor not working anymore
This makes it work again at least for the non-UDIM case. For UDIM it's not
great still but I'll consider that a known limitation. A proper solution is
probably to find the closest tile at the start of the stroke and then only
paint in that one tile for the rest of the stroke.
2020-03-26 00:02:06 +01:00
99e693d126 UI: rename image source Tiled to UDIM Tiles for easier discovery 2020-03-25 23:29:46 +01:00
d554cf8dd9 Fix T75090: crash with old NVIDIA drivers after overlay refactor
Work around GLSL compiler bug with backslash in preprocessor macros.
2020-03-25 23:14:50 +01:00
6681a33a6f GPencil: Fix unreported Threshold parameter visible in wrong context
The threshold only must be vsisible in Segment mode.
2020-03-25 18:46:45 +01:00
acd84ab105 GPencil: Fix unreported missing parameter for Cutter tool 2020-03-25 18:46:45 +01:00
d751491489 Fix error after recent change when WITH_INTERNATIONAL=OFF
Always need to install font files now.
2020-03-25 18:44:35 +01:00
59aaba739d Cleanup: typo in print 2020-03-25 16:52:04 +01:00
68e341e9d5 UI: remove non-unicode font and simplify default font loading code
There is no need to have another font embedded in the Blender executable, we
can assume the bundled font exists. In the future we may provide a fallback
if the font specified by the user in the preferences is missing a character,
but that can use our bundled international font.

Differential Revision: https://developer.blender.org/D6854
2020-03-25 16:39:58 +01:00
9070999c21 UI: always use international font
This means Blender can display more text correctly without having to enable
user interface translation. Previously the quality of the font was lower,
but that has been fixed now.

The font files have now been ungzipped, which results in faster file loading
as Freetype can read only the parts of the file that it needs. Blender download
size should not increase since the release package is compressed.

This includes improvements for Cyrillic characters from the latest DejaVu
Sans fonts from D6960, contributed by Harley Acheson. Fixes T74097.

Differential Revision: https://developer.blender.org/D6854
2020-03-25 16:39:37 +01:00
f48d15a861 Cycles: limit number of processes compiling OpenCL kernel based on memory
The numbers here can probably be tweaked to be better, but it's hard to
predict and this should at least avoid excessive memory swapping.

Fixes T57064.
2020-03-25 16:39:37 +01:00
e5f7b31dd4 Fix VR viewer offset on session start with no positional tracking
The current viewer pose position as determined by the OpenXR runtime
would be applied as offset. This offset should however only be set when
toggling the positional tracking while the session already runs.
2020-03-25 16:09:39 +01:00
04ab677761 Fluid: Small fix for secondary particles
Small tweak to ensure index will not run out of bounds during secondary particle computation.
2020-03-25 16:08:05 +01:00
035a3760af Alpha hash support for hair in EEvee
This patch adds support for alpha hash for hair rendering in EEvee.  Here's a comparison of with alpha hashing:

{F7588610}

And no alpha hashing:

{F7588615}

Note that this needs "soft shadows" enabled, otherwise shadows will be noisy; here's a render with soft shadows disabled:

{F7588621}

Reviewed By: fclem

Differential Revision: https://developer.blender.org/D5221
2020-03-25 15:45:24 +01:00
b4c05a9c89 Cleanup: use doxy sections 2020-03-25 21:24:59 +11:00
567212c343 Fix T74846: UV gizmo swaps X/Y 2020-03-25 19:42:41 +11:00
1587eb16d8 Cleanup: use const to for some mask arguments 2020-03-25 19:32:44 +11:00
4c57f07a0f Cleanup: move mask queries into own file
Similar functions to lookup nearest mask points were in mask_add.c
& mask_edit.c
2020-03-25 19:06:17 +11:00
2bc791437e Cleanup: use 'r_' prefix for output arguments
Also pass some args as 'const'.
2020-03-25 17:58:58 +11:00
c3764fe1e8 Cleanup: update doxy sections 2020-03-25 16:36:01 +11:00
188ccfb0dd Fix T74662: Prefetching causes random crashes
Caused by 18b693bdbd, due to lack of thread safety.
Beteween calling BKE_sequencer_cache_get_num_items and BKE_sequencer_cache_iterate
New items could be inserted in the cache.

BKE_sequencer_cache_iterate() now use 2 callbcack functions for initial setup
during which buffers with correct length can be initialized and finally iterating.

Additionally drawing of unselected items was fixed again introduced in 18b693bdbd.

T74662 is reporting quite different symptoms, than I get on my machine, so I am not
entirely sure this is complete fix.

Reviewed By: brecht

Differential Revision: https://developer.blender.org/D7220
2020-03-25 00:23:06 +01:00
e1c7549ac9 Fix T75019: Frame Offset does not apply to scopes
Don't check for `sseq->mainb == SEQ_DRAW_IMG_IMBUF`.

Reviewed By: brecht

Differential Revision: https://developer.blender.org/D7228
2020-03-25 00:09:14 +01:00
8e8fdf875d Windows/Cleanup: Remove VS2015 support from make.bat
VS2015 has not been supported for a while now but make.bat
still had some support for it.
2020-03-24 14:48:23 -06:00
Valentin
27f29cdfba Fix T74038 : Scrolling doesn't work in menu if there is no active item
Fix T74038, the logic didn't handle the case where there was not any button with focus.

Reviewed By: Julian Eisel

Maniphest Tasks: T74038

Differential Revision: https://developer.blender.org/D7208
2020-03-24 21:40:36 +01:00
394a1373a0 Cycles: use OpenCL C 2.0 if available, to improve performance for AMD
Tested with AMD Radeon Pro WX 9100, where it brings performance back to 2.80
level, and combined with recent changes is about 2-15% faster than 2.80 in
our benchmark scenes.

This somehow appears to specifically address the issue where adding more shader
nodes leads to slower runtime. I found no additional speedup by applying this
to change to 2.80 or removing the new shader node code.

Ref T71479

Patch by Jeroen Bakker.

Differential Revision: https://developer.blender.org/D6252
2020-03-24 20:09:36 +01:00
bb26c1359e Add invert mapping option to proximity weight edit modifier, and some cleanup. 2020-03-24 18:28:55 +01:00
Cody Winchester
26ef4fa85e Modifiers: Vertex Weight Edit add invert curve falloff option
This commit adds the option to invert the resulting weights of the
falloff curve.

There is a workflow used by some to convert a texture mask into
vertex weights by using a custom curve and inverting the points.
This allows the same effect with a single click, and gives the modifier
more procedural functionality.

With minor UI tweaks by @mont29.

Differential Revision: https://developer.blender.org/D6899
2020-03-24 18:28:55 +01:00
f3ea8cd608 Overlay: Wireframe: Make facing ratio offset depends on gl_Position.w
This makes the offset dependent of the actual near and far clip distances.
2020-03-24 17:54:30 +01:00
5801a016d4 Cycles: slightly improve OpenCL performance by reordering SVM enum values
Ref T71479
2020-03-24 16:49:46 +01:00
2bec6f1f06 Cycles: work around OpenCL performance regression after AOVs and vector rotate
We appear to be hitting some limit where adding any amount of code causes a
significant performance regression, no matter what it does. To work around
that a new node level was added.

Ref T71479
2020-03-24 16:49:46 +01:00
f8a4fb43fb Cleanup: remove unused Cycles kernel feature flags, replace by node levels 2020-03-24 16:49:46 +01:00
266d243d8d Cleanup: Silence warnings
```
...\gpu_texture.c(466,7): warning C4555: result of expression not used
...\gpu_texture.c(559,7): warning C4555: result of expression not used
...\gpu_texture.c:1205:72: warning: pointer targets in passing argument 4 of ‘glGetTexLevelParameteriv’ differ in signedness [-Wpointer-sign]
```
2020-03-24 12:33:31 -03:00
d5c177bc90 Cleanup: use switch statement instead of if/else on enum value... 2020-03-24 16:26:15 +01:00
a40f2c30ff GPencil: Cleanup previous commit 2020-03-24 16:19:11 +01:00
7ac5c5b08c GPencil: Add blank frame when add layer in Dopesheet
When use the dopesheet add layer operator a new blank frame is created. It's very strange to create a layer and don't see anything in dopesheet.

If the layer is added in properties, the frame is not created.

Reviewed by: @pepeland @mendio
2020-03-24 16:16:47 +01:00
d626ced6f1 GPU: Estimate a better value for the memory used
This commit adds a `mipmaps` member to the `GPUTexture` struct and also
computes to the memory used by these mipmaps and the memory used for
textures that are created from an external bindcode.

So it solves the following inconsistencies:
- The memory value for mipmaps was not being computed.
- As `GPU_texture_from_bindcode` didn't call
 `gpu_texture_memory_footprint_add`, it brought inconsistencies to the
 value of the used memory, especially when the texture is freed.

Differential Revision: https://developer.blender.org/D3554
2020-03-24 12:13:26 -03:00
28c3d952db Fix T74782: WorkBench TAA Artifacts During Painting/Drawing
When the TAA is finished the screen can still be redrawn by other
operations without the TAA resets.
If that happened the TAA did add a blank sample to the result as the
scene wasn't drawn, but the was processed.

Reviewed By: Clément Foucault

Differential Revision: https://developer.blender.org/D7226
2020-03-24 16:04:09 +01:00
b67b414a85 GPencil: Replace Tint mode "Both" to "Stroke and Fill" 2020-03-24 16:01:59 +01:00
b759857825 Revert "Fix T74782: WorkBench TAA Artifacts During Painting/Drawing"
This reverts commit 58ac113b76.
2020-03-24 14:02:16 +01:00
Michael Soluyanov
88adfc7e54 Fix missing grid theme option for Movie Clip Editor
The theme color is used in code, but not exposed in RNA and therefore
there's no button in the theme editor for it.

Reviewed by: Julian Eisel
Differential Revision: https://developer.blender.org/D7219
2020-03-24 13:49:22 +01:00
28827b62f7 Fix T64573: RNA_path_from_ID_to_property fails for pointcaches
Give pointcaches a proper path function which e.g. also resolves
ALT+click (assign to all selected) not working for anything relating to
pointcaches.

This also cleans up the usage of the 'eModifierTypeFlag_UsesPointCache'
flag (removed from the boolean modifier, added to the softbody modifier).

Maniphest Tasks: T64573

Differential Revision: https://developer.blender.org/D7115
2020-03-24 10:52:38 +01:00
02f7a6b2bd Fix T74744: Studio Lights editor not updating in realtime when tweaking
the settings

Caused by rBc476c36e4008.

This hooks into the existing FIXME (workaround for a missing update
tagging), reactivates the NS_VIEW3D_GPU notifier (introduced in
rB2ad3d8f158d2 -- but not going anywhere atm.) to check changes to rv3d
rflag which indicated UserStudioLight has changed. To not have updates
all the time, the rflag also needs to be cleared again (see original
rB2ad3d8f158d2).

Maniphest Tasks: T74744

Differential Revision: https://developer.blender.org/D7194
2020-03-24 09:58:25 +01:00
ed44bb902d Fix T74872: Clipping Region not updating
Caused by rBc476c36e4008.

This hooks into the existing FIXME (workaround for a missing update
tagging), needs to also check the clip_state (to detect
changes in DRW_STATE_CLIP_PLANES).

Maniphest Tasks: T74872

Differential Revision: https://developer.blender.org/D7193
2020-03-24 09:54:28 +01:00
a6dd22d431 Fix T74957: Matcap flip not updating
Caused by rBc476c36e4008.

This hooks into the existing FIXME (workaround for a missing update
tagging from operators), needs to also check the shading.flag (to detect
changes in V3D_SHADING_MATCAP_FLIP_X).

Differential Revision: https://developer.blender.org/D7192
2020-03-24 09:50:09 +01:00
579447bd89 Fix T74096: Paint Masking overlay can`t be hidden
Caused by rB9516921c05bd.

Dont really see a reason to draw overlays here if overlays are disabled.
Looks like this only affects Face/Vertex mask selection drawing [which
should indeed be hidden when overlays are disabled] next to two
exceptions:

- OVERLAY_paint_vertex_cache_populate draws weights as well [D7176 /
T70807 might be related here, but to me it looks like drawing weights
here is actually not needed at all]

- OVERLAY_paint_texture_cache_populate calls
DRW_cache_mesh_surface_texpaint_get [not sure about this one, this is
also called from workbench_cache_texpaint_populate, looks like this is
not needed when overlays are hidden]

Maniphest Tasks: T74096

Differential Revision: https://developer.blender.org/D7179
2020-03-24 09:44:42 +01:00
Habib Gahbiche
6e4eb2be28 RNA: expose comparison tolerance for Mesh.unit_test_compare 2020-03-24 19:41:46 +11:00
cd02495479 Fix T75036: Assert when copying pose bones 2020-03-24 17:54:06 +11:00
3d3a91103b Doc: remove MeshTessFace reference 2020-03-24 16:26:07 +11:00
Henrik Dick
bb19d96bc5 Fix solidify complex degenerate cases with duplicate faces
The removal of duplicate faces that are created during the handling of
degenerate cases was implemented already but didn't work.
This patch should fix some crashes with the solidify complex mode
related to that.

See D7221 for details.
2020-03-24 16:17:22 +11:00
15b0c76480 UI: add Blender -> System menu
Include technical operators here so they're available
when using menu-search.
2020-03-24 14:11:31 +11:00
c46dcdf887 UI: add menu search functionality to operator search menu
This has some advantages over operator search:

- Some operators need options set to be usefully accessed.
- Shows key bindings to access menus
  (for actions that don't have key bindings themselves).
- Non operator actions such as check-boxes are also shown.
- Menu items can control execution context, using invoke or execute
  where appropriate so we can control how the operator runs.

Part of the design task T74157.

This can be tested using the 'Experimental' preferences section
or selected in the key-map editor.
2020-03-24 13:41:18 +11:00
94b8166a8b Cleanup: clang-format 2020-03-24 10:42:29 +11:00
d0d251b53b Cleanup: spelling 2020-03-24 10:36:42 +11:00
9c280630c9 Fix invalid comma use 2020-03-24 10:17:52 +11:00
cda81d5a4d Fluid: Enforce minimum thickness to planar flow / effector objects
Planar object now have a thickness by default. This should make it more intuitive for users as there is no need to specify an object thickness.
2020-03-23 23:50:39 +01:00
e9629e3cfd Fluid: Use different phi for levelset generation
Phi that is used for mesh should be the one that matches particles best.
2020-03-23 23:50:39 +01:00
1b5b6a5da8 Fix T73505 EEVEE: Group output node sockets default value not working
This just cleanup the code and apply the expand to group output nodes.
2020-03-23 23:50:32 +01:00
765c82e92d Fix possible endless loop in Auto Merge & Split 2020-03-23 17:40:08 -03:00
b701af328a Revert "COW: Edit Mesh: Do not copy the looptris pointer"
The looptri is repeated in the linked Meshes but the pointer
is only referenced in the evaluated ones.

This reverts commit 64982e213f.
2020-03-23 14:18:36 -03:00
ed386507e1 Fix T74984: Crash opening specific production files
More detailed symptoms: there was no curve cache created for an object
which was used by draw manager.

A bit tricky situation, which involves collection instances and their
proxies.

The root of the problem in the dependency graph was that instanced
collections visibility was not updated when object is requested with
different visibility. So what was happening is that one of the objects
was pulled as an indirect dependency of something invisible, so it
built instanced collections as if the instancer is invisible. After
that the same object was built as visible. Before this fix this was
only update object flags, the instanced collections still believed they
are invisible. Since there is no path via relations which would connect
visible object with instanced objects the visibility flush which is
happening during graph finalization did not "fix" the visibility flags.

This change makes it so instanced collections are updating their
visibility when their instancer's visibility is changing to truth.
This is similar to how collections will accumulate their visibility
when same collection is used from multiple ones with different
visibility.

However, this alone wasn't enough to get crash fixed. This marked
collections as visible, but the geometry component of the curve object
was still considering self as invisible.

This is something tricky, since the code which is responsible for this
issue was added as an optimization in afb4da6650. This looks like like
an oversight in that commit since it's rather weird that ID node's
flag would depend on construction order (in "normal" object builder the
ID node's directly_visible flag is initialized to object's visibility).
So it seems logical to get this part of code in sync between "regular"
and "accumulative" object builder.

And last but not least the naming is_directly_visible is old and does
not really represent what it actually mans now: a more correct name
would be "will be used by the draw manager".

Differential Revision: https://developer.blender.org/D7217
2020-03-23 17:19:44 +01:00
58ac113b76 Fix T74782: WorkBench TAA Artifacts During Painting/Drawing
When the TAA is finished the screen can still be redrawn by other
operations without the TAA needs to be reset.
If that happened the TAA did add a blank sample to the result.

This patch will add an early exit in the case TAA was finished. Note
that there are still some cases still not working. The overlay engine
can in certain circumstances draw directly into the default_fb what can
lead to render artifacts.
2020-03-23 17:10:01 +01:00
24b27ea231 Bump subversion for previous theme additions 2020-03-23 16:43:54 +01:00
Michael Soluyanov
c95b522856 UI: Theme options for checkerboard pattern colors and size
This patch adds ability to set up colors and size of background
(transparency) checkerboard pattern in viewport and 2d editors. No new
backgrounds, only changing colors in existing ones.

This is not the background of the viewport, it is a transparency
checkerboard that is turned on only in render mode, when the
transparency mode is on. And also in 2D-editors, (image, sequencer,
etc).

Reviewed By: Pablo Vazquez, Julian Eisel

Differential Revision: https://developer.blender.org/D6791
2020-03-23 16:35:29 +01:00
88a86c025c Deps: TBB changed their repository URL
As a result the MD5sum of the downloaded package also changed.
2020-03-23 16:04:52 +01:00
Henrik Dick
241248223a Change solidify's material offset in complex mode to conform with simple mode
this patch will change the behaviour of the material offset in complex mode to fit simple mode output.
Previously in complex mode this would offset the material of the enire shell,
because when you read the tooltip it says material for new generated geometry.
In complex mode everything is new generated geometry though.
In simple mode on the other hand, this would give you a way to only change the inside faces
material. There may be cases in large modifier stacks where material offset like it is implemented
currently in complex mode may be useful, but it is much more useful in the way it is implemented
by simple mode.

Reviewed By: mont29

Differential Revision: https://developer.blender.org/D7215
2020-03-23 15:39:48 +01:00
Henrik Dick
ee4645207f Fix T74195: Solidify Complex Dissolve Crash.
I also added a few more comments to the code as I gone along.

Maniphest Tasks: T74195

Differential Revision: https://developer.blender.org/D7214
2020-03-23 15:22:31 +01:00
f9855800e0 Depsgraph: Driver Relations, skip finding possible relation with one driver
The `build_driver_relations()` function in the depsgraph relations builder
adds relations between drivers that potentially write to the same memory
location. This of course is only useful when there are two or more drivers.
2020-03-23 14:54:07 +01:00
7192a1bca3 Fix T73593: Drivers on hide_viewport and hide_render are unreliable
My previous fix (rB4c30dc343165) worked, except for an off-by-one error.
2020-03-23 14:54:07 +01:00
0b116a84c9 Fix T74923: Weight Painting Overlay Invisible for In Front Objects
For In Front Objects we need to use the in front depth buffer.

This patch will use the in front depth buffer and also makes sure that
it is filled with the center pixel depth.

Reviewed By: fclem

Differential Revision: https://developer.blender.org/D7216
2020-03-23 14:03:39 +01:00
6a5bd812b5 Fix T74586: Image Editor Uses Invalid Display Channels
When using the image editor the display channels attribute can become
invalid when selecting another image/buffer. This patch will check what
display channels are valid and when an invalid channel is selected it
will fall back to the color channel.

To de-duplicate the code it also introduces a
`ED_space_image_get_display_channel_mask` function that will determine
the valid bitflags for the display channel of a given `ImBuf`.
2020-03-23 13:56:42 +01:00
64982e213f COW: Edit Mesh: Do not copy the looptris pointer
No functional changes.

Differential Revision: https://developer.blender.org/D7173
2020-03-23 09:30:26 -03:00
62c33b67ef remove node on cancel 2020-03-23 13:28:15 +01:00
3881606540 put builtin node groups into menu 2020-03-23 13:17:01 +01:00
76082b0494 import node group loading 2020-03-23 12:50:51 +01:00
68bd8431cf some cleanup 2020-03-23 11:49:55 +01:00
6a6a7ebd50 move builtin node group code to separate file 2020-03-23 11:37:17 +01:00
ed30c8bf3a Merge branch 'functions' into builtin-simulation-nodes 2020-03-23 11:24:56 +01:00
8ce5c50411 Merge branch 'master' into functions 2020-03-23 11:22:59 +01:00
bceb91ffd2 Sound: Fix asymmetrical mutex lock/unlock logic
Started to happen after recent fix for T72632.

Was caused by runtime fields backup doing an early exit in the case the
given ID was never expanded by the Copy-on-Write mechanism, but it was
not done int the backup restore function (since it was not possible to
know "locally").

Now both init() and restore() will do an early exit when the ID had
nothing to be backed up.
2020-03-23 09:55:15 +01:00
0710fb724b Fix T72632: Blender crashes using Jack with AV Sync enabled (repeatable) 2020-03-23 09:34:26 +01:00
46c0da6e69 Fix T74964: Stereo Viewport Rendering Not Working
On some platforms the stereo viewport rendering was not working. The
issue was that the fragment shader and vertex shaded didn't match. Some
platforms will remove the non-matching in/out parameters and blender
needs to provide only the optimal set of parameters. Other platform
still want to receive data for the parameters that aren't used.

This fix uses the correct vertex shader that matches the fragment shader
making both platforms render the same result.
2020-03-23 09:10:37 +01:00
0c571db4ad Fix T73988: Mantaflow fluid simulation - Particles for Spray, Foam and Bubbles are one frame ahead of Mesh
Fixes an issue with secondary particles being out of sync with the main simulation. Cleaned up the secondary particle code in general too (making sure that all solver attributes - timestep, framelength, etc. - are set correctly).
2020-03-22 21:46:43 +01:00
95b6090afc Fix T75018: Dirty vertex colours missing tooltip 2020-03-22 21:40:31 +01:00
ad7bb8e42c Cleanup: spelling, correct Mesh.mface docs 2020-03-22 12:17:25 +11:00
1e4f6b231c Cleanup: use static declaration 2020-03-22 11:51:15 +11:00
9e8afa8817 Fix OpenXR SDK failing to compile with no JsonCpp installed
Force the SDK to use its own, bundled JsonCpp sources.
2020-03-21 21:58:17 +01:00
1e8dfe79c6 GPencil: Fade to Viewport color
Actually, the fade objects always fade to Black color, but this is not a good solution.

This patch fade the object to the viewport color.

Differential Revision: https://developer.blender.org/D7206
2020-03-21 20:29:17 +01:00
c589fdc8db Fix install_deps.sh ignoring --skip-xr-openxr 2020-03-21 19:03:56 +01:00
44c6b6615b OpenCL: Bring back CYCLES_OPENCL_TEST override
Back in 2.79 you could either use the debug panel or an
environment variable to override using OpenCL for unsupported
hardware. Which was rather useful for developers when testing
on NVidia just to be sure the CL kernels at-least build properly.

This broke in rB949ab753bb2

This diff restores testing though the CYCLES_OPENCL_TEST
environment variable.

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

Reviewers: brecht
2020-03-21 11:55:45 -06:00
3033b2a044 Fix T73372: cryptomatte not filling last pass for odd number of levels
Make logic consistent with the render pass creation in Python.
2020-03-21 15:04:12 +01:00
ada28d3c65 Fix T67712: cryptomatte sockets created in wrong order in some cases
Simplify the logic and always create node outputs in the order specified
by the render engine, I can't see a reason why built-in passes must be
first.
2020-03-21 15:04:02 +01:00
c0544eedc6 Fix crash with empty volume object and points drawing 2020-03-21 14:43:47 +01:00
0dbbb2eabf Cleanup: compiler warnings 2020-03-21 14:40:51 +01:00
5a1970b625 install node groups directory 2020-03-21 13:48:20 +01:00
2218ade694 initial node group shipped with Blender 2020-03-21 13:48:06 +01:00
4ccd998657 restore node width 2020-03-21 13:47:04 +01:00
4e15afad9e improve node group comparison 2020-03-21 13:40:55 +01:00
3c92432593 fixes 2020-03-21 13:05:09 +01:00
cae00bde2a simple search to select node group to import 2020-03-21 12:58:10 +01:00
96a57d7c25 Merge branch 'functions' into builtin-simulation-nodes 2020-03-21 12:14:34 +01:00
37ee4d4e2a Merge branch 'master' into functions 2020-03-21 12:09:13 +01:00
d924e31b42 GPencil: New Hardeness mode for Opacity modifier
Add  new option to change the stroke hardeness. This option works at stroke level, not at point level.

Also replaced the "Both" name mode by "Stroke and Fill".

Differential Revision: https://developer.blender.org/D7195
2020-03-21 09:48:18 +01:00
a22cd6b6a9 UI: Weight Paint: add a menu for locking and unlocking vertex groups.
This is a follow up on rBa1e50cfe6b4dbc360b6118c63a0dc7445023c37b
2020-03-20 20:07:42 -04:00
9607e54985 Fix T74959: Need to be explicit about UTF8 encoding in py.
Because some OSs are still using old 8bits specific encodings... Angry
eye @windows...
2020-03-20 20:52:52 +01:00
3d9d132ccd GPencil: Fix unreported slow transform with proportional edition
Now a hash is used to avoid double update of the same stroke. The old method was not correct with proportional edition.
2020-03-20 20:03:23 +01:00
a696053545 Python API: add bl_use_stereo_viewport for RenderEngine
To indicate if the render engine supports rendering a stereo 3D viewport.
This is not currently supported for Cycles.

Fixes T62582
2020-03-20 16:09:49 +01:00
6777956005 Fix T68370, T74973: Cycles cryptomatte not working when other passes are enabled
Solution found by Blazej Floch.
2020-03-20 15:59:24 +01:00
db65a6e0fb Fix T74345: missing albedo for Cycles principled hair BSDF 2020-03-20 15:23:39 +01:00
0127e8522a Fix Python error in Cycles baking panel 2020-03-20 14:25:16 +01:00
36b55bee42 Fix T74649: Outliner: Cannot set/clear parent with 'Keep Transforms'
Parenting in the outliner via drang and drop would always happen without
the 'Keep Transforms' option. Since this is often desired, this adds the
ability to hold Alt for doing this to the drop action.

Adding the hint to hold Alt to the operator name is not nice, but since
the operator name is used for the UI, there doesnt seem to be a nicer
way of doing this.

If modifier keys are needed back for other actions, spawning a menu
instead could be an alternative for the future.

Maniphest Tasks: T74649

Differential Revision: https://developer.blender.org/D7120
2020-03-20 13:24:05 +01:00
27553a2e4e Multires: Fix assert when removing modifier in edit mode
It is not guaranteed that with Multires modifier existing there
will be CD_MDISPS and CD_GRID_PAINT_MASK custom data layers.

Fixes assert in the following scenario:

- With default cube, go to edit mode
- Add Multires modifier
- Remove the Multires modifier
2020-03-20 12:28:29 +01:00
d931aacef6 Cleanup: Use IDTypeInfo data for id_swap functions.
Part of T74960.
2020-03-20 11:55:34 +01:00
6cbf342cbb Cleanup: Move BKE_libblock_get_alloc_info to using IDTypeInfo.
Part of T74960.
2020-03-20 11:21:02 +01:00
db4d264e70 fix API doc generation after new volume entry in context... 2020-03-20 10:48:30 +01:00
3bab9b4868 Fix T74154: Mantaflow crash: Baking data for domain type fluid on a plane.
Added sanity check to prevent bakes from being triggered when there is no fluid object present.
2020-03-20 10:42:54 +01:00
b8574c7e56 Fix T74885: Stamped lens metadata is wrong when camera lens is animated
The Lens metadata stamped on rendered images was wrong when the camera lens
is animated. This was caused by the render pipeline passing the original
camera to the metadata system, and not the evaluated camera.
2020-03-20 10:15:59 +01:00
86cc29d0cf Multires: Disallow changing mode and quality after subdivision
Avoids possible final object shape destruction since those options
defines how displacement is applied and propagated.
2020-03-20 09:50:00 +01:00
Jeroen Bakker
8ba9efb7d8 Fix T74811: GreasePencil Stereo Rendering
When using grease pencil in a stereo rendering the grease pencil objects are
only visible in the left eye. In the viewport it renders both.

Issue is related that `DRW_render_gpencil` only renders a single view. But
`DRW_render_to_image` renders all views. This patch puts this in a loop to
render both eyes.

Reviewed By: fclem

Differential Revision: https://developer.blender.org/D7154
2020-03-20 07:47:04 +01:00
4fc45c7a2b Fix T74643: Outline Overlay Shows Hidden Faces
When in editmode faces can be hidden, but in object mode these faces are
still visible. The flag if a face was hidden in edit mode is stored in
object mode, but should not be used.

The edge detection gpu batch did detect hidden faces and didn't add them
to the draw batch. The edge detection gpu batch is used for workbench
shadows, custom bone shapes and object outlines.

This patch adds all faces to the edge detection batch.

Reviewed By: fclem

Differential Revision: https://developer.blender.org/D7157
2020-03-20 07:43:31 +01:00
cb560c01b6 Cleanup: clang-format, comment indentation 2020-03-20 12:23:04 +11:00
85dc8d7477 Cleanup: sort file, struct lists 2020-03-20 12:19:44 +11:00
35e3abb912 Cleanup: remove old header conventions recently re-introduced 2020-03-20 12:19:09 +11:00
d2c3544c5c Cleanup: remove debug print accidentally included in own previous commit.
Thanks to @brecht for the heads up!
2020-03-19 22:12:36 +01:00
Adrian Newton
45dbe0be69 UI: use consistent names in theme preferences and editors menu
Differential Revision: https://developer.blender.org/D7087
2020-03-19 21:55:18 +01:00
Luya Tshimbalanga
f974bf2cba Fix invalid Linux appdata.xml syntax
Differential Revision: https://developer.blender.org/D7149
2020-03-19 21:55:17 +01:00
a1322d7c95 Cleanup: fix typos in comments
Contributed by luzpaz.

Differential Revision: https://developer.blender.org/D7133
2020-03-19 21:55:17 +01:00
Adrian Newton
83f171b626 UI: remove unnecessary Shadow from Shadow Samples label in Eevee volumetrics
Differential Revision: https://developer.blender.org/D7161
2020-03-19 21:55:17 +01:00
Yevgeny Makarov
c8b611b67f Fix UI alignment in generator f-curve modifier.
Differential Revision: https://developer.blender.org/D7167
2020-03-19 21:55:17 +01:00
Stephan
da019efde9 Cleanup: silence warnign in volume grid code
Differential Revision: https://developer.blender.org/D7175
2020-03-19 21:55:17 +01:00
817c38f715 PyAPI Docs: Update aud example
Fixes T74641
2020-03-19 16:21:17 -04:00
4b74b35322 Fix Cycles crash in Windows debug mode with volumes 2020-03-19 20:02:33 +01:00
12b621059a Cleanup/refactor: remove BKE_idcode, in favour of BKE_idtype.
Mpving utils from idcode to idtype proved to be somewhat painful for
some reasons, but now all looks good.

Had to add a fake/empty shell for the special snowflake too,
`ID_LINK_PLACEHOLDER/INDEX_ID_NULL`...
2020-03-19 19:39:23 +01:00
0b7854323d Fix typos in names fo new mesh and texture IDTypeInfo. 2020-03-19 19:39:23 +01:00
e1b2ded7b2 Fix build WITH_CXX_GUARDEDALLOC 2020-03-19 14:42:04 -03:00
3be7d74cba Fix T70126: Can't snap between objects with Rigid Body
`DEG_FOREACH_COMPONENT_IGNORE_TRANSFORM_SOLVERS` was `0`
2020-03-19 13:19:15 -03:00
cd4152c242 add ui for surface nodes 2020-03-19 16:34:10 +01:00
c836becf17 initial duplicate node tree avoidance 2020-03-19 15:51:56 +01:00
4713680eef initial import group template operator 2020-03-19 15:10:09 +01:00
f1de50b387 initial export node group operator 2020-03-19 14:58:52 +01:00
0b5f0a7e90 Merge branch 'functions' into builtin-simulation-nodes 2020-03-19 11:33:19 +01:00
d9356a5b8d Cleanup: make format after SortedIncludes 2020-03-19 11:22:15 +01:00
edd0928d09 Merge branch 'master' into functions 2020-03-19 11:19:05 +01:00
080b013ea4 add group nodes to menu 2020-03-16 16:11:21 +01:00
3ad939f82d add Float Math/Vector Math function nodes 2020-03-16 14:36:59 +01:00
064181a3d2 make Tab to edit node group work 2020-03-16 13:58:52 +01:00
dfa169be9c add data type property to Set Particle Attribute node 2020-03-16 13:36:01 +01:00
108fc6c8ac add data type property to Particle Attribute node 2020-03-16 13:28:20 +01:00
07766ddc6f add layout nodes to menu 2020-03-16 12:06:03 +01:00
f45c3832fe Merge branch 'functions' into builtin-simulation-nodes 2020-03-16 12:01:35 +01:00
0feed991e2 Merge branch 'master' into functions 2020-03-16 11:59:54 +01:00
04780894ed store pointer to image in image socket 2020-03-13 15:40:26 +01:00
7dd54b3858 add separate/combine xyz/rgb/hsv node uis 2020-03-13 15:14:35 +01:00
e8738f86dc Rename to Combine XYZ for consistency 2020-03-13 14:38:57 +01:00
494eac50b6 new Particle Attribute node ui 2020-03-13 14:10:03 +01:00
defdf63973 remove "Input" from name 2020-03-13 14:02:59 +01:00
41efb8f9ac Merge branch 'functions' into builtin-simulation-nodes 2020-03-13 13:57:42 +01:00
26e7498b0c Merge branch 'master' into functions 2020-03-13 13:55:58 +01:00
0f1f55e14b new simulation time input node ui 2020-03-12 15:18:13 +01:00
e1a1112c47 new Emit Particles node ui 2020-03-12 15:10:31 +01:00
cf4ba3b88c add Particle Mesh Collision Event node ui 2020-03-12 14:52:58 +01:00
e59f449f1a add particle mesh emitter node ui 2020-03-12 14:42:00 +01:00
38566d0e11 fix naming 2020-03-12 14:32:45 +01:00
50b8e605d4 Store pointer to object data block in object socket 2020-03-12 13:20:21 +01:00
51cea97d48 Merge branch 'functions' into builtin-simulation-nodes 2020-03-12 11:27:04 +01:00
4a8a7cc3ca Merge branch 'master' into functions 2020-03-12 11:16:44 +01:00
78d8e9f962 fix after merge 2020-03-09 15:30:52 +01:00
4f8b24e0c5 Merge branch 'master' into functions 2020-03-09 15:27:27 +01:00
268e5fd210 add first function node ui 2020-03-05 16:04:17 +01:00
47112042e0 add Object, Image and Surface Hook socket types 2020-03-05 14:38:51 +01:00
008d06d133 rename Custom Force node to just Force 2020-03-05 13:15:18 +01:00
35d28e47f0 new multi execute node 2020-03-05 13:10:48 +01:00
5fae03fec0 new execute condition node 2020-03-05 12:57:21 +01:00
3546519707 add mode property to particle time step event node 2020-03-05 12:42:33 +01:00
f01fa8c8a7 initial particle time step event node 2020-03-05 12:12:15 +01:00
454acfddfa remove socket that was used for testing only 2020-03-05 11:50:26 +01:00
fe178ae449 Merge branch 'functions' into builtin-simulation-nodes 2020-03-05 11:42:58 +01:00
8471b2f22e Merge branch 'master' into functions 2020-03-05 11:41:38 +01:00
3d2fafcfcc add Particle Birth Event node ui 2020-03-02 17:23:12 +01:00
67066b03ec add Set Particle Attribute node ui 2020-03-02 17:15:12 +01:00
84959e1e6a define input and output link limit on socket type 2020-03-02 17:05:47 +01:00
b8d4f81a14 allow multiple inputs in particle simulation node 2020-03-02 16:47:07 +01:00
d5b6dc8420 actually use socket link limit from template 2020-03-02 16:43:45 +01:00
a321c9a29a add custom force node ui 2020-03-02 16:33:03 +01:00
2fc1ac2eb0 cleanup 2020-03-02 16:32:44 +01:00
26d39077fb Merge branch 'functions' into builtin-simulation-nodes 2020-03-02 15:45:56 +01:00
743443ac14 fix after merge 2020-03-02 15:44:31 +01:00
7686f1a8fe Merge branch 'master' into functions 2020-03-02 15:36:29 +01:00
a687c1d70f make simulation node groups work 2020-03-02 13:05:32 +01:00
0791ab863a give sockets a default display shape 2020-03-02 12:44:45 +01:00
4132dc2452 add new builtin socket types 2020-03-02 12:34:38 +01:00
60fc5fc9f3 add first node using builtin node registration methods 2020-03-02 11:47:59 +01:00
b70040d7f9 Merge branch 'functions' into builtin-simulation-nodes 2020-03-02 11:01:59 +01:00
b350b85aba Merge branch 'master' into functions 2020-03-02 10:59:03 +01:00
174ceea93b initial simulation tree type 2020-02-28 14:05:46 +01:00
1fee5a3cb0 Merge branch 'functions' into builtin-simulation-nodes 2020-02-28 13:43:05 +01:00
87d20d7c92 remove leftovers from initial simulation node tree 2020-02-28 13:42:46 +01:00
1ea9e5437b Merge branch 'functions' into builtin-simulation-nodes 2020-02-28 13:34:12 +01:00
ee292426a7 Merge branch 'master' into functions 2020-02-28 13:31:11 +01:00
7cb2b2fa26 start laying out simulation node files 2020-02-28 13:27:03 +01:00
4ed7334ef6 Merge branch 'master' into functions 2020-02-28 09:01:15 +01:00
b92b1a4fe5 Use new LinearAllocatedVector in various places 2020-02-23 17:37:15 +01:00
096856a700 new LinearAllocatedVector<T>
This is a vector that does not own the memory its elements are stored in.
Instead, a linear allocator is passed to every call to `append`, that will
be used if the vector has to grow. Since a linear allocator does not support
deallocation, no memory is dealloced until the linear allocator is destructed.

This structure can be used when many small vectors of initially unknown
size are required.
2020-02-23 17:35:47 +01:00
beed795e5a Merge branch 'master' into functions 2020-02-23 15:25:05 +01:00
fcfe9784cb Merge branch 'master' into functions 2020-02-20 09:27:28 +01:00
3b1c34267b improve copying StringRef to new buffer 2020-02-19 11:49:03 +01:00
3fe710aeaf Merge branch 'master' into functions 2020-02-19 10:17:36 +01:00
6399bfcee3 add missing include 2020-02-17 15:32:19 +01:00
7f35aa99c7 Merge branch 'master' into functions 2020-02-17 15:07:46 +01:00
1945a23259 Merge branch 'master' into functions 2020-02-17 10:47:28 +01:00
fad8e475c7 remove UNUSED_FUNCTION_NDEBUG macro again 2020-02-16 12:45:25 +01:00
b80585ba30 remove unused code 2020-02-16 12:41:01 +01:00
ecc78d29d6 bring back more correct duplicate removal 2020-02-16 12:39:16 +01:00
4d74116218 initial MultiFunctionID 2020-02-15 17:55:18 +01:00
bd42f7c275 remove operation hash of functions, a more reliable system is necessary 2020-02-15 17:52:52 +01:00
e543c9ad32 add global sin and cos functions 2020-02-14 11:40:02 +01:00
bdd69570e2 make naming more consistent 2020-02-14 11:31:23 +01:00
3e533af702 make some functions more reusable 2020-02-14 11:29:49 +01:00
8363204347 use faster CPPType access 2020-02-14 11:03:32 +01:00
0e0f6a9216 provide faster access to builtin CPPTypes 2020-02-14 10:59:37 +01:00
2b83d33032 Merge branch 'master' into functions 2020-02-14 10:01:16 +01:00
4526aa70e5 remove unused timers 2020-02-13 19:01:28 +01:00
1df94f6257 remove obselete BLI_math_cxx.h file 2020-02-13 18:58:34 +01:00
9564cd045a remove lazy init code 2020-02-13 18:44:50 +01:00
de23a2c35b remove lazy init usage 2020-02-13 18:39:38 +01:00
fd46b5e9fe remove lazy init usage 2020-02-13 18:33:56 +01:00
10927b6747 fix allocator usage for StringMap 2020-02-13 18:33:42 +01:00
ba1fcdf41a give test node a poll function 2020-02-13 18:33:29 +01:00
9906e5313b remove usage of lazy init macro 2020-02-13 18:21:15 +01:00
2e1d18600f remove unused code 2020-02-13 18:16:31 +01:00
e4343f6aa2 add license headers 2020-02-13 18:08:38 +01:00
953b8d6066 cleanup 2020-02-13 17:59:32 +01:00
f943f4f99c move rgba_b and rgba_f to separate file 2020-02-13 17:59:05 +01:00
350bc04f56 move float3 -> float2 conversion to different file 2020-02-13 17:55:15 +01:00
9933b5bc27 move float4x4 into separate file 2020-02-13 17:53:03 +01:00
2e950e3b89 move float2 to separate file 2020-02-13 17:47:04 +01:00
bb4b0cc954 move float3 to separate file 2020-02-13 17:45:26 +01:00
1c81255cdb try socket decl in c++ 2020-02-13 15:07:02 +01:00
90b41c7c2f create socket in new node 2020-02-13 12:52:29 +01:00
2630b4c231 new node type for testing 2020-02-13 12:43:01 +01:00
630da3b5e3 Initial builtin simulation node tree type 2020-02-13 12:04:41 +01:00
a88db0aa7d fix warning 2020-02-13 11:53:15 +01:00
f72b3f33a0 define UNUSED_FUNCTION_NDEBUG macro 2020-02-13 11:53:05 +01:00
2c077e741d test commit with different email 2020-02-13 11:12:18 +01:00
94c410a5af Merge branch 'master' into functions 2020-02-13 11:07:28 +01:00
a2a8932981 cleanup 2020-02-12 20:32:48 +01:00
e4a3186aad fix after merge 2020-02-12 19:02:03 +01:00
dc89a3ec7c Merge branch 'master' into functions 2020-02-12 19:00:59 +01:00
b4bf6b9cc9 remove pad_up function 2020-02-10 16:23:14 +01:00
2d36836616 cleanup dot export 2020-02-10 14:46:44 +01:00
0b9888d038 fix after merge 2020-02-10 14:40:04 +01:00
43e2ca8fd1 Merge branch 'master' into functions 2020-02-10 14:23:37 +01:00
8cda8bef1e Merge branch 'master' into functions 2020-02-10 14:14:16 +01:00
ff21d33bfe Don't allow getting mutable reference to vector set 2020-02-10 13:32:02 +01:00
bae72c4b8e remove unused classes 2020-02-10 13:27:30 +01:00
23b52a1958 remove unused class 2020-02-10 13:24:46 +01:00
6218f315bb remove unused class 2020-02-10 12:58:20 +01:00
3f65050354 remove unused classes 2020-02-10 12:53:44 +01:00
f363ff348c remove temporary allocator 2020-02-10 12:42:24 +01:00
003dc7ffc9 fix after merge 2020-02-10 12:26:14 +01:00
605928c15b Merge branch 'master' into functions 2020-02-10 12:01:07 +01:00
9880bebd1a improve linear allocator 2020-02-10 11:47:17 +01:00
9677fbe029 rename MonotonicAllocator to LinearAllocator 2020-02-10 10:51:18 +01:00
6989f9be3d add StringRef.substr method 2020-02-10 09:53:33 +01:00
ce14c2c7bd store default value per CPPType 2020-02-06 16:44:32 +01:00
09149b4f0d Zero initialize before default construction to make it more deterministic 2020-02-06 15:42:08 +01:00
cb46cc6705 Merge branch 'master' into functions 2020-02-05 17:34:24 +01:00
8fa26bf7e1 disable duplicate removal 2020-02-05 10:26:33 +01:00
cf59daf62f fix killing particles 2020-02-04 16:48:46 +01:00
601ed4061a cleanup 2020-02-02 14:17:49 +01:00
6905633e57 fix generating operation hash
this needs some more work
2020-02-02 14:17:39 +01:00
79b3de9a63 assert data types when inserting links 2020-02-02 14:16:58 +01:00
975decb5e3 new Vector Length node 2020-02-02 14:16:21 +01:00
58ec7b44fe fix memory leak 2020-02-02 12:39:13 +01:00
57a063f599 new normalize vector node 2020-02-02 12:37:59 +01:00
d944146ebe fix stack use out of scope error 2020-02-02 12:26:37 +01:00
2e5ab9640e vectorize Map Range node 2020-02-02 12:26:11 +01:00
7c06e2e8d2 new ceil and floor float nodes 2020-02-02 11:43:33 +01:00
a20c781343 Merge branch 'master' into functions 2020-02-02 10:40:56 +01:00
599e8f7bb1 cleanup same size asserts 2020-02-01 11:58:50 +01:00
26f4fa9de7 utility to add input/output dummy nodes 2020-02-01 11:37:36 +01:00
e52941fe5b utility for printing arrays 2020-02-01 11:34:57 +01:00
337b918b92 missing value forwarding 2020-01-29 21:21:10 +01:00
323c20bbb7 remove unused data structure 2020-01-29 21:18:41 +01:00
a11b21f1eb Merge branch 'master' into functions 2020-01-29 21:14:40 +01:00
2430d76b1e Write to output buffer directly instead of doing a copy in the end 2020-01-29 21:05:07 +01:00
9e490d7cf5 make naming more specific 2020-01-29 19:07:23 +01:00
2929bc8d7e cleanup 2020-01-29 18:56:49 +01:00
a5470fe0ca cleanup 2020-01-29 18:47:51 +01:00
06ddde0daa new way to construct custom functions at compile time 2020-01-29 18:43:52 +01:00
477d15998c add utility function 2020-01-27 23:04:02 +01:00
e8ea904cee fix compile error 2020-01-27 23:03:54 +01:00
d17a352f23 Merge branch 'master' into functions 2020-01-27 22:13:42 +01:00
787f6c8a7e enable node tree optimizations 2020-01-27 22:05:55 +01:00
f6334efbd8 cleanup naming 2020-01-27 22:05:44 +01:00
3a27fb824e fix typo 2020-01-27 21:57:50 +01:00
a39dc76dec pass buffer cache to functions via context 2020-01-27 21:30:59 +01:00
3f29c1dd39 remove array allocator 2020-01-27 21:08:12 +01:00
b4a5df88fa try using BufferCache instead of ArrayAllocator 2020-01-27 21:07:03 +01:00
9c0cd8d7a3 cleanup 2020-01-27 16:36:26 +01:00
62bc3b2716 cleanup 2020-01-27 16:23:23 +01:00
fb953e0d8d restructure file 2020-01-27 16:04:48 +01:00
92b5b1fb69 cleanup naming 2020-01-27 15:59:41 +01:00
638a48885a cleanup 2020-01-27 15:41:10 +01:00
45619f2f2f cleanup 2020-01-27 15:40:24 +01:00
1824b8fb52 make single element execution work again 2020-01-26 21:56:41 +01:00
cbadf3e29a cleanup warning 2020-01-26 21:55:32 +01:00
e7a9d2ce96 cleanup 2020-01-26 21:00:34 +01:00
a5b08c1d95 minor improvement 2020-01-26 20:56:05 +01:00
0116cc1f4d fix 2020-01-26 20:54:09 +01:00
4141c905f3 cleanup 2020-01-26 20:50:02 +01:00
4202a208c2 compute dependency depths in network implementation 2020-01-26 20:39:41 +01:00
8c45804a1c initial deepest depth first heuristic 2020-01-26 17:26:45 +01:00
97b6d31f41 use new network evaluation storage 2020-01-26 13:16:43 +01:00
24724b70f0 new network evaluation storage (unused so far) 2020-01-26 12:32:11 +01:00
8667a87134 Revert "try storing values per input differently"
This reverts commit fee675ffe0.
2020-01-26 11:06:54 +01:00
fee675ffe0 try storing values per input differently 2020-01-23 16:02:24 +01:00
ce3ec2f172 remove print 2020-01-23 16:01:55 +01:00
3ad9ccaba7 initial array allocator 2020-01-23 15:15:29 +01:00
dae7527f4f Merge branch 'master' into functions 2020-01-23 14:31:59 +01:00
9f63f863f1 Merge branch 'master' into functions 2020-01-23 12:34:12 +01:00
83d5b3be12 disable optimizations 2020-01-19 12:44:21 +01:00
2e28fc0dd6 cleanup 2020-01-19 12:31:07 +01:00
c5868657aa support for deduplicating many more functions 2020-01-19 12:24:12 +01:00
04bfe684c9 rename 2020-01-19 12:06:24 +01:00
e1a5d15d95 set more operation hashes 2020-01-19 12:05:54 +01:00
00b1399593 deduplicate Particle Attribute node 2020-01-19 11:47:56 +01:00
85c43fbd2e store a random hash per type 2020-01-19 11:47:43 +01:00
65237b2346 support deduplicating vectorized nodes 2020-01-19 11:39:00 +01:00
35af9ecd3d support deduplicating all math nodes 2020-01-19 11:35:22 +01:00
32b02c13d8 operation hash for converters 2020-01-19 11:10:34 +01:00
bf74ef2e40 should not iterate over array that is being changed 2020-01-19 11:10:18 +01:00
b40bdad104 utility to generate constant random numbers per line 2020-01-19 10:57:14 +01:00
ea5fa56ca9 disable optimizations for now 2020-01-18 20:15:20 +01:00
0db9e85a7a replace Vector.index with Vector.index_try 2020-01-18 20:10:53 +01:00
5697fd53f2 implement initial Remove Duplicates optimization 2020-01-18 20:03:10 +01:00
4afdb40b4e set operation hash for some functions 2020-01-18 20:00:14 +01:00
296fd08875 support for storing operation hash per function 2020-01-18 19:59:40 +01:00
03f51bf4e1 add utilities to MFNetworkBuilder 2020-01-18 19:59:01 +01:00
a73b17564c fix Vector.remove_first_occurrence_and_reorder 2020-01-18 19:58:37 +01:00
2b0041e4dd new Optional.set_new methods 2020-01-18 19:58:28 +01:00
7dad14ae79 simplify constant folding 2020-01-18 18:20:16 +01:00
40bac586dc improve naming 2020-01-18 17:54:54 +01:00
f439518781 Merge branch 'functions' into network-builder-refactor 2020-01-18 17:24:13 +01:00
ed89a010cb Merge branch 'master' into functions 2020-01-18 17:23:52 +01:00
0982fdccd9 fix alignment in BLI::Optional 2020-01-16 21:59:00 +01:00
d8ca0ea86d cleanup dead node elimination 2020-01-11 17:15:52 +01:00
f6c377aa5b remove unused nodes optimization 2020-01-11 16:35:35 +01:00
4684b69405 give nodes and sockets an id again 2020-01-11 16:09:06 +01:00
d46ac7934a add utility to debug allocated amount in monotonic allocator 2020-01-11 15:56:37 +01:00
238059ac2a store network more compactly 2020-01-11 15:51:06 +01:00
41df03637e store data in network builder more compactly 2020-01-11 15:34:52 +01:00
090ae9aefe avoid unnecessary type casting 2020-01-11 14:09:09 +01:00
6aa7a269ae remove nodes after constant folding 2020-01-11 13:21:18 +01:00
8ddf71d880 initial network builder refactor to enable support for removing nodes 2020-01-11 12:59:37 +01:00
2d7fee45d6 add method to access all nodes 2020-01-11 10:40:26 +01:00
d54eebbfa7 support constant folding for vectors 2020-01-09 17:41:10 +01:00
f1fc372df1 move constant functions to separate file 2020-01-09 17:20:33 +01:00
c8afdc93f9 Merge branch 'master' into functions 2020-01-09 17:09:36 +01:00
c2c6d152ad Merge branch 'master' into functions 2020-01-05 16:37:20 +01:00
66fdcd5f33 minor fixes 2020-01-04 16:38:09 +01:00
e3ee421314 better to string conversion for generic types 2020-01-04 16:21:03 +01:00
83308760a2 initial constant folding of multi function network 2020-01-04 16:07:59 +01:00
f526c8d303 rename Stack.empty to Stack.is_empty 2020-01-04 14:42:39 +01:00
d95b52f1c9 cleanup link insertion 2020-01-04 14:25:53 +01:00
6b9e7dc585 simplify conversion insertion 2020-01-04 13:59:39 +01:00
bc48280fed refactor: extract methods 2020-01-04 13:42:39 +01:00
7a931deab2 simplify names 2020-01-04 13:37:27 +01:00
b7f6be1b8b simplify names 2020-01-04 13:27:56 +01:00
9c20241272 simplify names 2020-01-04 13:26:17 +01:00
b2fb025153 rename FunctionNodeTree to FunctionTree 2020-01-04 13:24:29 +01:00
5e49e3df6e move code into sub namespace 2020-01-04 13:23:35 +01:00
5bbc1b2e16 refactor: initial removal of FunctionTreeMFNetworkBuilder 2020-01-04 13:17:33 +01:00
ea9282cbd6 extract class for managing the socket mapping 2020-01-03 15:02:41 +01:00
2c68bb3e51 cleanup naming 2020-01-03 14:43:00 +01:00
c505fc4d23 cleanup naming 2020-01-03 14:41:18 +01:00
4063e6c058 extract actual build step from builder 2020-01-03 14:30:47 +01:00
be23e6e2f2 extract members from builder 2020-01-03 14:21:17 +01:00
b7a8ef4b9f replace IdMultiMap with more generic IndexToRefMultiMap 2020-01-03 14:16:58 +01:00
1934749029 cleanup 2020-01-03 13:44:54 +01:00
35aaf2fe51 use IndexToRefMap instead of IndexMap 2020-01-03 13:40:31 +01:00
9c2e7a4e1c only map dummy sockets when function network has been created 2020-01-03 13:17:37 +01:00
e083ab2d02 remove unused method 2020-01-03 12:51:12 +01:00
2b00e17124 extract IdMultiMap data structure 2020-01-03 12:44:41 +01:00
089ee94b88 add missing hash function 2020-01-03 12:06:22 +01:00
ab3498b057 Merge branch 'master' into functions 2020-01-03 11:39:41 +01:00
7d4fb6880e use BLI::parallel_for when creating tetrahedons 2020-01-02 17:14:30 +01:00
d238e6410f improve copying of generic data 2020-01-02 17:09:02 +01:00
187844f712 use StringMultiMap in more places 2020-01-02 16:37:17 +01:00
6732a03531 introduce StringMultiMap 2020-01-02 16:28:55 +01:00
8753f92cb2 utility to iterate over string map in parallel 2020-01-02 16:05:41 +01:00
0ebb98ab3d cleanup 2020-01-02 15:49:41 +01:00
30b50638a0 rename index_iterator to index_range 2020-01-02 15:22:20 +01:00
25fc970f44 move tbb wrappers to blenlib 2020-01-02 15:20:44 +01:00
1e2401a5ff more parallelization 2020-01-02 15:12:26 +01:00
2025065931 simulate particles in parallel 2020-01-02 14:58:39 +01:00
169bdd890f extract method 2020-01-02 14:43:46 +01:00
ecfed4d70f cleanup parallel for/invoke 2020-01-02 14:39:52 +01:00
8a8223c193 cleanup parallel for 2020-01-02 14:36:07 +01:00
1273af1bdd simulate particle systems in parallel 2020-01-02 14:31:38 +01:00
3e325b42bb run emitters in parallel 2020-01-02 14:23:12 +01:00
f12b544515 new multi map implementation that can deal with non trivial types 2020-01-02 14:06:21 +01:00
fb512bfa3d initial working version with ParticleSet 2020-01-02 13:18:12 +01:00
0099355bc6 continue with ParticleSet 2019-12-31 16:48:01 +01:00
799fb759a7 improve particle set 2019-12-31 15:35:08 +01:00
0cda96f1be initial particle set 2019-12-31 14:59:58 +01:00
c2d3708224 introduce MutableAttributesRef 2019-12-31 14:59:48 +01:00
36221652a4 rename various types and variables 2019-12-31 14:17:44 +01:00
7ed83e0bee Move inlined node tree to functions folder 2019-12-31 13:53:48 +01:00
06e7d91f55 Merge branch 'master' into functions 2019-12-31 13:40:45 +01:00
4e0c2a8abd Merge branch 'master' into functions 2019-12-30 13:35:53 +01:00
04c0c92f87 use less generic tbb include 2019-12-28 13:28:06 +01:00
ad58b620b2 make surface hooks work in function deform/points modifiers 2019-12-28 12:23:17 +01:00
d7f18db74a fix evaluation of single input math function with constant input 2019-12-28 12:13:09 +01:00
1eca32bb84 improve usage of TBB 2019-12-28 11:29:34 +01:00
4601ea8f82 Merge branch 'master' into functions 2019-12-28 11:13:44 +01:00
bf4f376060 simplify some names 2019-12-22 15:04:13 +01:00
ee8dfc0062 replace time span with float interval 2019-12-22 14:21:25 +01:00
335b5bc540 cleanup influences collector 2019-12-22 13:53:24 +01:00
7250dfeb2e cleanup 2019-12-22 13:44:27 +01:00
feb938dfb8 remove task c++ wrapper in favor of tbb 2019-12-22 13:42:46 +01:00
4b8cd2cebd use tbb for parallel code 2019-12-22 13:22:55 +01:00
64b707eb67 use IndexMask in more places 2019-12-22 12:48:55 +01:00
f85c4ca3ae cleanup 2019-12-22 12:40:44 +01:00
a80ffa4bc5 cleanup usage of IndexMask 2019-12-22 12:37:42 +01:00
866894454f use IndexMask in more places 2019-12-22 12:32:43 +01:00
717beed8d7 cleanup naming 2019-12-22 12:26:34 +01:00
03dbcd82a4 cleanup naming 2019-12-22 11:10:54 +01:00
9c68e2ecc9 speedup multi function evaluation 2019-12-22 10:58:28 +01:00
b4b25eac9a access event filter duration in node tree 2019-12-20 17:43:13 +01:00
bed1a7cdb7 change some pointers to references 2019-12-20 17:09:23 +01:00
6600c532c4 change particle function evaluation api 2019-12-20 17:01:14 +01:00
81573c53b6 replace compare node 2019-12-20 16:43:04 +01:00
d00557bd19 use IndexMask in more places 2019-12-20 16:37:50 +01:00
dca21ef42f start improving custom events 2019-12-20 16:19:38 +01:00
70ada64a98 use index mask in event interface 2019-12-20 15:44:47 +01:00
d40031df15 remove event storage concept 2019-12-20 15:39:17 +01:00
adfd43db6b new Node Instance Identifier node 2019-12-20 15:22:21 +01:00
aabe38f06c change names displayed in search 2019-12-20 15:03:10 +01:00
a183cc3c4e handle not-found linked groups better 2019-12-20 14:59:33 +01:00
3b65445f4e Merge branch 'master' into functions 2019-12-20 14:21:54 +01:00
a549241728 bring back functionality of old actions 2019-12-19 15:52:10 +01:00
b3c93cfe90 initial ParticleAction class 2019-12-19 14:59:43 +01:00
35ee68ab69 fix when there is no nodelib 2019-12-19 14:58:11 +01:00
6caf9be863 remove variation input of age reached node 2019-12-19 14:35:40 +01:00
1b6e9574a6 leave group when active node is not selected 2019-12-19 14:14:26 +01:00
e8990fd220 cache node group names in .blend file 2019-12-19 13:21:06 +01:00
a1f79adde9 improve debug dot output 2019-12-19 13:17:38 +01:00
6cc8f3cd71 remove builtin group nodes 2019-12-19 13:11:33 +01:00
3c519d4917 new Join Text List node 2019-12-19 12:58:07 +01:00
9d885235eb better float3 printing 2019-12-19 12:38:37 +01:00
e97a45ef8c replace Kill Particle node with group 2019-12-19 12:24:51 +01:00
74eeb7a759 improve debug dot output 2019-12-19 12:12:24 +01:00
ed64bcfb71 remove Particle Info node 2019-12-19 11:53:30 +01:00
c78896e675 cleanup 2019-12-19 11:47:43 +01:00
aae54f903c fix path filter 2019-12-19 11:46:33 +01:00
98376bc8ee automatically load node groups from nodelib 2019-12-19 11:41:21 +01:00
150d76aa7b handle unknown node better 2019-12-19 11:24:38 +01:00
3d4f0fe7fe remove mockup nodes 2019-12-19 11:17:23 +01:00
e733615650 remove actions that can be build as node groups 2019-12-19 10:52:12 +01:00
54fe936849 remove unused action 2019-12-19 10:37:21 +01:00
136ac83c82 change IndexMask constructor 2019-12-19 10:37:13 +01:00
7b0ddb2420 replace MFMask with IndexMask 2019-12-19 10:11:31 +01:00
717283c038 Merge branch 'master' into functions 2019-12-19 09:49:43 +01:00
15c15d95e9 fix missing include 2019-12-18 15:21:26 +01:00
f72a4ab0af Remove Explode Particle node 2019-12-18 15:03:15 +01:00
a7ce3fc324 use Tab to open/close groups 2019-12-18 14:59:27 +01:00
7329734ec2 fix file load error 2019-12-18 14:59:09 +01:00
545e1b60f1 implement start-stop mode in Float Range node 2019-12-18 13:53:16 +01:00
5c90bec61e simplify socket identifiers 2019-12-18 13:38:51 +01:00
ec6fc1aaec support for inserting group nodes from search 2019-12-18 13:34:26 +01:00
17d18351c6 extract method to find callable trees 2019-12-18 13:17:49 +01:00
1c7e0b1755 improve node layout of group nodes 2019-12-18 13:11:48 +01:00
9fa91b8719 support for sampling random vectors in a sphere 2019-12-18 13:04:45 +01:00
c6cf1082cb new Multiply Vector with Float node 2019-12-18 12:53:02 +01:00
68b8979137 new Vector from Value node 2019-12-18 12:39:02 +01:00
4c5332cae7 new Random Vectors node 2019-12-18 12:31:19 +01:00
ceb5471884 improve Random Vector node 2019-12-18 12:11:02 +01:00
375ac4f37a new Random Vector node 2019-12-18 11:42:42 +01:00
06adff95b4 cleanup Spawn Particles node 2019-12-18 11:18:55 +01:00
6bb09a50fb support for computing vectors per particle 2019-12-18 11:06:55 +01:00
298b0cd863 Remove Action Context concept for now 2019-12-18 10:04:53 +01:00
e810f4dd7b Merge branch 'master' into functions 2019-12-18 09:54:06 +01:00
2d1cd3076f fix missing update 2019-12-17 15:05:39 +01:00
ced689a43a new Random Floats node 2019-12-17 14:48:05 +01:00
d16d58e6f9 show position attribute by default 2019-12-17 13:52:45 +01:00
79c5b4d4af fix socket drawing 2019-12-17 13:36:53 +01:00
ccc8d664fc initial Spawn Action node 2019-12-17 13:28:38 +01:00
71124e192f minor changes 2019-12-17 13:27:49 +01:00
e1e1069b45 initial spawn node ui 2019-12-17 12:04:09 +01:00
57ab7cefdd introduce ScopedVector 2019-12-17 11:48:33 +01:00
bd5be7c70a Rename TemporaryVector/Array to LargeScopedVector/Array 2019-12-17 11:40:26 +01:00
0144b11673 Support inline storage in BLI::Array 2019-12-17 11:35:13 +01:00
ae44dad2e1 cleanup 2019-12-17 11:18:25 +01:00
c03bb9db0d store name of node and sockets in dummy node 2019-12-17 11:13:00 +01:00
1fd9485a51 set dot background color utility 2019-12-17 11:12:19 +01:00
54229b8e82 support for removing execute sockets 2019-12-17 10:39:32 +01:00
eba730f986 Simplify execute socket naming 2019-12-17 10:09:25 +01:00
fba5b503f5 fix after merge 2019-12-17 09:46:17 +01:00
9a3b370061 Merge branch 'master' into functions 2019-12-17 09:34:13 +01:00
2b84a7d5b0 fix wrong comparison 2019-12-14 18:33:39 +01:00
f31dc22ebb fix some warnings 2019-12-14 18:25:42 +01:00
34d06de0dc remove some old tests 2019-12-14 18:07:18 +01:00
b6945930e8 remove unused functionality 2019-12-14 17:57:19 +01:00
67724f884a use new indices functions 2019-12-14 17:50:33 +01:00
b52c4ddfb9 more low level generic CPPType functions 2019-12-14 17:44:56 +01:00
617ab7847f add more functions to CPPType 2019-12-14 17:16:05 +01:00
2225dab801 optimize fill operation 2019-12-14 17:06:07 +01:00
e1a662ee3a optimize float range 2019-12-14 16:53:51 +01:00
f0cb97c9a3 cleanup 2019-12-14 16:49:21 +01:00
5419ae4d83 optimize generic extend operation 2019-12-14 16:19:16 +01:00
fc30d4e272 support for removing sockets in Select node 2019-12-14 15:36:00 +01:00
21ebaf9bc6 initial Select node 2019-12-14 15:28:13 +01:00
a1b0d7e982 print warning when inputs incorrectly depend on particles 2019-12-14 14:46:40 +01:00
510da24778 keep track of contexts used by function network 2019-12-14 14:46:21 +01:00
2646b9016f more utility functions for vector and stack 2019-12-14 14:45:37 +01:00
cd2385f608 refactor signature builder 2019-12-14 14:02:33 +01:00
5381fbc1a3 turn attribute name into an input socket 2019-12-14 13:15:28 +01:00
d720463300 support nicer drawing of sockets 2019-12-14 12:18:17 +01:00
776562623c new Multi Execute node 2019-12-14 11:35:27 +01:00
8a41c15bf9 prevent trails and explosion in a the same particle system 2019-12-14 11:29:49 +01:00
46b29a75a0 remove unused code 2019-12-14 11:10:55 +01:00
984ba7e943 Merge branch 'master' into functions 2019-12-14 11:02:49 +01:00
764857eb37 fix: find IDs used by output sockets as well 2019-12-13 19:42:49 +01:00
dc0d0d3936 Merge branch 'master' into functions 2019-12-13 19:40:19 +01:00
5c83319029 new Find Non Close Points node 2019-12-12 18:28:14 +01:00
d7d365f6eb new Get List Elements node 2019-12-12 15:34:53 +01:00
b716661366 support for vertex weights in Sample Object Surface node 2019-12-12 14:59:39 +01:00
4de6eafba3 sample hooks on surface 2019-12-12 13:05:08 +01:00
ee52b2f7d8 Merge branch 'master' into functions 2019-12-12 11:17:04 +01:00
6d3cd34bd5 fix compile error 2019-12-11 17:13:16 +01:00
df783a4ee1 access emitter time info in node tree 2019-12-11 16:32:48 +01:00
4d72f25e9a make vertex group name an input socket 2019-12-11 16:05:47 +01:00
5d8036c675 access position and normal directly in Closest surface hook node 2019-12-11 15:50:06 +01:00
03bde25be9 fix context in vectorized functions 2019-12-11 15:27:53 +01:00
3a1aec54a7 cleanup 2019-12-11 15:20:21 +01:00
2a25a0bd60 cleanup 2019-12-11 15:08:54 +01:00
a080464e31 extract function vectorizer to separate file 2019-12-11 15:03:19 +01:00
95e0ea69a2 extract customizable functions into separate file 2019-12-11 14:59:14 +01:00
a678e0df39 remove unused code 2019-12-11 14:55:32 +01:00
5d686b19a5 extract particle input functions from others 2019-12-11 14:52:48 +01:00
a908d95d9f extract surface hook functions to separate file 2019-12-11 14:48:40 +01:00
423060ac2f optimize closest surface hook on object node 2019-12-11 14:37:36 +01:00
fa942b5e6f optimize get weight on surface 2019-12-11 14:24:32 +01:00
f4a9e125bf optimize get normal on surface node 2019-12-11 14:16:10 +01:00
642fa43b13 optimize get position on surface node 2019-12-11 14:10:55 +01:00
e60516bdee cleanup 2019-12-11 14:03:13 +01:00
980b128b37 cleanup 2019-12-11 14:00:39 +01:00
bd92ed7e11 optimize single value case 2019-12-11 13:58:08 +01:00
bf85e6a637 improve grouping of similar indices 2019-12-11 13:53:53 +01:00
35989c6715 convert image to socket 2019-12-11 13:01:55 +01:00
aa10876c62 vectorize surface hook nodes 2019-12-11 12:18:56 +01:00
6dd8723620 fix memory leak 2019-12-11 11:42:30 +01:00
e985b20a77 more generic way to add per element and global contexts 2019-12-11 11:36:40 +01:00
d6f8ebf1f0 Merge branch 'master' into functions 2019-12-11 10:52:23 +01:00
28c554ec27 initial static class id system 2019-12-11 10:50:08 +01:00
eaa0c567fc make element contexts non virtual 2019-12-11 10:21:44 +01:00
9e056e8fd4 Merge branch 'master' into functions 2019-12-11 09:10:17 +01:00
73ed33953a don't register keymap in background mode 2019-12-11 00:10:44 +01:00
032c685472 fix endless recursion 2019-12-10 23:42:03 +01:00
a7d26bdc33 add external data cache to emitter function 2019-12-10 23:32:18 +01:00
5685b0a72a support for accessing id data blocks from emitter function 2019-12-10 23:26:45 +01:00
5dada6b465 new birth time modes for custom emitter 2019-12-10 23:20:50 +01:00
b93d0f8975 support for removing sockets in custom emitter 2019-12-10 22:59:47 +01:00
60b3fc8239 better handling of attribute name collisions 2019-12-10 22:53:32 +01:00
f961ef3e6b improve ui of Custom Emitter node 2019-12-10 22:52:54 +01:00
d91b7625cf fix warning 2019-12-10 18:19:23 +01:00
4df45d1c4c initial Custom Emitter node 2019-12-10 18:12:51 +01:00
826a132791 support nested properties in inferencer 2019-12-10 16:46:31 +01:00
24a7851fbe new Value node 2019-12-10 16:06:32 +01:00
daf119f2a7 initial support for custom particle attributes 2019-12-10 15:30:42 +01:00
4dccb3767a optimize some math nodes 2019-12-10 14:30:07 +01:00
ea5f871d29 deduplicate code 2019-12-10 14:17:55 +01:00
4755ab5b50 optimize variadic math functions 2019-12-10 14:05:31 +01:00
6d05b0910a optimize math functions a bit 2019-12-10 13:15:01 +01:00
e5f9640223 remove some timers 2019-12-10 11:47:05 +01:00
32c25e8c89 Merge branch 'master' into functions 2019-12-10 11:29:00 +01:00
4e4d350967 remove timer 2019-12-08 23:01:28 +01:00
2ce315c588 avoid computing the computing the same things many times 2019-12-08 23:01:21 +01:00
34d68139ac extend single elements when necessary 2019-12-08 22:01:31 +01:00
b09c2c7d00 Merge branch 'master' into functions 2019-12-08 21:31:53 +01:00
a382054837 Merge branch 'master' into functions 2019-12-07 11:01:54 +01:00
56dce4ae43 initital check for whether a function can be called once only 2019-12-06 13:55:03 +01:00
2390af8430 move class from header to cc 2019-12-06 13:34:52 +01:00
7c03565594 add utility to check if an input is only a single value 2019-12-06 13:30:10 +01:00
e93fe105d1 cleanup 2019-12-06 13:01:11 +01:00
de56346eee extract methods 2019-12-06 12:58:01 +01:00
a5790756e0 extract methods 2019-12-06 12:50:54 +01:00
94a280cb99 cleanup 2019-12-06 12:42:58 +01:00
039a1134cd cleanup data copying in network evaluation 2019-12-06 12:39:03 +01:00
ce35f42c0a simplify forwarding in network evaluation 2019-12-06 12:27:41 +01:00
6ec5ece968 cleanup naming 2019-12-06 11:50:10 +01:00
29106bdaee simplify allocation in multi function network evaluation 2019-12-06 11:48:40 +01:00
98d9f2bdfa store whether function depends on per element context 2019-12-06 11:35:34 +01:00
1996429dc6 Merge branch 'master' into functions 2019-12-06 11:25:26 +01:00
e1e1dad668 Merge branch 'master' into functions 2019-12-05 20:00:52 +01:00
d3dbacea08 open group interface panel from V pie menu 2019-12-05 14:14:36 +01:00
293c476822 initial support for reordering group inputs 2019-12-05 13:58:38 +01:00
e57a0ec211 handle other socket types in operator 2019-12-05 13:14:23 +01:00
95b2871550 make it easier to create group outputs 2019-12-05 13:10:35 +01:00
d4d0360604 better default value initialization 2019-12-05 12:47:58 +01:00
eb9f980912 initial V shortcut to create group inputs 2019-12-05 12:43:41 +01:00
dd452a314a improve group node ui 2019-12-05 11:21:24 +01:00
ab678735ab Merge branch 'master' into functions 2019-12-05 09:55:13 +01:00
c44fdcfab2 fix node identifier when node is in a group 2019-12-04 17:10:31 +01:00
d5ec476e36 simplify influence generation from xnodes 2019-12-04 16:42:04 +01:00
985e3e8ddc simplify action building code 2019-12-04 16:03:15 +01:00
f101aa6c4b fix naming after recent refactor 2019-12-04 15:32:30 +01:00
ee58e62f23 rename Surface Location to Surface Hook 2019-12-04 15:04:10 +01:00
db26a32601 store emit location in particles 2019-12-04 14:27:11 +01:00
2012ea2e9d add id handle lookups to function modifiers 2019-12-04 13:49:24 +01:00
c6a00f46ad pass around Object handles instead of pointers 2019-12-04 13:33:49 +01:00
907f72d4bc initial IDHandle implementation 2019-12-04 13:21:05 +01:00
182a56e3b0 improve SurfaceLocations members 2019-12-04 12:17:22 +01:00
e5e295beed fix when having emitter in node group 2019-12-04 11:53:15 +01:00
672b085264 Merge branch 'master' into functions 2019-12-04 11:33:48 +01:00
d709399b64 new Get Normal on Surface node 2019-12-03 16:00:02 +01:00
7fb768e2c4 cleanup: remove unused class 2019-12-03 15:17:38 +01:00
f6e39cc95d add StringMap.add method 2019-12-03 15:11:46 +01:00
4127c7ff87 make execute and influence sockets work in groups 2019-12-03 15:07:40 +01:00
90529a8d4d Merge branch 'master' into functions 2019-12-03 11:55:39 +01:00
9c102058e1 new Get Image Color on Surface node 2019-12-03 11:51:47 +01:00
9e8f68f4fa remove concept of particle function inputs from code 2019-11-30 15:34:38 +01:00
f9f6ab0251 remove remaining particle input nodes 2019-11-30 15:17:59 +01:00
a4cc5f1cbb make Is In Group a normal multi-function 2019-11-30 15:14:10 +01:00
d7b991aeb7 remove Particle Randomness node 2019-11-30 14:40:07 +01:00
f71eec7604 remove Surface Weight node 2019-11-30 14:38:01 +01:00
710c3b8312 new Get Weight on Surface node 2019-11-30 14:36:19 +01:00
a561a457dc initial Get Position on Surface node 2019-11-30 13:30:34 +01:00
945a752902 update closest location on object node 2019-11-27 18:15:48 +01:00
28a70ff15c new surface location data type 2019-11-27 17:06:58 +01:00
98a4a08fce various automated variable renamings 2019-11-27 16:06:55 +01:00
ea0b7dc6d1 make multifunction generation work with inlined node trees 2019-11-27 15:47:40 +01:00
a57e050f43 cleanup creation of group input nodes 2019-11-27 15:46:10 +01:00
49c3eb8478 replace virtual with inlined tree 2019-11-27 14:42:15 +01:00
529987089d Merge branch 'master' into functions 2019-11-27 10:19:26 +01:00
ceca20b798 color exported dot clusters randomly 2019-11-26 17:52:29 +01:00
02aef365ba add some noinline attributes 2019-11-26 17:26:53 +01:00
0a667c6614 cleanup 2019-11-26 17:12:06 +01:00
cfac0f5914 refactor: extract method 2019-11-26 17:10:46 +01:00
d33d8f5b20 refactor: extract methods 2019-11-26 17:01:39 +01:00
70fe3d8dea extract functions 2019-11-26 16:52:58 +01:00
288b562e46 cleanup 2019-11-26 16:41:31 +01:00
021650c4c0 cleanup 2019-11-26 16:34:28 +01:00
352afcd0b3 use array instead of map 2019-11-26 16:14:34 +01:00
413af94fd2 deduplicate node creation 2019-11-26 16:03:25 +01:00
4ade6cdfc0 initialize ids of xnodes 2019-11-26 15:33:38 +01:00
d148d2a447 free memory of inlined node tree 2019-11-26 15:27:27 +01:00
5d42b6a204 add accessor functions for inlined node tree 2019-11-26 13:30:10 +01:00
97a5f427d0 add clusters to inlined node tree dot export 2019-11-26 13:13:46 +01:00
48f2f3cea6 change cluster usage in dot exporter 2019-11-26 12:57:47 +01:00
abe3c18cf6 Merge branch 'master' into functions 2019-11-26 10:40:54 +01:00
0e1a4f39ac use generic dot export to export function networks 2019-11-24 15:24:46 +01:00
a4cf1eb035 export inlined node tree as dot graph 2019-11-24 14:58:43 +01:00
c0d0aff4da import dot export 2019-11-24 13:56:34 +01:00
8ae3debad0 node shape utility 2019-11-24 13:30:28 +01:00
0fea5c5d59 dot file export 2019-11-24 12:55:58 +01:00
afe4577256 initial InlinedNodeTree structure 2019-11-23 18:04:56 +01:00
1f52afb3fd new Vector.remove_first_occurence_and_reorder method 2019-11-23 17:25:41 +01:00
f63d9357bf new Vector.append_and_get_index function 2019-11-23 14:57:27 +01:00
2780bb1000 Merge branch 'master' into functions 2019-11-23 13:55:40 +01:00
0a7e29739d Merge branch 'master' into functions 2019-11-21 15:55:44 +01:00
89335330fa simplify some code 2019-11-21 15:42:06 +01:00
5c316f0910 remove unused code 2019-11-21 15:12:27 +01:00
47e7a8966e cleanup nodes mapping 2019-11-21 15:10:26 +01:00
d81273eaed cleanup 2019-11-21 14:46:26 +01:00
e36da5e16e cleanup 2019-11-21 14:38:14 +01:00
2335aaf58b improve naming 2019-11-21 14:29:03 +01:00
7f9e7c23e0 improve naming 2019-11-21 14:20:14 +01:00
7de6eb1b49 define multi function to node mapping 2019-11-21 14:08:54 +01:00
3ca095f1eb simplify vsocket to multi function mapping 2019-11-21 13:44:56 +01:00
92130916d5 fix network evaluation 2019-11-21 12:48:13 +01:00
92d4376c8e make VirtualNodeTree specific to one bNodeTree 2019-11-20 18:20:16 +01:00
00b4b90361 new try_lookup method for StringMap 2019-11-20 18:11:12 +01:00
6d71136e4a new vnode to multifunction mapping 2019-11-20 17:37:28 +01:00
2c83e550c4 change the node mapping a bit 2019-11-20 17:08:47 +01:00
0cf8799ef7 more utility functions 2019-11-19 14:34:03 +01:00
046204e7b2 extract preprocessed vtree data from builder 2019-11-19 13:38:25 +01:00
3d16a8193f improved debug error checking 2019-11-19 10:49:34 +01:00
1aef4b1298 cleanup parameter checks 2019-11-19 10:17:33 +01:00
ca19757aec refactor MFParamType 2019-11-17 12:10:48 +01:00
e81dbbaa2e add missing static keywords 2019-11-15 16:09:50 +01:00
2d4f8209a7 optimize Get Nearest Point when the object is the same for every element 2019-11-15 16:03:54 +01:00
3ecb692b43 fix task scheduling 2019-11-15 16:03:19 +01:00
ca1de7fe4c use more global external data cache 2019-11-15 15:30:12 +01:00
be57a27d6d fix Map Range clamping 2019-11-15 15:28:49 +01:00
459b54b45c remove unused code 2019-11-15 15:06:36 +01:00
9843ca071c prevent recursive node groups 2019-11-14 16:31:24 +01:00
5e72329889 make group defaults work 2019-11-14 15:39:00 +01:00
2423f1c531 add Random Float node 2019-11-14 15:20:07 +01:00
44320e9e08 remove unnecessarily complex code 2019-11-14 14:43:16 +01:00
057ec4bc97 remove unused nodes 2019-11-14 13:40:10 +01:00
4e61bfbb15 initial working function groups 2019-11-14 13:38:39 +01:00
758a751fb2 new group nodes 2019-11-13 15:29:00 +01:00
7398acb56d initial group input node 2019-11-13 14:55:42 +01:00
16f7804d5f bring back Clamp and Map Range nodes 2019-11-13 14:23:21 +01:00
ccfe2a2db1 initial Closest Point on Object node 2019-11-13 13:48:03 +01:00
03d7ba7055 Make Particle Info node a normal function 2019-11-13 12:40:12 +01:00
3235d6cd41 pass MFContext directly 2019-11-13 12:02:16 +01:00
4dfc1e9026 pass MFParams directly 2019-11-13 11:53:28 +01:00
ce59ef0ea9 pass MFMask directly 2019-11-13 11:29:31 +01:00
d5e9fa61d9 testing another way to use multi function contexts 2019-11-12 15:53:00 +01:00
112ffb49d1 fix default node tree 2019-11-12 14:26:21 +01:00
1ac1081953 remove other forces, they should be build using Particle functions 2019-11-12 14:16:36 +01:00
54b40587e4 output vector from Perlin Noise node 2019-11-12 14:15:59 +01:00
ad96830a4b support mapping input vsockets to multiple new sockets 2019-11-12 14:15:08 +01:00
1d69abe558 new Custom Force and Perlin Noise node 2019-11-12 11:00:19 +01:00
a924c1a401 Merge branch 'master' into functions 2019-11-12 10:08:57 +01:00
bb15b89375 Merge branch 'functions' into functions-experimental-refactor 2019-11-08 20:46:56 +01:00
ef2b03e317 Merge branch 'master' into functions 2019-11-08 20:46:43 +01:00
b6027a2f15 fix Is In Group input 2019-11-08 20:34:01 +01:00
a74a2882ed bring back compare node 2019-11-08 20:33:44 +01:00
3a3970c2e0 change uint8_t to bool 2019-11-08 19:50:23 +01:00
a708562177 move attribute defaults back into AttributesInfo 2019-11-08 19:48:04 +01:00
b9d42020be make function name more precise 2019-11-08 19:19:54 +01:00
fea9c7c1a3 cleanup 2019-11-08 19:15:21 +01:00
9cc27bd6ff remove a node 2019-11-08 18:49:49 +01:00
5f8bd0fa71 make switch node work again 2019-11-08 18:21:26 +01:00
de3d75110c bring back object mesh info node 2019-11-08 17:50:19 +01:00
2bae4dd503 remove some nodes for now 2019-11-08 17:33:29 +01:00
8e1ced7596 bring back color nodes 2019-11-08 17:32:20 +01:00
d47962f7a9 boolean math nodes 2019-11-08 17:11:29 +01:00
366a427f04 more vector math 2019-11-08 16:56:06 +01:00
fa7c300edc more vector math 2019-11-08 16:27:58 +01:00
e390a51cc7 bring back some vector math nodes 2019-11-08 16:12:43 +01:00
470a2ce330 fix compile error 2019-11-07 15:17:44 +01:00
4e0b5fd215 cleanup 2019-11-07 14:03:46 +01:00
eada832040 make AttributesInfo non copy and non movable 2019-11-07 13:59:47 +01:00
9116016f93 rename GET_TYPE to CPP_TYPE 2019-11-07 13:48:30 +01:00
bef3e0022c use monotonic allocator for network builder 2019-11-07 13:38:51 +01:00
a4a46d8a97 use monotonic allocator for vtree generation 2019-11-07 13:21:39 +01:00
1fb8e34c9c rename functions2 to functions 2019-11-07 11:57:35 +01:00
ae862db1f4 remove old function system 2019-11-07 11:54:00 +01:00
7884ae9bc3 port particle system to new functions system 2019-11-07 11:44:08 +01:00
856049d771 merge bparticles node tree into functions node tree 2019-11-06 16:08:20 +01:00
cccaca258b simplify naming 2019-11-06 13:05:26 +01:00
6e135618be use monotonic allocator to allocate functions 2019-11-05 15:54:44 +01:00
06e398f427 rename OwnedResources to ResourceCollector 2019-11-05 15:40:03 +01:00
2ae8040373 improve aligned allocation in monotonic allocator 2019-11-05 15:32:53 +01:00
7317074eb3 bring back some more math operations 2019-11-05 14:36:45 +01:00
ab2625529c bring back more math nodes 2019-11-05 14:17:35 +01:00
a35f5ff3c8 improve add/mul/min/max math nodes 2019-11-05 13:47:57 +01:00
3a4d9fa228 remove unused code 2019-11-05 11:56:37 +01:00
720edd0c30 cleanup 2019-11-05 11:53:24 +01:00
e0554f7f31 access time from node tree 2019-11-05 11:48:29 +01:00
55ecd940ac initial more generic context handling 2019-11-05 11:19:57 +01:00
07ac997f1c make Float Range node work again 2019-11-04 23:17:01 +01:00
09862e2b2f assert earlier when nodes were not inserted correctly 2019-11-04 23:16:46 +01:00
62cd4cca56 Merge branch 'functions' into functions-experimental-refactor 2019-11-04 22:09:23 +01:00
a63b896055 Merge branch 'master' into functions 2019-11-04 22:09:06 +01:00
f52e43554f simplify interface for generating functions from node trees 2019-11-03 16:32:23 +01:00
b1bee3ffc5 update Function Points modifier to use new system 2019-11-03 16:06:25 +01:00
d5bcdeef9f rename pack list socket declaration to something more generic 2019-11-03 15:31:30 +01:00
9fdef6ae5b attributes block container compression and utilities 2019-11-03 15:09:21 +01:00
5e20def930 cleanup function allocation 2019-11-03 14:30:45 +01:00
1a90ef6e58 cleanup builder 2019-11-03 14:19:05 +01:00
f1dfadb3cb initial MFContext usage 2019-11-03 14:12:34 +01:00
fa18a28277 move multi function context to separate file 2019-11-03 13:55:49 +01:00
30a1a0bf58 separate some files 2019-11-03 13:44:31 +01:00
146f6a827b add utility to destruct and reorder attribute arrays 2019-11-03 13:08:35 +01:00
da0169bca4 simplify CPPType construction 2019-11-03 12:08:34 +01:00
dafbb5daf7 properly align inline storage in vector and map 2019-11-03 11:37:10 +01:00
5a6da2c1b1 update attribute blocks 2019-11-02 21:31:56 +01:00
45fd15f824 initial attributes block container in functions2 2019-11-02 20:48:35 +01:00
61609e90d5 initial AttributesRef in functions2 2019-11-02 20:19:49 +01:00
8523b03473 cleanup 2019-11-02 19:22:05 +01:00
4a0b22d449 cleanup 2019-11-02 19:12:46 +01:00
2c8ad4ef0b cleanup 2019-11-02 19:07:37 +01:00
4b1532b064 move file 2019-11-02 18:53:29 +01:00
74e7816a22 move node inserters to separate file 2019-11-02 13:45:22 +01:00
8ed320be86 fix memory leak 2019-11-02 13:29:06 +01:00
ed727f3c0f refactor mapping from vtree to multi functions 2019-11-02 13:26:02 +01:00
100ff71944 New VirtualNodeTree implementation 2019-11-02 12:34:39 +01:00
ef636af49e move network generation to separate file 2019-11-01 20:31:13 +01:00
fcfa225e5d move multi function network evaluation to functions2 2019-11-01 20:14:01 +01:00
e778aba584 move VTreeMFNetworkBuilder to functions2 2019-11-01 20:02:51 +01:00
ed47df29e3 move VTreeMFNetwork to functions2 2019-11-01 19:56:11 +01:00
f91bd73986 remove code from blenkernel (now lives in functions2) 2019-11-01 19:51:34 +01:00
11808ee3c2 update functiondeform modifier to using functions2 2019-11-01 19:46:54 +01:00
e9fd7c335f move tuple to functions2 2019-11-01 19:37:25 +01:00
617d8ab8dc move multi function network to functions2 2019-11-01 19:32:52 +01:00
2b805f0ae8 move multi functions to functions2 2019-11-01 19:30:31 +01:00
72eb10b467 copy generic data structures to functions2 2019-11-01 19:11:53 +01:00
324537287f initial functions2 folder 2019-11-01 19:05:09 +01:00
6379f1d035 improve performance when iterating over mask indices 2019-11-01 14:37:58 +01:00
f354aebc6f cleanup name access 2019-11-01 14:35:44 +01:00
ae8332f7c6 introduce MFMask 2019-11-01 14:17:09 +01:00
3ba1c11f3b fix memory leak 2019-10-31 15:01:53 +01:00
5b60e21f1b make text socket work again 2019-10-31 14:57:40 +01:00
badad91ac3 make Object socket work again 2019-10-31 14:39:16 +01:00
92e04dcd15 rename placeholder to dummy 2019-10-31 14:15:27 +01:00
d218811e85 access function and parameter names 2019-10-31 14:11:11 +01:00
db0ee0fe36 further improve MultiFunction API 2019-10-31 13:51:05 +01:00
e09e429f57 cleanup MultiFunction API 2019-10-31 13:43:44 +01:00
cdd69f8e6d dot export 2019-10-31 13:32:53 +01:00
53d345a897 add missing implicit conversions 2019-10-31 13:15:33 +01:00
b7c516a121 add more primitive conversions 2019-10-31 12:55:23 +01:00
16150b75ac cleanup network generation code 2019-10-31 12:27:35 +01:00
5816f75544 initial automatic node vectorization 2019-10-31 11:44:01 +01:00
0ceef31d99 support for full pointer array in virtual list 2019-10-31 10:59:46 +01:00
568315b0b8 make Get List Element node work again 2019-10-30 16:39:33 +01:00
3baf1f7ffa remove unused code 2019-10-30 16:31:23 +01:00
be738fa181 make Pack List node work again 2019-10-30 16:27:53 +01:00
cdeb4ecf8e make some list nodes work again 2019-10-30 15:32:33 +01:00
98577ce2b2 initial non recursive multi-function evaluator 2019-10-30 14:01:00 +01:00
aec147ec74 new ArrayRef.first_index method 2019-10-29 16:52:38 +01:00
cdb7f3c192 change GenericVectorArray 2019-10-29 16:31:36 +01:00
269488d1c3 use virtual list list ref in multi functions 2019-10-29 15:46:25 +01:00
c6ebe25337 initial VirtualListListRef 2019-10-29 15:00:47 +01:00
353af1c51a Support for implicit conversions, float math node and int type 2019-10-29 13:32:22 +01:00
e1ca6c4129 Merge branch 'functions' into functions-experimental-refactor 2019-10-29 11:21:58 +01:00
cacbe466b2 Merge branch 'master' into functions 2019-10-29 11:15:49 +01:00
7bef9b83fb initial MultiFunction generation from node tree 2019-10-22 13:54:55 +02:00
dfa3ed8761 insert links function 2019-10-22 13:04:54 +02:00
73a709844b make VirtualNodeTree const in many places 2019-10-22 12:51:46 +02:00
bc8d442717 initial new node inserters 2019-10-22 11:47:29 +02:00
4adbf49d83 improve ArrayRef 2019-10-22 11:47:00 +02:00
59df914983 replace ArrayOrSingleRef with VirtualListRef 2019-10-20 15:55:33 +02:00
b04aed8db6 experimental VirtualListRef 2019-10-20 15:11:52 +02:00
fc1ca9a2e2 fixes 2019-10-20 14:53:17 +02:00
f6f4f2914c utility functions 2019-10-20 14:27:54 +02:00
4d61b8b1f9 initial VTreeMFNetwork and VTreeMFNetworkBuilder 2019-10-20 13:29:38 +02:00
31ecaf4a8a make MultiFunction const in more places 2019-10-18 17:49:12 +02:00
ff29177a4c make CPPType const everywhere 2019-10-18 17:47:02 +02:00
84baab05b2 remove unused code 2019-10-18 17:46:51 +02:00
838ac481f2 cleanup 2019-10-18 17:40:18 +02:00
5151d05625 cleanup 2019-10-18 17:37:33 +02:00
53d3d32992 use MF prefix in more places 2019-10-18 17:31:22 +02:00
9dbe43f044 start using MF prefix for some classes 2019-10-18 17:23:35 +02:00
36310012ff allow passing destruct_ptr to OwnedResources 2019-10-18 17:08:55 +02:00
2f6ea75758 move destruct_ptr to BLI 2019-10-18 16:46:15 +02:00
d0dd083cbb multi function with constant output 2019-10-18 15:08:20 +02:00
416d6a17dc first created and executed multi function graph 2019-10-17 17:53:04 +02:00
59dc9f1f1a implement initial conversion from builder to network 2019-10-17 16:35:09 +02:00
c2aea94511 give nodes and sockets ids 2019-10-17 15:21:10 +02:00
94d06d7094 initial network structure 2019-10-17 15:08:00 +02:00
2f02949798 initial multi function network builder 2019-10-17 14:19:21 +02:00
0d4a90000d Merge branch 'functions' into functions-experimental-refactor 2019-10-17 10:49:29 +02:00
b660768ae0 Merge branch 'master' into functions 2019-10-17 10:49:00 +02:00
586a9c14ad pass context into multi functions 2019-10-16 13:05:57 +02:00
376f4813dd experiment with an interface to specify external data dependencies 2019-10-16 12:57:21 +02:00
b08bcb1ef4 remove unused code 2019-10-16 12:37:30 +02:00
c1d570ebb1 separate concept of data types from parameter types 2019-10-16 12:19:38 +02:00
76655021c2 remove unused code 2019-10-16 12:19:22 +02:00
2b781131ed experimental AnyAllocator 2019-10-16 11:39:27 +02:00
4d08c352c3 cleanup 2019-10-16 11:39:16 +02:00
f4455b442c separate vector function 2019-10-15 15:52:53 +02:00
34a66dea4e Combine Vector multi function 2019-10-15 15:32:06 +02:00
9952cbc715 initial multi function node tree evaluation 2019-10-15 15:12:48 +02:00
0cc550108a new add vectors multi function 2019-10-15 12:32:05 +02:00
2c06ccec82 initial params builder 2019-10-15 12:05:43 +02:00
56ab056637 test function call 2019-10-13 22:04:01 +02:00
78aa2d5f02 further implement signature builder 2019-10-13 18:32:47 +02:00
a9a8741270 further develop Signature 2019-10-13 18:32:47 +02:00
f0b62c43ef start implementing Params 2019-10-13 18:32:47 +02:00
a1308c1f98 init stuff 2019-10-13 18:32:47 +02:00
42894aa3df don't use old function system for function deform modifier 2019-10-13 18:32:47 +02:00
8a3ce65044 fix 2019-10-13 18:32:47 +02:00
630d32b159 new socket type mapping 2019-10-13 18:32:47 +02:00
7588b4e493 separate declaration and implementation 2019-10-13 18:32:47 +02:00
745c6dec4d move functions to other file 2019-10-13 18:32:47 +02:00
59b077c020 fix test 2019-10-13 18:32:47 +02:00
cad83fee9f move multi function to separate header 2019-10-13 18:32:47 +02:00
9cd357768d fix 2019-10-13 18:32:47 +02:00
029e63093d fix 2019-10-13 18:32:47 +02:00
f84f8b2a02 combine lists 2019-10-13 18:32:47 +02:00
c696a29058 list lengths 2019-10-13 18:32:47 +02:00
2ef5959f8a GenericVectorArrayOrSingleRef 2019-10-13 18:32:47 +02:00
b38ee6daab generic array or single ref 2019-10-13 18:32:47 +02:00
b4130c3d2a more generic vector array functionality 2019-10-13 18:32:47 +02:00
1ee3c53ed2 prototyping vector array usage 2019-10-13 18:32:47 +02:00
c365ec7c61 initial GenericVectorArray 2019-10-13 18:32:47 +02:00
2efdb20b0b use allocator in MonotonicAllocator and use minimum allocation size 2019-10-13 18:32:47 +02:00
0627a6b2d5 cleanup 2019-10-13 18:32:47 +02:00
375a600b8b initial ArrayOrSingleRef implementation 2019-10-13 18:32:47 +02:00
909dc85f2f node functions 2019-10-13 18:32:47 +02:00
2892434cdf improve naming 2019-10-13 18:32:47 +02:00
5ab8cc2eaf add generic mutable array ref 2019-10-13 18:32:47 +02:00
2cfb80f68c cleanup 2019-10-13 18:32:47 +02:00
ffad150868 rename 2019-10-13 18:32:47 +02:00
cfaa0e566a rename TypeCPP to CPPType 2019-10-13 18:32:47 +02:00
326878d82c initial new function type 2019-10-13 18:32:47 +02:00
bdfc3e9a6b GenericArrayRef type 2019-10-13 18:32:47 +02:00
b75cdf36a8 new tuple implementation 2019-10-13 18:32:47 +02:00
55d0c80611 add more type attributes 2019-10-13 18:32:47 +02:00
302e1e9a86 initial cpp type 2019-10-13 18:32:47 +02:00
faf2184f52 Merge branch 'master' into functions 2019-10-13 18:12:07 +02:00
65e6598e7e avoid ambiguous call to make_unique 2019-09-27 16:59:04 +02:00
503fadaeb9 cleanup Tuple class 2019-09-27 15:40:40 +02:00
37bc9ffc53 remove using namespace BLI 2019-09-27 15:27:33 +02:00
123d945027 function is noncopyable and nonmovable 2019-09-27 15:17:53 +02:00
254b69417b remove refcounter from Function class 2019-09-27 15:15:10 +02:00
0102c06cb2 remove Falloff implementation
The plan is to achieve the same functionality in a different way
that allows more customization.
2019-09-27 14:14:39 +02:00
4086bf9823 make particle colors work again
This broke in rBa168c3d282083bb4.
2019-09-27 12:35:02 +02:00
d724444dba remove some debug prints 2019-09-27 12:33:26 +02:00
033924c630 Merge branch 'master' into functions 2019-09-27 10:58:21 +02:00
ab9a01313f add resources to data graph instead of function 2019-09-26 18:15:55 +02:00
ea6db832a0 utility to print resource names 2019-09-26 18:07:59 +02:00
2263656526 add resource via VTreeDataGraphBuilder 2019-09-26 17:57:02 +02:00
d31da8e870 data graph can own arbitrary resources now 2019-09-26 17:42:52 +02:00
727a8da77f make Function class a bit smaller 2019-09-26 17:35:59 +02:00
3bca19b38a separate owned resources container from function 2019-09-26 17:23:16 +02:00
387a97ae42 experimental lazy init for unique pointers 2019-09-26 16:46:52 +02:00
b65a28b9d7 use make_unique in some places 2019-09-26 16:18:53 +02:00
f2b2279c1a Remove owns_mem attribute from Tuple 2019-09-26 15:41:19 +02:00
cdcae9d22e remove run_destructors member from Tuple 2019-09-26 15:21:17 +02:00
5b0d883e50 remove refcount from TupleMeta 2019-09-26 15:02:07 +02:00
be2358fe61 remove refcounter from data graph 2019-09-26 14:35:42 +02:00
802c820334 improved static and dynamic type checking for function bodies 2019-09-26 14:05:16 +02:00
abed72f22c store tuple as resource in function 2019-09-26 13:49:11 +02:00
74fba99cc6 initial resource storage for functions 2019-09-26 13:35:06 +02:00
5460fa6efc store StringRef directly in function
That increases the size slightly, but is easier to debug
2019-09-26 12:46:51 +02:00
353d6112d2 use header guards 2019-09-26 12:06:20 +02:00
d942d6daa7 rename file 2019-09-26 12:03:29 +02:00
7ba7667d8e reduce error handling complexity 2019-09-26 11:04:27 +02:00
b34c174dfb Merge branch 'master' into functions 2019-09-26 10:43:33 +02:00
c3d30f2992 cleanup 2019-09-26 10:43:14 +02:00
6cdc6ce355 Merge branch 'master' into functions 2019-09-25 16:02:22 +02:00
d4e58e630c Replace Falloff with weight input 2019-09-23 12:08:36 +02:00
31a3dc769d start using monotonic allocator when parsing bparticles tree 2019-09-23 11:42:04 +02:00
89db5e8946 Merge branch 'master' into functions 2019-09-23 11:01:22 +02:00
e64fa963de initial particle group implementation 2019-09-22 15:05:45 +02:00
e0b82c6616 access influences collector from action parsers 2019-09-22 14:37:20 +02:00
5c733ab445 move responsibility of registering attributes to node frontend 2019-09-22 14:14:03 +02:00
fcd6a9ddcb allow only one collision per time step 2019-09-22 13:54:48 +02:00
93c0fdcd45 pass simulation state to interfaces 2019-09-22 13:54:30 +02:00
5eecfaf824 better distinction between particle simulation and system 2019-09-22 12:59:13 +02:00
63116f2c8c improved handling of moving colliders 2019-09-22 12:44:07 +02:00
ad8733038e Merge branch 'master' into functions 2019-09-22 12:01:54 +02:00
e397b67946 cleanup 2019-09-20 16:37:41 +02:00
97da5f31d4 move responsibility to ensure that attributes exist out of simulator 2019-09-20 16:32:59 +02:00
9c46c784d5 move attributes declaration out of simulate code 2019-09-20 16:21:02 +02:00
cdfb3d3a28 move responsibility of keeping track of particle ids 2019-09-20 16:09:01 +02:00
8d860d4a9b use shared particle allocator instead of one per thread 2019-09-20 16:00:26 +02:00
f1a7d102dc don't access particles state through allocator 2019-09-20 15:09:45 +02:00
cab2f0f6bd declare more attributes in same place 2019-09-20 15:04:00 +02:00
cb974c4c66 Merge branch 'master' into functions 2019-09-20 14:38:43 +02:00
691f2d449a Merge branch 'master' into functions 2019-09-19 10:34:45 +02:00
d2bd35eab4 fix usage of frame nodes 2019-09-19 10:34:13 +02:00
21889a5475 fix crash with negative emitter rate 2019-09-19 10:30:24 +02:00
c3e289440d Merge branch 'master' into functions 2019-09-18 17:42:59 +02:00
16d5919206 copy color to new particles in trails node 2019-09-17 15:27:24 +02:00
5b1d7afb9c new particle randomness input 2019-09-17 15:04:23 +02:00
df47dd16ce reorder menu entries 2019-09-17 14:02:27 +02:00
561450715b add missing nodes to menu 2019-09-17 13:49:38 +02:00
4d4eeedfa0 rename file 2019-09-17 13:49:24 +02:00
9fecdb3a45 use reference to indicate that action cannot be null 2019-09-17 12:43:59 +02:00
872ee8bbe0 add some node mockups 2019-09-17 12:32:44 +02:00
8d285ee398 Merge branch 'master' into functions 2019-09-17 09:56:59 +02:00
e6ef82180f add execute input to point emitter 2019-09-16 17:00:37 +02:00
d51f6b010d add execute input to initial grid emitter 2019-09-16 16:56:00 +02:00
afada870e7 rename to Influences 2019-09-16 16:43:21 +02:00
8a3348d49b make it easier to add a new particle system 2019-09-16 16:40:57 +02:00
b5d2265b60 remove unused functions 2019-09-16 11:57:59 +02:00
7e3e301bb1 more centralized ownership of actions 2019-09-16 11:39:43 +02:00
a3080c2bc3 don't crash when connecting certain sockets 2019-09-16 11:15:23 +02:00
609147a4d9 improve error handling of various nodes 2019-09-16 11:04:25 +02:00
6384a61a99 Add arrow and star operator to BLI::Optional 2019-09-16 11:04:05 +02:00
4a9bfa95ed centralize function evaluation a bit more 2019-09-16 10:51:08 +02:00
881b5377cf change ownership of name vectors 2019-09-16 10:41:37 +02:00
a5e1f95467 move system discovery to vtreedata 2019-09-16 10:33:13 +02:00
f54bf13cc1 missing file in cmakelists 2019-09-16 10:26:49 +02:00
f45badafd5 Merge branch 'master' into functions 2019-09-16 10:10:22 +02:00
5f5a7fcd62 fixes after merge 2019-09-15 12:46:14 +02:00
35de65ec81 Merge branch 'master' into functions 2019-09-15 12:42:24 +02:00
0d81bf5cb0 fixes after merge 2019-09-14 12:48:25 +02:00
345b86ca4e Merge branch 'master' into functions 2019-09-14 12:44:31 +02:00
4de668c30c Merge branch 'master' into functions 2019-09-14 12:41:02 +02:00
214964b2a0 Merge branch 'master' into functions 2019-09-13 17:08:02 +02:00
f21586cfa1 fix after rename 2019-09-13 16:32:28 +02:00
5b9ee5a55e use NamedTupleRef in more places 2019-09-13 15:47:35 +02:00
c5c05aa40b improve NameTupleRef abstraction 2019-09-13 14:55:48 +02:00
71184d2bc8 fix overflow in color conversion 2019-09-13 14:24:47 +02:00
e26301b30a Rename Particle Type to Particle System and Behaviors to Influences 2019-09-13 14:09:32 +02:00
2232300639 Merge branch 'master' into functions 2019-09-13 12:28:43 +02:00
a86dda2a80 fix cmake after merge 2019-09-13 12:27:35 +02:00
ef7f059216 Merge branch 'master' into functions 2019-09-13 12:16:59 +02:00
3c4d8b1f59 rename BLI_hash.hpp to BLI_hash_cxx.h 2019-09-12 17:13:10 +02:00
d24380dd43 remove unused function 2019-09-12 16:31:02 +02:00
3cdc35dfc4 test OutputTupleRef abstraction 2019-09-12 16:29:40 +02:00
9e9e150b74 size parameter in turbulence force node 2019-09-12 15:55:47 +02:00
592470b07b simplify code by changing ownership of particle functions 2019-09-12 15:45:55 +02:00
971ad95f2b solve merge conflicts 2019-09-12 14:59:16 +02:00
cabc40db81 Merge branch 'master' into functions 2019-09-12 14:49:38 +02:00
e23abea88d add license header to memory utils 2019-09-12 12:49:18 +02:00
7b4a2d578f rename BLI_memory.h to BLI_memory_utils_cxx.h 2019-09-12 12:48:36 +02:00
e7aa06520a change .cpp to .cc in blenlib 2019-09-12 12:45:55 +02:00
2e21ec0d88 change .hpp to .h in blenlib 2019-09-12 12:41:14 +02:00
54350b7db2 change .hpp to .h 2019-09-12 12:23:42 +02:00
590b231124 reflow comment 2019-09-12 12:21:40 +02:00
7825047f47 Merge branch 'master' into functions 2019-09-12 10:09:01 +02:00
1f957995f6 Fix birth moments of emitted particles 2019-09-11 17:59:45 +02:00
1b9cc8bfb1 Merge branch 'master' into functions 2019-09-11 17:46:43 +02:00
09ffcc5de1 initial Always Execute node 2019-09-11 17:24:47 +02:00
23de6e6960 new Falloff input for Turbulence Force 2019-09-11 16:05:51 +02:00
f082115395 Merge branch 'master' into functions 2019-09-11 15:17:11 +02:00
0f47a7d0d7 use Array instead of Vector 2019-09-11 13:29:17 +02:00
8d31f929db fix Array and add tests 2019-09-11 13:28:40 +02:00
a988a16e3d new Change Particle Position node 2019-09-11 11:36:52 +02:00
5743c0eab6 new Custom Event node 2019-09-11 11:24:45 +02:00
3f28239efe move events ui to same file 2019-09-11 10:55:37 +02:00
ef8775b676 allocate VTreeDataGraph on heap 2019-09-11 10:41:47 +02:00
880c5a4360 store size of vector in debug builds to ease debugging 2019-09-11 10:18:34 +02:00
cd48588cf6 Merge branch 'master' into functions 2019-09-11 09:50:12 +02:00
972760397f fix keymap registration 2019-09-10 17:41:32 +02:00
8024da670c testing initial bit array ref implementation 2019-09-10 17:02:23 +02:00
72a05f9f4f remove unnecessary inline keywords 2019-09-10 16:14:48 +02:00
29c7232f4f comments 2019-09-10 16:11:18 +02:00
bfdf90e68c quiet warning 2019-09-10 16:05:38 +02:00
ff3f7c5291 invert Mesh Distance Falloff 2019-09-10 15:59:20 +02:00
a9112c4932 do not register keymap in background mode 2019-09-10 15:46:53 +02:00
b928050af3 initial Mesh Distance Falloff node 2019-09-10 15:44:58 +02:00
01e97d117f initial experimental Mesh Force node 2019-09-10 14:23:52 +02:00
2c0397edfb Merge branch 'master' into functions 2019-09-10 13:26:17 +02:00
a911775cbe store attributes info directly instead of unique pointer 2019-09-10 13:02:12 +02:00
c339917d7f don't store attributes info ref directly in block 2019-09-10 12:56:54 +02:00
1b3ee092db move attributes block container stuff to same file again 2019-09-10 12:39:18 +02:00
b22dc19ce7 new Dot Production operation in vector math node 2019-09-10 12:18:58 +02:00
844c2c8a79 new Project operation in vector math node 2019-09-10 12:10:40 +02:00
147863ac7c Improve copy and move constructor of Vector 2019-09-10 11:54:03 +02:00
dcd84a1051 remove limit for index range arrays 2019-09-09 17:58:43 +02:00
cfb50f6581 implement multiple density modes in Mesh Emitter node 2019-09-09 17:22:54 +02:00
cdc432429f Falloff input in Drag Force node 2019-09-09 16:23:38 +02:00
5d319ba8ff new Drag Force node 2019-09-09 16:17:32 +02:00
706bd95ae8 Merge branch 'master' into functions 2019-09-09 15:45:19 +02:00
40e9cf9df8 initial new attributes block storage 2019-09-09 15:43:23 +02:00
c541e31931 cleanup some nonmovable and noncopyable functions 2019-09-09 12:17:28 +02:00
b2a449e783 test if it builds on buildbot without alembic tests 2019-09-09 11:51:35 +02:00
11d61f3d00 test moving functions to bf_functions 2019-09-09 11:41:07 +02:00
dc02a49fb7 test adding a virtual destructor to solve a linker issue 2019-09-09 11:33:54 +02:00
63133ee688 Merge branch 'master' into functions 2019-09-09 10:55:21 +02:00
da598e31eb support for outputting None/Points/Tetrahedons 2019-09-06 17:44:25 +02:00
e876360aaa Merge branch 'master' into functions 2019-09-06 17:07:59 +02:00
aa5ea9f0fe New UInt32 attribute type 2019-09-06 16:51:32 +02:00
5045219ca9 separate BParticles Output modifier 2019-09-06 16:34:21 +02:00
d30979dddb new Constant Falloff node 2019-09-06 15:51:03 +02:00
57ceacf8b4 move falloff implementations out of header 2019-09-06 15:42:54 +02:00
12663d2e21 cleanup boolean math 2019-09-06 15:34:03 +02:00
0b8514a99c fix memory leak 2019-09-06 15:32:04 +02:00
264719c0b4 simplify string type 2019-09-06 14:50:13 +02:00
213d807a08 deduplicate some code 2019-09-06 14:14:33 +02:00
524df333bc use correct wrapper for Object pointers 2019-09-06 12:49:42 +02:00
3d85989efa rename 2019-09-06 12:26:36 +02:00
199d201cce rename 2019-09-06 12:21:32 +02:00
f45791f436 remove unused class 2019-09-06 12:18:53 +02:00
a22b7177d2 improve llvm type info for shared immutable types 2019-09-06 12:17:16 +02:00
9ba1fce608 use specialized llvm type info for pointer references 2019-09-06 11:37:25 +02:00
4e2ee7e962 remove unused code 2019-09-06 11:27:58 +02:00
d0eafffed4 Initial Falloff implementation 2019-09-06 11:21:53 +02:00
6163ce3dee Merge branch 'master' into functions 2019-09-06 09:21:28 +02:00
02cdf856f6 fix attribute initialization 2019-09-05 19:07:08 +02:00
d226d46144 Merge branch 'master' into functions 2019-09-05 18:30:52 +02:00
58997f47af initial passive modifier mode
This allows creating separate meshes for the different particle types.
2019-09-05 18:30:36 +02:00
66c07705f9 Initial Size Over Time node 2019-09-05 16:58:35 +02:00
bc654dd3dd support for choosing uv layer by name 2019-09-05 16:21:32 +02:00
882e7e4903 cleanup usage of temporary allocator 2019-09-05 15:17:43 +02:00
f541e79196 add comments 2019-09-05 14:27:02 +02:00
942cf217c5 add some comments 2019-09-05 14:18:48 +02:00
02f4bf505a more comments 2019-09-05 12:53:58 +02:00
b39ddcd628 add some comments 2019-09-05 12:43:53 +02:00
5420375d4a return StringRef from virtual node/socket 2019-09-05 12:36:45 +02:00
f59ea9a10f support not-equal operator for StringRef 2019-09-05 12:35:27 +02:00
242e027dea cleanup Vector Adaptor 2019-09-05 12:27:13 +02:00
ded8e6f0af rename test files 2019-09-05 12:17:47 +02:00
d6ac3fd2f2 rename file 2019-09-05 12:14:57 +02:00
a61852a5e2 store size in IndexRange 2019-09-05 12:12:08 +02:00
1ed83f1004 use another constructor for IndexRange 2019-09-05 11:51:54 +02:00
d22cf2fd77 replace generic Range with IndexRange 2019-09-05 11:46:55 +02:00
3a17600bed move ChunkedRange to separate file 2019-09-05 11:30:48 +02:00
3939274a46 cleanup names 2019-09-05 11:20:22 +02:00
964ee85777 access surface color from chained action context 2019-09-05 11:15:40 +02:00
f58f26a35d cleanup vertex weight input provider 2019-09-05 11:00:50 +02:00
fd8244fb26 new Combine Behaviors node 2019-09-05 10:38:03 +02:00
a6d08dfccb Merge branch 'master' into functions 2019-09-05 10:05:08 +02:00
b14e8f35f7 vertices should have a unit length normal 2019-09-04 18:05:06 +02:00
1c8f6d8807 cleanup 2019-09-04 16:27:13 +02:00
5f91002b51 better time sampling in mesh emitter 2019-09-04 16:27:13 +02:00
0e528d5361 improve spacing of trail particles 2019-09-04 16:27:13 +02:00
30185113fd take triangle areas into account 2019-09-04 16:27:13 +02:00
f0c354c97a refactor triangle weight computation 2019-09-04 16:27:13 +02:00
6e828316b3 compute barycentric weights more centrally 2019-09-04 16:27:13 +02:00
d979cd2690 use Surface Info node instead of Collision Info 2019-09-04 16:27:13 +02:00
c665ef49ad store surface velocities in surface context 2019-09-04 16:27:13 +02:00
c718c9e6c5 refactor usage of MeshSurfaceContext 2019-09-04 16:27:13 +02:00
1b1292b7b1 assert that the number of temporary buffers does not grow unbounded 2019-09-04 16:27:13 +02:00
560b55c4c8 cleanup 2019-09-04 16:27:13 +02:00
22624ad774 cleanup handling of emitter action contexts 2019-09-04 16:27:13 +02:00
cb35556472 support slicing ArrayRef with range 2019-09-04 16:27:13 +02:00
185ef25243 temporarily remove unnecessary emitter sockets 2019-09-04 16:27:13 +02:00
848603d032 Merge branch 'master' into functions 2019-09-04 16:27:02 +02:00
db230d4833 skip matrix interpolation when not necessary 2019-09-04 11:33:56 +02:00
716cc34a87 move AttributesRef to BKE namespace 2019-09-04 11:09:36 +02:00
fbe0a3950f more accurate runtime type checking in debug builds 2019-09-04 10:51:06 +02:00
90aaf67e5a Merge branch 'master' into functions 2019-09-04 09:45:37 +02:00
0edb87c629 Merge branch 'master' into functions 2019-09-03 18:12:57 +02:00
4dd3773283 Merge branch 'master' into functions 2019-09-03 16:30:22 +02:00
8443f319e3 quiet warning 2019-09-03 16:22:55 +02:00
d3210c2547 deduplicate vertex weights input code 2019-09-03 16:17:22 +02:00
24a02ee51b initial action context chaining 2019-09-03 16:07:31 +02:00
fc0a7648b5 fix finding execute sockets 2019-09-03 16:07:03 +02:00
a72bcf11e0 new Surface Weights input node 2019-09-03 15:13:27 +02:00
3398112573 refactor how input providers are parsed 2019-09-03 14:06:57 +02:00
f7206f9910 cleanup iterating over AttributeRefs 2019-09-03 13:50:22 +02:00
b245562d0e better error handling when expected action context is not given 2019-09-03 12:34:45 +02:00
2491dc812f rename stride to size 2019-09-03 11:58:45 +02:00
ee8f58eb66 move particle function input providers to separate file 2019-09-03 11:56:49 +02:00
e3454c0708 new Change Particle Size node 2019-09-03 11:39:11 +02:00
61ec4a3d89 move change color/velocity node to same file 2019-09-03 11:20:04 +02:00
370a506ad0 refactor age reached event 2019-09-03 11:16:17 +02:00
c78acc85f3 initial variation input for age reached event 2019-09-03 11:07:17 +02:00
b9a2dc60e1 rename attribute reference classes
AttributeArrays -> AttributesRef
NewParticles -> AttributesRefGroup
2019-09-03 10:53:07 +02:00
b513079ee2 Merge branch 'master' into functions 2019-09-03 10:30:32 +02:00
410599dca2 reorganize where interfaces are declared 2019-09-02 19:01:33 +02:00
551ca28108 remove unused parameter 2019-09-02 18:13:24 +02:00
147d2dfac5 don't pass particle allocator using BlockStepData 2019-09-02 18:08:44 +02:00
1d15c51bf9 use annotation for properties 2019-09-02 17:58:19 +02:00
0d700d201a remove ParticleSet and ParticleSets abstraction 2019-09-02 17:56:14 +02:00
d2fe280a6e improved Change Particle Velocity node 2019-09-02 16:09:52 +02:00
fce176dbd0 fix mesh emitter action context 2019-09-02 15:40:13 +02:00
49b6e1dccf abstract mesh surface action context 2019-09-02 15:13:49 +02:00
27081694f9 rename 2019-09-02 15:07:24 +02:00
4d46c481ac Merge branch 'master' into functions 2019-09-02 14:42:45 +02:00
06565e21ea use action context in mesh emitter 2019-09-02 12:31:49 +02:00
e45fb9e735 use more generic mesh surface action context 2019-09-02 12:11:58 +02:00
e485f030e8 fix temporary deallocation 2019-09-02 12:05:16 +02:00
2412efdf89 simplify mesh emitter more 2019-09-02 11:33:20 +02:00
9ff4828501 cleanup mesh emitter 2019-09-02 11:20:22 +02:00
bde76782eb sample varying float4x4 2019-09-02 11:13:19 +02:00
36016e2960 extract triangle sampling 2019-09-02 11:02:24 +02:00
381ece9410 extract birth moment computation 2019-09-02 10:48:21 +02:00
5f31282c46 Merge branch 'master' into functions 2019-09-02 09:59:03 +02:00
acd7915371 fix computing cumulative distribution 2019-08-28 18:05:39 +02:00
a55745ba7f sample weighted triangles differently 2019-08-28 18:01:10 +02:00
42c58fe840 support allocating larger buffers with temporary allocator 2019-08-28 16:29:30 +02:00
ea068aeb22 start implementing vertex group support in emitter 2019-08-28 14:23:38 +02:00
bc218feff1 append n times function for vector adaptor 2019-08-28 14:23:10 +02:00
fac51ca754 store attribute indices in string map 2019-08-28 12:16:51 +02:00
6e5e1e7ee7 store Range in AttributeArrays 2019-08-28 10:50:55 +02:00
c238c179d7 Merge branch 'master' into functions 2019-08-28 10:25:02 +02:00
25e5488594 don't store particle name in particle sets structure 2019-08-27 17:40:20 +02:00
b52c3b3fc7 Initial string socket type
The internal implementation is working, but not very efficient yet (every string
is allocated separately without any cache). I'm still thinking about a better
solution, but for now having any working text socket is more important.
2019-08-27 17:22:47 +02:00
7ca34c3838 Merge branch 'master' into functions 2019-08-27 14:23:35 +02:00
0ee75f415a bring back transform interpolation for mesh emitter 2019-08-27 13:54:03 +02:00
d95073c9c7 roll back some changes regarding world transition handling 2019-08-27 13:48:51 +02:00
5a7dfe59da fix some more warnings 2019-08-27 12:24:25 +02:00
c5449eb30f avoid some warnings 2019-08-27 12:20:54 +02:00
e12b1cf8ce fix some warnings 2019-08-27 12:17:56 +02:00
a32472bd31 remove unnecessary semicolon 2019-08-27 11:55:47 +02:00
955c931b45 Merge branch 'master' into functions 2019-08-27 11:19:58 +02:00
5ef500c27b cleanup arrayref and stringref 2019-08-26 15:48:26 +02:00
645a54107c add missing include 2019-08-26 15:37:16 +02:00
cd0f866aef move time from ParticlesState to SimulationState 2019-08-26 15:21:10 +02:00
2cf9e5070a start updating how the world state is used 2019-08-26 14:54:20 +02:00
357be047aa build virtual node tree in constructor 2019-08-26 12:17:51 +02:00
bccd47ab4f remove particle block from interfaces 2019-08-26 11:58:01 +02:00
5a3a155438 remove StepDescription and ParticleType entirely 2019-08-26 11:33:50 +02:00
3f01ddd5d2 don't use ParticleType abstraction in simulation code 2019-08-26 11:09:31 +02:00
0c98f500e2 don't use StepDescription abstraction in simulation code 2019-08-26 10:49:47 +02:00
3c541ff26c initial step simulator abstraction 2019-08-26 10:27:20 +02:00
7b08fe78e5 move simulation state to separate file 2019-08-26 10:05:08 +02:00
9efc8d1d9f combine particle and world state in c api 2019-08-26 09:57:40 +02:00
a5260c143c implicitely convert StringRef to std::string 2019-08-26 09:37:04 +02:00
43b449fc18 add missing const 2019-08-26 09:27:49 +02:00
08f0727864 add missing const 2019-08-26 09:25:42 +02:00
f4e3d5f30e Merge branch 'master' into functions 2019-08-26 09:18:17 +02:00
23c31ec27d add float hash 2019-08-25 14:34:10 +02:00
2e712d4eec add test 2019-08-25 14:30:36 +02:00
7e4715a534 remove unused macro 2019-08-25 14:23:32 +02:00
58754850ca remove unused mempool 2019-08-25 14:19:31 +02:00
dbdd6b88ef unify hash tables a bit 2019-08-25 14:07:56 +02:00
c52a4316d0 update the hashing template 2019-08-25 13:58:01 +02:00
bb81caeb1e Fix build error 2019-08-24 21:28:36 +02:00
6d0dad6290 Update Vector implementation 2019-08-23 17:35:19 +02:00
1e74b276c4 don't inline grow for other data structures 2019-08-23 16:57:24 +02:00
d49f1f8772 don't inline grow functions 2019-08-23 16:52:24 +02:00
f35171a9a8 add some comments 2019-08-23 16:32:49 +02:00
a3d9fc20cf store usable slots in open addressing array 2019-08-23 16:25:43 +02:00
c52e381c8b Add license header 2019-08-23 16:06:07 +02:00
af89849067 replace magic number 2019-08-23 16:04:21 +02:00
4d2dcb6a5f Initial implementation of updated ui proposal 2019-08-23 15:41:33 +02:00
9c05112910 fix after merge 2019-08-23 10:12:22 +02:00
dc383b2bfd Merge branch 'master' into functions 2019-08-23 10:01:55 +02:00
c20301adf1 fix build error 2019-08-22 14:19:30 +02:00
ac4c2b3a48 Merge branch 'master' into functions 2019-08-22 12:14:56 +02:00
Eitan
9644f7c8c7 New boolean math node with And, Or and Not operation 2019-08-22 11:47:30 +02:00
1a0a642063 fix boolean c++/llvm conversion 2019-08-22 11:44:56 +02:00
b0034fd7a2 more comments 2019-08-21 18:24:05 +02:00
33949188a7 add some comments 2019-08-21 17:57:42 +02:00
fda6430d6a improve const correctness in many places 2019-08-21 17:38:54 +02:00
700ff7b073 Merge branch 'master' into functions 2019-08-21 17:29:22 +02:00
6f511f6722 Fix raw allocator
This allocator is necessary because sometimes we don't want to use
Blenders guarded allocator. Especially when an object lives longer
than the guarded allocator.
2019-08-21 14:44:09 +02:00
7f79bc3054 Merge branch 'master' into functions 2019-08-21 09:27:24 +02:00
8c95d02504 more tests 2019-08-20 18:45:26 +02:00
6c78f41a2f add StringMap tests 2019-08-20 18:31:19 +02:00
0b2164c5ed remove unused MappedArrayRef class 2019-08-20 18:12:20 +02:00
b45cd6b8bd implement an actual string map that does not rely on std::string 2019-08-20 18:08:17 +02:00
dc01c108d4 improve ArrayRef and StringRef 2019-08-20 18:07:31 +02:00
075a36ae95 Merge branch 'master' into functions 2019-08-20 18:05:44 +02:00
c26a23f245 fix set vector remove 2019-08-20 12:34:39 +02:00
f591503f32 Merge branch 'master' into functions 2019-08-20 09:57:12 +02:00
206495642f Merge branch 'master' into functions 2019-08-19 18:42:56 +02:00
a6b66db204 cleanup Map 2019-08-19 18:34:26 +02:00
ecb8d0bdae cleanup Set 2019-08-19 18:30:16 +02:00
a00101ae5d move hash table slot iterators out of class 2019-08-19 18:24:16 +02:00
6f79e52665 Initial support for custom allocators for containers 2019-08-19 18:18:20 +02:00
607942330c Merge branch 'master' into functions 2019-08-19 10:39:12 +02:00
38b973a679 New Map, Set and SetVector implementation
All tests are runnings still, but I need to do more testing in the upcoming days.
This implementation uses a different approach for sharing code between
the different structures. I tried different abstractions in the last weeks
and this is the best one I found so far.
2019-08-18 16:31:48 +02:00
de8a52dcee low level memory utilities in blenlib 2019-08-18 12:12:39 +02:00
b0ca3469ed Merge branch 'master' into functions 2019-08-18 12:05:11 +02:00
25ab857e4d Fix particle tetrahedon mesh generation 2019-08-18 12:05:00 +02:00
a8eb9448e7 Merge branch 'master' into functions 2019-08-16 15:03:06 +02:00
f52b66c7ec cleanup type usage 2019-08-14 15:32:26 +02:00
a0d9f387bb free types when Blender exits 2019-08-14 15:20:33 +02:00
e16afbe4f5 use guarded allocator for some core types 2019-08-14 14:59:24 +02:00
7921c6cb7e store types in global variables 2019-08-14 14:39:39 +02:00
def527c9b0 Do not use a reference counter for Types
Types can be expected to stay alive until Blender exists.
This also works well with the fact that they are identified
by their pointer.

Furthermore, the number of types is fairly low, but they
are passed around a lot. Maintaining a thread-safe reference
count seems to be unnecessary overhead.
2019-08-14 13:59:05 +02:00
f073f232cf improve map method names 2019-08-14 11:53:08 +02:00
b7bc639d00 add more license headers 2019-08-14 11:46:29 +02:00
d39f5109cc add license header to blenlib files 2019-08-14 11:44:11 +02:00
1ca951cb6f Merge branch 'master' into functions 2019-08-14 09:57:15 +02:00
8b0706a6c1 fix compile error 2019-08-13 13:27:43 +02:00
180d46c76e remove copy to clipboard 2019-08-13 11:43:20 +02:00
a1fef73075 Merge branch 'master' into functions 2019-08-13 11:28:49 +02:00
1ebfffa310 fix compile error on windows 2019-08-12 17:55:52 +02:00
artem ivanov
0b15817ad2 More Float Math operations
Differential Revision: https://developer.blender.org/D5433
2019-08-12 16:36:31 +02:00
Eitan
e0ebaf8f3c Add multiply and divide to vector math node
Differential Revision: https://developer.blender.org/D5430
2019-08-12 16:24:58 +02:00
8aa6ff8ec9 Reimplement the way many arrays are allocated
This new implementation is more generic and easier to use.
2019-08-12 15:50:08 +02:00
52578524bd remove AttributeArrayCore class
It worked well, but having it does not provide enough value
to justify the additional complexity.
2019-08-12 10:30:51 +02:00
00d456761f Merge branch 'master' into functions 2019-08-12 09:23:25 +02:00
8ef0c6b0df Merge branch 'master' into functions 2019-08-07 12:02:06 +02:00
b277709d53 comment some library functions 2019-08-07 12:00:23 +02:00
f8909cfab7 only wrap intrusive listbases for now 2019-08-07 11:40:16 +02:00
4457268059 add some comments 2019-08-07 11:14:14 +02:00
b429156131 experimental reloadable function inputs 2019-08-07 11:04:30 +02:00
2428486775 allocate aligned from monotonic allocator 2019-08-07 10:54:01 +02:00
468be50313 remove unnecessary small object optimization for monotonic allocator 2019-08-07 09:33:37 +02:00
e231654e24 cleanup llvm function type creation 2019-08-06 17:40:25 +02:00
b0585aa4d4 rename element_amount to size 2019-08-06 17:23:00 +02:00
b04ec4faa5 move function to correct file 2019-08-06 17:17:34 +02:00
b46e26cd34 Fix exception when using the node search 2019-08-06 16:17:35 +02:00
71ec8895b7 rename tuple folder to cpp 2019-08-06 11:59:36 +02:00
4022d8784c New list implementation
Instead of using a templated list, it is easier to use a "generic" list, that can
handle every type with a CPPTypeInfo extension. This simplifies the code quite
a bit, because templates can be avoided in many places.
This also makes it easier to add new types.

The list will still be refcounted and still have the shared immutability semantic.
So when a list has more than one user, it is immutable.
2019-08-06 11:54:49 +02:00
a0364a6227 rename files for consistency 2019-08-05 18:18:59 +02:00
2a7b684a8a Merge branch 'master' into functions 2019-08-05 17:17:16 +02:00
b3d5ef9971 remove unused function 2019-08-05 16:35:27 +02:00
bd56ee7a78 cleanup cpp type extension 2019-08-05 15:51:05 +02:00
18820b10fd rename file 2019-08-05 14:59:34 +02:00
39989cb106 rename multimap to multi_map 2019-08-05 13:43:00 +02:00
4f282b4216 Allow passing unlinked input handlers to graph generation 2019-08-05 13:13:09 +02:00
3ea03318bb fix compile error and warning on macos 2019-08-05 13:07:40 +02:00
d5546057f2 rename classes 2019-08-05 12:58:31 +02:00
31c6db7d2a separate unlinked input grouper from inserter 2019-08-05 12:51:32 +02:00
5b8feb038d simple multivector data structure 2019-08-05 12:49:21 +02:00
80ce0cd20f join map.lookup and map.lookup_ref 2019-08-05 12:10:00 +02:00
artem ivanov
d0cdadc81e More vector math operations: Subtract, Cross Product, Reflect 2019-08-05 11:50:00 +02:00
db88d6e1a5 fix auto vectorization when function does not have certain bodies 2019-08-05 11:49:15 +02:00
6b1e4f51c0 Merge branch 'master' into functions 2019-08-05 10:39:52 +02:00
05d85c52a2 rename 2019-08-02 19:18:13 +02:00
8e9323cafa experiment with different ways to group unlinked inputs 2019-08-02 19:12:13 +02:00
afe19d51e3 remember placeholder nodes after they are created 2019-08-02 18:57:19 +02:00
f149445d38 vector.fill_indices 2019-08-02 18:51:02 +02:00
c21f39578f easily create dot graph from vtree data graph builder 2019-08-02 17:42:45 +02:00
d51db9a526 don't create array ref from single value 2019-08-02 17:42:15 +02:00
fb034c8e14 fix dot export after recent changes 2019-08-02 17:41:45 +02:00
5176484fbc rename UnlinkedInputsHandler to InputInserter 2019-08-02 16:22:06 +02:00
71d8ebd201 refactor how information about the node tree is stored 2019-08-02 16:11:25 +02:00
375577cfb9 improve file names 2019-08-02 14:10:39 +02:00
92319905a0 unify mapping names 2019-08-02 14:07:14 +02:00
2f3ccb7e90 move all tree mappings into folder 2019-08-02 14:00:46 +02:00
d537af9303 execute action for new particles after explosion 2019-08-02 13:43:56 +02:00
2be7226e86 new rgba_b attribute type 2019-08-02 13:21:12 +02:00
d022328974 new float2 particle attribute type 2019-08-02 13:18:57 +02:00
7f802fb750 initial texture color access after collision 2019-08-02 12:56:10 +02:00
3411511499 new float2 and rgba_b types 2019-08-02 12:52:40 +02:00
645293e2d9 remove redundant values 2019-08-02 10:08:51 +02:00
c5caaafd7f move collision info and particle info node in same file 2019-08-02 09:37:37 +02:00
363ba2ee7a Merge branch 'master' into functions 2019-08-02 09:27:17 +02:00
219573de22 Fix: Build error with MSVC
Zero sized arrays not being at the end of struct/class makes MSVC sad
2019-08-01 15:25:07 -06:00
480e284250 Merge branch 'master' into functions 2019-08-01 18:24:20 +02:00
f0b7499750 support for default values for vectorized inputs 2019-08-01 18:19:58 +02:00
d63f673e05 move input handlers to separate file 2019-08-01 17:55:47 +02:00
b07626e48b fix use after free in python 2019-08-01 17:25:54 +02:00
79b85c1426 add ability to store socket values as constants in IR 2019-08-01 17:18:34 +02:00
787e97057a return function body instead of bool 2019-08-01 17:18:07 +02:00
eb403083c6 support that tuples own their meta data 2019-08-01 17:17:36 +02:00
d3763513ff remove timer 2019-08-01 16:35:23 +02:00
f9a555a60a don't load socket values dynamically 2019-08-01 16:35:06 +02:00
d91a5b69d9 cleanup socket loaders 2019-08-01 16:06:25 +02:00
46bd09b789 cleanup 2019-08-01 15:56:00 +02:00
faeb98b48e compute type of every socket only once 2019-08-01 15:36:37 +02:00
0b970bc160 fix fill constructor of vector 2019-08-01 15:36:16 +02:00
795bae3410 cleanup type mappings 2019-08-01 15:07:04 +02:00
e606316ed6 rename refresh to sync_tree 2019-08-01 14:55:55 +02:00
13dce85083 fix float math node inputs 2019-08-01 14:55:20 +02:00
0ef25d8001 cleanup 2019-08-01 14:36:52 +02:00
104df5f5f2 support color in Custom Emitter node 2019-08-01 14:16:12 +02:00
69a8699b54 fix use-after-free crash from python 2019-08-01 14:15:56 +02:00
3d1de1e44e cache enum items in python 2019-08-01 14:15:28 +02:00
ffbe506a55 rename DFGraphSocket to DataSocket 2019-08-01 13:33:40 +02:00
3d2e279b3d rename DataFlowGraph to just DataGraph 2019-08-01 13:30:13 +02:00
6dc48fd18d replace DataFlowGraphBuilder implementation 2019-08-01 13:26:34 +02:00
218fcf4473 replace another map with a vector 2019-08-01 10:28:30 +02:00
1fd26737b5 use virtual socket index to replace a map with a vector 2019-08-01 10:16:56 +02:00
2f948952b5 store an index per virtual socket 2019-08-01 10:16:36 +02:00
f6ef23ebe7 remove IndexedNodeTree data structure in favor of VirtualNodeTree 2019-08-01 09:59:55 +02:00
fe5356bf25 Merge branch 'master' into functions 2019-08-01 09:52:03 +02:00
4c8746a965 Merge branch 'master' into functions 2019-07-31 18:41:50 +02:00
28ba204e17 easy access to identifier of socket 2019-07-31 18:41:06 +02:00
56e541dba6 identify types with idname 2019-07-31 18:35:24 +02:00
27b365058e remove last remainings of GraphInserters 2019-07-31 18:28:14 +02:00
22bd4ad4fb move more code out of GraphInserters 2019-07-31 17:53:37 +02:00
7ffa849297 start removing graph inserters 2019-07-31 17:43:46 +02:00
385e61a122 cleanup VTreeDataGraph creation 2019-07-31 17:28:48 +02:00
a5bc1b002f rename file 2019-07-31 17:21:43 +02:00
8e8049fa28 move VTreeDataGraph to separate file 2019-07-31 17:18:29 +02:00
b1fb402e1b cleanup VTreeDataGraph 2019-07-31 17:11:26 +02:00
69b0da1987 rename BTreeGraphBuilder to VTreeDataGraphBuilder 2019-07-31 17:01:33 +02:00
ed4db612f8 new Combine Color node 2019-07-31 16:57:04 +02:00
3e406633f7 only compile when there are outputs 2019-07-31 16:49:12 +02:00
529b78160c move ui code of multiple nodes in the same file 2019-07-31 16:29:14 +02:00
38463de2d9 extract some methods from llvm array execution 2019-07-31 16:09:20 +02:00
b6e533a0d9 don't expose different array execution functions 2019-07-31 15:48:50 +02:00
0f80acd54b don't prepare execution stack when not necessary 2019-07-31 15:40:11 +02:00
0f3b50329c cleanup llvm ir when stack info is maintained 2019-07-31 15:18:36 +02:00
14bb065f13 support for compiling particle functions down to machine code 2019-07-31 14:54:28 +02:00
eaaa8610fa some llvm usage improvements 2019-07-31 14:27:30 +02:00
36f0132394 llvm does not permit void*, so replace all uses with i8* 2019-07-31 14:24:44 +02:00
670537ed8a initial tuple call array execution 2019-07-31 11:23:13 +02:00
bff87f3a9a fix merge conflict 2019-07-31 10:35:33 +02:00
5878add697 Merge branch 'master' into functions 2019-07-31 10:30:30 +02:00
3e0fd90605 use another strategy to create functions for unlinked inputs 2019-07-30 16:13:44 +02:00
042cc17bab clang-format 2019-07-30 15:06:22 +02:00
760e084791 show node search in menu 2019-07-30 14:59:28 +02:00
9d3a92d3e3 use background color for particle type node 2019-07-30 14:59:28 +02:00
e54acfa2ff rename 2019-07-30 14:59:28 +02:00
5841005187 add buttons to create particle type nodes 2019-07-30 14:59:28 +02:00
4f5093f403 renamed particle_modifier_output to particle_effector_output 2019-07-30 14:55:15 +02:00
26d0bbffa8 added point force node for particle nodes 2019-07-30 14:41:28 +02:00
773b6bbd42 rename modifier to effector in some places
That was missing in a previous commit.
2019-07-30 13:58:17 +02:00
c2e63d660b add color attribute type 2019-07-30 13:44:39 +02:00
33c29f35b8 simplify the way attribute information is stored 2019-07-30 13:27:37 +02:00
4bbee4acf2 new Change Particle Color node 2019-07-30 12:14:42 +02:00
99e5f16d4a new Separate Color node 2019-07-30 12:01:33 +02:00
093583620c new color socket type 2019-07-30 12:01:00 +02:00
d29052a514 make object an input in mesh collision event 2019-07-30 10:59:51 +02:00
937dde6060 fix wrong element size due to alignment 2019-07-30 10:59:34 +02:00
e41084f94a cleanup style 2019-07-30 10:20:40 +02:00
40b3c50837 Merge branch 'master' into functions 2019-07-30 10:08:15 +02:00
9fb73c42fd windows compile fixes - missing includes 2019-07-29 20:28:30 +02:00
c62b1850e3 rename "size_of_type" to just "size" 2019-07-29 17:55:52 +02:00
910431e382 start taking alignment of types into account when constructing tuples 2019-07-29 17:53:12 +02:00
bd514d20e0 remove more redundant code 2019-07-29 17:21:21 +02:00
e38e761ba6 remove more redundant code 2019-07-29 17:17:38 +02:00
b645fa8d12 remove more redundant code 2019-07-29 17:13:42 +02:00
0bf70bde16 rename try_get_T to try_get<T> 2019-07-29 17:07:03 +02:00
f78e2837ff change get_T to get<T> when accessing attributes 2019-07-29 17:03:32 +02:00
deecc8c6f8 fix error when using Call node 2019-07-29 16:43:11 +02:00
555d29a0fe initialize particles with IDs 2019-07-29 16:39:35 +02:00
c28a441a9d fix coyp paste error 2019-07-29 16:05:08 +02:00
74bdbb94e5 add integer attribute type 2019-07-29 15:48:59 +02:00
d2c1f7b9ca initial particles block id 2019-07-29 15:16:21 +02:00
aa1c4663a1 remove lots of redundant code 2019-07-29 15:08:05 +02:00
ac5bf8e4f9 initial age output in particle info node 2019-07-29 14:50:19 +02:00
e87cd0c807 introduce input provider interface 2019-07-29 14:02:04 +02:00
e2a6763be3 support for freeing particle function input arrays 2019-07-29 13:51:41 +02:00
c2461a8b87 extract method to create particle function input provider 2019-07-29 13:39:17 +02:00
f2d3539cb5 new particle function input providers abstraction 2019-07-29 13:30:55 +02:00
dbc453f414 extract methods from particle function evaluation 2019-07-29 12:30:59 +02:00
58c67cdde4 remove unnecessary typedef 2019-07-29 12:19:01 +02:00
4ed19b6b1e cleanup particle function builder 2019-07-29 12:16:55 +02:00
888aec8234 move particle function building to separate file 2019-07-29 12:07:08 +02:00
5a1a8fa917 handle inputs with no dependencies separately 2019-07-29 11:55:25 +02:00
ed2180832e use debug name checking again 2019-07-29 11:20:42 +02:00
904966b3ef particle function contains two functions: with/without dependencies 2019-07-29 11:14:38 +02:00
6e83213a5f utility to iterate over trivial particle indices 2019-07-29 10:06:48 +02:00
41f83ef571 scoped timer per element 2019-07-29 10:03:27 +02:00
a8c46c4bf0 fix after merge 2019-07-29 09:13:38 +02:00
1b274efd7c Merge branch 'master' into functions 2019-07-29 09:09:33 +02:00
248ee40712 Cleanup: Fix build error with msvc. 2019-07-25 15:18:33 -06:00
7db0b9c265 add utility to combine strings on the stack 2019-07-25 15:09:57 +02:00
7a3e5c1dad simplify creating particle function 2019-07-25 14:31:25 +02:00
9b3e1859ef simplify action builders 2019-07-25 14:20:36 +02:00
63a9949c27 compute particle functions more centrally for events 2019-07-25 10:18:22 +02:00
6c3afa7801 create particle function for force inputs more centrally 2019-07-25 10:06:03 +02:00
7e4c489778 use particle function for gravity force 2019-07-25 10:01:10 +02:00
c92dd7bed6 create particle function more centrally for offset handlers 2019-07-25 09:54:46 +02:00
7de561f930 Merge branch 'master' into functions 2019-07-25 09:42:45 +02:00
03f4489e4d Merge branch 'master' into functions 2019-07-24 19:19:46 +02:00
93b01da75e use threading again 2019-07-24 19:10:55 +02:00
3976570539 use particle function in Age Reached event 2019-07-24 19:07:55 +02:00
2d925db8b0 fix double free and optimize when particle function inputs have no dependencies 2019-07-24 19:07:38 +02:00
fd0226f614 handle type extensions as references instead of pointers by default 2019-07-24 17:52:22 +02:00
85536c5e75 use function bodies as references instead of pointers by default 2019-07-24 17:43:00 +02:00
f54507724f rename 2019-07-24 17:13:33 +02:00
54724cc5b3 simplify usage of particle functions 2019-07-24 17:12:13 +02:00
b60b193384 do more checks when debugging 2019-07-24 16:27:07 +02:00
299ba77cc9 fix false positive memory leak 2019-07-24 16:15:06 +02:00
c0fd3b6962 remove tests because their are more trouble than they are worth currently 2019-07-24 16:14:50 +02:00
dec218643e use particle function in turbulence node 2019-07-24 15:54:16 +02:00
1cc5f83442 introduce force interface 2019-07-24 15:46:30 +02:00
e468ca977e use particle function in trails node 2019-07-24 15:25:43 +02:00
d9f02f209b further simplify usage of particle function 2019-07-24 15:09:55 +02:00
f169a5eeb7 improve particle function 2019-07-24 15:06:07 +02:00
bdcca74b23 rename 2019-07-24 14:47:05 +02:00
1f79a069d3 move particle function to separate file 2019-07-24 14:44:36 +02:00
d4f57524be rename 2019-07-24 13:58:04 +02:00
89001688d6 rename EventInfo to ActionContext 2019-07-24 13:56:07 +02:00
2859cf6902 cleanup executing actions 2019-07-24 13:50:36 +02:00
bc9d51d048 expose collision normal in new Collision Info node 2019-07-24 13:33:12 +02:00
712701a4ef remember socket that triggered an action 2019-07-24 12:52:35 +02:00
f777ac8a52 use new function creation method for action and offset handlers 2019-07-24 12:36:13 +02:00
efa9b1cc41 use error handling for event nodes 2019-07-24 11:47:37 +02:00
5de6dca2f5 create function to compute force inputs 2019-07-24 11:43:28 +02:00
cb091c196f use better error handling for other emitters 2019-07-24 11:37:30 +02:00
d9348adb33 better error handling when creating function for emitter inputs 2019-07-24 11:33:15 +02:00
f1c69c71c6 move FunctionBuilder to separate file and add more methods 2019-07-24 11:32:40 +02:00
b1425fc68b namespace fix 2019-07-24 11:31:53 +02:00
556691b19a Improve error handling with ValueOrError class
We might want to use exceptions instead of this.
I'm not sure yet.
2019-07-24 10:58:11 +02:00
a0f9564d1b cleanup finding placeholder dependencies 2019-07-24 10:14:51 +02:00
c21d8bd0d9 cleanup finding node inputs 2019-07-23 19:03:49 +02:00
a18d338d3f minor improvements 2019-07-23 19:02:39 +02:00
a781b6fc3a rename BTreeDataGraph to VTreeDataGraph 2019-07-23 18:06:41 +02:00
17dd4e03b8 move function generation file to correct file 2019-07-23 18:04:27 +02:00
fa26630d87 fix uninitialized memory 2019-07-23 18:00:24 +02:00
937a448de2 Remove Composition data structure
This simplifies the code and speeds up accessing function
bodies and type extensions. Now, a lock is only necessary
when create new bodies or extensions.

This is achieved at the cost of having a slighly less generic
system, because we have to give e.g. different function body
types different IDs. Since the number of different types
is expected to be fairly low, this trade off is worth it.
2019-07-23 16:54:40 +02:00
d6a7832f6d simplify virtual node tree usage 2019-07-23 14:59:18 +02:00
9869bc3bc4 Merge branch 'master' into functions 2019-07-23 09:46:00 +02:00
d6b7aecbbc reorder lines 2019-07-22 17:58:31 +02:00
5bcc78ada9 remove builders that are not necessary for now 2019-07-22 17:57:20 +02:00
c900098170 remove unnecessary usings 2019-07-22 17:34:03 +02:00
51fb6b5098 remove unnecessary type definitions 2019-07-22 17:31:20 +02:00
5a269bfb57 remove "small" from test names 2019-07-22 17:19:35 +02:00
f0c164b861 rename SmallVector to Vector 2019-07-22 17:17:47 +02:00
a1ba33090b rename SmallMap to Map 2019-07-22 17:10:42 +02:00
6a63774f43 rename SmallMultiMap to MultiMap 2019-07-22 17:07:58 +02:00
d0d6f38754 rename SmallStack to Stack 2019-07-22 17:05:37 +02:00
f179b2dd30 rename SmallSetVector to SetVector 2019-07-22 16:59:52 +02:00
f9caf48eab Rename SmallSet to just Set
The fact that the data structure has small object optimization
is not important enough to justify a more complex name.
Following commits will rename other data structures.
2019-07-22 16:57:59 +02:00
f039c43f95 cleanup 2019-07-22 16:47:32 +02:00
4b42c112fd cleanup accessing rna of virtual node 2019-07-22 16:46:11 +02:00
3dfbbf606e cleanup accessing node names 2019-07-22 16:40:29 +02:00
9a4d125533 use virtual node tree for parsing particle system node trees 2019-07-22 16:35:49 +02:00
7d5ee7c689 start using virtual node tree to generate functions 2019-07-22 15:49:13 +02:00
c71997dd67 initial virtual node tree 2019-07-22 14:19:12 +02:00
fb26304aa2 ArrayRef.contains_ptr 2019-07-22 14:18:43 +02:00
8a69395d6a rename SocketBuilder to NodeBuilder 2019-07-22 12:41:02 +02:00
86fb4243d1 cleanup 2019-07-22 12:37:31 +02:00
ddf0b72870 make socket.data_type a class property 2019-07-22 12:32:51 +02:00
b7efaadb8e get socket data type from idname 2019-07-22 12:04:42 +02:00
227a28e9e5 remove dead code 2019-07-22 10:49:46 +02:00
b1d21db61b remove colored socket builder 2019-07-22 10:48:34 +02:00
6356f27a87 Merge branch 'master' into functions 2019-07-22 10:24:28 +02:00
fa9f34c056 show particle type names in nodes 2019-07-20 14:21:22 +02:00
1180996832 add ability to select output mesh type in modifier settings 2019-07-20 14:06:51 +02:00
dd47cbf3b7 use constant velocity integrator when there are no forces 2019-07-20 13:40:00 +02:00
0767dad328 rename function 2019-07-20 13:39:17 +02:00
9fa5d75d80 Fix moving sets and maps 2019-07-20 12:57:12 +02:00
ff398d29a6 Merge branch 'master' into functions 2019-07-20 11:53:07 +02:00
9a965af529 move offset handlers to separate file 2019-07-18 17:34:40 +02:00
49d2d8b47e add timer 2019-07-18 17:18:52 +02:00
10c81747fe splitup remainings of core.hpp 2019-07-18 17:16:40 +02:00
c23ccfc0ac separate files for particle state and allocator 2019-07-18 16:59:31 +02:00
0645752ab7 cleanup 2019-07-18 16:59:08 +02:00
bd49708841 rename target to new_particles 2019-07-18 16:49:20 +02:00
c67953c53e move particle set to separate file 2019-07-18 16:47:10 +02:00
182cc12015 fix trail creation for partial time steps 2019-07-18 16:39:28 +02:00
83e75345a2 simple rate input for Trail node 2019-07-18 16:19:31 +02:00
e29914292a missing destructor 2019-07-18 15:57:34 +02:00
6793bab243 use proper constructors for step description and particle type 2019-07-18 15:39:05 +02:00
2c0c758d72 make StepDescription class non-virtual 2019-07-18 15:30:48 +02:00
234f5d9407 make ParticleType class non-virtual 2019-07-18 15:28:08 +02:00
d0eed2a7ac change how particle types declare which attributes they need 2019-07-18 15:23:45 +02:00
023f477bdd rename AttributesInfoBuilder to AttributesDeclaration 2019-07-18 15:04:23 +02:00
8dd5be76c0 initial step desription builder 2019-07-18 14:59:07 +02:00
24c5a21977 remove redundant particle type name storage 2019-07-18 14:30:53 +02:00
f2737b927d rename ForwardListener to OffsetHandler 2019-07-18 14:04:38 +02:00
1272208b2b remove redundant information 2019-07-18 13:52:58 +02:00
d908edbc8a cleanup 2019-07-18 13:47:13 +02:00
9fd56bed3f cleanup 2019-07-18 13:44:29 +02:00
e47c49c872 remove redundant information 2019-07-18 13:40:36 +02:00
168f5964b6 remove redundant information 2019-07-18 13:37:04 +02:00
fe8cace993 use block step data in more places 2019-07-18 12:56:22 +02:00
ea6bbc1aec use step block data in more functions 2019-07-18 12:39:02 +02:00
d1f05d2415 use step block data in more functions 2019-07-18 12:22:47 +02:00
a6914c973f introduce BlockStepData as container for data that would have to be passed into many functions 2019-07-18 12:16:10 +02:00
7aa22a24a7 initial forwarding listeners + particle trail node
Still looking for a better name instead of Forwarding Listeners
2019-07-18 12:08:36 +02:00
4672d7aa83 Merge branch 'master' into functions 2019-07-18 10:37:40 +02:00
d6230d1563 don't always use cache for now since it makes testing more annoying 2019-07-17 18:01:25 +02:00
e800a2d5fa experimental initial grid emitter 2019-07-17 17:45:44 +02:00
0df9c55578 pass time step in from the modifier 2019-07-17 17:11:05 +02:00
a2b128a451 experimental Close By Points event 2019-07-17 16:46:13 +02:00
54f7163310 minor changes 2019-07-17 15:57:17 +02:00
09bc3a0aac Revert "use evaluated node tree"
This reverts commit eddb4d0af4.

Sometimes the evaluated node trees are not updated when the real
node tree changes. Use original trees until this is fixed.
2019-07-17 11:20:47 +02:00
da04c045fe velocity and size input for point emitter 2019-07-16 18:18:53 +02:00
ce2081e5b3 support for interpolated float values 2019-07-16 18:18:09 +02:00
06d8ed1a8a store color per particle 2019-07-16 17:59:20 +02:00
ec7054772b utility operators to create emitter and particle system trees 2019-07-16 17:33:13 +02:00
bd573cf2d7 use vector adaptor instead of pointer+length in fgraph tuple call 2019-07-16 16:29:13 +02:00
667b56f87b use "ifdef DEBUG" instead of "if DEBUG" 2019-07-16 16:28:49 +02:00
eddb4d0af4 use evaluated node tree 2019-07-16 16:12:56 +02:00
c41a9d0e88 fix fgraph tuple call 2019-07-16 16:12:06 +02:00
55a74c35dd fix vector math node 2019-07-16 15:59:42 +02:00
c35feef507 new node to get the vertices of a mesh 2019-07-16 15:36:22 +02:00
9a02226aa2 support for geometry dependencies of functions 2019-07-16 15:35:50 +02:00
f4dac36c05 extract another function for linking 2019-07-16 14:52:06 +02:00
a5b90dc661 extract method that links functions 2019-07-16 14:43:47 +02:00
70f8f3231b Custom Emitter functions can have inputs now 2019-07-16 14:33:08 +02:00
6a8985dfa5 utility to map multiple sockets 2019-07-16 13:22:58 +02:00
f0cc032f83 construct SmallVector from arbitrary containers 2019-07-16 13:04:26 +02:00
39ebd2fd1f more general function tree dependency discovery 2019-07-16 12:57:30 +02:00
8fec347121 more powerful custom emitter 2019-07-16 11:37:43 +02:00
f058e7b11a remove unnecessary check 2019-07-16 11:32:12 +02:00
8ba1856a13 fix bug in fgraph tuple call 2019-07-16 11:32:01 +02:00
38e223e392 initialize attributes by repeating a given array 2019-07-16 10:00:57 +02:00
f388fdc4f1 Merge branch 'master' into functions 2019-07-16 09:37:19 +02:00
36bd4e1225 get rid of static block size 2019-07-15 18:09:07 +02:00
e95c0078a2 initial custom function emitter 2019-07-15 17:56:02 +02:00
94d2a11636 more debug time checks 2019-07-15 17:25:19 +02:00
ad6fa16304 use more debug time checks 2019-07-15 17:19:02 +02:00
c5d18a0a8a check that indices correspond to correct outputs in debug build 2019-07-15 17:09:32 +02:00
6d208e3183 remove indirection 2019-07-15 16:54:47 +02:00
89a8b1f4f5 cleanup events 2019-07-15 16:51:23 +02:00
aefdc1807a cleanup emitters 2019-07-15 16:43:27 +02:00
b5a74ae166 remove a level of indirection 2019-07-15 16:23:42 +02:00
034956978e more boilerplate code removal 2019-07-15 16:18:59 +02:00
fa9bf0c5b1 cleanup 2019-07-15 16:15:06 +02:00
719357ffda revisit autorefcount 2019-07-15 16:07:24 +02:00
f2421c042e abstract interpolated vectors and matrices 2019-07-15 15:35:45 +02:00
0b3ff01ba4 bring back some emitter settings 2019-07-15 15:23:20 +02:00
39476c5ce3 remove boilerplate code for emitters 2019-07-15 15:18:35 +02:00
419f0de8d3 initialize emitter differently 2019-07-15 15:11:36 +02:00
25b3b122e6 experiment with remembering last point emitter position 2019-07-15 14:39:59 +02:00
2e1ba1c02a interpolate vectors 2019-07-15 14:37:37 +02:00
65f2000075 cleanup variable shadowing 2019-07-15 13:49:29 +02:00
3c979ed37e delete particles in same taskpool as simulation 2019-07-15 12:08:23 +02:00
89b625a0ce Merge branch 'master' into functions 2019-07-15 11:47:47 +02:00
b6b26efb9f Merge branch 'master' into functions 2019-07-12 15:06:01 +02:00
a84fcf8cde actually use threading... 2019-07-12 14:49:30 +02:00
60a2d39782 remove temporary code 2019-07-12 14:08:34 +02:00
45b4704df6 use function to compute point input of point emitter 2019-07-12 14:05:33 +02:00
3915ca912a remove unused code 2019-07-12 13:58:11 +02:00
82844c5f11 cleanup dependency builder 2019-07-12 13:51:20 +02:00
b6c1d3e1bd make updating depsgraph work again 2019-07-12 12:39:57 +02:00
fe4c294656 improve fgraph dependencies 2019-07-12 12:24:43 +02:00
b6820e4a87 fixes 2019-07-12 12:17:43 +02:00
da34e3476e cleanup 2019-07-12 12:02:26 +02:00
b0015fc7cd multimap fix 2019-07-12 12:00:39 +02:00
c77abe1e8d initial revised function dependency handling 2019-07-12 10:33:22 +02:00
5366c5c827 utility functions to access data flow graph 2019-07-12 10:27:52 +02:00
53d00eb08b simplify array printing 2019-07-12 10:14:27 +02:00
b124984220 fix when there are no triangles in mesh 2019-07-12 10:14:12 +02:00
3708e233b5 add multiple in multimap 2019-07-12 09:16:44 +02:00
5b7f49edc4 comment in stringmap 2019-07-11 16:34:53 +02:00
800a578ed7 use StringMap everywhere 2019-07-11 16:30:46 +02:00
12149d8e1b initial string map 2019-07-11 15:50:46 +02:00
05d742427f cleanup action builders 2019-07-11 15:39:06 +02:00
d8719603f8 pass build context instead of separate parameters 2019-07-11 15:30:13 +02:00
db6a45ce1f reorder functions 2019-07-11 15:21:11 +02:00
e0a7c11dd0 cleanup simple emitter builders 2019-07-11 15:14:12 +02:00
32e435bbc3 simplify event inserters 2019-07-11 14:44:01 +02:00
9f1c625056 cleanup force node handling 2019-07-11 14:29:17 +02:00
abb76708d1 simplify create function for node inputs 2019-07-11 13:47:53 +02:00
79ec9180e6 rename GeneratedGraph to BTreeDataGraph 2019-07-11 13:37:43 +02:00
57f7d83def cleanup executing actions for a subset 2019-07-11 12:47:05 +02:00
8eb57698c4 cleanup running action from event 2019-07-11 12:36:09 +02:00
401ff628bd settings size in point emitter is not necessary anymore 2019-07-11 12:28:31 +02:00
75cc874922 introduce attributes info builder 2019-07-11 12:24:06 +02:00
7a62e775bb simplify calling action from emitter 2019-07-11 11:46:10 +02:00
615269b749 rename modifiers to effectors 2019-07-11 11:20:15 +02:00
202708eeae run action on particle birth 2019-07-11 11:17:53 +02:00
5114a48fd7 correct usage of attribute offsets that are not available 2019-07-11 10:15:56 +02:00
35dcbf506d fill an array partially 2019-07-11 09:53:39 +02:00
ed9bc5f5c0 Merge branch 'master' into functions 2019-07-11 09:37:08 +02:00
5f02cc2d3a simple clear cache operator 2019-07-10 17:17:26 +02:00
5216bf6014 get rid of particles.range() 2019-07-10 16:53:39 +02:00
dee695f2da cleanup usage of particle indices 2019-07-10 16:45:05 +02:00
4d6b6ab7e3 fix wrong index access 2019-07-10 16:34:07 +02:00
d7fd4ed39c rename particle_indices to pindices 2019-07-10 16:30:45 +02:00
b5af31fb57 use particle indices to trigger particles 2019-07-10 16:28:43 +02:00
157f0aedcb remove unused code 2019-07-10 16:23:16 +02:00
37a3a41de8 cleanup 2019-07-10 16:21:28 +02:00
8e2ae56b25 access time factors to next event with particle indices 2019-07-10 16:19:31 +02:00
25e7319488 access next event indices with particle indices 2019-07-10 16:11:31 +02:00
18e8a12ef1 use particle indices to access remaining durations 2019-07-10 15:58:53 +02:00
9386bcb29a rename durations to remaining_durations 2019-07-10 15:45:28 +02:00
0135d47a06 compute remaining durations in every thread again 2019-07-10 15:43:10 +02:00
1f9186c270 store remaining durations instead of end times 2019-07-10 15:17:56 +02:00
85b8376829 pass array allocator to emitter and execute event interface 2019-07-10 14:56:44 +02:00
3d93967292 take event execute interface out of action interface 2019-07-10 14:35:57 +02:00
8b13cd86ec more centralized solution to getting an array ref for a range 2019-07-10 14:21:53 +02:00
ab0f8b46a6 use ParticleSets abstraction instead of emitter targets 2019-07-10 13:54:33 +02:00
8ea9f57601 simplify event execute interface 2019-07-10 12:59:20 +02:00
d00457ba64 cleanup ParticleAllocators class 2019-07-10 12:39:15 +02:00
ee70791626 rename BlockAllocator to ParticleAllocator 2019-07-10 12:35:20 +02:00
1104d30f9e remove intermediate class 2019-07-10 12:32:18 +02:00
d191a1cee7 start simplifying the emitter interface 2019-07-10 12:27:18 +02:00
d58a5ac3aa Merge branch 'master' into functions 2019-07-10 11:58:14 +02:00
f09794f280 size input for mesh emitter 2019-07-10 11:36:04 +02:00
b197bf5903 sync node trees when file is loaded 2019-07-10 11:33:33 +02:00
317a2ff1e9 unify float and float3 caching 2019-07-10 11:22:27 +02:00
d34c240ebf Cache particle blocks in container for reuse 2019-07-10 11:05:46 +02:00
804ea8fe82 store and cache size per particle 2019-07-10 10:26:48 +02:00
5e22b41ce1 normal and emitter velocity inputs 2019-07-09 17:07:56 +02:00
ab6106149f move world state to mesh emitter 2019-07-09 17:01:58 +02:00
7b674cc684 pass emitter object and rate into mesh emitter node 2019-07-09 16:56:19 +02:00
fa483d50d1 pass object into object transforms node 2019-07-09 16:23:57 +02:00
7c10fa0ac3 object list type 2019-07-09 16:20:40 +02:00
761090b9d4 object type in function system 2019-07-09 16:09:22 +02:00
0a07de8839 object data type in ui 2019-07-09 16:02:30 +02:00
1b1fcd79da basic caching system so that particles can be rendered 2019-07-09 15:56:38 +02:00
52040433a1 rename modifier 2019-07-09 13:48:00 +02:00
a9c1831b07 remove unused code 2019-07-09 13:33:06 +02:00
d2e4f94205 move action builders to separate functions 2019-07-09 13:32:20 +02:00
4b9b9c7813 simplify inserters 2019-07-09 13:24:16 +02:00
72913dbafc initial process node interface 2019-07-09 12:55:15 +02:00
6ab1d300d6 fix variable names 2019-07-09 12:29:30 +02:00
1bfe567129 new node_frontend interface 2019-07-09 12:27:26 +02:00
fb1fdbd217 remove unnecessary includes 2019-07-09 12:16:54 +02:00
43d037b086 move inserters to separate file 2019-07-09 12:13:34 +02:00
d845e15750 move integrator to seprate file 2019-07-09 12:02:11 +02:00
8364c3aafc move step description to separate file 2019-07-09 11:53:36 +02:00
81795f30b4 move world state to separate file 2019-07-09 11:44:37 +02:00
f3b06e8b15 taking emitter velocity into account 2019-07-09 11:23:06 +02:00
3d919e445a add ability to cache the world state to avoid stepping effects 2019-07-09 10:53:56 +02:00
9863f2bfec new map.add_override method 2019-07-09 10:53:14 +02:00
438aae9d0f remove Function from displace modifier (was only for testing) 2019-07-09 09:58:12 +02:00
30dee2dbd2 specify default inputs for some nodes 2019-07-09 09:50:07 +02:00
d94c249194 add ability to specify default values for data sockets 2019-07-09 09:49:55 +02:00
0d28e20bc3 move possibly empty arrays to end of struct for msvc compatibility 2019-07-09 09:32:35 +02:00
b01071a4f3 Merge branch 'master' into functions 2019-07-08 17:55:29 +02:00
435698e219 rename insert to add 2019-07-08 17:55:07 +02:00
ad7c91b346 new compare function 2019-07-08 17:34:48 +02:00
fed773cec6 random number node should have float instead of int input 2019-07-08 17:14:02 +02:00
9d79363098 move functions to correct file 2019-07-08 17:09:29 +02:00
317158e106 reintroduce unique_ptr for actions and events 2019-07-08 17:08:31 +02:00
6e86e314ef move action interface to separate file 2019-07-08 16:56:27 +02:00
65292981a4 improve ActionInterface 2019-07-08 16:50:28 +02:00
6dd1e480b5 initial Action interface 2019-07-08 16:21:44 +02:00
2a0abf0adf initial condition action 2019-07-08 16:09:32 +02:00
f7e7335123 improved event info usage 2019-07-08 15:39:54 +02:00
49e5434e94 initial collision event info 2019-07-08 15:13:57 +02:00
b293739f1f initial event info 2019-07-08 14:23:08 +02:00
c8816dbd31 StringRef.drop_prefix 2019-07-08 14:14:45 +02:00
6bfa473b60 simplify StringRef operator overloads 2019-07-08 14:02:19 +02:00
cba2b0367c stringref: iterate, startswith and endswith 2019-07-08 13:57:25 +02:00
1251ef30aa gather required attributes from particle type and events 2019-07-08 13:30:58 +02:00
fe697e5c1f SmallSet.add_multiple_new 2019-07-08 13:30:08 +02:00
db89c65746 remove separate EventFilter class 2019-07-08 12:57:39 +02:00
03e95e569b distribute tetrahedons in parallel 2019-07-08 12:43:39 +02:00
d71543bf60 new utility to process a range with multiple threads 2019-07-08 12:42:35 +02:00
fce3694f0d new ChunkedRange 2019-07-08 12:42:13 +02:00
d824cb4a7f allow using array allocator in integrator 2019-07-08 11:53:38 +02:00
16a23f4195 rename FixedArrayAllocator to just ArrayAllocator 2019-07-08 11:44:21 +02:00
7387e36267 simplify allocating arrays and vectors from fixed array allocator 2019-07-08 11:41:38 +02:00
fc412c78b4 comment on fixed array allocator 2019-07-08 11:08:23 +02:00
ef8cbccd54 simplify method names 2019-07-08 11:03:26 +02:00
5503207730 use scoped array allocations to simplify memory management 2019-07-08 11:00:41 +02:00
fff24d71f7 cleanup multimap 2019-07-08 10:37:28 +02:00
3c67bda1d2 Merge branch 'master' into functions 2019-07-08 09:56:40 +02:00
2e701cbaaf rename file to BLI_small_multimap 2019-07-06 18:01:23 +02:00
20bd3b5ed1 add vertex colors to tetrahedons for visualization 2019-07-06 17:30:00 +02:00
e852f7d356 create SmallVector from MappedArrayRef 2019-07-06 17:12:11 +02:00
6715600796 flatten float3 attribute of container 2019-07-06 16:49:12 +02:00
b832be6206 improved particle to tetrahedon conversion 2019-07-06 16:38:26 +02:00
b2188f052b initial particle info node 2019-07-06 15:36:02 +02:00
f204ea5624 Fix append_n_time reallocating every time 2019-07-06 15:14:51 +02:00
1d2adb08f8 Fix ArrayLookup for the case when all slots are used or dummies 2019-07-06 14:43:31 +02:00
f7e0f429e2 remove unused modifier properties 2019-07-05 18:07:12 +02:00
2746f423bd initial turbulence node 2019-07-05 17:38:29 +02:00
f67431d729 use gravity node in simulation 2019-07-05 16:56:40 +02:00
30c6880fe0 initial gravity force node ui 2019-07-05 16:39:29 +02:00
fa79121db2 initial mesh collision event node 2019-07-05 15:40:58 +02:00
d5f21d2aac cleanup age reached event inserter 2019-07-05 15:19:33 +02:00
7beef61562 get node of socket from indexed tree 2019-07-05 15:13:28 +02:00
57cb7849fa construct SmallStack from array 2019-07-05 15:03:48 +02:00
cc8ff01d8e deduplicate function create code 2019-07-05 14:49:18 +02:00
2c8e8d547f add speed input to explode node 2019-07-05 14:42:54 +02:00
681ae8d03c initial explode particle node 2019-07-05 14:38:35 +02:00
0380b22606 better handling of zero duration 2019-07-05 13:42:52 +02:00
452369f1b7 simulate more events per step, again 2019-07-05 12:57:03 +02:00
278dc870c0 allow event filters to add attributes to a particle type 2019-07-05 12:53:37 +02:00
f9edcf46b3 improved change direction action 2019-07-05 12:23:45 +02:00
873f483836 new change direction action 2019-07-05 11:15:57 +02:00
7de0213588 access element at index in listbase 2019-07-05 11:15:31 +02:00
821b7e5360 initial build action from nodes 2019-07-05 10:48:44 +02:00
fc490e4236 new action that does nothing 2019-07-05 10:38:58 +02:00
b71291c96d cleanup 2019-07-05 10:38:44 +02:00
e02befdd2c remove unnecessary IndexedBParticlesTree 2019-07-05 10:28:43 +02:00
5e7dc72f11 better function signature for inserters 2019-07-05 10:24:38 +02:00
057455726c new kill particle node ui 2019-07-05 10:14:01 +02:00
c5330b6d94 new control flow socket 2019-07-05 10:11:40 +02:00
9328e6f0bf Merge branch 'master' into functions 2019-07-05 09:53:41 +02:00
d3c5e882b0 Use monotonic allocator instead of more complex ones 2019-07-04 18:04:58 +02:00
16c92706d8 some comments for allocators 2019-07-04 17:33:46 +02:00
7f410f0655 initial replaceable unlinked inputs handler
Depending the use case, unlinked node inputs should be handled differently.
Sometimes, it is okay to load them from RNA on every call, but
sometimes they should also be hardcoded into the generated assembly.
2019-07-04 16:30:31 +02:00
cdd5d41e6e fix memory leak 2019-07-04 16:08:07 +02:00
3a0cfed4aa first time using the function nodes within bparticle nodes 2019-07-04 15:57:38 +02:00
82ae82488e cleanup data flow graph generation 2019-07-04 15:31:09 +02:00
e7ff5b1470 don't use output parameter when building data flow graph 2019-07-04 15:02:10 +02:00
7a6ab07e9e make it possible to build data flow graphs for any node tree 2019-07-04 14:49:53 +02:00
bee737bbad store list with non-reroute and non-frame nodes explicitely 2019-07-04 14:03:06 +02:00
d66644dd87 cleanup finding input and output nodes of function 2019-07-04 13:57:05 +02:00
be0ed93f99 use indexed node tree in more places 2019-07-04 13:44:33 +02:00
b06ed62500 initial age reached event node 2019-07-04 13:29:49 +02:00
8628f329e8 cleanup rna access 2019-07-04 11:34:49 +02:00
4ae4d125cd simple point emitter node for testing 2019-07-04 11:30:49 +02:00
c44a8e5ede initial emitter inserter 2019-07-04 11:17:21 +02:00
4cb0cb6a06 improve indexed node tree 2019-07-04 10:54:17 +02:00
96f4921704 refactor IndexedBParticlesTree 2019-07-04 10:32:57 +02:00
a6b5767d27 rename NodeTreeQuery to IndexedNodeTree 2019-07-04 10:29:35 +02:00
28c4b3e6f8 identify particle types with name instead of integer
While this might be less efficient, it is much more comfortable to work with.
Also it might be possible to make it a bit more efficient again in the future.
2019-07-04 10:20:32 +02:00
fefeaec48d Merge branch 'master' into functions 2019-07-03 19:11:23 +02:00
5aa6c03fbc use BLI_STATIC_ASSERT 2019-07-03 19:10:07 +02:00
f16c8eec40 optimize adding multiple new values to multimap 2019-07-03 19:02:49 +02:00
10437bba07 only use new multimap implementation 2019-07-03 19:01:14 +02:00
2df06e3172 fix issue with multiple links at same socket 2019-07-03 18:49:57 +02:00
d14073a5fc better multimap implementation for a specific use case 2019-07-03 18:42:29 +02:00
918cdba723 missing from last commit 2019-07-03 18:42:01 +02:00
33dda8463d improved lookup or insert functions for map 2019-07-03 18:41:16 +02:00
b9fee1a5d7 return index when value was inserted before 2019-07-03 17:09:33 +02:00
9af1aa48ab remove unnecessary template parameter 2019-07-03 16:56:01 +02:00
d9277bf1c4 support storing multiple connected sockets per socket 2019-07-03 16:35:36 +02:00
5db4d8269e add multiple new elements to multimap 2019-07-03 16:33:53 +02:00
d037390cd2 iterate keys of multimap 2019-07-03 16:13:35 +02:00
011e88d03c convert linked list to array for further processing 2019-07-03 15:57:56 +02:00
29413c894b class to simplify querying bparticle node tree 2019-07-03 15:51:39 +02:00
b80000f073 rename BNodeTreeLookup to NodeTreeQuery 2019-07-03 15:36:32 +02:00
9c7ef45214 Use float3 instead of custom vector type in function system 2019-07-03 15:34:47 +02:00
bf55ab38d8 comment on llvm builder and types 2019-07-03 15:16:22 +02:00
2448312278 comment on tuple-call 2019-07-03 15:01:54 +02:00
8840be2fb9 Merge branch 'master' into functions 2019-07-03 11:19:24 +02:00
aaef6e6e3a comment on tuple 2019-07-02 18:38:06 +02:00
7a7592e615 comment on CPPTypeInfo 2019-07-02 18:01:06 +02:00
c347373fc6 Comment on SourceInfo, FunctionGraph and DataFlowGraphBuilder 2019-07-02 17:51:10 +02:00
32fdee4444 comment on data flow graph 2019-07-02 17:41:56 +02:00
f5358bc122 comment on Function class 2019-07-02 17:27:00 +02:00
9a9b1e1595 separate declaration from implementation for Function type 2019-07-02 17:11:20 +02:00
6e786c85ea comment on type system 2019-07-02 17:01:14 +02:00
49804947e9 separate declaration and implementation of methods of type 2019-07-02 16:42:20 +02:00
b22a82869c get rid of using TypeVector 2019-07-02 16:33:12 +02:00
4fcd92f624 Tuple now has a weak reference to its metadata to prevent synchronization overhead 2019-07-02 16:31:34 +02:00
d94d68afde parse very simple bparticles node tree 2019-07-02 16:09:56 +02:00
5481e5119b use multimap to more generally store socket origins 2019-07-02 15:31:01 +02:00
1a7507709f get number of values stored per key in multimap 2019-07-02 15:30:32 +02:00
a0cff9838a utility to get nodes with idname 2019-07-02 15:05:38 +02:00
deb642d2ec disable bmesh unit test due to linker errors that I cannot fix now 2019-07-02 15:01:22 +02:00
e0af39a0dc construct SmallVector from ListBase 2019-07-02 15:00:38 +02:00
7db1888bf2 move node tree lookup utilities to BKE 2019-07-02 14:15:20 +02:00
a4fd3f7cc4 store pointer to node tree in modifier data 2019-07-02 12:51:32 +02:00
33e09fe233 initial particle type and mesh emitter node 2019-07-02 12:40:01 +02:00
d41e65e44c rename function_nodes folder to nodes and add bparticles tree type 2019-07-02 12:13:16 +02:00
d5b0df396a various small improvements 2019-07-02 12:02:54 +02:00
940776370c Merge branch 'master' into functions 2019-07-02 09:13:37 +02:00
59d9310b28 initial point randomization accross surface 2019-07-01 17:45:21 +02:00
77d8f118ef avoid stepping when the emitter is moving quickly 2019-07-01 17:29:14 +02:00
2e2fab2f3b cleanup 2019-07-01 17:12:10 +02:00
145e061bce minor cleanup 2019-07-01 17:02:26 +02:00
05027c4d41 cleanup bounce code a little 2019-07-01 16:57:43 +02:00
d7e2e5f99d remove comments that are more confusing than helpful 2019-07-01 15:53:46 +02:00
ad516eda2f cleanup event handling code 2019-07-01 15:47:56 +02:00
6ae9324ada comment on time span 2019-07-01 15:40:22 +02:00
8a6a59d99e comment on particle block 2019-07-01 15:36:15 +02:00
7e2418a877 rename block.size() to block.capacity() 2019-07-01 15:26:28 +02:00
7afeb9775a rename inactive to unused to avoid confusion 2019-07-01 15:25:09 +02:00
f52ff92cc3 rename block.slice() to block.attributes_slice() 2019-07-01 15:21:01 +02:00
ab0c7b8485 rename block.slice_all() to block.attributes_all() 2019-07-01 15:19:24 +02:00
f67bb0ad35 rename block.slice_active() to block.attributes() 2019-07-01 15:16:12 +02:00
c74de0c2e9 comment on particles container 2019-07-01 15:14:39 +02:00
b9baffc59d Comment on AttributeArraysCore and AttributeArrays 2019-07-01 15:02:39 +02:00
eb3fc2c23a comments for AttributeInfo 2019-07-01 14:48:27 +02:00
468e2b8e66 cleanup extracting all particle positions 2019-07-01 14:14:02 +02:00
0de90d6f88 make sure event data is not overwritten by later events 2019-07-01 14:01:06 +02:00
50802c0e6c comment remaining api functions 2019-07-01 13:43:27 +02:00
00bde8527d more comments on api 2019-07-01 12:59:59 +02:00
ac57332ddf access current simulation time through accessor 2019-07-01 12:42:08 +02:00
eb2da8bc5a improve attribute interface 2019-07-01 12:39:02 +02:00
6f069a03d1 new integrator interface 2019-07-01 12:20:55 +02:00
4bdc04e8fb comment particle system api 2019-07-01 12:12:05 +02:00
37c0e0e6e9 cleanup: separate declarations from implementations 2019-07-01 11:42:15 +02:00
a8eb1d28db start cleaning up core.hpp 2019-07-01 11:24:22 +02:00
585d6a51c0 initial api for threading with thread local data
This does look quite ugly so far, but it is still better than doing it manually every time.
2019-07-01 11:08:00 +02:00
6335c3dee8 change threading api 2019-07-01 10:16:29 +02:00
6289393f7b initial c++ api for parallel processing on top of BLI_task 2019-07-01 09:57:34 +02:00
d65427ca94 Merge branch 'master' into functions 2019-07-01 09:37:12 +02:00
2c3d53cf7f minor changes 2019-06-30 15:59:47 +02:00
3c5f321639 fix indices errors 2019-06-30 15:51:18 +02:00
af46f07ef5 initial bounce test 2019-06-30 15:21:43 +02:00
b7b2849c82 initial event storage 2019-06-30 14:34:31 +02:00
ae346fb579 bring back old test setup 2019-06-30 14:07:58 +02:00
4fb660d036 rename run_actions to execute_events 2019-06-30 13:55:20 +02:00
27149c94ee rename EventAction to Event + interface name changes 2019-06-30 13:54:22 +02:00
2618c497c5 rename old Event to EventFilter 2019-06-30 13:49:18 +02:00
3c80e4bc92 code for testing 2019-06-30 13:47:20 +02:00
59e58328ec multithread deletion of tagged particles 2019-06-30 13:42:31 +02:00
c839b2b7b5 use Vector Adapator to simulate to next event 2019-06-30 13:29:01 +02:00
ea5a9c8ec0 use array allocator in simulate_with_max_n_events function 2019-06-30 13:11:26 +02:00
88f5ba087a remove last event times for now 2019-06-30 12:17:23 +02:00
749af6d36c enable threading again 2019-06-30 12:10:40 +02:00
b60dcf9765 store fixed array allocator per thread 2019-06-30 11:51:03 +02:00
8e6bdabb00 always display nanoseconds for now 2019-06-30 11:27:18 +02:00
eb78369271 initial usage of fixed array allocator in simulation 2019-06-30 11:16:14 +02:00
686fa5ca84 utility to allocate attributes from array allocator 2019-06-30 11:12:02 +02:00
0fd83de6c3 new fixed array allocator 2019-06-30 11:11:34 +02:00
80a84f7c11 remove some timers 2019-06-30 11:00:48 +02:00
aaf4b00ba1 test impact of manual vectorization (2x speedup) 2019-06-30 10:40:31 +02:00
2ec577c75e separate methods of integrator 2019-06-30 10:40:08 +02:00
2f91feeb03 allocate attributes at 64 byte aligned addresses 2019-06-30 10:37:49 +02:00
78362edb49 optimization when indices are trivial 2019-06-30 09:55:54 +02:00
1e45e1b6b2 don't check for events when there are none 2019-06-30 09:53:24 +02:00
0bbf940965 better timing statistics 2019-06-30 09:49:10 +02:00
d183496162 cleanup: pass events instead of particle type 2019-06-30 09:26:04 +02:00
b6e0a11e41 prepare simulation for optimizations 2019-06-30 09:22:28 +02:00
a8473ead9e new emitter for testing 2019-06-30 09:21:56 +02:00
ffb79ef037 support printing timings in nanoseconds 2019-06-30 09:04:54 +02:00
e9b83d74d2 cleanup 2019-06-29 16:19:12 +02:00
d53b5af637 refactor high level simulation code 2019-06-29 16:17:01 +02:00
5f7e8e6670 refactor simulation main entry point 2019-06-29 16:04:42 +02:00
ee16f26610 remove unnecessary use of smart pointers 2019-06-29 15:56:25 +02:00
c2e13a2f94 combine event and action 2019-06-29 15:51:38 +02:00
19dda33497 optimization for the case when particle indices are trivial 2019-06-29 15:36:51 +02:00
8dd4082b27 easy access of first and last element in array ref 2019-06-29 15:36:13 +02:00
d206062e10 implicitely convert SmallSetVector to ArrayRef 2019-06-29 15:11:22 +02:00
1d031a92a5 define attributes as part of particle type 2019-06-29 15:05:15 +02:00
425d620d57 more generic way to apply attribute offsets 2019-06-29 14:14:48 +02:00
f77dfe6e94 cleanup: rename to attribute_offsets 2019-06-29 13:48:59 +02:00
b65783941c separate integrator from simulation 2019-06-29 13:44:00 +02:00
0f26e99517 bring back loop to simulate n events 2019-06-29 13:08:48 +02:00
506b6d7df9 temporarily unrolled event loop 2019-06-29 12:53:19 +02:00
efd91c4701 integrate particles of entire block instead of a particle set 2019-06-29 12:29:06 +02:00
21dfdbc58b Merge branch 'master' into functions 2019-06-28 17:42:08 +02:00
7e767d0858 initial experimental vector adaptor data structure 2019-06-28 17:41:15 +02:00
3be92ce31b function to simulate a block 2019-06-28 16:41:18 +02:00
bb537df8d0 cleanup remove unused return parameter 2019-06-28 15:46:15 +02:00
3dbd8b81ba compute ideal offsets only once per particle per time step
I have to bring back simulating multiple events per particle now.
2019-06-28 15:43:50 +02:00
6c5a2fecf6 refactor: move computation of ideal offsets up 2019-06-28 15:33:56 +02:00
4c85e861ea refactor applying remaining particle offsets 2019-06-28 15:31:36 +02:00
b0f2b24160 cleanup 2019-06-28 15:12:42 +02:00
40f65055e3 loop only over particles with events instead of all 2019-06-28 14:58:18 +02:00
624794e006 float3 * scalar operator 2019-06-28 14:46:15 +02:00
a0fcdb0f98 extract method to compute current time per particle 2019-06-28 14:29:16 +02:00
035d92dd1a faster temporary random number function 2019-06-28 14:20:04 +02:00
a4a69e605c improve interface for killing particles 2019-06-28 14:11:06 +02:00
105353359c improve birth time handling in action interface 2019-06-28 13:49:47 +02:00
c500e94670 cleanup handling of birth times in emitters 2019-06-28 13:30:36 +02:00
d2e050e5e1 experimental explode action 2019-06-28 12:50:16 +02:00
485b07dc55 give action access to current time per particle 2019-06-28 12:30:50 +02:00
58452b095d initial test for spawning new particles in an action 2019-06-28 11:32:08 +02:00
788297480f split EmitTarget into EmitTargetBase and TimeSpanEmitTarget 2019-06-28 10:53:15 +02:00
fad7613963 simulate newly created particles until there are no new ones 2019-06-28 10:45:15 +02:00
b928475df0 separate partial simulation of new particles from emitters 2019-06-28 10:34:38 +02:00
2835c8df6f allow SmallVector to use ArrayRef 2019-06-28 09:59:32 +02:00
83a8f830c0 simulate particles of all types at the same time 2019-06-28 09:16:09 +02:00
7326d0a3f8 Merge branch 'master' into functions 2019-06-28 08:56:38 +02:00
17441b327b use one block allocator per thread instead of per block 2019-06-27 17:03:44 +02:00
700c2c823a keep track of newly allocated blocks 2019-06-27 16:21:29 +02:00
58253b535f make Block Allocator part of action interface 2019-06-27 15:41:25 +02:00
dd55ac9128 cleanup: remove unnecessary state parameter 2019-06-27 15:30:56 +02:00
878028d385 make it easier for emitters to specify birth moments 2019-06-27 15:07:39 +02:00
42d70c8152 emitter decides at which time individual particles are spawned 2019-06-27 14:29:26 +02:00
ab136cb188 size-value constructor for SmallVector 2019-06-27 13:59:18 +02:00
f2ed497129 initialize attributes with default values 2019-06-27 13:46:03 +02:00
e858f2e9ff thread safe block creation and deletion 2019-06-27 13:27:52 +02:00
551ae21bff use block allocator to allow muliple emitters to emit into the same block 2019-06-27 13:25:01 +02:00
2fa66f6f96 move function from header to cpp 2019-06-27 12:40:33 +02:00
8349161f14 refactor emitter interface internals
The problem previously was that all the information about which
blocks contain the attributes was not accessible by the emitter.
2019-06-27 12:36:47 +02:00
db8c116f5c remove request_raw function from public emitter interface 2019-06-27 11:21:59 +02:00
938bd0edc4 ParticleSet should know the block it is in 2019-06-27 11:13:48 +02:00
40a2f975dc Merge branch 'master' into functions 2019-06-27 10:02:07 +02:00
06fab69664 visualize different particle types with vertex colors 2019-06-26 18:18:38 +02:00
ddb44cefbd figure out how to add vertex colors to a new mesh 2019-06-26 15:58:32 +02:00
6ea4623ea1 ability to store attribute defaults in AttributeInfo 2019-06-26 15:34:57 +02:00
1d807a8399 Allow emitters to emit multiple types of particles 2019-06-26 14:46:44 +02:00
6704c82293 new ActionInterface class 2019-06-26 14:12:12 +02:00
333d82ebc0 remove unused variable 2019-06-26 12:52:08 +02:00
165580c661 Update attribute arrays based on which attributes are required 2019-06-26 12:51:58 +02:00
9728f45e89 particles container has responsibility to allocate attribute arrays again 2019-06-26 12:06:22 +02:00
2d7673578e comment out unused variables 2019-06-26 11:41:12 +02:00
6736ce6a03 Merge branch 'master' into functions 2019-06-26 11:34:08 +02:00
059639e301 new EventInterface abstraction 2019-06-24 12:37:27 +02:00
c2e4c7490f take reference to emitter interface 2019-06-24 09:47:30 +02:00
4b5a23b096 rename EmitterHelper to EmitterInterface 2019-06-24 09:44:14 +02:00
c5744593ec rename pindex_of to get_particle_index 2019-06-24 09:40:51 +02:00
b12daf64ca separate tuple from tuple-call 2019-06-24 09:38:54 +02:00
450d3be01f Merge branch 'master' into functions 2019-06-24 09:13:21 +02:00
7c4208f8a9 Merge branch 'master' into functions 2019-06-21 18:52:00 +02:00
5f0286302e Comment methods of ArrayRef and StringRef 2019-06-21 18:51:37 +02:00
da5f1dd8e5 comment methods of some more data structures 2019-06-21 18:41:04 +02:00
b247fc7d46 comments for methods of SmallVector 2019-06-21 18:12:07 +02:00
a19a5f8675 initial code layout for updating the required attributes 2019-06-21 16:56:19 +02:00
3a87096f24 allocate attributes arrays in AttributeArraysCore 2019-06-21 16:48:19 +02:00
8ee05156e6 simulate all particle types with description 2019-06-21 16:21:25 +02:00
098cb4ceaa cleanup copying ArrayRef to pointer 2019-06-21 16:12:16 +02:00
cf81da2547 refactor towards supporting multiple particle types 2019-06-21 16:03:30 +02:00
ab51c0e7dc initial particle type intermediate class 2019-06-21 15:10:23 +02:00
3e5fb5d83e fix using wrong length 2019-06-21 14:56:13 +02:00
d5bc8a6840 support point and tetrahedon mesh creation 2019-06-21 14:45:41 +02:00
db06b3a0b4 comment to note invariants of particle indices arrays 2019-06-21 14:14:34 +02:00
da1524fca8 new ParticleSet abstraction: attribute arrays + particle indices 2019-06-21 14:09:59 +02:00
5a31c30b5c transform emitter mesh to world space 2019-06-21 13:28:17 +02:00
cae29a0d9d transform collision rays to object space 2019-06-21 13:23:55 +02:00
c9958be749 initial mesh collision event 2019-06-21 12:53:51 +02:00
1294a9b5b4 generate tetraeders for particles 2019-06-21 12:02:27 +02:00
9f53e98472 minor cleanup 2019-06-21 11:32:55 +02:00
a7a6fe3ebc initial double event avoidance 2019-06-21 11:19:16 +02:00
5d590fc1bb extract method to simulate multiple events per step 2019-06-21 11:00:48 +02:00
e5fa7e58ba Merge branch 'master' into functions 2019-06-21 10:24:06 +02:00
f1369dd6ac bring back multithreading support 2019-06-20 15:49:49 +02:00
ad051d46aa don't inline simulation functions to make profiles more useful 2019-06-20 15:20:55 +02:00
a29da3be76 remove outdated simulation code 2019-06-20 15:17:23 +02:00
82c4bdc6d0 move events and actions to separate files 2019-06-20 15:16:57 +02:00
f0cca10248 use mesh surface emitter again 2019-06-20 15:05:08 +02:00
0bf6fa4729 test multiple events 2019-06-20 14:56:42 +02:00
9c7c2d0de3 support for multiple events per particle per time step 2019-06-20 14:34:09 +02:00
0886cdb1fe support killing particles again 2019-06-20 14:23:39 +02:00
c7b1129e77 bring back event handling 2019-06-20 13:57:32 +02:00
bcc877e180 compress blocks after each simulation step 2019-06-20 12:51:07 +02:00
2a9316d33c actually free emitters etc. 2019-06-20 12:44:07 +02:00
831d5665b0 apply forces to particles again 2019-06-20 12:36:23 +02:00
cfb18bb6c3 Pass particle influences into the right functions 2019-06-20 12:21:30 +02:00
dd8d2517d6 separate emitters from particle influencers 2019-06-20 12:16:43 +02:00
5561684337 support emitting particles again 2019-06-20 12:10:07 +02:00
f7cca29528 bring back creating the combined positon array 2019-06-20 11:18:54 +02:00
c8bf758a9a restructure solver api
Now I have to bring back all the functionality that was there already.
2019-06-20 11:04:45 +02:00
c74934cbf9 remove abstractions that are wrong for now 2019-06-20 10:17:09 +02:00
10fe6f6037 Merge branch 'master' into functions 2019-06-20 09:43:01 +02:00
05969e5418 initial curve emitter 2019-06-19 12:24:20 +02:00
0a7715e308 move forces into separate file 2019-06-19 11:06:23 +02:00
3138c7c5d7 rename files 2019-06-19 10:39:02 +02:00
3134c78661 remove turbulence force to have less distorted profiles 2019-06-19 10:34:30 +02:00
20c7fa6bcc extract temporary method for old particle deletion 2019-06-19 10:34:08 +02:00
d43d28a348 avoid creating the same arrays many times 2019-06-19 10:29:58 +02:00
5554851f15 refactor moving particles to next event time 2019-06-18 18:23:10 +02:00
ae80a416bd extract methods to simulate to next event vs. to next frame 2019-06-18 16:45:18 +02:00
7b15ec8713 Integrate particles again after an event 2019-06-18 16:22:05 +02:00
647503ec47 remove specialized step function for new particles 2019-06-18 15:18:31 +02:00
7629b86581 use indices mask to update only certain particles 2019-06-18 15:02:59 +02:00
913e130897 naming cleanup 2019-06-18 14:26:57 +02:00
de5971b1df initial positional event abstraction 2019-06-18 14:21:35 +02:00
d600fb3a45 more explicit particle integration step 2019-06-18 14:02:32 +02:00
17bff65c6b Use multithreading when moving particles forward
Timings in my current test file (nanoseconds per particle per time step):
* Debug Build: 150ns
* Optimized Build: 47ns
* With threading: 9ns
2019-06-18 12:35:22 +02:00
962a64aaaa restructure simulation steps in solver 2019-06-18 12:03:46 +02:00
5d08ae535a Utility to convert SmallSet to SmallVector 2019-06-18 12:03:15 +02:00
dd856ee973 Cleanup: reorder some functions 2019-06-18 11:49:15 +02:00
e8e94a6800 Allow emitters to emit into separate buffers 2019-06-18 11:46:14 +02:00
14125d2652 minor emitter API improvement 2019-06-18 10:05:16 +02:00
155c1de9ad improved particle attribute handling 2019-06-17 15:52:04 +02:00
8482ee2be9 utilities to create a range before/after another 2019-06-17 15:51:06 +02:00
270f4cb1f0 SmallVector: Append N Times 2019-06-17 15:13:19 +02:00
125ff9f320 initial mesh surface emitter 2019-06-17 12:16:41 +02:00
e8ecbf3a42 Emit from other objects origin 2019-06-17 11:19:26 +02:00
b010464151 simple point emitter 2019-06-17 10:59:04 +02:00
e77d269088 Merge branch 'master' into functions 2019-06-17 10:14:23 +02:00
dd201e3fc3 Merge branch 'master' into functions 2019-06-13 11:31:10 +02:00
4faf2de83a initial particle action abstraction 2019-06-10 12:23:15 +02:00
aa05731607 compute new positions and velocities in separate buffer 2019-06-10 12:05:28 +02:00
81eecb252a cleanup naming 2019-06-10 12:04:16 +02:00
97ecf23069 ArrayRef.copy_from 2019-06-10 12:03:29 +02:00
8e3178e1f2 use NamedBuffers in more places 2019-06-10 11:11:32 +02:00
2d73ff2380 rename buffer accessors 2019-06-10 11:07:40 +02:00
c49ca5c99f rename Vec3 to float3 2019-06-10 10:53:36 +02:00
b5fda893ce add byte attribute type 2019-06-09 13:51:37 +02:00
bcc8a07fd3 experimental turbulence force 2019-06-09 13:18:55 +02:00
5da27a41c1 improve naming 2019-06-09 12:59:41 +02:00
da1eb092eb flag killed particles in step function 2019-06-09 12:55:26 +02:00
93e38f5f6b cleanup stepping a slice of particles 2019-06-09 12:45:24 +02:00
4ffc3c46a1 partial step newly emitted particles 2019-06-09 12:37:21 +02:00
a38b89ecb5 initial emitter info class 2019-06-09 11:58:00 +02:00
270cee3d4a fix old particle removal 2019-06-08 14:02:51 +02:00
dc26770356 keep track of time since simulation start 2019-06-08 14:00:24 +02:00
a4de314d20 ArrayRef take_front and take_back methods 2019-06-08 13:55:21 +02:00
c77945366c pass elapsed seconds into step function 2019-06-08 13:39:49 +02:00
f693a5b66d automatically initialize attributes the emitter does not care about 2019-06-08 13:30:33 +02:00
c76ed1781b method to fill an ArrayRef 2019-06-08 13:28:35 +02:00
941159fba5 emitter can decide which attributes it initializes 2019-06-08 12:59:04 +02:00
e3d3d2eec7 introduce concept of particle block slices 2019-06-08 12:38:30 +02:00
3fd4418cfd fix lazy init unit test 2019-06-08 12:37:49 +02:00
c0b36372d0 easy access last element in vector 2019-06-08 12:37:39 +02:00
3c04bdbddb cleanup naming and implement some destructors 2019-06-08 11:54:45 +02:00
17804e4ecb experiment with an emitter abstraction 2019-06-07 23:12:35 +02:00
dbc50aa156 initial deletion or particles and compression of blocks 2019-06-07 22:43:29 +02:00
c2fa4a33fa test NamedBuffersRef abstraction to separate components
More specifically this separates implementation details of
Forces and ParticleBlocks.
2019-06-07 18:07:54 +02:00
9351db7146 work-in-progress functions to compress a set of particle blocks 2019-06-07 17:50:33 +02:00
4c0e7a285a initial particles container 2019-06-07 17:18:18 +02:00
d0cbd39310 initial force implementation 2019-06-07 15:53:48 +02:00
2c519ceb63 simple Vec3 type 2019-06-07 15:53:12 +02:00
2bcf091ba9 control simulation with some properties 2019-06-07 15:13:11 +02:00
80ec80cb83 don't reset simulation when pausing playback 2019-06-07 12:34:15 +02:00
ed02e1d252 cleanup interface to solver 2019-06-07 12:30:39 +02:00
d3013152ce little bit more interesting particle movement 2019-06-07 12:24:28 +02:00
3d797d0070 splitup bparticles code into multiple files 2019-06-07 12:17:22 +02:00
41cbcf96e9 try a different approach to connect state to solvers 2019-06-07 12:00:02 +02:00
01196be661 initial particle system api test
Still not happy with the way solver-dependent state is handled.
2019-06-07 11:04:01 +02:00
741ed59745 very simple particles state reset logic 2019-06-06 17:43:23 +02:00
b61fce82f9 more consistent naming in C wrappers 2019-06-06 11:33:46 +02:00
c5850f6ef1 use runtime data in modifier 2019-06-06 11:21:31 +02:00
56a0a71649 new simulations folder with some test code 2019-06-06 10:42:01 +02:00
6f728beec9 Merge branch 'master' into functions 2019-06-06 10:10:35 +02:00
6262b2bf7c initial empty particle nodes modifier 2019-06-05 10:28:26 +02:00
0387abd20f better explanation for lazy-init macros 2019-06-05 10:05:27 +02:00
473b79b4c2 remove unused include 2019-06-05 09:58:01 +02:00
6ffab86a4d simplify naming for lazy init macros 2019-06-05 09:56:25 +02:00
63c4712450 lazy init: thread safe registration and utility to list all 2019-06-05 09:47:27 +02:00
4df64a4393 improve move semantic usage in BLI::Optional 2019-06-04 18:14:37 +02:00
6ac4a72b28 free cached vectorized functions 2019-06-04 18:05:15 +02:00
77df7c61e6 Destruct lazy initialized objects when Blender quits 2019-06-04 17:38:05 +02:00
b8cb48b630 Merge branch 'master' into functions 2019-06-04 16:31:37 +02:00
a5413ba0f8 sort includes 2019-05-28 15:18:19 +02:00
5ea27e3d14 cleanup SmallVector 2019-05-28 15:14:20 +02:00
a34761afc0 Reduce wasted space in Function class
This is achieved by storing strings in a single buffer instead
of using `std::string`, which does small object optimization
for every string individually. This optimization can be done
because all strings are known when the function is build and
don't change later on.
2019-05-28 12:11:11 +02:00
5c72fb6a34 implement == operator for StringRef 2019-05-28 11:42:53 +02:00
3913b81f9e construct StringRefNull from pointer and length 2019-05-28 11:15:50 +02:00
a02cf6a05b Merge branch 'master' into functions 2019-05-28 10:53:36 +02:00
68174cf0b2 Merge branch 'master' into functions 2019-05-23 17:27:26 +02:00
cbb8bd467b better cross platform exponent computation 2019-05-22 17:31:43 +02:00
8c37c378a4 more assertions in ArrayLookup 2019-05-22 17:21:12 +02:00
e59d0263ba create ArrayRef from std::vector and std::array 2019-05-22 17:11:09 +02:00
dac0f4864d cleanup SmallMap 2019-05-22 17:00:10 +02:00
28887080a5 ArrayRef constructor for SmallSet 2019-05-22 16:41:53 +02:00
3ab2a2af29 correct small object optimization for sets and maps 2019-05-22 16:37:07 +02:00
d5b707b6fb improve SmallStack class 2019-05-22 16:22:47 +02:00
9ec8e308e7 more efficient small vector extend 2019-05-22 16:16:34 +02:00
b3283176a0 fix memory leaks in unit tests 2019-05-22 16:05:01 +02:00
24c3b57ec3 remove unused StringCollection 2019-05-22 15:53:15 +02:00
7863cf89de cleanup ScopedTimer 2019-05-22 15:41:20 +02:00
900e7f6352 Merge branch 'master' into functions 2019-05-22 15:31:28 +02:00
bddc6999b0 support for caching auto vectorized functions 2019-05-20 11:19:06 +02:00
357fa4a5ba equality operator for functions 2019-05-20 11:07:41 +02:00
0338da1063 smallmap: lookup or insert using key function 2019-05-20 11:07:23 +02:00
341b078d91 allow creating small vector with different size from array ref 2019-05-20 11:06:53 +02:00
d8d6f2a521 smallmap: lookup or insert using callback 2019-05-20 10:55:15 +02:00
92a3a4e029 speedup when all types in tuple meta are trivially destructible 2019-05-20 09:51:33 +02:00
0b63963c5a llvm vectors are not stored as struct anymore 2019-05-20 09:42:29 +02:00
a10f336346 Merge branch 'master' into functions 2019-05-20 09:36:28 +02:00
1bde9ab004 remove signature and paramter classes 2019-05-17 12:02:22 +02:00
ffeea91347 don't use signature in function anymore 2019-05-17 11:59:40 +02:00
e0032e8446 remove more dependencies on signature and parameter types 2019-05-17 11:46:31 +02:00
d6eb9668a0 move more signature logic into function 2019-05-17 11:18:30 +02:00
3bc03102d8 Merge branch 'master' into functions 2019-05-17 11:11:49 +02:00
3cddf75818 use StringRef and ArrayRef in more places 2019-05-16 12:02:57 +02:00
9d92456c88 use ArrayRef in more places 2019-05-16 11:52:56 +02:00
9107197320 use ArrayRef in more places 2019-05-16 11:46:39 +02:00
0a66b12776 less usage of InputParameter and OutputParameter type 2019-05-16 11:40:12 +02:00
9de7d3fa45 use new FunctionBuilder instead of creating Signature manually 2019-05-16 10:46:57 +02:00
3f82445d43 windows build fix 2019-05-16 10:15:21 +02:00
eb74be102e Rename StridedArrayRef to MappedArrayRef 2019-05-15 18:03:08 +02:00
836a780649 Merge branch 'master' into functions 2019-05-15 17:55:11 +02:00
8ab87c1998 initial StringCollection class 2019-05-15 17:16:47 +02:00
39d4e0182c use string ref in llvm ir builder 2019-05-15 11:39:25 +02:00
23c1b1edc8 deduplicate string ref code 2019-05-15 11:38:06 +02:00
13e06e7670 use string ref in more places 2019-05-15 11:22:50 +02:00
6dedb028d8 use string ref in more places 2019-05-15 11:17:20 +02:00
3b6bed43cd use string ref for type names 2019-05-15 11:10:02 +02:00
92c1d9044c new StringRefNull class 2019-05-15 11:00:07 +02:00
6e4866465d initial StringRef class 2019-05-15 10:49:38 +02:00
dbced1d563 Merge branch 'master' into functions 2019-05-15 10:16:35 +02:00
4b6799394f Some documentation for the C++ data structures in BLI 2019-05-13 18:38:37 +02:00
f7fd87d9d2 Merge branch 'master' into functions 2019-05-13 10:05:30 +02:00
3cb181ffe0 utilities to access function parameters 2019-05-12 20:25:49 +02:00
f959f4d2b2 use ArrayRef in more places 2019-05-12 20:07:16 +02:00
f2e5ed0e34 missing from last commit 2019-05-12 20:04:36 +02:00
38531114f7 initial support for defaults when using auto vectorization 2019-05-12 20:04:16 +02:00
4a2193927d improve ArrayRef 2019-05-12 19:47:46 +02:00
a2ef8e34d5 support different list lengths in llvm vectorization 2019-05-12 17:53:41 +02:00
ec2c1e54ed print with stacktrace from IR 2019-05-09 13:20:29 +02:00
d9c7df2492 put current loop iteration on stack 2019-05-09 13:02:41 +02:00
9f6e0a74cb float comparison IR 2019-05-09 12:43:58 +02:00
192b5e9cfb simplify usage of construct builders 2019-05-09 12:29:00 +02:00
e0c2784327 support for calling printf from llvm ir 2019-05-09 12:23:12 +02:00
9880a1b366 printing from Ir cleanup 2019-05-09 10:57:30 +02:00
6151808f1b initial if then else construct helper 2019-05-09 10:45:07 +02:00
989c2691ac improve ir loop constructs 2019-05-09 10:31:22 +02:00
5fe4ad93bc more specialized iterations loop builder 2019-05-09 10:20:24 +02:00
dbb52fec27 initial for loop builder helper 2019-05-09 09:51:45 +02:00
6df353d805 Merge branch 'master' into functions 2019-05-08 18:06:43 +02:00
bbb3770be2 speedup size constructor of small vector 2019-05-03 12:42:50 +02:00
49131279ee generate more readable IR 2019-05-03 12:39:21 +02:00
c1267d9e01 allow passing function pointer name 2019-05-03 12:18:35 +02:00
4cd8792882 cleanup code builder interface 2019-05-03 12:16:00 +02:00
6ad32d6675 create llvm wrapper function for calls to pointers 2019-05-03 12:09:40 +02:00
4390091f8b utility to create a float constant 2019-05-03 11:38:33 +02:00
2a957e405d cleanup small vector 2019-05-03 11:37:58 +02:00
c38b9e12b2 Merge branch 'master' into functions 2019-05-03 10:43:49 +02:00
2a87cfd809 allocate function bodies within function 2019-05-02 11:39:42 +02:00
0ca57c14af rename extend to add_extension 2019-05-02 11:21:52 +02:00
5d4bf32c40 allocate type extensions in type directly
This makes sense, since every extension is owned
by a Type object. Also this improves thread safety.
2019-05-02 11:19:05 +02:00
9deeb8eb22 use centralized pool to reuse llvm contexts 2019-05-02 10:48:30 +02:00
676918e7a1 Merge branch 'master' into functions 2019-05-02 10:16:52 +02:00
6e652a42fc splitup llvm vectorization into multiple methods 2019-05-01 19:26:51 +02:00
640a744d54 start simplifying automatic vectorization 2019-05-01 19:12:04 +02:00
1ab8b7f658 move c functions to access lists to lists.cpp 2019-05-01 18:26:42 +02:00
28051e2754 rerun clang format on functions folder 2019-05-01 18:01:03 +02:00
bde00c4aed Merge branch 'master' into functions 2019-05-01 17:59:27 +02:00
576243ba39 Initial automatic function vectorization with llvm 2019-05-01 15:27:00 +02:00
f09f8ad61f move slicing functionality to ArrayRef 2019-05-01 11:39:05 +02:00
034639a877 initial vector slicing API 2019-05-01 10:57:26 +02:00
fd5d972efb Merge branch 'master' into functions 2019-05-01 10:20:10 +02:00
ffe0796c41 use first-class llvm vector for Vector type 2019-04-30 13:58:13 +02:00
e8e0e7bc69 rename SimpleLLVMTypeInfo to PackedLLVMTypeInfo 2019-04-30 12:48:44 +02:00
dc2979a942 cleanup LLVMBool type info 2019-04-30 12:42:26 +02:00
2524a5e509 new TrivialLLVMTypeInfo to simplify creating other types 2019-04-30 12:35:19 +02:00
45271f785a clear cached node states on file load 2019-04-30 12:07:20 +02:00
f5d0dbed20 move btree lookup class to separate file 2019-04-30 11:57:38 +02:00
3b00f6625c Merge branch 'master' into functions
This also removes dependency creation for function drivers
(due to merge conflicts that I could not resolve yet).
2019-04-30 10:55:36 +02:00
d1aa60da80 Merge branch 'master' into functions 2019-04-29 11:42:58 +02:00
0e0495cf32 Merge branch 'master' into functions 2019-04-29 10:52:11 +02:00
8f70d4986e splitup forwarding function 2019-04-28 21:15:43 +02:00
6c1e5d7f34 extract method that ensure all inputs 2019-04-28 19:30:39 +02:00
1aa827d496 extract method that ensures required inputs 2019-04-28 19:23:59 +02:00
b287de4e68 deduplicate stack setup code 2019-04-28 19:20:24 +02:00
f16e64435f deduplicate some code 2019-04-28 19:15:57 +02:00
26ce24b928 better type names 2019-04-28 19:12:26 +02:00
e80d9a5391 destruct unused values as early as possible 2019-04-28 18:56:16 +02:00
f48b9823a4 deduplicate code to setup tuples 2019-04-28 18:45:09 +02:00
1242de1b6d deduplicate some code 2019-04-28 18:38:47 +02:00
64210d6682 simplify stack info setup 2019-04-28 18:33:36 +02:00
049d66aa80 initial support for lazy inputs in new fgraph evaluation 2019-04-28 18:25:29 +02:00
da3d297b3f subscript operator for range 2019-04-28 17:50:44 +02:00
7b75b665d3 group node info into a struct 2019-04-28 15:06:23 +02:00
c9eb9f4ad1 fix error in last merge 2019-04-28 14:49:59 +02:00
df0b4a4d0e Merge branch 'master' into functions 2019-04-28 14:42:08 +02:00
c27bbb3eca use more correct type name 2019-04-27 23:59:33 +02:00
3f6357b970 initialize llvm for tests 2019-04-27 23:40:53 +02:00
93dea8967d unit test for Float Range function 2019-04-27 23:29:33 +02:00
5b6dde93e9 initial unit test for functions system 2019-04-27 23:18:14 +02:00
1db1ac121a reduce likelyhood for heap allocation in fgraph evaluation 2019-04-27 22:32:11 +02:00
b76f54e540 splitup graph evaluation in three parts 2019-04-27 22:23:23 +02:00
d01cc80b08 move more into the value storage abstraction 2019-04-27 22:16:28 +02:00
76c3bd772e move value storage into separate struct 2019-04-27 22:03:04 +02:00
e0531b4338 use macro for pointer offset 2019-04-27 20:21:41 +02:00
05985d98ff put values in a struct that are accessed together 2019-04-27 20:15:58 +02:00
833cdfdd0c remove unused socket flag 2019-04-27 19:58:30 +02:00
21f1e501a7 do less unnecessary data copies 2019-04-27 19:49:33 +02:00
bbede5b3bd copy computed value to fn_out immediatly 2019-04-27 19:34:49 +02:00
bae0d22e06 make it optional to run value destructors when tuple is destructed 2019-04-27 17:04:55 +02:00
eece95823c multipool tried to deallocate the wrong pointer 2019-04-27 12:55:07 +02:00
9ca8b7a444 initial non recursive evaluation of new data flow graph 2019-04-27 12:48:04 +02:00
a9efbd6bcd utility set functions 2019-04-27 12:21:13 +02:00
04a4f1aa4d extract ensure tuple calls function 2019-04-27 10:24:43 +02:00
ad168871b1 dot export for new data flow graph 2019-04-27 10:01:36 +02:00
4346e88286 Split up the data flow graph data structure
The main goal is to be able to traverse the graph very efficiently
once it is build. This is hard when the structure has to be dynamic
(i.e. it can be changed). The solution is to use a builder that
can dynamically construct the graph. Once everything is set up,
the graph is converted into the compact form for further use.
2019-04-26 19:21:28 +02:00
ccc4285dee Merge branch 'master' into functions 2019-04-26 17:09:11 +02:00
a8bc2fc2b7 Merge branch 'master' into functions 2019-04-25 09:57:14 +02:00
81b9187dda Merge branch 'master' into functions 2019-04-24 09:22:11 +02:00
844745da77 Simple range iterator with tests 2019-04-19 13:56:49 +02:00
34fda46a3e produce lookup statistics for map and set 2019-04-19 11:19:23 +02:00
866e9c31e9 socket builder utility function 2019-04-19 10:34:22 +02:00
6a7efc26bd support conversions in all directions between bool, int and float 2019-04-18 11:25:20 +02:00
12904214d1 update inferencing to new type rules 2019-04-18 11:01:17 +02:00
9b3e36f6c4 concept of conversion groups in type system 2019-04-18 10:42:39 +02:00
7178267f20 start using a better defined type system 2019-04-18 10:19:30 +02:00
2141478180 implicit conversions between float and integer lists 2019-04-18 09:42:29 +02:00
5333710282 Merge branch 'master' into functions 2019-04-18 09:13:01 +02:00
8c6457820b bring back llvm include dirs 2019-04-17 11:10:51 +02:00
bd54f55f3a add bf_functions to LIB 2019-04-17 11:00:22 +02:00
2213234715 Merge 'master' into 'functions' 2019-04-17 10:28:33 +02:00
9e1d43367c Merge 'master' into 'functions' 2019-04-17 10:26:56 +02:00
06a966ebe7 Merge 'master' into 'functions' 2019-04-17 10:25:47 +02:00
d348a27380 improved reuse of dummy slots in array lookup 2019-04-15 15:33:56 +02:00
b07b7d0a63 deduplicate some array lookup code 2019-04-15 15:03:23 +02:00
5d83b59751 splitup tests for set and set_vector 2019-04-15 14:48:07 +02:00
9bd835e1fb don't use linear search in SmallSetVector 2019-04-15 14:31:18 +02:00
4687f961f0 remove refcount class that is not used anymore 2019-04-15 14:26:16 +02:00
6615900384 pack list declaration handles implicitely convertable types 2019-04-15 10:39:05 +02:00
955dc9f977 add LIB to CMakeLists.txt 2019-04-15 10:33:39 +02:00
a628f1842b Merge branch 'master' into functions 2019-04-15 10:24:47 +02:00
158425fc61 use a multimap data structure to store links of output sockets 2019-04-11 13:47:01 +02:00
f92bc17cb3 utility to count the number of times an output socket is used 2019-04-08 18:57:01 +02:00
7e2f02b019 more generic function to find relevant sockets in a function graph 2019-04-08 18:35:58 +02:00
45917d435d utility functions for set and map 2019-04-08 18:34:35 +02:00
e352d7d3ca new Float Range node 2019-04-08 17:29:04 +02:00
750d47e4d9 fix inferencing of vectorized nodes 2019-04-08 17:06:11 +02:00
db03f3399c fix probing function 2019-04-08 17:03:24 +02:00
54d4464a29 remove "small" from some type names 2019-04-08 16:13:44 +02:00
5a1279fdce faster adding to array lookup 2019-04-08 16:01:16 +02:00
6742728ff1 don't use llvm fgraph execution for now 2019-04-08 12:39:03 +02:00
338d84676f cleanup array lookup structure 2019-04-08 12:35:30 +02:00
b26a74c470 method to pop item from map 2019-04-07 20:22:06 +02:00
d866113089 End all files with a newline 2019-04-07 19:44:27 +02:00
76a1e9bdb8 Merge branch 'master' into functions 2019-04-07 17:21:30 +02:00
f6f8323082 Fix Sin operation in Float Math node
The patch only fixed the python part. I added the c++ part.

Differential Revision: https://developer.blender.org/D4658
2019-04-07 17:17:29 +02:00
0f1b4d7c38 Use actual hash tables instead of linear search
The hash functions themselves are not optimized yet.
2019-04-07 17:01:31 +02:00
6f96045c2f rename ptr to rna to avoid confusing with actual pointers 2019-04-07 00:01:41 +02:00
9e8babf885 vectorize Float Math node 2019-04-06 23:54:06 +02:00
ece895e7d5 remove some redundency 2019-04-06 23:43:35 +02:00
be53a35ad3 allow lazy tuple call in fgraph ir generation 2019-04-06 23:42:57 +02:00
e38e04e9af cleanup vectorized node inserters 2019-04-06 23:24:12 +02:00
44d8980780 cleanup and vectorize Vector Math node 2019-04-06 23:07:12 +02:00
5ea3eca380 use function name prefix for inserters 2019-04-06 22:50:20 +02:00
954b2de3d5 improve method names 2019-04-06 22:42:52 +02:00
28f239a384 remove BuilderContext 2019-04-06 22:27:58 +02:00
decd4d8ecf rename Builder to GraphBuilder 2019-04-06 22:13:24 +02:00
d3b807ff02 move BuilderContext into Builder 2019-04-06 22:08:13 +02:00
87b472e1f6 use common prefix for type getters 2019-04-06 21:48:43 +02:00
586210c437 use common prefix for function getters 2019-04-06 21:44:10 +02:00
b4a3d036a9 cleanup auto vectorization function 2019-04-06 21:18:08 +02:00
49553de662 vectorized Separate Vector node 2019-04-06 21:06:06 +02:00
59116b27ea Merge branch 'master' into functions 2019-04-06 18:52:37 +02:00
c251ddeafc simplify execution stack management 2019-04-06 18:46:42 +02:00
362f8ec767 remove debug print 2019-04-06 18:14:26 +02:00
66e4eb795d higher level macro for tuple allocation 2019-04-06 18:12:48 +02:00
05e3ee5ae6 automatically destruct stack allocated tuples in c++ 2019-04-06 18:05:34 +02:00
5296f03f9f initial generic automatic vectorization, used in Combine Vector node 2019-04-06 17:21:07 +02:00
acbfda0c6b Implicit conversion from individual elements to lists 2019-04-06 15:23:17 +02:00
7c5cf3fd79 vectorized output sockets don't need a property 2019-04-06 14:58:29 +02:00
84670db6ea List Length node and fail early when socket types don't match 2019-04-06 12:00:35 +02:00
2e2f289d25 Vectorization support for Node UI 2019-04-06 11:05:40 +02:00
1456a030f4 initial IR for vector addition 2019-04-05 19:31:11 +02:00
0f42dd82ac new Vector Math node 2019-04-05 18:57:31 +02:00
cb158219e0 Generate LLVM IR for Mul and Sin 2019-04-05 18:44:01 +02:00
6fa863f6d9 Sin operation in Float Math node 2019-04-05 12:45:11 +02:00
3273d6be58 remove notes and unused variable 2019-04-05 12:31:34 +02:00
4a3720740d use the socket name directly, instead of a getter function 2019-04-05 12:29:07 +02:00
52ff44d02c Validate more aspects of the node tree while syncing 2019-04-05 12:10:30 +02:00
23a8864669 Splitup C API for separate components in different files 2019-04-05 11:32:34 +02:00
072fbb030a fix for reroute nodes 2019-04-04 17:53:37 +02:00
2865ca6fb6 Merge branch 'master' into functions 2019-04-04 17:49:29 +02:00
c789c5288d Fix: print python error message if there is one 2019-04-04 14:29:52 +02:00
dd5c352af5 More robust node tree update after changes
This implements a tree wide synching procedure, that corrects
all invalid things it can find. Also, trees are updated in
the correct order, when they depend on each other.
2019-04-04 14:26:20 +02:00
8675779372 Merge branch 'master' into functions 2019-04-03 19:01:49 +02:00
6ce1e30539 Merge branch 'master' into functions 2019-04-03 18:26:41 +02:00
4e84ea3da0 Merge branch 'master' into functions 2019-04-03 15:19:27 +02:00
2a8c7b8230 use cache to avoid building the same function ir twice 2019-04-03 11:55:11 +02:00
bcb6fa6e51 use better socket names in conversion to functions 2019-04-03 11:13:52 +02:00
ac7107df7c better socket name accessor function 2019-04-03 10:25:11 +02:00
d9097f7484 initial automatic update of call node 2019-04-03 10:05:26 +02:00
c1ba8dcd85 Fix 2019-04-02 12:35:49 +02:00
118ce79baf initial reroute support in graph conversion 2019-04-02 12:30:45 +02:00
6e78ef3ce5 initial support for reroutes in the ui 2019-04-02 11:29:31 +02:00
40d37cc8a0 Fix Get List Element node 2019-04-01 13:52:15 +02:00
9b2f1c0b38 fix modifier definition 2019-04-01 13:51:55 +02:00
212014e0d2 Merge branch 'master' into functions 2019-04-01 12:23:44 +02:00
7ace279696 cleanup pack list node converter 2019-04-01 10:42:13 +02:00
62059b465f improve Pack List node UI 2019-04-01 10:32:54 +02:00
c7447b51bd Pack List nodes have two inputs by default 2019-04-01 10:27:50 +02:00
02765a86cc create pack list node if certain type from search 2019-04-01 10:20:19 +02:00
62f4467a49 simple operators to create new function trees from modifier 2019-04-01 10:11:56 +02:00
25e1a10de6 type extension base class 2019-03-29 15:57:24 +01:00
7b210749bb simple operator to setup new function trees 2019-03-29 14:11:37 +01:00
b9a4ff5d38 Refactor node socket declaration 2019-03-29 13:56:14 +01:00
166e05b6ed store node in declaration 2019-03-29 09:53:36 +01:00
b958410308 cleanup 2019-03-29 09:39:12 +01:00
9f3ffe53bd name some virtual registers 2019-03-28 19:55:58 +01:00
b0f77c11d1 utility functions to optimize and print generated code 2019-03-28 19:55:44 +01:00
6af5d940db cleanup 2019-03-28 18:17:34 +01:00
bd480232ee remove LLVMCompiledBody 2019-03-28 18:09:46 +01:00
8259f92110 don't cache llvm type per context 2019-03-28 17:48:41 +01:00
6304ecbb06 ability to turn stack maintance on and off 2019-03-28 17:39:14 +01:00
40c12c675f move execution context pointer through llvm 2019-03-28 17:25:29 +01:00
b60be30ed5 cleanup pointer calls 2019-03-28 16:30:48 +01:00
cdf4591edb Improve interface of IR generators and wrap IRBuilder<> 2019-03-28 12:47:29 +01:00
c7bf98a186 push initial function caller information on execution stack 2019-03-28 09:50:12 +01:00
031bc7ca2d Use Vector List in Function Points modifier 2019-03-27 12:18:25 +01:00
721581c366 fix 2019-03-27 12:16:45 +01:00
925b0b732c show problems in separate problems panel 2019-03-27 11:36:26 +01:00
65ee9b6233 cleanup 2019-03-27 10:34:32 +01:00
439fdfcda7 initial ability to show warning messages in nodes 2019-03-27 10:30:55 +01:00
80a994776b use multi mempool for source information 2019-03-26 17:34:41 +01:00
aebddd0ed6 initial multi mempool 2019-03-26 17:34:12 +01:00
1a8bc27052 Use Blender's guarded allocators 2019-03-26 16:56:23 +01:00
0b2baaab1a missing include guards 2019-03-26 16:55:05 +01:00
895f68c8b2 fix panel idname 2019-03-26 11:28:59 +01:00
f0524205d6 Merge branch 'master' into functions 2019-03-26 11:23:05 +01:00
a90dca0ff5 also keep track of link sources 2019-03-26 11:20:33 +01:00
c23e2becdc print with traceback utility 2019-03-26 11:00:08 +01:00
72593ecaed cleanup 2019-03-26 10:51:49 +01:00
6b72c23e0a data flow graph manages source info allocation 2019-03-26 10:45:50 +01:00
024247797f keep track of original nodes 2019-03-26 10:33:10 +01:00
de7094a930 new SourceInfo class to keep track of where functions come from 2019-03-26 10:02:57 +01:00
9539b402b8 initial Execution Stack 2019-03-26 09:52:14 +01:00
8b777f5acf function should not be copied 2019-03-26 09:51:38 +01:00
9295e3bdde pass (currently empty) execution context into tuple call 2019-03-26 09:31:23 +01:00
bf8a98ffc5 experimental lazy fgraph evaluation 2019-03-25 09:57:44 +01:00
20e12025ea Merge branch 'master' into functions 2019-03-24 18:41:02 +01:00
9421bf6655 initial body type for lazy input evaluation 2019-03-24 18:40:23 +01:00
d79805e1db cleanup classes that are used in a composition 2019-03-24 17:29:06 +01:00
13ef2b1065 remove special type info for lists 2019-03-24 17:03:07 +01:00
f463cfb4c9 fix 2019-03-24 16:38:50 +01:00
c3a3b2e9b1 new Switch node 2019-03-24 16:16:59 +01:00
28a1b801b1 new Boolean type 2019-03-24 16:14:25 +01:00
b033626948 experimental byte code interpreter for function graph 2019-03-24 13:52:44 +01:00
0c15bc41b0 better naming 2019-03-24 13:52:14 +01:00
d819361cc5 simplify allocating tuple in prepared buffer 2019-03-24 11:31:33 +01:00
dc171b2a3e non recursive method to find required sockets 2019-03-24 10:41:01 +01:00
e77a8b97e1 initial support for calling subprograms 2019-03-22 11:57:03 +01:00
cf72da183d fail early when node inserter does not work 2019-03-22 11:52:49 +01:00
0efee91b63 rename tree type 2019-03-22 10:51:53 +01:00
95ccb24857 implement custom search terms for nodes 2019-03-22 10:21:01 +01:00
24d89e1cce better file naming 2019-03-21 18:44:47 +01:00
ad79af4843 typo 2019-03-21 18:40:36 +01:00
c6e4c29988 implement concept of implicit conversions 2019-03-21 12:17:35 +01:00
b31b4d5df8 cleanup 2019-03-21 12:16:14 +01:00
b52af3a031 refactor frontend data type definition system 2019-03-21 11:12:35 +01:00
8450e44cb6 move data type information into a separate file 2019-03-21 11:01:04 +01:00
fb038ebe53 refactor list decision inferencing 2019-03-21 10:56:11 +01:00
1a73618b36 cleanup file structure 2019-03-21 10:46:05 +01:00
8968155985 improve file name 2019-03-21 10:41:53 +01:00
5cc1bbd6de update tree automatically after changes 2019-03-21 10:39:57 +01:00
1ae0a8d760 Fix ListCPPTypeInfo 2019-03-20 20:03:45 +01:00
6db961e8b2 Merge branch 'master' into functions 2019-03-20 19:36:45 +01:00
1d64c35c3b allow removal of sockets from pack list node 2019-03-20 19:33:34 +01:00
e25a0c4bb3 remove dead code 2019-03-20 19:11:23 +01:00
81d5383ce2 save socket states 2019-03-20 19:07:35 +01:00
8788431086 allow changing type of Pack List node 2019-03-20 18:51:02 +01:00
1b90194608 allow declarations to draw in node 2019-03-20 18:16:55 +01:00
8d5f02a191 New Pack List Input operator 2019-03-20 18:11:56 +01:00
28fc08bff9 replace Append to List and Combine Lists nodes with Pack List 2019-03-20 18:06:27 +01:00
c59b457ee5 Merge branch 'master' into functions 2019-03-20 12:53:45 +01:00
46f5cf2b41 remove code that is not used currently 2019-03-20 12:53:04 +01:00
a2ca81bf6e initial version of less automatic inferencer 2019-03-20 12:46:30 +01:00
7533b4416e decision id cleanup 2019-03-19 17:11:49 +01:00
4c499e6d09 Merge branch 'master' into functions 2019-03-19 12:05:06 +01:00
fae338bf7c initial variadic list declaration 2019-03-19 12:03:47 +01:00
37bb26a217 cleanup list function generation 2019-03-19 11:06:38 +01:00
882ce6812f cleanup graph generation for combine lists and get list element 2019-03-19 10:51:46 +01:00
f7a9d8f447 cleanup Graph generation for Append to List node 2019-03-19 10:40:10 +01:00
c7e2b27199 Merge branch 'master' into functions 2019-03-18 16:08:50 +01:00
af2f924b11 Unified socket declaration system
Function input/output use the same structure to declare
sockets as other nodes now.

The type inferencer can be invoked in the panel on the
right in the node editor.

The list nodes work with floats, vectors and ints.
2019-03-18 16:05:21 +01:00
d0ae91b7c0 Merge branch 'master' into functions 2019-03-14 10:41:28 +01:00
dee5ee40e0 actually run the inferencer on a node tree 2019-03-13 16:21:30 +01:00
614c8be1d8 Use data type names instead of idname in c++ 2019-03-12 18:47:57 +01:00
51885aea9d simple inferencer in python with tests 2019-03-12 18:29:16 +01:00
185c80e9ba data type socket builder 2019-03-12 17:20:10 +01:00
255e1fe149 data type info 2019-03-12 16:48:00 +01:00
bd3334feaa allow more advanced socket declarations 2019-03-12 16:30:41 +01:00
c15103f454 steps towards a second list type 2019-03-11 17:58:36 +01:00
121189e560 disable some debug prints 2019-03-10 19:15:51 +01:00
163af9c8cb Merge branch 'master' into functions 2019-03-10 19:07:23 +01:00
a0627749b6 cleanup c wrapper 2019-03-10 18:59:44 +01:00
5a637fafd2 typo 2019-03-10 18:32:30 +01:00
391ee16746 new Combine Lists node 2019-03-10 18:29:00 +01:00
cfafdde927 use function to generate a list of floats 2019-03-10 18:10:53 +01:00
eaf5914496 allow float list input and output in frontend 2019-03-10 17:36:31 +01:00
a8cb18c644 new Function Points modifier for testing 2019-03-10 17:26:08 +01:00
b5f64cdb6e float list type in C interface 2019-03-10 16:28:14 +01:00
5ab0eca7c6 fgraph ir builder prefers precompiled ir if available 2019-03-10 16:21:24 +01:00
6281aa7f5d fix double value forwarding 2019-03-10 16:04:14 +01:00
5c916fa8f8 utility to copy dot format to clipboard 2019-03-10 15:49:15 +01:00
7fa6389d62 Get List Element and Append to List node 2019-03-10 15:38:11 +01:00
dcd90fae85 start implementing float list in frontend 2019-03-10 15:03:53 +01:00
9f850e5e4e get float list element function 2019-03-10 14:56:05 +01:00
5b3f7c09d2 cleanup 2019-03-10 14:55:34 +01:00
fe5c13386c use control2 as seed 2019-03-10 14:27:32 +01:00
4688ed1e28 use ctrl+A to open the node search 2019-03-10 14:27:22 +01:00
20f9248222 simple node search 2019-03-10 14:16:59 +01:00
657204dfce use auto load for registration 2019-03-10 13:57:37 +01:00
6c49690847 also allow heap allocation for tuples in C 2019-03-10 13:11:02 +01:00
57450b4fbe improve thread safety 2019-03-10 12:51:44 +01:00
1c844a694a cleanup 2019-03-10 12:17:37 +01:00
a53b2b4564 allow tuple stack allocation in C 2019-03-10 12:06:51 +01:00
ac02c2daf2 cleanup C wrapper 2019-03-10 10:44:20 +01:00
e57c3996bd store possible tuple meta in tuple call body 2019-03-10 10:26:19 +01:00
f6d994faac stack allocate tuple 2019-03-10 10:00:51 +01:00
0c8c082f9d improve shared lists 2019-03-09 16:11:10 +01:00
2e5df2cfa6 allow tuple call to modify fn_in 2019-03-09 14:22:14 +01:00
01d09210ff use shared list in tuple 2019-03-08 14:54:36 +01:00
75ecfd03ab more generic CPP and LLVM type info for lists 2019-03-08 14:31:50 +01:00
468f4f7985 Rename "Shared" to "AutoRefCount" 2019-03-08 14:09:29 +01:00
dcd4e2f767 more specific tuple access functions 2019-03-08 14:06:16 +01:00
151c9cd9ff make SharedImmutable work with the automatic refcounting 2019-03-08 13:56:50 +01:00
9697e81dab use intrusive refcounter because it simplifies things quite a bit 2019-03-08 13:42:55 +01:00
70534e5106 Merge branch 'master' into functions 2019-03-08 13:12:57 +01:00
d11b9c7239 cleanup 2019-03-07 11:38:48 +01:00
e60d04b129 rename RefCounted to RefCountedPtr 2019-03-07 11:22:50 +01:00
2c5ca6c7be refcounter cleanup 2019-03-07 11:17:49 +01:00
b0552bbe57 Merge branch 'master' into functions 2019-03-06 13:59:30 +01:00
51aa004a39 initial list types implementation 2019-03-06 13:59:00 +01:00
ebab49d135 define separate and combine vector nodes in terms of llvm ir 2019-03-06 11:37:54 +01:00
8b0c9e4331 don't hardcode llvm include dirs 2019-03-06 11:23:04 +01:00
4b39cbdeef fix "make full" on windows 2019-03-06 09:45:28 +01:00
8ba4f227ea remove printing 2019-03-05 15:22:56 +01:00
771074d848 improve ir wrapper for tuple call 2019-03-05 15:13:48 +01:00
b23cf5f41a put multiple unlinked inputs into a single function 2019-03-05 14:55:39 +01:00
8f5e6cf087 destruct tuple in wrapper 2019-03-05 13:48:00 +01:00
c4f1560ef3 Merge branch 'master' into functions 2019-03-05 13:36:52 +01:00
c1bad0da7a improve LLVMCompiledBody 2019-03-04 16:29:56 +01:00
3dcfe05354 build llvm ir for function graph 2019-03-04 16:14:45 +01:00
a6374a2896 missing renamings 2019-03-04 14:19:34 +01:00
5a81ea8dcd cleanup file naming 2019-03-04 14:16:15 +01:00
d8815d5b41 cleanup naming of function bodies and derive functions 2019-03-04 14:12:01 +01:00
f0d53df716 rename "LLVMGenBody" -> "LLVMGenerateIRBody" 2019-03-04 13:37:00 +01:00
7310c95ab7 Merge branch 'master' into functions 2019-03-04 13:29:50 +01:00
8a8b7d40ac deduplicate compilation code 2019-03-03 20:41:54 +01:00
21fc76b50d precompiled llvm function body 2019-03-03 20:13:24 +01:00
662b5ade05 generate separate wrapper functions 2019-03-03 15:03:56 +01:00
0e177a3b50 initial llvm wrapper for tuple call 2019-03-03 13:53:30 +01:00
149e6aa58c don't use SmallVector in tuple 2019-03-03 11:36:00 +01:00
c090a2f821 cleanup 2019-03-03 11:07:39 +01:00
e99f72ae6d common base class for function bodies 2019-03-03 10:56:57 +01:00
aa179bdfa3 separate tuple from its meta data 2019-03-02 22:00:47 +01:00
0ed75e7dbe only types know how they should be stored/loaded 2019-03-02 12:48:47 +01:00
910d7d4be0 compile llvm to tuple call 2019-03-02 12:14:06 +01:00
5ad9010ebf initial llvm integration (include path is still hardcoded...) 2019-03-01 19:30:20 +01:00
a42fe3e7df cleanup 2019-03-01 18:07:13 +01:00
a74e970b1d minor improvement 2019-03-01 17:30:22 +01:00
80efd2fed8 split core into multiple files 2019-03-01 17:19:36 +01:00
2cdb3d825a Merge branch 'master' into functions 2019-03-01 16:33:35 +01:00
8085925bc6 naming cleanup 2019-03-01 16:31:41 +01:00
1f504e3bd9 separate dependencies from tuple call body 2019-03-01 16:27:45 +01:00
73ceb30a98 cleanup 2019-03-01 16:08:57 +01:00
b25aa2c753 only equal types are allowed to be linked 2019-03-01 15:51:40 +01:00
7260d0333e fix 2019-03-01 15:44:13 +01:00
bdf1522fae move CPU specific stuff to backend folder 2019-03-01 15:34:11 +01:00
7333478220 refactor function generation from data flow nodes 2019-03-01 13:41:54 +01:00
4a502bef3c fix 2019-03-01 13:40:51 +01:00
d26f3663b1 Merge branch 'master' into functions 2019-03-01 10:32:36 +01:00
dd372c4d3d first test using optional value 2019-02-28 14:42:54 +01:00
c4d221b149 simple BLI::optional<T> type (C++11 compatible) 2019-02-28 14:18:06 +01:00
dbc584ea9c move some files 2019-02-28 14:01:47 +01:00
97997dd056 header cleanup 2019-02-28 12:40:20 +01:00
060a6c0e06 rename function headers 2019-02-28 12:31:34 +01:00
451884d2ea better separation between functions and nodes 2019-02-28 12:25:57 +01:00
367b065369 Merge branch 'master' into functions 2019-02-28 11:45:46 +01:00
5c72773a6d typo and minor improvement 2019-02-25 17:35:06 +01:00
b7ec20cc27 Merge branch 'master' into functions 2019-02-25 15:56:19 +01:00
3901ae2cb7 init defaults in tuple 2019-02-22 15:42:32 +01:00
e8187d58e5 Map Range node 2019-02-22 15:09:47 +01:00
9458baa8fe pass seed to driver function 2019-02-22 14:44:11 +01:00
c9a9e8670b pass index to function in displace modifier 2019-02-22 14:28:33 +01:00
5846212aab fix and cleanup 2019-02-22 14:27:53 +01:00
4108d2f4f9 integer socket 2019-02-22 14:27:34 +01:00
eaeda7dc6b remove unnecessary file 2019-02-22 13:53:47 +01:00
adba334093 utility function 2019-02-22 13:53:25 +01:00
36efb78551 improved naming 2019-02-22 13:42:41 +01:00
038a32ce1c Merge branch 'master' into functions 2019-02-21 16:56:36 +01:00
95f02d7806 new Driver Variable type that evaluates a function 2019-02-21 16:56:00 +01:00
be308462b4 vector socket actually works now 2019-02-21 16:54:41 +01:00
660ca276ca add function relations 2019-02-21 16:51:42 +01:00
daaa02f8b1 Use weight function in displace modifier 2019-02-21 14:32:59 +01:00
6593ba7e6b improved C function API 2019-02-21 14:27:10 +01:00
4f686995c8 read from original tree 2019-02-21 13:40:49 +01:00
2fbdd08636 Merge branch 'master' into functions 2019-02-20 17:20:01 +01:00
1472b4a77f simple to use function timer 2019-02-20 17:19:09 +01:00
de6a5ea3a0 clamp node as combination of min and max functions 2019-02-20 16:59:21 +01:00
d82a6a89b4 min and max of floats 2019-02-20 16:44:21 +01:00
72b67178dc vector distance node 2019-02-20 16:32:31 +01:00
dbd5c54510 debug print for functions 2019-02-20 16:21:40 +01:00
2218d7bf9e check function signature in modifier 2019-02-20 16:06:09 +01:00
e865bc730d check function signature with c wrapper 2019-02-20 15:48:22 +01:00
c4f39dd4aa remove some testing code 2019-02-20 15:34:52 +01:00
263bf06f66 annotation... 2019-02-20 15:25:48 +01:00
fa306a3c4a more generic float math node 2019-02-20 15:25:04 +01:00
08da311c74 dynamically add and remove sockets 2019-02-20 15:05:47 +01:00
513b7b3c78 add outputs dynamically 2019-02-20 14:21:54 +01:00
2ac967c63e typo 2019-02-20 13:48:06 +01:00
7699ea4d27 refactor graph generation 2019-02-20 13:44:03 +01:00
e3c61a30e1 refactor data flow graph generation 2019-02-20 12:50:58 +01:00
c1c17ba542 lookup_default 2019-02-20 12:49:44 +01:00
0267002a47 Merge branch 'master' into functions 2019-02-19 19:27:51 +01:00
dfdc955b1c cleanup 2019-02-19 17:54:57 +01:00
144a90688c better lazy init macro 2019-02-19 17:54:00 +01:00
a2ecba884a missing pragma once 2019-02-19 17:53:24 +01:00
e417f07ee2 use mempool to allocate nodes 2019-02-19 17:17:38 +01:00
66389f8933 inference list relations properly 2019-02-18 18:18:47 +01:00
cca48e2d00 different way to store Type Relations 2019-02-18 17:22:52 +01:00
d533afa17b all_equal tests 2019-02-18 17:21:23 +01:00
1a282bdca1 Signature.has_interface 2019-02-18 17:21:09 +01:00
6922161179 SmallVector::all_equal 2019-02-18 17:20:34 +01:00
a5cf0149dc Merge branch 'master' into functions 2019-02-18 16:24:46 +01:00
30d7e0814f fix SmallVector 2019-02-18 15:00:33 +01:00
c3b7bfbded use allowed namespace definition syntax only 2019-02-18 14:59:46 +01:00
7df89986a5 Merge branch 'functions-in-train' into functions 2019-02-17 21:17:11 +01:00
34e1684fa2 Merge branch 'master' into functions 2019-02-17 21:09:08 +01:00
47ea90771d initial type relations and improved inferencer 2019-02-17 17:44:21 +01:00
d93ecc84bb initial type inferencer 2019-02-17 15:54:00 +01:00
b166e18d56 small vector - remove and reorder 2019-02-17 15:49:43 +01:00
d7fca3e468 initial lazy init macro 2019-02-17 14:46:54 +01:00
e3cdeb80b1 MemPool 2019-02-17 14:17:48 +01:00
f2c8e39d29 small stack 2019-02-17 13:32:29 +01:00
27dd613a84 Merge branch 'master' into functions 2019-02-13 17:00:47 +01:00
aafe1034bb store node tree pointer in modifier
Unfortunately, there are still issues with the COW system resulting in a crash.
2019-02-12 19:20:45 +01:00
393f220f48 setup object dependencies correctly 2019-02-12 14:32:14 +01:00
79d2ea4f41 cleanup 2019-02-11 18:20:27 +01:00
139cdff657 object transforms node 2019-02-11 18:01:48 +01:00
10395fd00d separate vector node 2019-02-11 17:33:34 +01:00
e49edb2ef1 actually read socket value 2019-02-11 17:13:31 +01:00
fb3e05ff62 better usage of wrapper 2019-02-11 16:57:36 +01:00
548eb3a822 listbase wrapper 2019-02-11 16:51:33 +01:00
62cfea48a3 initial node tree to function conversion 2019-02-11 16:10:17 +01:00
caa03d7a5d cleanup 2019-02-10 20:14:26 +01:00
edad572189 FunctionGraph - a graph with specified inputs and outputs 2019-02-10 20:14:25 +01:00
8133fb0fad cleanup 2019-02-10 20:14:25 +01:00
4c1a59fa96 cleanup 2019-02-10 20:14:25 +01:00
49385f89b9 function input and output node 2019-02-10 20:14:25 +01:00
c4364f3499 initial node tree 2019-02-10 20:14:25 +01:00
791902b2d2 better dot exprot 2019-02-10 20:14:25 +01:00
785289594b SmallMap.add should not replace existing entries 2019-02-10 20:14:25 +01:00
ffdf77dd59 better naming 2019-02-10 20:14:25 +01:00
6ad32098af do not use this-> for prefixed member variables 2019-02-10 20:14:25 +01:00
34026205f0 store more type info in Type 2019-02-10 20:14:25 +01:00
5743ffc46f cmake fix 2019-02-10 20:14:25 +01:00
c3b0b85d47 move Composition to BLI 2019-02-10 20:14:25 +01:00
ac8555af9e Function and Type are final classes - can still be extended with Composition 2019-02-10 20:14:25 +01:00
999a802600 generate function from data flow graph 2019-02-10 20:14:25 +01:00
59d589e736 move concrete type definitions into separate translation unit 2019-02-10 20:14:24 +01:00
4c3941745a types don't have to be const everywhere 2019-02-10 20:14:24 +01:00
04350ca976 initial value iterator 2019-02-10 20:14:24 +01:00
ff59b09f02 cleanup 2019-02-10 20:14:24 +01:00
d5e675bddb append rvalue reference to smallvector 2019-02-10 20:14:24 +01:00
ecd2e2b454 move shared without incref and decref 2019-02-10 20:14:24 +01:00
a9c1796470 use shared ownership for functions and types 2019-02-10 20:14:24 +01:00
05f9492580 actually free elements in small vector 2019-02-10 20:14:24 +01:00
328a6e9c91 use shared ownership for functions and types 2019-02-10 20:14:24 +01:00
7773e1c2af better separation of concerns for shared objects 2019-02-10 20:14:24 +01:00
542caff21b custom reference counter that supports manual incref and decref 2019-02-10 20:14:24 +01:00
4d572be4e6 small set vector 2019-02-10 20:14:23 +01:00
74e40a8863 Tuple::copy_element 2019-02-10 20:14:23 +01:00
8d55ff177d extend set and vector data structure 2019-02-10 20:14:23 +01:00
fff8781973 dot export for data flow graph 2019-02-10 20:14:23 +01:00
252e46a346 input and output parameter class 2019-02-10 20:14:23 +01:00
010a4a76b5 data flow graph 2019-02-10 20:14:23 +01:00
434e2afe3c more generic dynamic composition of types and functions 2019-02-10 20:14:23 +01:00
5784e17ff7 renaming 2019-02-10 20:14:23 +01:00
617d35315c test dynamic composition instead of inheritance for functions 2019-02-10 20:14:23 +01:00
f63f7c1c86 minor fix, should be solved differently.. 2019-02-10 20:14:23 +01:00
d5e25680df separate actual core from cpu functions 2019-02-10 20:14:23 +01:00
6185d5fa7d typo 2019-02-10 20:14:23 +01:00
25ff42d7d5 use const ref parameter 2019-02-10 20:14:23 +01:00
317a2880f6 fill test 2019-02-10 20:14:23 +01:00
f4e7621ee7 don't construct unneeded objects in SmallVector 2019-02-10 20:14:22 +01:00
cbefe2ad55 initial SmallMap 2019-02-10 20:14:22 +01:00
0774265195 modifier fix 2019-02-10 20:14:22 +01:00
3012e7a3c2 Tuple structure (no copy/move functionality yet) 2019-02-10 20:14:22 +01:00
a22763349a use static size information to increase performance 2019-02-10 20:14:22 +01:00
4328946e12 work better with uninitialized memory + tests for SmallVector 2019-02-10 20:14:21 +01:00
be5c59f09a cleanup api a bit 2019-02-10 20:14:20 +01:00
a52d9b4bac actually deform something 2019-02-10 20:14:20 +01:00
59970cc12f move test code to new modifier 2019-02-10 20:14:20 +01:00
46a4cf3697 new deform modifier 2019-02-10 20:14:20 +01:00
ebc898756a deform function test 2019-02-10 20:14:20 +01:00
a9322b7e58 small buffer inherits small vector 2019-02-10 20:14:20 +01:00
54b8d6ba0b more const 2019-02-10 20:14:20 +01:00
a3aaf9d4f9 implement move semantics properly, hopefully 2019-02-10 20:14:20 +01:00
b36a4d7c72 first successful execution 2019-02-10 20:14:20 +01:00
178d41c250 fix 2019-02-10 20:14:20 +01:00
520d7cd663 better naming 2019-02-10 20:14:20 +01:00
bd44822f89 implement other small vector constructors 2019-02-10 20:14:20 +01:00
37e0362215 cleanup 2019-02-10 20:14:19 +01:00
9b3a4c1697 real SmallVector implementation + make types const 2019-02-10 20:14:19 +01:00
09a561aa25 more initial setup 2019-02-10 20:14:19 +01:00
7fbebda942 basic code structure 2019-02-10 20:14:19 +01:00
ade4c61063 function api design 2019-02-10 20:14:19 +01:00
1364 changed files with 64461 additions and 25253 deletions

View File

@@ -191,6 +191,7 @@ ForEachMacros:
- FOREACH_MAIN_ID_BEGIN
- FOREACH_MAIN_LISTBASE_BEGIN
- FOREACH_MAIN_LISTBASE_ID_BEGIN
- FOREACH_MESH_BUFFER_CACHE
- FOREACH_NODETREE_BEGIN
- FOREACH_OBJECT_BEGIN
- FOREACH_OBJECT_FLAG_BEGIN
@@ -213,6 +214,7 @@ ForEachMacros:
- GHASH_ITER_INDEX
- GPU_SELECT_LOAD_IF_PICKSEL_LIST
- GP_EDITABLE_STROKES_BEGIN
- GP_EVALUATED_STROKES_BEGIN
- GSET_FOREACH_BEGIN
- GSET_ITER
- GSET_ITER_INDEX
@@ -236,7 +238,6 @@ ForEachMacros:
- LISTBASE_FOREACH_BACKWARD
- LISTBASE_FOREACH_MUTABLE
- LISTBASE_FOREACH_BACKWARD_MUTABLE
- MAN2D_ITER_AXES_BEGIN
- MAN_ITER_AXES_BEGIN
- NODE_INSTANCE_HASH_ITER
- NODE_SOCKET_TYPES_BEGIN
@@ -244,12 +245,16 @@ ForEachMacros:
- NODE_TYPES_BEGIN
- PIXEL_LOOPER_BEGIN
- PIXEL_LOOPER_BEGIN_CHANNELS
- RENDER_PASS_ITER_BEGIN
- RNA_BEGIN
- RNA_PROP_BEGIN
- RNA_STRUCT_BEGIN
- RNA_STRUCT_BEGIN_SKIP_RNA_TYPE
- SCULPT_VERTEX_DUPLICATES_AND_NEIGHBORS_ITER_BEGIN
- SCULPT_VERTEX_NEIGHBORS_ITER_BEGIN
- SEQP_BEGIN
- SEQ_BEGIN
- SURFACE_QUAD_ITER_BEGIN
- foreach
# Use once we bump the minimum version to version 8.

View File

@@ -633,9 +633,10 @@ set_and_warn_dependency(WITH_BOOST WITH_OPENVDB OFF)
set_and_warn_dependency(WITH_BOOST WITH_OPENCOLORIO OFF)
set_and_warn_dependency(WITH_BOOST WITH_QUADRIFLOW OFF)
set_and_warn_dependency(WITH_BOOST WITH_USD OFF)
set_and_warn_dependency(WITH_BOOST WITH_ALEMBIC OFF)
if(WITH_BOOST AND NOT (WITH_CYCLES OR WITH_OPENIMAGEIO OR WITH_INTERNATIONAL OR
WITH_OPENVDB OR WITH_OPENCOLORIO OR WITH_USD))
WITH_OPENVDB OR WITH_OPENCOLORIO OR WITH_USD OR WITH_ALEMBIC))
message(STATUS "No dependencies need 'WITH_BOOST' forcing WITH_BOOST=OFF")
set(WITH_BOOST OFF)
endif()

View File

@@ -146,8 +146,8 @@ set(PYTHON_URI https://www.python.org/ftp/python/${PYTHON_VERSION}/Python-${PYTH
set(PYTHON_HASH d33e4aae66097051c2eca45ee3604803)
set(TBB_VERSION 2019_U9)
set(TBB_URI https://github.com/01org/tbb/archive/${TBB_VERSION}.tar.gz)
set(TBB_HASH 584edbec127c508f2cd5b6e79ad200fc)
set(TBB_URI https://github.com/oneapi-src/oneTBB/archive/${TBB_VERSION}.tar.gz)
set(TBB_HASH 26263622e9187212ec240dcf01b66207)
set(OPENVDB_VERSION 7.0.0)
set(OPENVDB_URI https://github.com/dreamworksanimation/openvdb/archive/v${OPENVDB_VERSION}.tar.gz)

View File

@@ -29,6 +29,7 @@ if(UNIX AND NOT APPLE)
-DBUILD_WITH_WAYLAND_HEADERS=OFF
-DBUILD_WITH_XCB_HEADERS=OFF
-DBUILD_WITH_XLIB_HEADERS=ON
-DBUILD_WITH_SYSTEM_JSONCPP=OFF
-DCMAKE_CXX_FLAGS=-DDISABLE_STD_FILESYSTEM=1
)
endif()

View File

@@ -63,8 +63,8 @@ build-ffmpeg,build-opencollada,build-alembic,build-embree,build-oidn,build-usd,\
build-xr-openxr,\
skip-python,skip-numpy,skip-boost,\
skip-ocio,skip-openexr,skip-oiio,skip-llvm,skip-osl,skip-osd,skip-openvdb,\
skip-ffmpeg,skip-opencollada,skip-alembic,skip-embree,skip-oidn,skip-usd, \
skip-xr-openxr\
skip-ffmpeg,skip-opencollada,skip-alembic,skip-embree,skip-oidn,skip-usd,\
skip-xr-openxr \
-- "$@" \
)
@@ -1289,7 +1289,7 @@ compile_Python() {
./configure --prefix=$_inst --libdir=$_inst/lib --enable-ipv6 \
--enable-loadable-sqlite-extensions --with-dbmliborder=bdb \
--with-computed-gotos --with-pymalloc
--with-computed-gotos --with-pymalloc --enable-shared
make -j$THREADS && make install
make clean
@@ -1310,6 +1310,8 @@ compile_Python() {
INFO "Own Python-$PYTHON_VERSION is up to date, nothing to do!"
INFO "If you want to force rebuild of this lib, use the --force-python option."
fi
run_ldconfig "python-$PYTHON_VERSION_MIN"
}
# ----------------------------------------------------------------------------
@@ -3128,7 +3130,7 @@ compile_XR_OpenXR_SDK() {
fi
# To be changed each time we make edits that would modify the compiled result!
xr_openxr_magic=1
xr_openxr_magic=2
_init_xr_openxr_sdk
# Clean install if needed!
@@ -3185,6 +3187,7 @@ compile_XR_OpenXR_SDK() {
cmake_d="$cmake_d -D BUILD_WITH_WAYLAND_HEADERS=OFF"
cmake_d="$cmake_d -D BUILD_WITH_XCB_HEADERS=OFF"
cmake_d="$cmake_d -D BUILD_WITH_XLIB_HEADERS=ON"
cmake_d="$cmake_d -D BUILD_WITH_SYSTEM_JSONCPP=OFF"
cmake $cmake_d "-DCMAKE_CXX_FLAGS=-DDISABLE_STD_FILESYSTEM=1" ..
@@ -5188,7 +5191,7 @@ print_info() {
PRINT ""
PRINT "If you're using CMake add this to your configuration flags:"
_buildargs="-U *SNDFILE* -U *PYTHON* -U *BOOST* -U *Boost*"
_buildargs="-U *SNDFILE* -U PYTHON* -U *BOOST* -U *Boost*"
_buildargs="$_buildargs -U *OPENCOLORIO* -U *OPENEXR* -U *OPENIMAGEIO* -U *LLVM* -U *CYCLES*"
_buildargs="$_buildargs -U *OPENSUBDIV* -U *OPENVDB* -U *COLLADA* -U *FFMPEG* -U *ALEMBIC* -U *USD*"

View File

@@ -7,9 +7,6 @@ message(STATUS "Building in CentOS 7 64bit environment")
set(LIBDIR_NAME "linux_centos7_x86_64")
set(WITH_CXX11_ABI OFF CACHE BOOL "" FORCE)
# Default to only build Blender
set(WITH_BLENDER ON CACHE BOOL "" FORCE)
# ######## Linux-specific build options ########
# Options which are specific to Linux-only platforms
@@ -20,12 +17,6 @@ set(WITH_DOC_MANPAGE OFF CACHE BOOL "" FORCE)
set(WITH_JACK_DYNLOAD ON CACHE BOOL "" FORCE)
set(WITH_SDL_DYNLOAD ON CACHE BOOL "" FORCE)
set(WITH_SYSTEM_GLEW OFF CACHE BOOL "" FORCE)
set(WITH_OPENMP_STATIC ON CACHE BOOL "" FORCE)
set(WITH_PYTHON_INSTALL_NUMPY ON CACHE BOOL "" FORCE)
set(WITH_PYTHON_INSTALL_REQUESTS ON CACHE BOOL "" FORCE)
# ######## Release environment specific settings ########
@@ -33,13 +24,5 @@ set(LIBDIR "${CMAKE_CURRENT_LIST_DIR}/../../../../lib/${LIBDIR_NAME}" CACHE STRI
# Platform specific configuration, to ensure static linking against everything.
set(Boost_USE_STATIC_LIBS ON CACHE BOOL "" FORCE)
# We need to link OpenCOLLADA against PCRE library. Even though it is not installed
# on /usr, we do not really care -- all we care is PCRE_FOUND be TRUE and its
# library pointing to a valid one.
set(PCRE_INCLUDE_DIR "/usr/include" CACHE STRING "" FORCE)
set(PCRE_LIBRARY "${LIBDIR}/opencollada/lib/libpcre.a" CACHE STRING "" FORCE)
# Additional linking libraries
set(CMAKE_EXE_LINKER_FLAGS "-lrt -static-libstdc++ -no-pie" CACHE STRING "" FORCE)

View File

@@ -49,6 +49,7 @@ if(NOT LLVM_ROOT_DIR)
OUTPUT_VARIABLE LLVM_ROOT_DIR
OUTPUT_STRIP_TRAILING_WHITESPACE)
set(LLVM_ROOT_DIR ${LLVM_ROOT_DIR} CACHE PATH "Path to the LLVM installation")
set(LLVM_INCLUDE_DIRS ${LLVM_ROOT_DIR}/include CACHE PATH "Path to the LLVM include directory")
endif()
if(NOT LLVM_LIBPATH)
execute_process(COMMAND ${LLVM_CONFIG} --libdir

View File

@@ -95,7 +95,7 @@ FIND_LIBRARY(OPENIMAGEDENOISE_LIBRARY
# handle the QUIETLY and REQUIRED arguments and set OPENIMAGEDENOISE_FOUND to TRUE if
# all listed variables are TRUE
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(OPENIMAGEDENOISE DEFAULT_MSG
FIND_PACKAGE_HANDLE_STANDARD_ARGS(OpenImageDenoise DEFAULT_MSG
OPENIMAGEDENOISE_LIBRARY OPENIMAGEDENOISE_INCLUDE_DIR)
IF(OPENIMAGEDENOISE_FOUND)

View File

@@ -222,12 +222,10 @@ if(WITH_OPENCOLLADA)
-lMathMLSolver
-lGeneratedSaxParser
-lbuffer -lftoa -lUTF
${OPENCOLLADA_LIBPATH}/libxml2.a
)
# PCRE is bundled with openCollada
# set(PCRE ${LIBDIR}/pcre)
# set(PCRE_LIBPATH ${PCRE}/lib)
# PCRE and XML2 are bundled with OpenCollada.
set(PCRE_LIBRARIES pcre)
set(XML2_LIBRARIES xml2)
endif()
if(WITH_SDL)
@@ -449,7 +447,9 @@ if(${XCODE_VERSION} VERSION_EQUAL 5 OR ${XCODE_VERSION} VERSION_GREATER 5)
# Xcode 5 is always using CLANG, which has too low template depth of 128 for libmv
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ftemplate-depth=1024")
endif()
# Get rid of eventually clashes, we export some symbols explicitly as local
# Avoid conflicts with Luxrender, and other plug-ins that may use the same
# libraries as Blender with a different version or build options.
set(PLATFORM_LINKFLAGS
"${PLATFORM_LINKFLAGS} -Xlinker -unexported_symbols_list -Xlinker '${CMAKE_SOURCE_DIR}/source/creator/osx_locals.map'"
)

View File

@@ -20,10 +20,6 @@
# Xcode and system configuration for Apple.
# require newer cmake on osx because of version handling,
# older cmake cannot handle 2 digit subversion!
cmake_minimum_required(VERSION 3.0.0)
if(NOT CMAKE_OSX_ARCHITECTURES)
set(CMAKE_OSX_ARCHITECTURES x86_64 CACHE STRING
"Choose the architecture you want to build Blender for: i386, x86_64 or ppc"
@@ -45,54 +41,98 @@ execute_process(
OUTPUT_VARIABLE XCODE_CHECK OUTPUT_STRIP_TRAILING_WHITESPACE)
string(REPLACE "/Contents/Developer" "" XCODE_BUNDLE ${XCODE_CHECK}) # truncate to bundlepath in any case
if(${CMAKE_GENERATOR} MATCHES "Xcode")
if(NOT ${CMAKE_GENERATOR} MATCHES "Xcode")
# Unix makefile generator does not fill XCODE_VERSION var, so we get it with a command.
# Note that `xcodebuild -version` gives output in two lines: first line will include
# Xcode version, second one will include build number. We are only interested in the
# former one. Here is an example of the output:
# Xcode 11.4
# Build version 11E146
# The expected XCODE_VERSION in this case is 11.4.
# earlier xcode has no bundled developer dir, no sense in getting xcode path from
if(${XCODE_VERSION} VERSION_GREATER 4.2)
# reduce to XCode name without dp extension
string(SUBSTRING "${XCODE_CHECK}" 14 6 DP_NAME)
if(${DP_NAME} MATCHES Xcode5)
set(XCODE_VERSION 5)
endif()
endif()
##### cmake incompatibility with xcode 4.3 and higher #####
if(${XCODE_VERSION} MATCHES '') # cmake fails due looking for xcode in the wrong path, thus will be empty var
message(FATAL_ERROR "Xcode 4.3 and higher must be used with cmake 2.8-8 or higher")
endif()
### end cmake incompatibility with xcode 4.3 and higher ###
if(${XCODE_VERSION} VERSION_EQUAL 4 OR ${XCODE_VERSION} VERSION_GREATER 4 AND ${XCODE_VERSION} VERSION_LESS 4.3)
# Xcode 4 defaults to the Apple LLVM Compiler.
# Override the default compiler selection because Blender only compiles with gcc up to xcode 4.2
set(CMAKE_XCODE_ATTRIBUTE_GCC_VERSION "com.apple.compilers.llvmgcc42")
message(STATUS "Setting compiler to: " ${CMAKE_XCODE_ATTRIBUTE_GCC_VERSION})
endif()
else() # unix makefile generator does not fill XCODE_VERSION var, so we get it with a command
execute_process(COMMAND xcodebuild -version OUTPUT_VARIABLE XCODE_VERS_BUILD_NR)
string(SUBSTRING "${XCODE_VERS_BUILD_NR}" 6 3 XCODE_VERSION) # truncate away build-nr
# Convert output to a single line by replacling newlines with spaces.
# This is needed because regex replace can not operate through the newline character
# and applies substitutions for each individual lines.
string(REPLACE "\n" " " XCODE_VERS_BUILD_NR_SINGLE_LINE "${XCODE_VERS_BUILD_NR}")
string(REGEX REPLACE "(.*)Xcode ([0-9\\.]+).*" "\\2" XCODE_VERSION "${XCODE_VERS_BUILD_NR_SINGLE_LINE}")
unset(XCODE_VERS_BUILD_NR)
unset(XCODE_VERS_BUILD_NR_SINGLE_LINE)
endif()
message(STATUS "Detected OS X ${OSX_SYSTEM} and Xcode ${XCODE_VERSION} at ${XCODE_BUNDLE}")
if(${XCODE_VERSION} VERSION_LESS 4.3)
# use guaranteed existing sdk
set(CMAKE_OSX_SYSROOT /Developer/SDKs/MacOSX${OSX_SYSTEM}.sdk CACHE PATH "" FORCE)
else()
# note: xcode-select path could be ambiguous,
# cause /Applications/Xcode.app/Contents/Developer or /Applications/Xcode.app would be allowed
# so i use a selfcomposed bundlepath here
set(OSX_SYSROOT_PREFIX ${XCODE_BUNDLE}/Contents/Developer/Platforms/MacOSX.platform)
message(STATUS "OSX_SYSROOT_PREFIX: " ${OSX_SYSROOT_PREFIX})
set(OSX_DEVELOPER_PREFIX /Developer/SDKs/MacOSX${OSX_SYSTEM}.sdk) # use guaranteed existing sdk
set(CMAKE_OSX_SYSROOT ${OSX_SYSROOT_PREFIX}/${OSX_DEVELOPER_PREFIX} CACHE PATH "" FORCE)
if(${CMAKE_GENERATOR} MATCHES "Xcode")
# to silence sdk not found warning, just overrides CMAKE_OSX_SYSROOT
set(CMAKE_XCODE_ATTRIBUTE_SDKROOT macosx${OSX_SYSTEM})
endif()
# Older Xcode versions had different approach to the directory hiearchy.
# Require newer Xcode which is also have better chances of being able to compile with the
# required deployment target.
#
# NOTE: Xcode version 8.2 is the latest one which runs on macOS 10.11.
if(${XCODE_VERSION} VERSION_LESS 8.2)
message(FATAL_ERROR "Only Xcode version 8.2 and newer is supported")
endif()
# note: xcode-select path could be ambiguous,
# cause /Applications/Xcode.app/Contents/Developer or /Applications/Xcode.app would be allowed
# so i use a selfcomposed bundlepath here
set(OSX_SYSROOT_PREFIX ${XCODE_BUNDLE}/Contents/Developer/Platforms/MacOSX.platform)
message(STATUS "OSX_SYSROOT_PREFIX: " ${OSX_SYSROOT_PREFIX})
# Collect list of OSX system versions which will be used to detect path to corresponding SDK.
# Start with macOS SDK version reported by xcodebuild and include possible extra ones.
#
# The reason for need of extra ones is because it's possible that xcodebuild will report
# SDK version in the full manner (aka major.minor.patch), but the actual path will only
# include major.minor.
#
# This happens, for example, on macOS Catalina 10.15.4 and Xcode 11.4: xcodebuild on this
# system outputs "10.15.4", but the actual SDK path is MacOSX10.15.sdk.
#
# This should be safe from picking wrong SDK version because (a) xcodebuild reports full semantic
# SDK version, so such SDK does exist on the system. And if it doesn't exist with full version
# in the path, what SDK is in the major.minor folder then.
set(OSX_SDK_TEST_VERSIONS ${OSX_SYSTEM})
if(OSX_SYSTEM MATCHES "([0-9]+)\\.([0-9]+)\\.([0-9]+)")
string(REGEX REPLACE "([0-9]+)\\.([0-9]+)\\.([0-9]+)" "\\1.\\2" OSX_SYSTEM_NO_PATCH "${OSX_SYSTEM}")
list(APPEND OSX_SDK_TEST_VERSIONS ${OSX_SYSTEM_NO_PATCH})
unset(OSX_SYSTEM_NO_PATCH)
endif()
# Loop through all possible versions and pick the first one which resolves to a valid SDK path.
set(OSX_SDK_PATH)
set(OSX_SDK_FOUND FALSE)
set(OSX_SDK_PREFIX ${OSX_SYSROOT_PREFIX}/Developer/SDKs)
set(OSX_SDKROOT)
foreach(OSX_SDK_VERSION ${OSX_SDK_TEST_VERSIONS})
set(CURRENT_OSX_SDK_PATH "${OSX_SDK_PREFIX}/MacOSX${OSX_SDK_VERSION}.sdk")
if(EXISTS ${CURRENT_OSX_SDK_PATH})
set(OSX_SDK_PATH "${CURRENT_OSX_SDK_PATH}")
set(OSX_SDKROOT macosx${OSX_SDK_VERSION})
set(OSX_SDK_FOUND TRUE)
break()
endif()
endforeach()
unset(OSX_SDK_PREFIX)
unset(OSX_SDK_TEST_VERSIONS)
if(NOT OSX_SDK_FOUND)
message(FATAL_ERROR "Unable to find SDK for macOS version ${OSX_SYSTEM}")
endif()
message(STATUS "Detected OSX_SYSROOT: ${OSX_SDK_PATH}")
set(CMAKE_OSX_SYSROOT ${OSX_SDK_PATH} CACHE PATH "" FORCE)
unset(OSX_SDK_PATH)
unset(OSX_SDK_FOUND)
if(${CMAKE_GENERATOR} MATCHES "Xcode")
# to silence sdk not found warning, just overrides CMAKE_OSX_SYSROOT
set(CMAKE_XCODE_ATTRIBUTE_SDKROOT ${OSX_SDKROOT})
endif()
unset(OSX_SDKROOT)
# 10.11 is our min. target, if you use higher sdk, weak linking happens
if(CMAKE_OSX_DEPLOYMENT_TARGET)
if(${CMAKE_OSX_DEPLOYMENT_TARGET} VERSION_LESS 10.11)

View File

@@ -195,8 +195,14 @@ endif()
if(WITH_OPENCOLLADA)
find_package_wrapper(OpenCOLLADA)
if(OPENCOLLADA_FOUND)
if(WITH_STATIC_LIBS)
# PCRE is bundled with OpenCollada without headers, so can't use
# find_package reliably to detect it.
set(PCRE_LIBRARIES ${LIBDIR}/opencollada/lib/libpcre.a)
else()
find_package_wrapper(PCRE)
endif()
find_package_wrapper(XML2)
find_package_wrapper(PCRE)
else()
set(WITH_OPENCOLLADA OFF)
endif()
@@ -405,13 +411,6 @@ if(WITH_LLVM)
endif()
endif()
if(WITH_LLVM OR WITH_SDL_DYNLOAD)
# Fix for conflict with Mesa llvmpipe
set(PLATFORM_LINKFLAGS
"${PLATFORM_LINKFLAGS} -Wl,--version-script='${CMAKE_SOURCE_DIR}/source/creator/blender.map'"
)
endif()
if(WITH_OPENSUBDIV)
find_package_wrapper(OpenSubdiv)
@@ -601,3 +600,16 @@ elseif(CMAKE_C_COMPILER_ID MATCHES "Intel")
set(PLATFORM_CFLAGS "-pipe -fPIC -funsigned-char -fno-strict-aliasing")
set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -static-intel")
endif()
# Avoid conflicts with Mesa llvmpipe, Luxrender, and other plug-ins that may
# use the same libraries as Blender with a different version or build options.
set(PLATFORM_LINKFLAGS
"${PLATFORM_LINKFLAGS} -Wl,--version-script='${CMAKE_SOURCE_DIR}/source/creator/blender.map'"
)
# Don't use position independent executable for portable install since file
# browsers can't properly detect blender as an executable then. Still enabled
# for non-portable installs as typically used by Linux distributions.
if(WITH_INSTALL_PORTABLE)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -no-pie")
endif()

View File

@@ -669,7 +669,7 @@ if(WITH_USD)
set(USD_INCLUDE_DIRS ${LIBDIR}/usd/include)
set(USD_RELEASE_LIB ${LIBDIR}/usd/lib/libusd_m.lib)
set(USD_DEBUG_LIB ${LIBDIR}/usd/lib/libusd_m_d.lib)
set(USD_LIBRARY_DIR ${LIBDIR}/usd/lib/usd)
set(USD_LIBRARY_DIR ${LIBDIR}/usd/lib)
set(USD_LIBRARIES
debug ${USD_DEBUG_LIB}
optimized ${USD_RELEASE_LIB}

View File

@@ -6,9 +6,6 @@ if %ERRORLEVEL% EQU 0 goto DetectionComplete
call "%~dp0\detect_msvc2019.cmd"
if %ERRORLEVEL% EQU 0 goto DetectionComplete
call "%~dp0\detect_msvc2015.cmd"
if %ERRORLEVEL% EQU 0 goto DetectionComplete
echo Compiler Detection failed. Use verbose switch for more information.
exit /b 1

View File

@@ -1,3 +0,0 @@
set BUILD_VS_VER=14
set BUILD_VS_YEAR=2015
call "%~dp0\detect_msvc_classic.cmd"

View File

@@ -1,69 +0,0 @@
if NOT "%verbose%" == "" (
echo Detecting msvc %BUILD_VS_YEAR%
)
set KEY_NAME="HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\%BUILD_VS_VER%.0\Setup\VC"
for /F "usebackq skip=2 tokens=1-2*" %%A IN (`REG QUERY %KEY_NAME% /v ProductDir 2^>nul`) DO set MSVC_VC_DIR=%%C
if DEFINED MSVC_VC_DIR (
if NOT "%verbose%" == "" (
echo Visual Studio %BUILD_VS_YEAR% on Win64 detected at "%MSVC_VC_DIR%"
)
goto msvc_detect_finally
)
REM Check 32 bits
set KEY_NAME="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\%BUILD_VS_VER%.0\Setup\VC"
for /F "usebackq skip=2 tokens=1-2*" %%A IN (`REG QUERY %KEY_NAME% /v ProductDir 2^>nul`) DO set MSVC_VC_DIR=%%C
if DEFINED MSVC_VC_DIR (
if NOT "%verbose%" == "" (
echo Visual Studio %BUILD_VS_YEAR% on Win32 detected at "%MSVC_VC_DIR%"
)
goto msvc_detect_finally
)
if NOT "%verbose%" == "" (
echo Visual Studio %BUILD_VS_YEAR% not found.
)
goto FAIL
:msvc_detect_finally
set VCVARS=%MSVC_VC_DIR%\vcvarsall.bat
if not exist "%VCVARS%" (
echo "%VCVARS%" not found.
goto FAIL
)
call "%vcvars%" %BUILD_ARCH%
rem try msbuild
msbuild /version > NUL
if errorlevel 1 (
if NOT "%verbose%" == "" (
echo Visual Studio %BUILD_VS_YEAR% msbuild not found
)
goto FAIL
)
if NOT "%verbose%" == "" (
echo Visual Studio %BUILD_VS_YEAR% msbuild found
)
REM try the c++ compiler
cl 2> NUL 1>&2
if errorlevel 1 (
if NOT "%verbose%" == "" (
echo Visual Studio %BUILD_VS_YEAR% C/C++ Compiler not found
)
goto FAIL
)
if NOT "%verbose%" == "" (
echo Visual Studio %BUILD_VS_YEAR% C/C++ Compiler found
)
goto DetectionComplete
:FAIL
exit /b 1
:DetectionComplete
if NOT "%verbose%" == "" (
echo Visual Studio %BUILD_VS_YEAR% Detected successfully
)
exit /b 0

View File

@@ -27,7 +27,13 @@ if NOT "%verbose%" == "" (
if "%VS_InstallDir%"=="" (
if NOT "%verbose%" == "" (
echo Visual Studio is detected but the "Desktop development with C++" workload has not been instlled
echo.
echo Visual Studio is detected but no suitable installation was found.
echo.
echo Check the "Desktop development with C++" workload has been installed.
echo.
echo If you are attempting to use either Visual Studio Preview version or the Visual C++ Build tools, Please see 'make help' on how to opt in to those toolsets.
echo.
goto FAIL
)
)

View File

@@ -66,8 +66,6 @@ if NOT "%1" == "" (
) else if "%1" == "2019b" (
set BUILD_VS_YEAR=2019
set VSWHERE_ARGS=-products Microsoft.VisualStudio.Product.BuildTools
) else if "%1" == "2015" (
set BUILD_VS_YEAR=2015
) else if "%1" == "packagename" (
set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% -DCPACK_OVERRIDE_PACKAGENAME="%2"
shift /1

View File

@@ -27,11 +27,13 @@ echo - builddir [newdir] ^(override default build folder^)
echo - 2017 ^(build with visual studio 2017^)
echo - 2017pre ^(build with visual studio 2017 pre-release^)
echo - 2017b ^(build with visual studio 2017 Build Tools^)
echo - 2019 ^(build with visual studio 2019^)
echo - 2019pre ^(build with visual studio 2019 pre-release^)
echo - 2019b ^(build with visual studio 2019 Build Tools^)
echo.
echo Experimental options
echo - with_opengl_tests ^(enable both the render and draw opengl test suites^)
echo - 2015 ^(build with visual studio 2015^)
echo - clang ^(enable building with clang^)
echo - asan ^(enable asan when building with clang^)
echo - ninja ^(enable building with ninja instead of msbuild^)

View File

@@ -2,20 +2,20 @@
Basic Sound Playback
++++++++++++++++++++
This script shows how to use the classes: :class:`Device`, :class:`Factory` and
This script shows how to use the classes: :class:`Device`, :class:`Sound` and
:class:`Handle`.
"""
import aud
device = aud.device()
device = aud.Device()
# load sound file (it can be a video file with audio)
factory = aud.Factory('music.ogg')
sound = aud.Sound('music.ogg')
# play the audio, this return a handle to control play/pause
handle = device.play(factory)
handle = device.play(sound)
# if the audio is not too big and will be used often you can buffer it
factory_buffered = aud.Factory.buffer(factory)
handle_buffered = device.play(factory_buffered)
sound_buffered = aud.Sound.buffer(sound)
handle_buffered = device.play(sound_buffered)
# stop the sounds (otherwise they play until their ends)
handle.stop()

View File

@@ -205,15 +205,15 @@ Support Overview
* - Usage
- :class:`bpy.types.MeshPolygon`
- :class:`bpy.types.MeshTessFace`
- :class:`bpy.types.MeshLoopTriangle`
- :class:`bmesh.types.BMFace`
* - Import/Create
- Poor *(inflexible)*
- Good *(supported as upgrade path)*
- Unusable *(read-only)*.
- Best
* - Manipulate
- Poor *(inflexible)*
- Poor *(loses ngons)*
- Unusable *(read-only)*.
- Best
* - Export/Output
- Good *(ngon support)*

View File

@@ -1052,6 +1052,7 @@ context_type_map = {
"selected_editable_fcurves": ("FCurve", True),
"selected_editable_objects": ("Object", True),
"selected_editable_sequences": ("Sequence", True),
"selected_nla_strips": ("NlaStrip", True),
"selected_nodes": ("Node", True),
"selected_objects": ("Object", True),
"selected_pose_bones": ("PoseBone", True),
@@ -1073,6 +1074,7 @@ context_type_map = {
"visible_pose_bones": ("PoseBone", True),
"visible_fcurves": ("FCurve", True),
"weight_paint_object": ("Object", False),
"volume": ("Volume", False),
"world": ("World", False),
}

View File

@@ -4,35 +4,51 @@ Tutorials
Introduction
------------
The C and Python binding for audaspace were designed with simplicity in mind. This means however that to use the full capabilities of audaspace, there is no way around the C++ library.
The C and Python binding for audaspace were designed with simplicity in mind.
This means however that to use the full capabilities of audaspace,
there is no way around the C++ library.
Simple Demo
-----------
The **simple.py** example program contains all the basic building blocks for an application using audaspace. These building blocks are basically the classes :class:`aud.Device`, :class:`aud.Sound` and :class:`aud.Handle`.
The **simple.py** example program contains all the basic
building blocks for an application using audaspace.
These building blocks are basically the classes :class:`aud.Device`,
:class:`aud.Sound` and :class:`aud.Handle`.
We start with importing :mod:`aud` and :mod:`time` as the modules we need for our simple example.
We start with importing :mod:`aud` and :mod:`time`
as the modules we need for our simple example.
.. code-block:: python
#!/usr/bin/python
import aud, time
The first step now is to open an output device and this can simply be done by allocating a :class:`aud.Device` object.
The first step now is to open an output device and this
can simply be done by allocating a :class:`aud.Device` object.
.. code-block:: python
device = aud.Device()
To create a sound we can choose to load one from a :func:`aud.Sound.file`, or we use one of our signal generators. We decide to do the latter and create a :func:`aud.Sound.sine` signal with a frequency of 440 Hz.
To create a sound we can choose to load one from a :func:`aud.Sound.file`,
or we use one of our signal generators. We decide to do the latter
and create a :func:`aud.Sound.sine` signal with a frequency of 440 Hz.
.. code-block:: python
sine = aud.Sound.sine(440)
.. note:: At this point nothing is playing back yet, :class:`aud.Sound` objects are just descriptions of sounds.
.. note:: At this point nothing is playing back yet,
:class:`aud.Sound` objects are just descriptions of sounds.
However instead of a sine wave, we would like to have a square wave to produce a more retro gaming sound. We could of course use the :func:`aud.Sound.square` generator instead of sine, but we want to show how to apply effects, so we apply a :func:`aud.Sound.threshold` which makes a square wave out of our sine too, even if less efficient than directly generating the square wave.
However instead of a sine wave, we would like to have a square wave
to produce a more retro gaming sound. We could of course use the
:func:`aud.Sound.square` generator instead of sine,
but we want to show how to apply effects,
so we apply a :func:`aud.Sound.threshold`
which makes a square wave out of our sine too,
even if less efficient than directly generating the square wave.
.. code-block:: python
@@ -40,13 +56,19 @@ However instead of a sine wave, we would like to have a square wave to produce a
.. note:: The :class:`aud.Sound` class offers generator and effect functions.
The we can play our sound by calling the :func:`aud.Device.play` method of our device. This method returns a :class:`aud.Handle` which is used to control the playback of the sound.
The we can play our sound by calling the
:func:`aud.Device.play` method of our device.
This method returns a :class:`aud.Handle`
which is used to control the playback of the sound.
.. code-block:: python
handle = device.play(square)
Now if we do nothing else anymore the application will quit immediately, so we won't hear much of our square wave, so we decide to wait for three seconds before quitting the application by calling :func:`time.sleep`.
Now if we do nothing else anymore the application will quit immediately,
so we won't hear much of our square wave,
so we decide to wait for three seconds before
quitting the application by calling :func:`time.sleep`.
.. code-block:: python
@@ -55,29 +77,47 @@ Now if we do nothing else anymore the application will quit immediately, so we w
Audioplayer
-----------
Now that we know the basics of audaspace, we can build our own music player easily by just slightly changing the previous program. The **player.py** example does exactly that, let's have a short look at the differences:
Now that we know the basics of audaspace,
we can build our own music player easily
by just slightly changing the previous program.
The **player.py** example does exactly that,
let's have a short look at the differences:
Instead of creating a sine signal and thresholding it, we in fact use the :func:`aud.Sound.file` function to load a sound from a file. The filename we pass is the first command line argument our application got.
Instead of creating a sine signal and thresholding it,
we in fact use the :func:`aud.Sound.file` function to load a sound from a file.
The filename we pass is the first command line argument our application got.
.. code-block:: python
sound = aud.Sound.file(sys.argv[1])
When the sound gets played back we now want to wait until the whole file has been played, so we use the :data:`aud.Handle.status` property to determine whether the sound finished playing.
When the sound gets played back we now want to wait until
the whole file has been played, so we use the :data:`aud.Handle.status`
property to determine whether the sound finished playing.
.. code-block:: python
while handle.status:
time.sleep(0.1)
We don't make any error checks if the user actually added a command line argument. As an exercise you could extend this program to play any number of command line supplied files in sequence.
We don't make any error checks if the user actually added a command
line argument. As an exercise you could extend this program to play
any number of command line supplied files in sequence.
Siren
-----
Let's get a little bit more complex. The **siren.py** example plays a generated siren sound that circles around your head. Depending on how many speakers you have and if the output device used supports the speaker setup, you will hear this effect. With stereo speakers you should at least hear some left-right-panning.
Let's get a little bit more complex. The **siren.py** example
plays a generated siren sound that circles around your head.
Depending on how many speakers you have and if the output
device used supports the speaker setup, you will hear this effect.
With stereo speakers you should at least hear some left-right-panning.
We start off again with importing the modules we need and we also define some properties of our siren sound. We want it to consist of two sine sounds with different frequencies. We define a length for the sine sounds and how long a fade in/out should take. We also know already how to open a device.
We start off again with importing the modules we need and
we also define some properties of our siren sound.
We want it to consist of two sine sounds with different frequencies.
We define a length for the sine sounds and how long a fade in/out should take.
We also know already how to open a device.
.. code-block:: python
@@ -88,27 +128,35 @@ We start off again with importing the modules we need and we also define some pr
device = aud.Device()
The next thing to do is to define our sine waves and apply all the required effects. As each of the effect functions returns the corresponding sound, we can easily chain those calls together.
The next thing to do is to define our sine waves and apply all the required effects.
As each of the effect functions returns the corresponding sound,
we can easily chain those calls together.
.. code-block:: python
high = aud.Sound.sine(880).limit(0, length).fadein(0, fadelength).fadeout(length - fadelength, length)
low = aud.Sound.sine(700).limit(0, length).fadein(0, fadelength).fadeout(length - fadelength, length).volume(0.6)
The next step is to connect the two sines, which we do using the :func:`aud.Sound.join` function.
The next step is to connect the two sines,
which we do using the :func:`aud.Sound.join` function.
.. code-block:: python
sound = high.join(low)
The generated siren sound can now be played back and what we also do is to loop it. Therefore we set the :data:`aud.Handle.loop_count` to a negative value to loop forever.
The generated siren sound can now be played back and what we also do is to loop it.
Therefore we set the :data:`aud.Handle.loop_count` to a negative value to loop forever.
.. code-block:: python
handle = device.play(sound)
handle.loop_count = -1
Now we use some timing code to make sure our demo runs for 10 seconds, but we also use the time to update the location of our playing sound, with the :data:`aud.Handle.location` property, which is a three dimensional vector. The trigonometic calculation based on the running time of the program keeps the sound on the XZ plane letting it follow a circle around us.
Now we use some timing code to make sure our demo runs for 10 seconds,
but we also use the time to update the location of our playing sound,
with the :data:`aud.Handle.location` property, which is a three dimensional vector.
The trigonometic calculation based on the running time of the program keeps
the sound on the XZ plane letting it follow a circle around us.
.. code-block:: python
@@ -119,33 +167,54 @@ Now we use some timing code to make sure our demo runs for 10 seconds, but we al
handle.location = [math.sin(angle), 0, -math.cos(angle)]
As an exercise you could try to let the sound come from the far left and go to the far right and a little bit in front of you within the 10 second runtime of the program. With this change you should be able to hear the volume of the sound change, depending on how far it is away from you. Updating the :data:`aud.Handle.velocity` property properly also enables the doppler effect. Compare your solution to the **siren2.py** demo.
As an exercise you could try to let the sound come from the far left
and go to the far right and a little bit in front of you within the
10 second runtime of the program. With this change you should be able
to hear the volume of the sound change, depending on how far it is away from you.
Updating the :data:`aud.Handle.velocity` property properly also enables the doppler effect.
Compare your solution to the **siren2.py** demo.
Tetris
------
The **tetris.py** demo application shows an even more complex application which generates retro tetris music. Looking at the source code there should be nothing new here, again the functions used from audaspace are the same as in the previous examples. In the :func:`parseNote` function all single notes get joined which leads to a very long chain of sounds. If you think of :func:`aud.Sound.join` as a function that creates a binary tree with the two joined sounds as leaves then the :func:`parseNote` function creates a very unbalanced tree.
The **tetris.py** demo application shows an even more
complex application which generates retro tetris music.
Looking at the source code there should be nothing new here,
again the functions used from audaspace are the same as in the previous examples.
In the :func:`parseNote` function all single notes get joined which leads
to a very long chain of sounds. If you think of :func:`aud.Sound.join`
as a function that creates a binary tree with the two joined sounds as
leaves then the :func:`parseNote` function creates a very unbalanced tree.
Insted we could rewrite the code to use two other classes: :class:`aud.Sequence` and :class:`aud.SequenceEntry` to sequence the notes. The **tetris2.py** application does exactly that. Before the while loop we add a variable that stores the current position in the score and create a new :class:`aud.Sequence` object.
Insted we could rewrite the code to use two other classes:
:class:`aud.Sequence` and :class:`aud.SequenceEntry` to sequence the notes.
The **tetris2.py** application does exactly that.
Before the while loop we add a variable that stores the current position
in the score and create a new :class:`aud.Sequence` object.
.. code-block:: python
position = 0
sequence = aud.Sequence()
Then in the loop we can create the note simply by chaining the :func:`aud.Sound.square` generator and :func:`aud.Sound.fadein` and :func:`aud.Sound.fadeout` effects.
Then in the loop we can create the note simply by chaining the
:func:`aud.Sound.square` generator and :func:`aud.Sound.fadein`
and :func:`aud.Sound.fadeout` effects.
.. code-block:: python
note = aud.Sound.square(freq, rate).fadein(0, fadelength).fadeout(length - fadelength, fadelength)
Now instead of using :func:`aud.Sound.limit` and :func:`aud.Sound.join` we simply add the sound to the sequence.
Now instead of using :func:`aud.Sound.limit` and :func:`aud.Sound.join`
we simply add the sound to the sequence.
.. code-block:: python
entry = sequence.add(note, position, position + length, 0)
The entry returned from the :func:`aud.Sequence.add` function is an object of the :class:`aud.SequenceEntry` class. We can use this entry to mute the note in case it's actually a pause.
The entry returned from the :func:`aud.Sequence.add`
function is an object of the :class:`aud.SequenceEntry` class.
We can use this entry to mute the note in case it's actually a pause.
.. code-block:: python
@@ -158,9 +227,14 @@ Lastly we have to update our position variable.
position += length
Now in **tetris2.py** we used the :data:`aud.SequenceEntry.muted` property to show how the :class:`aud.SequenceEntry` class can be used, but it would actually be smarter to not even create a note for pauses and just skip them. You can try to implement this as an exercise and then check out the solution in **tetris3.py**.
Now in **tetris2.py** we used the :data:`aud.SequenceEntry.muted`
property to show how the :class:`aud.SequenceEntry` class can be used,
but it would actually be smarter to not even create a note for pauses and just skip them.
You can try to implement this as an exercise and then check out the solution in **tetris3.py**.
Conclusion
----------
We introduced all five currently available classes in the audaspace Python API. Of course all classes offer a lot more functions than have been used in these demo applications, check out the specific class documentation for more details.
We introduced all five currently available classes in the audaspace Python API.
Of course all classes offer a lot more functions than have been used in these demo applications,
check out the specific class documentation for more details.

View File

@@ -124,15 +124,17 @@ Device_new(PyTypeObject* type, PyObject* args, PyObject* kwds)
}
PyDoc_STRVAR(M_aud_Device_lock_doc,
"lock()\n\n"
"Locks the device so that it's guaranteed, that no samples are "
"read from the streams until :meth:`unlock` is called.\n"
"This is useful if you want to do start/stop/pause/resume some "
"sounds at the same time.\n\n"
".. note:: The device has to be unlocked as often as locked to be "
"able to continue playback.\n\n"
".. warning:: Make sure the time between locking and unlocking is "
"as short as possible to avoid clicks.");
".. classmethod:: lock()\n\n"
" Locks the device so that it's guaranteed, that no samples are\n"
" read from the streams until :meth:`unlock` is called.\n"
" This is useful if you want to do start/stop/pause/resume some\n"
" sounds at the same time.\n\n"
" .. note::\n\n"
" The device has to be unlocked as often as locked to be\n"
" able to continue playback.\n\n"
" .. warning::\n\n"
" Make sure the time between locking and unlocking is\n"
" as short as possible to avoid clicks.");
static PyObject *
Device_lock(Device* self)
@@ -150,15 +152,15 @@ Device_lock(Device* self)
}
PyDoc_STRVAR(M_aud_Device_play_doc,
"play(sound, keep=False)\n\n"
"Plays a sound.\n\n"
":arg sound: The sound to play.\n"
":type sound: :class:`Sound`\n"
":arg keep: See :attr:`Handle.keep`.\n"
":type keep: bool\n"
":return: The playback handle with which playback can be "
"controlled with.\n"
":rtype: :class:`Handle`");
".. classmethod:: play(sound, keep=False)\n\n"
" Plays a sound.\n\n"
" :arg sound: The sound to play.\n"
" :type sound: :class:`Sound`\n"
" :arg keep: See :attr:`Handle.keep`.\n"
" :type keep: bool\n"
" :return: The playback handle with which playback can be\n"
" controlled with.\n"
" :rtype: :class:`Handle`");
static PyObject *
Device_play(Device* self, PyObject* args, PyObject* kwds)
@@ -210,8 +212,8 @@ Device_play(Device* self, PyObject* args, PyObject* kwds)
}
PyDoc_STRVAR(M_aud_Device_stopAll_doc,
"stopAll()\n\n"
"Stops all playing and paused sounds.");
".. classmethod:: stopAll()\n\n"
" Stops all playing and paused sounds.");
static PyObject *
Device_stopAll(Device* self)
@@ -229,9 +231,9 @@ Device_stopAll(Device* self)
}
PyDoc_STRVAR(M_aud_Device_unlock_doc,
"unlock()\n\n"
"Unlocks the device after a lock call, see :meth:`lock` for "
"details.");
".. classmethod:: unlock()\n\n"
" Unlocks the device after a lock call, see :meth:`lock` for\n"
" details.");
static PyObject *
Device_unlock(Device* self)
@@ -284,7 +286,7 @@ Device_get_channels(Device* self, void* nothing)
PyDoc_STRVAR(M_aud_Device_distance_model_doc,
"The distance model of the device.\n\n"
".. seealso:: http://connect.creativelabs.com/openal/Documentation/OpenAL%201.1%20Specification.htm#_Toc199835864");
".. seealso:: `OpenAL Documentation <https://www.openal.org/documentation/>`__");
static PyObject *
Device_get_distance_model(Device* self, void* nothing)

View File

@@ -60,12 +60,12 @@ DynamicMusic_dealloc(DynamicMusicP* self)
}
PyDoc_STRVAR(M_aud_DynamicMusic_addScene_doc,
"addScene(scene)\n\n"
"Adds a new scene.\n\n"
":arg scene: The scene sound.\n"
":type scene: :class:`Sound`\n"
":return: The new scene id.\n"
":rtype: int");
".. classmethod:: addScene(scene)\n\n"
" Adds a new scene.\n\n"
" :arg scene: The scene sound.\n"
" :type scene: :class:`Sound`\n"
" :return: The new scene id.\n"
" :rtype: int");
static PyObject *
DynamicMusic_addScene(DynamicMusicP* self, PyObject* args)
@@ -90,16 +90,16 @@ DynamicMusic_addScene(DynamicMusicP* self, PyObject* args)
}
PyDoc_STRVAR(M_aud_DynamicMusic_addTransition_doc,
"addTransition(ini, end, transition)\n\n"
"Adds a new scene.\n\n"
":arg ini: the initial scene foor the transition.\n"
":type ini: int\n"
":arg end: The final scene for the transition.\n"
":type end: int\n"
":arg transition: The transition sound.\n"
":type transition: :class:`Sound`\n"
":return: false if the ini or end scenes don't exist, true othrwise.\n"
":rtype: bool");
".. classmethod:: addTransition(ini, end, transition)\n\n"
" Adds a new scene.\n\n"
" :arg ini: the initial scene foor the transition.\n"
" :type ini: int\n"
" :arg end: The final scene for the transition.\n"
" :type end: int\n"
" :arg transition: The transition sound.\n"
" :type transition: :class:`Sound`\n"
" :return: false if the ini or end scenes don't exist, true othrwise.\n"
" :rtype: bool");
static PyObject *
DynamicMusic_addTransition(DynamicMusicP* self, PyObject* args)
@@ -125,10 +125,10 @@ DynamicMusic_addTransition(DynamicMusicP* self, PyObject* args)
}
PyDoc_STRVAR(M_aud_DynamicMusic_resume_doc,
"resume()\n\n"
"Resumes playback of the scene.\n\n"
":return: Whether the action succeeded.\n"
":rtype: bool");
".. classmethod:: resume()\n\n"
" Resumes playback of the scene.\n\n"
" :return: Whether the action succeeded.\n"
" :rtype: bool");
static PyObject *
DynamicMusic_resume(DynamicMusicP* self)
@@ -145,10 +145,10 @@ DynamicMusic_resume(DynamicMusicP* self)
}
PyDoc_STRVAR(M_aud_DynamicMusic_pause_doc,
"pause()\n\n"
"Pauses playback of the scene.\n\n"
":return: Whether the action succeeded.\n"
":rtype: bool");
".. classmethod:: pause()\n\n"
" Pauses playback of the scene.\n\n"
" :return: Whether the action succeeded.\n"
" :rtype: bool");
static PyObject *
DynamicMusic_pause(DynamicMusicP* self)
@@ -165,10 +165,10 @@ DynamicMusic_pause(DynamicMusicP* self)
}
PyDoc_STRVAR(M_aud_DynamicMusic_stop_doc,
"stop()\n\n"
"Stops playback of the scene.\n\n"
":return: Whether the action succeeded.\n"
":rtype: bool\n\n");
".. classmethod:: stop()\n\n"
" Stops playback of the scene.\n\n"
" :return: Whether the action succeeded.\n"
" :rtype: bool\n\n");
static PyObject *
DynamicMusic_stop(DynamicMusicP* self)
@@ -464,4 +464,4 @@ void addDynamicMusicToModule(PyObject* module)
{
Py_INCREF(&DynamicMusicType);
PyModule_AddObject(module, "DynamicMusic", (PyObject *)&DynamicMusicType);
}
}

View File

@@ -54,16 +54,16 @@ HRTF_dealloc(HRTFP* self)
}
PyDoc_STRVAR(M_aud_HRTF_addImpulseResponse_doc,
"addImpulseResponseFromSound(sound, azimuth, elevation)\n\n"
"Adds a new hrtf to the HRTF object\n\n"
":arg sound: The sound that contains the hrtf.\n"
":type sound: :class:`Sound`\n"
":arg azimuth: The azimuth angle of the hrtf.\n"
":type azimuth: float\n"
":arg elevation: The elevation angle of the hrtf.\n"
":type elevation: float\n"
":return: Whether the action succeeded.\n"
":rtype: bool");
".. classmethod:: addImpulseResponseFromSound(sound, azimuth, elevation)\n\n"
" Adds a new hrtf to the HRTF object\n\n"
" :arg sound: The sound that contains the hrtf.\n"
" :type sound: :class:`Sound`\n"
" :arg azimuth: The azimuth angle of the hrtf.\n"
" :type azimuth: float\n"
" :arg elevation: The elevation angle of the hrtf.\n"
" :type elevation: float\n"
" :return: Whether the action succeeded.\n"
" :rtype: bool");
static PyObject *
HRTF_addImpulseResponseFromSound(HRTFP* self, PyObject* args)
@@ -90,14 +90,14 @@ HRTF_addImpulseResponseFromSound(HRTFP* self, PyObject* args)
}
PyDoc_STRVAR(M_aud_HRTF_loadLeftHrtfSet_doc,
"loadLeftHrtfSet(extension, directory)\n\n"
"Loads all HRTFs from a directory.\n\n"
":arg extension: The file extension of the hrtfs.\n"
":type extension: string\n"
":arg directory: The path to where the HRTF files are located.\n"
":type extension: string\n"
":return: The loaded :class:`HRTF` object.\n"
":rtype: :class:`HRTF`\n\n");
".. classmethod:: loadLeftHrtfSet(extension, directory)\n\n"
" Loads all HRTFs from a directory.\n\n"
" :arg extension: The file extension of the hrtfs.\n"
" :type extension: string\n"
" :arg directory: The path to where the HRTF files are located.\n"
" :type extension: string\n"
" :return: The loaded :class:`HRTF` object.\n"
" :rtype: :class:`HRTF`\n\n");
static PyObject *
HRTF_loadLeftHrtfSet(PyTypeObject* type, PyObject* args)
@@ -125,14 +125,14 @@ HRTF_loadLeftHrtfSet(PyTypeObject* type, PyObject* args)
}
PyDoc_STRVAR(M_aud_HRTF_loadRightHrtfSet_doc,
"loadLeftHrtfSet(extension, directory)\n\n"
"Loads all HRTFs from a directory.\n\n"
":arg extension: The file extension of the hrtfs.\n"
":type extension: string\n"
":arg directory: The path to where the HRTF files are located.\n"
":type extension: string\n"
":return: The loaded :class:`HRTF` object.\n"
":rtype: :class:`HRTF`\n\n");
".. classmethod:: loadLeftHrtfSet(extension, directory)\n\n"
" Loads all HRTFs from a directory.\n\n"
" :arg extension: The file extension of the hrtfs.\n"
" :type extension: string\n"
" :arg directory: The path to where the HRTF files are located.\n"
" :type extension: string\n"
" :return: The loaded :class:`HRTF` object.\n"
" :rtype: :class:`HRTF`\n\n");
static PyObject *
HRTF_loadRightHrtfSet(PyTypeObject* type, PyObject* args)

View File

@@ -38,10 +38,10 @@ Handle_dealloc(Handle* self)
}
PyDoc_STRVAR(M_aud_Handle_pause_doc,
"pause()\n\n"
"Pauses playback.\n\n"
":return: Whether the action succeeded.\n"
":rtype: bool");
".. classmethod:: pause()\n\n"
" Pauses playback.\n\n"
" :return: Whether the action succeeded.\n"
" :rtype: bool");
static PyObject *
Handle_pause(Handle* self)
@@ -58,10 +58,10 @@ Handle_pause(Handle* self)
}
PyDoc_STRVAR(M_aud_Handle_resume_doc,
"resume()\n\n"
"Resumes playback.\n\n"
":return: Whether the action succeeded.\n"
":rtype: bool");
".. classmethod:: resume()\n\n"
" Resumes playback.\n\n"
" :return: Whether the action succeeded.\n"
" :rtype: bool");
static PyObject *
Handle_resume(Handle* self)
@@ -78,11 +78,11 @@ Handle_resume(Handle* self)
}
PyDoc_STRVAR(M_aud_Handle_stop_doc,
"stop()\n\n"
"Stops playback.\n\n"
":return: Whether the action succeeded.\n"
":rtype: bool\n\n"
".. note:: This makes the handle invalid.");
".. classmethod:: stop()\n\n"
" Stops playback.\n\n"
" :return: Whether the action succeeded.\n"
" :rtype: bool\n\n"
" .. note:: This makes the handle invalid.");
static PyObject *
Handle_stop(Handle* self)
@@ -1122,5 +1122,3 @@ void addHandleToModule(PyObject* module)
Py_INCREF(&HandleType);
PyModule_AddObject(module, "Handle", (PyObject *)&HandleType);
}

View File

@@ -60,14 +60,15 @@ PlaybackManager_dealloc(PlaybackManagerP* self)
}
PyDoc_STRVAR(M_aud_PlaybackManager_play_doc,
"setVolume(sound, catKey)\n\n"
"Plays a sound through the playback manager and assigns it to a category.\n\n"
":arg sound: The sound to play.\n"
":type sound: :class:`Sound`\n"
":arg catKey: the key of the category in which the sound will be added, if it doesn't exist, a new one will be created.\n"
":type catKey: int\n"
":return: The playback handle with which playback can be controlled with.\n"
":rtype: :class:`Handle`");
".. classmethod:: setVolume(sound, catKey)\n\n"
" Plays a sound through the playback manager and assigns it to a category.\n\n"
" :arg sound: The sound to play.\n"
" :type sound: :class:`Sound`\n"
" :arg catKey: the key of the category in which the sound will be added,\n"
" if it doesn't exist, a new one will be created.\n"
" :type catKey: int\n"
" :return: The playback handle with which playback can be controlled with.\n"
" :rtype: :class:`Handle`");
static PyObject *
PlaybackManager_play(PlaybackManagerP* self, PyObject* args)
@@ -103,12 +104,12 @@ PlaybackManager_play(PlaybackManagerP* self, PyObject* args)
}
PyDoc_STRVAR(M_aud_PlaybackManager_resume_doc,
"resume(catKey)\n\n"
"Resumes playback of the catgory.\n\n"
":arg catKey: the key of the category.\n"
":type catKey: int\n"
":return: Whether the action succeeded.\n"
":rtype: bool");
".. classmethod:: resume(catKey)\n\n"
" Resumes playback of the catgory.\n\n"
" :arg catKey: the key of the category.\n"
" :type catKey: int\n"
" :return: Whether the action succeeded.\n"
" :rtype: bool");
static PyObject *
PlaybackManager_resume(PlaybackManagerP* self, PyObject* args)
@@ -130,12 +131,12 @@ PlaybackManager_resume(PlaybackManagerP* self, PyObject* args)
}
PyDoc_STRVAR(M_aud_PlaybackManager_pause_doc,
"pause(catKey)\n\n"
"Pauses playback of the category.\n\n"
":arg catKey: the key of the category.\n"
":type catKey: int\n"
":return: Whether the action succeeded.\n"
":rtype: bool");
".. classmethod:: pause(catKey)\n\n"
" Pauses playback of the category.\n\n"
" :arg catKey: the key of the category.\n"
" :type catKey: int\n"
" :return: Whether the action succeeded.\n"
" :rtype: bool");
static PyObject *
PlaybackManager_pause(PlaybackManagerP* self, PyObject* args)
@@ -157,12 +158,12 @@ PlaybackManager_pause(PlaybackManagerP* self, PyObject* args)
}
PyDoc_STRVAR(M_aud_PlaybackManager_add_category_doc,
"addCategory(volume)\n\n"
"Adds a category with a custom volume.\n\n"
":arg volume: The volume for ther new category.\n"
":type volume: float\n"
":return: The key of the new category.\n"
":rtype: int\n\n");
".. classmethod:: addCategory(volume)\n\n"
" Adds a category with a custom volume.\n\n"
" :arg volume: The volume for ther new category.\n"
" :type volume: float\n"
" :return: The key of the new category.\n"
" :rtype: int\n\n");
static PyObject *
PlaybackManager_add_category(PlaybackManagerP* self, PyObject* args)
@@ -184,12 +185,12 @@ PlaybackManager_add_category(PlaybackManagerP* self, PyObject* args)
}
PyDoc_STRVAR(M_aud_PlaybackManager_get_volume_doc,
"getVolume(catKey)\n\n"
"Retrieves the volume of a category.\n\n"
":arg catKey: the key of the category.\n"
":type catKey: int\n"
":return: The volume of the cateogry.\n"
":rtype: float\n\n");
".. classmethod:: getVolume(catKey)\n\n"
" Retrieves the volume of a category.\n\n"
" :arg catKey: the key of the category.\n"
" :type catKey: int\n"
" :return: The volume of the cateogry.\n"
" :rtype: float\n\n");
static PyObject *
PlaybackManager_get_volume(PlaybackManagerP* self, PyObject* args)
@@ -211,14 +212,14 @@ PlaybackManager_get_volume(PlaybackManagerP* self, PyObject* args)
}
PyDoc_STRVAR(M_aud_PlaybackManager_set_volume_doc,
"setVolume(volume, catKey)\n\n"
"Changes the volume of a category.\n\n"
":arg volume: the new volume value.\n"
":type volume: float\n"
":arg catKey: the key of the category.\n"
":type catKey: int\n"
":return: Whether the action succeeded.\n"
":rtype: int\n\n");
".. classmethod:: setVolume(volume, catKey)\n\n"
" Changes the volume of a category.\n\n"
" :arg volume: the new volume value.\n"
" :type volume: float\n"
" :arg catKey: the key of the category.\n"
" :type catKey: int\n"
" :return: Whether the action succeeded.\n"
" :rtype: int\n\n");
static PyObject *
PlaybackManager_set_volume(PlaybackManagerP* self, PyObject* args)
@@ -241,12 +242,12 @@ PlaybackManager_set_volume(PlaybackManagerP* self, PyObject* args)
}
PyDoc_STRVAR(M_aud_PlaybackManager_stop_doc,
"stop(catKey)\n\n"
"Stops playback of the category.\n\n"
":arg catKey: the key of the category.\n"
":type catKey: int\n"
":return: Whether the action succeeded.\n"
":rtype: bool\n\n");
".. classmethod:: stop(catKey)\n\n"
" Stops playback of the category.\n\n"
" :arg catKey: the key of the category.\n"
" :type catKey: int\n"
" :return: Whether the action succeeded.\n"
" :rtype: bool\n\n");
static PyObject *
PlaybackManager_stop(PlaybackManagerP* self, PyObject* args)
@@ -268,8 +269,8 @@ PlaybackManager_stop(PlaybackManagerP* self, PyObject* args)
}
PyDoc_STRVAR(M_aud_PlaybackManager_clean_doc,
"clean()\n\n"
"Cleans all the invalid and finished sound from the playback manager.\n\n");
".. classmethod:: clean()\n\n"
" Cleans all the invalid and finished sound from the playback manager.\n\n");
static PyObject *
PlaybackManager_clean(PlaybackManagerP* self)

View File

@@ -99,18 +99,18 @@ Sequence_new(PyTypeObject* type, PyObject* args, PyObject* kwds)
}
PyDoc_STRVAR(M_aud_Sequence_add_doc,
"add()\n\n"
"Adds a new entry to the sequence.\n\n"
":arg sound: The sound this entry should play.\n"
":type sound: :class:`Sound`\n"
":arg begin: The start time.\n"
":type begin: float\n"
":arg end: The end time or a negative value if determined by the sound.\n"
":type end: float\n"
":arg skip: How much seconds should be skipped at the beginning.\n"
":type skip: float\n"
":return: The entry added.\n"
":rtype: :class:`SequenceEntry`");
".. classmethod:: add()\n\n"
" Adds a new entry to the sequence.\n\n"
" :arg sound: The sound this entry should play.\n"
" :type sound: :class:`Sound`\n"
" :arg begin: The start time.\n"
" :type begin: float\n"
" :arg end: The end time or a negative value if determined by the sound.\n"
" :type end: float\n"
" :arg skip: How much seconds should be skipped at the beginning.\n"
" :type skip: float\n"
" :return: The entry added.\n"
" :rtype: :class:`SequenceEntry`");
static PyObject *
Sequence_add(Sequence* self, PyObject* args, PyObject* kwds)
@@ -151,10 +151,10 @@ Sequence_add(Sequence* self, PyObject* args, PyObject* kwds)
}
PyDoc_STRVAR(M_aud_Sequence_remove_doc,
"remove()\n\n"
"Removes an entry from the sequence.\n\n"
":arg entry: The entry to remove.\n"
":type entry: :class:`SequenceEntry`\n");
".. classmethod:: remove()\n\n"
" Removes an entry from the sequence.\n\n"
" :arg entry: The entry to remove.\n"
" :type entry: :class:`SequenceEntry`\n");
static PyObject *
Sequence_remove(Sequence* self, PyObject* args)
@@ -183,16 +183,16 @@ Sequence_remove(Sequence* self, PyObject* args)
}
PyDoc_STRVAR(M_aud_Sequence_setAnimationData_doc,
"setAnimationData()\n\n"
"Writes animation data to a sequence.\n\n"
":arg type: The type of animation data.\n"
":type type: int\n"
":arg frame: The frame this data is for.\n"
":type frame: int\n"
":arg data: The data to write.\n"
":type data: sequence of float\n"
":arg animated: Whether the attribute is animated.\n"
":type animated: bool");
".. classmethod:: setAnimationData()\n\n"
" Writes animation data to a sequence.\n\n"
" :arg type: The type of animation data.\n"
" :type type: int\n"
" :arg frame: The frame this data is for.\n"
" :type frame: int\n"
" :arg data: The data to write.\n"
" :type data: sequence of float\n"
" :arg animated: Whether the attribute is animated.\n"
" :type animated: bool");
static PyObject *
Sequence_setAnimationData(Sequence* self, PyObject* args)
@@ -325,7 +325,7 @@ Sequence_set_channels(Sequence* self, PyObject* args, void* nothing)
PyDoc_STRVAR(M_aud_Sequence_distance_model_doc,
"The distance model of the sequence.\n\n"
".. seealso:: http://connect.creativelabs.com/openal/Documentation/OpenAL%201.1%20Specification.htm#_Toc199835864");
".. seealso:: `OpenAL Documentation <https://www.openal.org/documentation/>`__");
static PyObject *
Sequence_get_distance_model(Sequence* self, void* nothing)

View File

@@ -43,14 +43,14 @@ SequenceEntry_dealloc(SequenceEntry* self)
}
PyDoc_STRVAR(M_aud_SequenceEntry_move_doc,
"move()\n\n"
"Moves the entry.\n\n"
":arg begin: The new start time.\n"
":type begin: float\n"
":arg end: The new end time or a negative value if unknown.\n"
":type end: float\n"
":arg skip: How many seconds to skip at the beginning.\n"
":type skip: float\n");
".. classmethod:: move()\n\n"
" Moves the entry.\n\n"
" :arg begin: The new start time.\n"
" :type begin: float\n"
" :arg end: The new end time or a negative value if unknown.\n"
" :type end: float\n"
" :arg skip: How many seconds to skip at the beginning.\n"
" :type skip: float\n");
static PyObject *
SequenceEntry_move(SequenceEntry* self, PyObject* args)
@@ -73,16 +73,16 @@ SequenceEntry_move(SequenceEntry* self, PyObject* args)
}
PyDoc_STRVAR(M_aud_SequenceEntry_setAnimationData_doc,
"setAnimationData()\n\n"
"Writes animation data to a sequenced entry.\n\n"
":arg type: The type of animation data.\n"
":type type: int\n"
":arg frame: The frame this data is for.\n"
":type frame: int\n"
":arg data: The data to write.\n"
":type data: sequence of float\n"
":arg animated: Whether the attribute is animated.\n"
":type animated: bool");
".. classmethod:: setAnimationData()\n\n"
" Writes animation data to a sequenced entry.\n\n"
" :arg type: The type of animation data.\n"
" :type type: int\n"
" :arg frame: The frame this data is for.\n"
" :type frame: int\n"
" :arg data: The data to write.\n"
" :type data: sequence of float\n"
" :arg animated: Whether the attribute is animated.\n"
" :type animated: bool");
static PyObject *
SequenceEntry_setAnimationData(SequenceEntry* self, PyObject* args)

View File

@@ -114,11 +114,11 @@ Sound_new(PyTypeObject* type, PyObject* args, PyObject* kwds)
}
PyDoc_STRVAR(M_aud_Sound_data_doc,
"data()\n\n"
"Retrieves the data of the sound as numpy array.\n\n"
":return: A two dimensional numpy float array.\n"
":rtype: :class:`numpy.ndarray`\n\n"
".. note:: Best efficiency with cached sounds.");
".. classmethod:: data()\n\n"
" Retrieves the data of the sound as numpy array.\n\n"
" :return: A two dimensional numpy float array.\n"
" :rtype: :class:`numpy.ndarray`\n\n"
" .. note:: Best efficiency with cached sounds.");
static PyObject *
Sound_data(Sound* self)
@@ -145,24 +145,24 @@ Sound_data(Sound* self)
}
PyDoc_STRVAR(M_aud_Sound_write_doc,
"write(filename, rate, channels, format, container, codec, bitrate, buffersize)\n\n"
"Writes the sound to a file.\n\n"
":arg filename: The path to write to.\n"
":type filename: string\n"
":arg rate: The sample rate to write with.\n"
":type rate: int\n"
":arg channels: The number of channels to write with.\n"
":type channels: int\n"
":arg format: The sample format to write with.\n"
":type format: int\n"
":arg container: The container format for the file.\n"
":type container: int\n"
":arg codec: The codec to use in the file.\n"
":type codec: int\n"
":arg bitrate: The bitrate to write with.\n"
":type bitrate: int\n"
":arg buffersize: The size of the writing buffer.\n"
":type buffersize: int\n");
".. classmethod:: write(filename, rate, channels, format, container, codec, bitrate, buffersize)\n\n"
" Writes the sound to a file.\n\n"
" :arg filename: The path to write to.\n"
" :type filename: string\n"
" :arg rate: The sample rate to write with.\n"
" :type rate: int\n"
" :arg channels: The number of channels to write with.\n"
" :type channels: int\n"
" :arg format: The sample format to write with.\n"
" :type format: int\n"
" :arg container: The container format for the file.\n"
" :type container: int\n"
" :arg codec: The codec to use in the file.\n"
" :type codec: int\n"
" :arg bitrate: The bitrate to write with.\n"
" :type bitrate: int\n"
" :arg buffersize: The size of the writing buffer.\n"
" :type buffersize: int");
static PyObject *
Sound_write(Sound* self, PyObject* args, PyObject* kwds)
@@ -286,14 +286,14 @@ Sound_write(Sound* self, PyObject* args, PyObject* kwds)
}
PyDoc_STRVAR(M_aud_Sound_buffer_doc,
"buffer(data, rate)\n\n"
"Creates a sound from a data buffer.\n\n"
":arg data: The data as two dimensional numpy array.\n"
":type data: numpy.ndarray\n"
":arg rate: The sample rate.\n"
":type rate: double\n"
":return: The created :class:`Sound` object.\n"
":rtype: :class:`Sound`");
".. classmethod:: buffer(data, rate)\n\n"
" Creates a sound from a data buffer.\n\n"
" :arg data: The data as two dimensional numpy array.\n"
" :type data: numpy.ndarray\n"
" :arg rate: The sample rate.\n"
" :type rate: double\n"
" :return: The created :class:`Sound` object.\n"
" :rtype: :class:`Sound`");
static PyObject *
Sound_buffer(PyTypeObject* type, PyObject* args)
@@ -356,16 +356,17 @@ Sound_buffer(PyTypeObject* type, PyObject* args)
}
PyDoc_STRVAR(M_aud_Sound_cache_doc,
"cache()\n\n"
"Caches a sound into RAM.\n"
"This saves CPU usage needed for decoding and file access if the "
"underlying sound reads from a file on the harddisk, but it "
"consumes a lot of memory.\n\n"
":return: The created :class:`Sound` object.\n"
":rtype: :class:`Sound`\n\n"
".. note:: Only known-length factories can be buffered.\n\n"
".. warning:: Raw PCM data needs a lot of space, only buffer "
"short factories.");
".. classmethod:: cache()\n\n"
" Caches a sound into RAM.\n\n"
" This saves CPU usage needed for decoding and file access if the\n"
" underlying sound reads from a file on the harddisk,\n"
" but it consumes a lot of memory.\n\n"
" :return: The created :class:`Sound` object.\n"
" :rtype: :class:`Sound`\n\n"
" .. note:: Only known-length factories can be buffered.\n\n"
" .. warning::\n\n"
" Raw PCM data needs a lot of space, only buffer\n"
" short factories.");
static PyObject *
Sound_cache(Sound* self)
@@ -391,15 +392,16 @@ Sound_cache(Sound* self)
}
PyDoc_STRVAR(M_aud_Sound_file_doc,
"file(filename)\n\n"
"Creates a sound object of a sound file.\n\n"
":arg filename: Path of the file.\n"
":type filename: string\n"
":return: The created :class:`Sound` object.\n"
":rtype: :class:`Sound`\n\n"
".. warning:: If the file doesn't exist or can't be read you will "
"not get an exception immediately, but when you try to start "
"playback of that sound.");
".. classmethod:: file(filename)\n\n"
" Creates a sound object of a sound file.\n\n"
" :arg filename: Path of the file.\n"
" :type filename: string\n"
" :return: The created :class:`Sound` object.\n"
" :rtype: :class:`Sound`\n\n"
" .. warning::\n\n"
" If the file doesn't exist or can't be read you will\n"
" not get an exception immediately, but when you try to start\n"
" playback of that sound.\n");
static PyObject *
Sound_file(PyTypeObject* type, PyObject* args)
@@ -430,15 +432,15 @@ Sound_file(PyTypeObject* type, PyObject* args)
}
PyDoc_STRVAR(M_aud_Sound_sawtooth_doc,
"sawtooth(frequency, rate=48000)\n\n"
"Creates a sawtooth sound which plays a sawtooth wave.\n\n"
":arg frequency: The frequency of the sawtooth wave in Hz.\n"
":type frequency: float\n"
":arg rate: The sampling rate in Hz. It's recommended to set this "
"value to the playback device's samling rate to avoid resamping.\n"
":type rate: int\n"
":return: The created :class:`Sound` object.\n"
":rtype: :class:`Sound`");
".. classmethod:: sawtooth(frequency, rate=48000)\n\n"
" Creates a sawtooth sound which plays a sawtooth wave.\n\n"
" :arg frequency: The frequency of the sawtooth wave in Hz.\n"
" :type frequency: float\n"
" :arg rate: The sampling rate in Hz. It's recommended to set this\n"
" value to the playback device's samling rate to avoid resamping.\n"
" :type rate: int\n"
" :return: The created :class:`Sound` object.\n"
" :rtype: :class:`Sound`");
static PyObject *
Sound_sawtooth(PyTypeObject* type, PyObject* args)
@@ -470,13 +472,13 @@ Sound_sawtooth(PyTypeObject* type, PyObject* args)
}
PyDoc_STRVAR(M_aud_Sound_silence_doc,
"silence(rate=48000)\n\n"
"Creates a silence sound which plays simple silence.\n\n"
":arg rate: The sampling rate in Hz. It's recommended to set this "
"value to the playback device's samling rate to avoid resamping.\n"
":type rate: int\n"
":return: The created :class:`Sound` object.\n"
":rtype: :class:`Sound`");
".. classmethod:: silence(rate=48000)\n\n"
" Creates a silence sound which plays simple silence.\n\n"
" :arg rate: The sampling rate in Hz. It's recommended to set this\n"
" value to the playback device's samling rate to avoid resamping.\n"
" :type rate: int\n"
" :return: The created :class:`Sound` object.\n"
" :rtype: :class:`Sound`");
static PyObject *
Sound_silence(PyTypeObject* type, PyObject* args)
@@ -507,15 +509,15 @@ Sound_silence(PyTypeObject* type, PyObject* args)
}
PyDoc_STRVAR(M_aud_Sound_sine_doc,
"sine(frequency, rate=48000)\n\n"
"Creates a sine sound which plays a sine wave.\n\n"
":arg frequency: The frequency of the sine wave in Hz.\n"
":type frequency: float\n"
":arg rate: The sampling rate in Hz. It's recommended to set this "
"value to the playback device's samling rate to avoid resamping.\n"
":type rate: int\n"
":return: The created :class:`Sound` object.\n"
":rtype: :class:`Sound`");
".. classmethod:: sine(frequency, rate=48000)\n\n"
" Creates a sine sound which plays a sine wave.\n\n"
" :arg frequency: The frequency of the sine wave in Hz.\n"
" :type frequency: float\n"
" :arg rate: The sampling rate in Hz. It's recommended to set this\n"
" value to the playback device's samling rate to avoid resamping.\n"
" :type rate: int\n"
" :return: The created :class:`Sound` object.\n"
" :rtype: :class:`Sound`");
static PyObject *
Sound_sine(PyTypeObject* type, PyObject* args)
@@ -547,15 +549,15 @@ Sound_sine(PyTypeObject* type, PyObject* args)
}
PyDoc_STRVAR(M_aud_Sound_square_doc,
"square(frequency, rate=48000)\n\n"
"Creates a square sound which plays a square wave.\n\n"
":arg frequency: The frequency of the square wave in Hz.\n"
":type frequency: float\n"
":arg rate: The sampling rate in Hz. It's recommended to set this "
"value to the playback device's samling rate to avoid resamping.\n"
":type rate: int\n"
":return: The created :class:`Sound` object.\n"
":rtype: :class:`Sound`");
".. classmethod:: square(frequency, rate=48000)\n\n"
" Creates a square sound which plays a square wave.\n\n"
" :arg frequency: The frequency of the square wave in Hz.\n"
" :type frequency: float\n"
" :arg rate: The sampling rate in Hz. It's recommended to set this\n"
" value to the playback device's samling rate to avoid resamping.\n"
" :type rate: int\n"
" :return: The created :class:`Sound` object.\n"
" :rtype: :class:`Sound`");
static PyObject *
Sound_square(PyTypeObject* type, PyObject* args)
@@ -587,15 +589,15 @@ Sound_square(PyTypeObject* type, PyObject* args)
}
PyDoc_STRVAR(M_aud_Sound_triangle_doc,
"triangle(frequency, rate=48000)\n\n"
"Creates a triangle sound which plays a triangle wave.\n\n"
":arg frequency: The frequency of the triangle wave in Hz.\n"
":type frequency: float\n"
":arg rate: The sampling rate in Hz. It's recommended to set this "
"value to the playback device's samling rate to avoid resamping.\n"
":type rate: int\n"
":return: The created :class:`Sound` object.\n"
":rtype: :class:`Sound`");
".. classmethod:: triangle(frequency, rate=48000)\n\n"
" Creates a triangle sound which plays a triangle wave.\n\n"
" :arg frequency: The frequency of the triangle wave in Hz.\n"
" :type frequency: float\n"
" :arg rate: The sampling rate in Hz. It's recommended to set this\n"
" value to the playback device's samling rate to avoid resamping.\n"
" :type rate: int\n"
" :return: The created :class:`Sound` object.\n"
" :rtype: :class:`Sound`");
static PyObject *
Sound_triangle(PyTypeObject* type, PyObject* args)
@@ -627,14 +629,16 @@ Sound_triangle(PyTypeObject* type, PyObject* args)
}
PyDoc_STRVAR(M_aud_Sound_accumulate_doc,
"accumulate(additive=False)\n\n"
"Accumulates a sound by summing over positive input differences thus generating a monotonic sigal. "
"If additivity is set to true negative input differences get added too, but positive ones with a factor of two. "
"Note that with additivity the signal is not monotonic anymore.\n\n"
":arg additive: Whether the accumulation should be additive or not.\n"
":type time: bool\n"
":return: The created :class:`Sound` object.\n"
":rtype: :class:`Sound`");
".. classmethod:: accumulate(additive=False)\n\n"
" Accumulates a sound by summing over positive input\n"
" differences thus generating a monotonic sigal.\n"
" If additivity is set to true negative input differences get added too,\n"
" but positive ones with a factor of two.\n\n"
" Note that with additivity the signal is not monotonic anymore.\n\n"
" :arg additive: Whether the accumulation should be additive or not.\n"
" :type time: bool\n"
" :return: The created :class:`Sound` object.\n"
" :rtype: :class:`Sound`");
static PyObject *
Sound_accumulate(Sound* self, PyObject* args)
@@ -677,19 +681,19 @@ Sound_accumulate(Sound* self, PyObject* args)
}
PyDoc_STRVAR(M_aud_Sound_ADSR_doc,
"ADSR(attack,decay,sustain,release)\n\n"
"Attack-Decay-Sustain-Release envelopes the volume of a sound. "
"Note: there is currently no way to trigger the release with this API.\n\n"
":arg attack: The attack time in seconds.\n"
":type attack: float\n"
":arg decay: The decay time in seconds.\n"
":type decay: float\n"
":arg sustain: The sustain level.\n"
":type sustain: float\n"
":arg release: The release level.\n"
":type release: float\n"
":return: The created :class:`Sound` object.\n"
":rtype: :class:`Sound`");
".. classmethod:: ADSR(attack, decay, sustain, release)\n\n"
" Attack-Decay-Sustain-Release envelopes the volume of a sound.\n"
" Note: there is currently no way to trigger the release with this API.\n\n"
" :arg attack: The attack time in seconds.\n"
" :type attack: float\n"
" :arg decay: The decay time in seconds.\n"
" :type decay: float\n"
" :arg sustain: The sustain level.\n"
" :type sustain: float\n"
" :arg release: The release level.\n"
" :type release: float\n"
" :return: The created :class:`Sound` object.\n"
" :rtype: :class:`Sound`");
static PyObject *
Sound_ADSR(Sound* self, PyObject* args)
@@ -720,14 +724,12 @@ Sound_ADSR(Sound* self, PyObject* args)
}
PyDoc_STRVAR(M_aud_Sound_delay_doc,
"delay(time)\n\n"
"Delays by playing adding silence in front of the other sound's "
"data.\n\n"
":arg time: How many seconds of silence should be added before "
"the sound.\n"
":type time: float\n"
":return: The created :class:`Sound` object.\n"
":rtype: :class:`Sound`");
".. classmethod:: delay(time)\n\n"
" Delays by playing adding silence in front of the other sound's data.\n\n"
" :arg time: How many seconds of silence should be added before the sound.\n"
" :type time: float\n"
" :return: The created :class:`Sound` object.\n"
" :rtype: :class:`Sound`");
static PyObject *
Sound_delay(Sound* self, PyObject* args)
@@ -758,19 +760,18 @@ Sound_delay(Sound* self, PyObject* args)
}
PyDoc_STRVAR(M_aud_Sound_envelope_doc,
"envelope(attack, release, threshold, arthreshold)\n\n"
"Delays by playing adding silence in front of the other sound's "
"data.\n\n"
":arg attack: The attack factor.\n"
":type attack: float\n"
":arg release: The release factor.\n"
":type release: float\n"
":arg threshold: The general threshold value.\n"
":type threshold: float\n"
":arg arthreshold: The attack/release threshold value.\n"
":type arthreshold: float\n"
":return: The created :class:`Sound` object.\n"
":rtype: :class:`Sound`");
".. classmethod:: envelope(attack, release, threshold, arthreshold)\n\n"
" Delays by playing adding silence in front of the other sound's data.\n\n"
" :arg attack: The attack factor.\n"
" :type attack: float\n"
" :arg release: The release factor.\n"
" :type release: float\n"
" :arg threshold: The general threshold value.\n"
" :type threshold: float\n"
" :arg arthreshold: The attack/release threshold value.\n"
" :type arthreshold: float\n"
" :return: The created :class:`Sound` object.\n"
" :rtype: :class:`Sound`");
static PyObject *
Sound_envelope(Sound* self, PyObject* args)
@@ -801,16 +802,16 @@ Sound_envelope(Sound* self, PyObject* args)
}
PyDoc_STRVAR(M_aud_Sound_fadein_doc,
"fadein(start, length)\n\n"
"Fades a sound in by raising the volume linearly in the given "
"time interval.\n\n"
":arg start: Time in seconds when the fading should start.\n"
":type start: float\n"
":arg length: Time in seconds how long the fading should last.\n"
":type length: float\n"
":return: The created :class:`Sound` object.\n"
":rtype: :class:`Sound`\n\n"
".. note:: Before the fade starts it plays silence.");
".. classmethod:: fadein(start, length)\n\n"
" Fades a sound in by raising the volume linearly in the given\n"
" time interval.\n\n"
" :arg start: Time in seconds when the fading should start.\n"
" :type start: float\n"
" :arg length: Time in seconds how long the fading should last.\n"
" :type length: float\n"
" :return: The created :class:`Sound` object.\n"
" :rtype: :class:`Sound`\n\n"
" .. note:: Before the fade starts it plays silence.");
static PyObject *
Sound_fadein(Sound* self, PyObject* args)
@@ -841,17 +842,18 @@ Sound_fadein(Sound* self, PyObject* args)
}
PyDoc_STRVAR(M_aud_Sound_fadeout_doc,
"fadeout(start, length)\n\n"
"Fades a sound in by lowering the volume linearly in the given "
"time interval.\n\n"
":arg start: Time in seconds when the fading should start.\n"
":type start: float\n"
":arg length: Time in seconds how long the fading should last.\n"
":type length: float\n"
":return: The created :class:`Sound` object.\n"
":rtype: :class:`Sound`\n\n"
".. note:: After the fade this sound plays silence, so that "
"the length of the sound is not altered.");
".. classmethod:: fadeout(start, length)\n\n"
" Fades a sound in by lowering the volume linearly in the given\n"
" time interval.\n\n"
" :arg start: Time in seconds when the fading should start.\n"
" :type start: float\n"
" :arg length: Time in seconds how long the fading should last.\n"
" :type length: float\n"
" :return: The created :class:`Sound` object.\n"
" :rtype: :class:`Sound`\n\n"
" .. note::\n\n"
" After the fade this sound plays silence, so that\n"
" the length of the sound is not altered.");
static PyObject *
Sound_fadeout(Sound* self, PyObject* args)
@@ -882,20 +884,20 @@ Sound_fadeout(Sound* self, PyObject* args)
}
PyDoc_STRVAR(M_aud_Sound_filter_doc,
"filter(b, a = (1))\n\n"
"Filters a sound with the supplied IIR filter coefficients.\n"
"Without the second parameter you'll get a FIR filter.\n"
"If the first value of the a sequence is 0 it will be set to 1 "
"automatically.\n"
"If the first value of the a sequence is neither 0 nor 1, all "
"filter coefficients will be scaled by this value so that it is 1 "
"in the end, you don't have to scale yourself.\n\n"
":arg b: The nominator filter coefficients.\n"
":type b: sequence of float\n"
":arg a: The denominator filter coefficients.\n"
":type a: sequence of float\n"
":return: The created :class:`Sound` object.\n"
":rtype: :class:`Sound`");
".. classmethod:: filter(b, a = (1))\n\n"
" Filters a sound with the supplied IIR filter coefficients.\n"
" Without the second parameter you'll get a FIR filter.\n\n"
" If the first value of the a sequence is 0,\n"
" it will be set to 1 automatically.\n"
" If the first value of the a sequence is neither 0 nor 1, all\n"
" filter coefficients will be scaled by this value so that it is 1\n"
" in the end, you don't have to scale yourself.\n\n"
" :arg b: The nominator filter coefficients.\n"
" :type b: sequence of float\n"
" :arg a: The denominator filter coefficients.\n"
" :type a: sequence of float\n"
" :return: The created :class:`Sound` object.\n"
" :rtype: :class:`Sound`");
static PyObject *
Sound_filter(Sound* self, PyObject* args)
@@ -982,15 +984,15 @@ Sound_filter(Sound* self, PyObject* args)
}
PyDoc_STRVAR(M_aud_Sound_highpass_doc,
"highpass(frequency, Q=0.5)\n\n"
"Creates a second order highpass filter based on the transfer "
"function H(s) = s^2 / (s^2 + s/Q + 1)\n\n"
":arg frequency: The cut off trequency of the highpass.\n"
":type frequency: float\n"
":arg Q: Q factor of the lowpass.\n"
":type Q: float\n"
":return: The created :class:`Sound` object.\n"
":rtype: :class:`Sound`");
".. classmethod:: highpass(frequency, Q=0.5)\n\n"
" Creates a second order highpass filter based on the transfer\n"
" function :math:`H(s) = s^2 / (s^2 + s/Q + 1)`\n\n"
" :arg frequency: The cut off trequency of the highpass.\n"
" :type frequency: float\n"
" :arg Q: Q factor of the lowpass.\n"
" :type Q: float\n"
" :return: The created :class:`Sound` object.\n"
" :rtype: :class:`Sound`");
static PyObject *
Sound_highpass(Sound* self, PyObject* args)
@@ -1022,14 +1024,14 @@ Sound_highpass(Sound* self, PyObject* args)
}
PyDoc_STRVAR(M_aud_Sound_limit_doc,
"limit(start, end)\n\n"
"Limits a sound within a specific start and end time.\n\n"
":arg start: Start time in seconds.\n"
":type start: float\n"
":arg end: End time in seconds.\n"
":type end: float\n"
":return: The created :class:`Sound` object.\n"
":rtype: :class:`Sound`");
".. classmethod:: limit(start, end)\n\n"
" Limits a sound within a specific start and end time.\n\n"
" :arg start: Start time in seconds.\n"
" :type start: float\n"
" :arg end: End time in seconds.\n"
" :type end: float\n"
" :return: The created :class:`Sound` object.\n"
" :rtype: :class:`Sound`");
static PyObject *
Sound_limit(Sound* self, PyObject* args)
@@ -1060,15 +1062,16 @@ Sound_limit(Sound* self, PyObject* args)
}
PyDoc_STRVAR(M_aud_Sound_loop_doc,
"loop(count)\n\n"
"Loops a sound.\n\n"
":arg count: How often the sound should be looped. "
"Negative values mean endlessly.\n"
":type count: integer\n"
":return: The created :class:`Sound` object.\n"
":rtype: :class:`Sound`\n\n"
".. note:: This is a filter function, you might consider using "
":attr:`Handle.loop_count` instead.");
".. classmethod:: loop(count)\n\n"
" Loops a sound.\n\n"
" :arg count: How often the sound should be looped.\n"
" Negative values mean endlessly.\n"
" :type count: integer\n"
" :return: The created :class:`Sound` object.\n"
" :rtype: :class:`Sound`\n\n"
" .. note::\n\n"
" This is a filter function, you might consider using\n"
" :attr:`Handle.loop_count` instead.");
static PyObject *
Sound_loop(Sound* self, PyObject* args)
@@ -1099,15 +1102,15 @@ Sound_loop(Sound* self, PyObject* args)
}
PyDoc_STRVAR(M_aud_Sound_lowpass_doc,
"lowpass(frequency, Q=0.5)\n\n"
"Creates a second order lowpass filter based on the transfer "
"function H(s) = 1 / (s^2 + s/Q + 1)\n\n"
":arg frequency: The cut off trequency of the lowpass.\n"
":type frequency: float\n"
":arg Q: Q factor of the lowpass.\n"
":type Q: float\n"
":return: The created :class:`Sound` object.\n"
":rtype: :class:`Sound`");
".. classmethod:: lowpass(frequency, Q=0.5)\n\n"
" Creates a second order lowpass filter based on the transfer "
" function :math:`H(s) = 1 / (s^2 + s/Q + 1)`\n\n"
" :arg frequency: The cut off trequency of the lowpass.\n"
" :type frequency: float\n"
" :arg Q: Q factor of the lowpass.\n"
" :type Q: float\n"
" :return: The created :class:`Sound` object.\n"
" :rtype: :class:`Sound`");
static PyObject *
Sound_lowpass(Sound* self, PyObject* args)
@@ -1139,14 +1142,15 @@ Sound_lowpass(Sound* self, PyObject* args)
}
PyDoc_STRVAR(M_aud_Sound_modulate_doc,
"modulate(sound)\n\n"
"Modulates two factories.\n\n"
":arg sound: The sound to modulate over the other.\n"
":type sound: :class:`Sound`\n"
":return: The created :class:`Sound` object.\n"
":rtype: :class:`Sound`\n\n"
".. note:: The two factories have to have the same specifications "
"(channels and samplerate).");
".. classmethod:: modulate(sound)\n\n"
" Modulates two factories.\n\n"
" :arg sound: The sound to modulate over the other.\n"
" :type sound: :class:`Sound`\n"
" :return: The created :class:`Sound` object.\n"
" :rtype: :class:`Sound`\n\n"
" .. note::\n\n"
" The two factories have to have the same specifications\n"
" (channels and samplerate).");
static PyObject *
Sound_modulate(Sound* self, PyObject* object)
@@ -1180,17 +1184,19 @@ Sound_modulate(Sound* self, PyObject* object)
}
PyDoc_STRVAR(M_aud_Sound_pitch_doc,
"pitch(factor)\n\n"
"Changes the pitch of a sound with a specific factor.\n\n"
":arg factor: The factor to change the pitch with.\n"
":type factor: float\n"
":return: The created :class:`Sound` object.\n"
":rtype: :class:`Sound`\n\n"
".. note:: This is done by changing the sample rate of the "
"underlying sound, which has to be an integer, so the factor "
"value rounded and the factor may not be 100 % accurate.\n\n"
".. note:: This is a filter function, you might consider using "
":attr:`Handle.pitch` instead.");
".. classmethod:: pitch(factor)\n\n"
" Changes the pitch of a sound with a specific factor.\n\n"
" :arg factor: The factor to change the pitch with.\n"
" :type factor: float\n"
" :return: The created :class:`Sound` object.\n"
" :rtype: :class:`Sound`\n\n"
" .. note::\n\n"
" This is done by changing the sample rate of the\n"
" underlying sound, which has to be an integer, so the factor\n"
" value rounded and the factor may not be 100 % accurate.\n\n"
" .. note::\n\n"
" This is a filter function, you might consider using\n"
" :attr:`Handle.pitch` instead.");
static PyObject *
Sound_pitch(Sound* self, PyObject* args)
@@ -1221,12 +1227,12 @@ Sound_pitch(Sound* self, PyObject* args)
}
PyDoc_STRVAR(M_aud_Sound_rechannel_doc,
"rechannel(channels)\n\n"
"Rechannels the sound.\n\n"
":arg channels: The new channel configuration.\n"
":type channels: int\n"
":return: The created :class:`Sound` object.\n"
":rtype: :class:`Sound`");
".. classmethod:: rechannel(channels)\n\n"
" Rechannels the sound.\n\n"
" :arg channels: The new channel configuration.\n"
" :type channels: int\n"
" :return: The created :class:`Sound` object.\n"
" :rtype: :class:`Sound`");
static PyObject *
Sound_rechannel(Sound* self, PyObject* args)
@@ -1261,14 +1267,14 @@ Sound_rechannel(Sound* self, PyObject* args)
}
PyDoc_STRVAR(M_aud_Sound_resample_doc,
"resample(rate, high_quality)\n\n"
"Resamples the sound.\n\n"
":arg rate: The new sample rate.\n"
":type rate: double\n"
":arg high_quality: When true use a higher quality but slower resampler.\n"
":type high_quality: bool\n"
":return: The created :class:`Sound` object.\n"
":rtype: :class:`Sound`");
".. classmethod:: resample(rate, high_quality)\n\n"
" Resamples the sound.\n\n"
" :arg rate: The new sample rate.\n"
" :type rate: double\n"
" :arg high_quality: When true use a higher quality but slower resampler.\n"
" :type high_quality: bool\n"
" :return: The created :class:`Sound` object.\n"
" :rtype: :class:`Sound`");
static PyObject *
Sound_resample(Sound* self, PyObject* args)
@@ -1316,17 +1322,19 @@ Sound_resample(Sound* self, PyObject* args)
}
PyDoc_STRVAR(M_aud_Sound_reverse_doc,
"reverse()\n\n"
"Plays a sound reversed.\n\n"
":return: The created :class:`Sound` object.\n"
":rtype: :class:`Sound`\n\n"
".. note:: The sound has to have a finite length and has to be "
"seekable. It's recommended to use this only with factories with "
"fast and accurate seeking, which is not true for encoded audio "
"files, such ones should be buffered using :meth:`cache` before "
"being played reversed.\n\n"
".. warning:: If seeking is not accurate in the underlying sound "
"you'll likely hear skips/jumps/cracks.");
".. classmethod:: reverse()\n\n"
" Plays a sound reversed.\n\n"
" :return: The created :class:`Sound` object.\n"
" :rtype: :class:`Sound`\n\n"
" .. note::\n\n"
" The sound has to have a finite length and has to be seekable.\n"
" It's recommended to use this only with factories with\n"
" fast and accurate seeking, which is not true for encoded audio\n"
" files, such ones should be buffered using :meth:`cache` before\n"
" being played reversed.\n\n"
" .. warning::\n\n"
" If seeking is not accurate in the underlying sound\n"
" you'll likely hear skips/jumps/cracks.");
static PyObject *
Sound_reverse(Sound* self)
@@ -1352,10 +1360,10 @@ Sound_reverse(Sound* self)
}
PyDoc_STRVAR(M_aud_Sound_sum_doc,
"sum()\n\n"
"Sums the samples of a sound.\n\n"
":return: The created :class:`Sound` object.\n"
":rtype: :class:`Sound`");
".. classmethod:: sum()\n\n"
" Sums the samples of a sound.\n\n"
" :return: The created :class:`Sound` object.\n"
" :rtype: :class:`Sound`");
static PyObject *
Sound_sum(Sound* self)
@@ -1381,12 +1389,12 @@ Sound_sum(Sound* self)
}
PyDoc_STRVAR(M_aud_Sound_threshold_doc,
"threshold(threshold = 0)\n\n"
"Makes a threshold wave out of an audio wave by setting all samples "
"with a amplitude >= threshold to 1, all <= -threshold to -1 and "
"all between to 0.\n\n"
":arg threshold: Threshold value over which an amplitude counts "
"non-zero.\n"
".. classmethod:: threshold(threshold = 0)\n\n"
" Makes a threshold wave out of an audio wave by setting all samples\n"
" with a amplitude >= threshold to 1, all <= -threshold to -1 and\n"
" all between to 0.\n\n"
" :arg threshold: Threshold value over which an amplitude counts\n"
" non-zero.\n"
":type threshold: float\n"
":return: The created :class:`Sound` object.\n"
":rtype: :class:`Sound`");
@@ -1420,15 +1428,16 @@ Sound_threshold(Sound* self, PyObject* args)
}
PyDoc_STRVAR(M_aud_Sound_volume_doc,
"volume(volume)\n\n"
"Changes the volume of a sound.\n\n"
":arg volume: The new volume..\n"
":type volume: float\n"
":return: The created :class:`Sound` object.\n"
":rtype: :class:`Sound`\n\n"
".. note:: Should be in the range [0, 1] to avoid clipping.\n\n"
".. note:: This is a filter function, you might consider using "
":attr:`Handle.volume` instead.");
".. classmethod:: volume(volume)\n\n"
" Changes the volume of a sound.\n\n"
" :arg volume: The new volume..\n"
" :type volume: float\n"
" :return: The created :class:`Sound` object.\n"
" :rtype: :class:`Sound`\n\n"
" .. note:: Should be in the range [0, 1] to avoid clipping.\n\n"
" .. note::\n\n"
" This is a filter function, you might consider using\n"
" :attr:`Handle.volume` instead.");
static PyObject *
Sound_volume(Sound* self, PyObject* args)
@@ -1459,14 +1468,15 @@ Sound_volume(Sound* self, PyObject* args)
}
PyDoc_STRVAR(M_aud_Sound_join_doc,
"join(sound)\n\n"
"Plays two factories in sequence.\n\n"
":arg sound: The sound to play second.\n"
":type sound: :class:`Sound`\n"
":return: The created :class:`Sound` object.\n"
":rtype: :class:`Sound`\n\n"
".. note:: The two factories have to have the same specifications "
"(channels and samplerate).");
".. classmethod:: join(sound)\n\n"
" Plays two factories in sequence.\n\n"
" :arg sound: The sound to play second.\n"
" :type sound: :class:`Sound`\n"
" :return: The created :class:`Sound` object.\n"
" :rtype: :class:`Sound`\n\n"
" .. note::\n\n"
" The two factories have to have the same specifications\n"
" (channels and samplerate).");
static PyObject *
Sound_join(Sound* self, PyObject* object)
@@ -1501,14 +1511,15 @@ Sound_join(Sound* self, PyObject* object)
}
PyDoc_STRVAR(M_aud_Sound_mix_doc,
"mix(sound)\n\n"
"Mixes two factories.\n\n"
":arg sound: The sound to mix over the other.\n"
":type sound: :class:`Sound`\n"
":return: The created :class:`Sound` object.\n"
":rtype: :class:`Sound`\n\n"
".. note:: The two factories have to have the same specifications "
"(channels and samplerate).");
".. classmethod:: mix(sound)\n\n"
" Mixes two factories.\n\n"
" :arg sound: The sound to mix over the other.\n"
" :type sound: :class:`Sound`\n"
" :return: The created :class:`Sound` object.\n"
" :rtype: :class:`Sound`\n\n"
" .. note::\n\n"
" The two factories have to have the same specifications\n"
" (channels and samplerate).");
static PyObject *
Sound_mix(Sound* self, PyObject* object)
@@ -1542,11 +1553,11 @@ Sound_mix(Sound* self, PyObject* object)
}
PyDoc_STRVAR(M_aud_Sound_pingpong_doc,
"pingpong()\n\n"
"Plays a sound forward and then backward.\n"
"This is like joining a sound with its reverse.\n\n"
":return: The created :class:`Sound` object.\n"
":rtype: :class:`Sound`");
".. classmethod:: pingpong()\n\n"
" Plays a sound forward and then backward.\n"
" This is like joining a sound with its reverse.\n\n"
" :return: The created :class:`Sound` object.\n"
" :rtype: :class:`Sound`");
static PyObject *
Sound_pingpong(Sound* self)
@@ -1572,12 +1583,12 @@ Sound_pingpong(Sound* self)
}
PyDoc_STRVAR(M_aud_Sound_list_doc,
"list()\n\n"
"Creates an empty sound list that can contain several sounds.\n\n"
":arg random: wether the playback will be random or not.\n"
":type random: int\n"
":return: The created :class:`Sound` object.\n"
":rtype: :class:`Sound`");
".. classmethod:: list()\n\n"
" Creates an empty sound list that can contain several sounds.\n\n"
" :arg random: whether the playback will be random or not.\n"
" :type random: int\n"
" :return: The created :class:`Sound` object.\n"
" :rtype: :class:`Sound`");
static PyObject *
Sound_list(PyTypeObject* type, PyObject* args)
@@ -1608,11 +1619,11 @@ Sound_list(PyTypeObject* type, PyObject* args)
}
PyDoc_STRVAR(M_aud_Sound_mutable_doc,
"mutable()\n\n"
"Creates a sound that will be restarted when sought backwards.\n"
"If the original sound is a sound list, the playing sound can change.\n\n"
":return: The created :class:`Sound` object.\n"
":rtype: :class:`Sound`");
".. classmethod:: mutable()\n\n"
" Creates a sound that will be restarted when sought backwards.\n"
" If the original sound is a sound list, the playing sound can change.\n\n"
" :return: The created :class:`Sound` object.\n"
" :rtype: :class:`Sound`");
static PyObject *
Sound_mutable(Sound* self)
@@ -1638,12 +1649,12 @@ Sound_mutable(Sound* self)
}
PyDoc_STRVAR(M_aud_Sound_list_addSound_doc,
"addSound(sound)\n\n"
"Adds a new sound to a sound list.\n\n"
":arg sound: The sound that will be added to the list.\n"
":type sound: :class:`Sound`\n\n"
".. note:: You can only add a sound to a sound list.");
".. classmethod:: addSound(sound)\n\n"
" Adds a new sound to a sound list.\n\n"
" :arg sound: The sound that will be added to the list.\n"
" :type sound: :class:`Sound`\n\n"
" .. note:: You can only add a sound to a sound list.");
static PyObject *
Sound_list_addSound(Sound* self, PyObject* object)
{
@@ -1671,14 +1682,14 @@ Sound_list_addSound(Sound* self, PyObject* object)
#ifdef WITH_CONVOLUTION
PyDoc_STRVAR(M_aud_Sound_convolver_doc,
"convolver()\n\n"
"Creates a sound that will apply convolution to another sound.\n\n"
":arg impulseResponse: The filter with which convolve the sound.\n"
":type impulseResponse: :class:`ImpulseResponse`\n"
":arg threadPool: A thread pool used to parallelize convolution.\n"
":type threadPool: :class:`ThreadPool`\n"
":return: The created :class:`Sound` object.\n"
":rtype: :class:`Sound`");
".. classmethod:: convolver()\n\n"
" Creates a sound that will apply convolution to another sound.\n\n"
" :arg impulseResponse: The filter with which convolve the sound.\n"
" :type impulseResponse: :class:`ImpulseResponse`\n"
" :arg threadPool: A thread pool used to parallelize convolution.\n"
" :type threadPool: :class:`ThreadPool`\n"
" :return: The created :class:`Sound` object.\n"
" :rtype: :class:`Sound`");
static PyObject *
Sound_convolver(Sound* self, PyObject* args)
@@ -1720,16 +1731,16 @@ Sound_convolver(Sound* self, PyObject* args)
}
PyDoc_STRVAR(M_aud_Sound_binaural_doc,
"convolver()\n\n"
"Creates a binaural sound using another sound as source. The original sound must be mono\n\n"
":arg hrtfs: An HRTF set.\n"
":type hrtf: :class:`HRTF`\n"
":arg source: An object representing the source position of the sound.\n"
":type source: :class:`Source`\n"
":arg threadPool: A thread pool used to parallelize convolution.\n"
":type threadPool: :class:`ThreadPool`\n"
":return: The created :class:`Sound` object.\n"
":rtype: :class:`Sound`");
".. classmethod:: convolver()\n\n"
" Creates a binaural sound using another sound as source. The original sound must be mono\n\n"
" :arg hrtfs: An HRTF set.\n"
" :type hrtf: :class:`HRTF`\n"
" :arg source: An object representing the source position of the sound.\n"
" :type source: :class:`Source`\n"
" :arg threadPool: A thread pool used to parallelize convolution.\n"
" :type threadPool: :class:`ThreadPool`\n"
" :return: The created :class:`Sound` object.\n"
" :rtype: :class:`Sound`");
static PyObject *
Sound_binaural(Sound* self, PyObject* args)

View File

@@ -71,7 +71,7 @@ rm $BLENDER_INSTALLATION/blender/tmp/preprocessed/fileio/*.reg
cd $BLENDER_INSTALLATION/blender/tmp/
echo "Applying clang format to Mantaflow source files"
find . -iname *.h -o -iname *.cpp | xargs clang-format --verbose -i -style=file
find . -iname *.h -o -iname *.cpp | xargs clang-format --verbose -i -style=file -sort-includes=0
find . -iname *.h -o -iname *.cpp | xargs dos2unix --verbose
# ==================== 5) MOVE MANTAFLOW FILES TO EXTERN/ ================================

View File

@@ -1,3 +1,3 @@
#define MANTA_GIT_VERSION "commit 5fbd3d04381b21afce4a593d1fe2d9bc7bef5424"
#define MANTA_GIT_VERSION "commit 21303fab2eda588ec22988bf9e5762d2001c131f"

View File

@@ -853,6 +853,147 @@ template<class T> struct knPermuteAxes : public KernelBase {
int axis2;
};
struct knJoinVec : public KernelBase {
knJoinVec(Grid<Vec3> &a, const Grid<Vec3> &b, bool keepMax)
: KernelBase(&a, 0), a(a), b(b), keepMax(keepMax)
{
runMessage();
run();
}
inline void op(IndexInt idx, Grid<Vec3> &a, const Grid<Vec3> &b, bool keepMax) const
{
Real a1 = normSquare(a[idx]);
Real b1 = normSquare(b[idx]);
a[idx] = (keepMax) ? max(a1, b1) : min(a1, b1);
}
inline Grid<Vec3> &getArg0()
{
return a;
}
typedef Grid<Vec3> type0;
inline const Grid<Vec3> &getArg1()
{
return b;
}
typedef Grid<Vec3> type1;
inline bool &getArg2()
{
return keepMax;
}
typedef bool type2;
void runMessage()
{
debMsg("Executing kernel knJoinVec ", 3);
debMsg("Kernel range"
<< " x " << maxX << " y " << maxY << " z " << minZ << " - " << maxZ << " ",
4);
};
void operator()(const tbb::blocked_range<IndexInt> &__r) const
{
for (IndexInt idx = __r.begin(); idx != (IndexInt)__r.end(); idx++)
op(idx, a, b, keepMax);
}
void run()
{
tbb::parallel_for(tbb::blocked_range<IndexInt>(0, size), *this);
}
Grid<Vec3> &a;
const Grid<Vec3> &b;
bool keepMax;
};
struct knJoinInt : public KernelBase {
knJoinInt(Grid<int> &a, const Grid<int> &b, bool keepMax)
: KernelBase(&a, 0), a(a), b(b), keepMax(keepMax)
{
runMessage();
run();
}
inline void op(IndexInt idx, Grid<int> &a, const Grid<int> &b, bool keepMax) const
{
a[idx] = (keepMax) ? max(a[idx], b[idx]) : min(a[idx], b[idx]);
}
inline Grid<int> &getArg0()
{
return a;
}
typedef Grid<int> type0;
inline const Grid<int> &getArg1()
{
return b;
}
typedef Grid<int> type1;
inline bool &getArg2()
{
return keepMax;
}
typedef bool type2;
void runMessage()
{
debMsg("Executing kernel knJoinInt ", 3);
debMsg("Kernel range"
<< " x " << maxX << " y " << maxY << " z " << minZ << " - " << maxZ << " ",
4);
};
void operator()(const tbb::blocked_range<IndexInt> &__r) const
{
for (IndexInt idx = __r.begin(); idx != (IndexInt)__r.end(); idx++)
op(idx, a, b, keepMax);
}
void run()
{
tbb::parallel_for(tbb::blocked_range<IndexInt>(0, size), *this);
}
Grid<int> &a;
const Grid<int> &b;
bool keepMax;
};
struct knJoinReal : public KernelBase {
knJoinReal(Grid<Real> &a, const Grid<Real> &b, bool keepMax)
: KernelBase(&a, 0), a(a), b(b), keepMax(keepMax)
{
runMessage();
run();
}
inline void op(IndexInt idx, Grid<Real> &a, const Grid<Real> &b, bool keepMax) const
{
a[idx] = (keepMax) ? max(a[idx], b[idx]) : min(a[idx], b[idx]);
}
inline Grid<Real> &getArg0()
{
return a;
}
typedef Grid<Real> type0;
inline const Grid<Real> &getArg1()
{
return b;
}
typedef Grid<Real> type1;
inline bool &getArg2()
{
return keepMax;
}
typedef bool type2;
void runMessage()
{
debMsg("Executing kernel knJoinReal ", 3);
debMsg("Kernel range"
<< " x " << maxX << " y " << maxY << " z " << minZ << " - " << maxZ << " ",
4);
};
void operator()(const tbb::blocked_range<IndexInt> &__r) const
{
for (IndexInt idx = __r.begin(); idx != (IndexInt)__r.end(); idx++)
op(idx, a, b, keepMax);
}
void run()
{
tbb::parallel_for(tbb::blocked_range<IndexInt>(0, size), *this);
}
Grid<Real> &a;
const Grid<Real> &b;
bool keepMax;
};
template<class T> Grid<T> &Grid<T>::safeDivide(const Grid<T> &a)
{
knGridSafeDiv<T>(*this, a);
@@ -928,6 +1069,18 @@ void Grid<T>::permuteAxesCopyToGrid(int axis0, int axis1, int axis2, Grid<T> &ou
"Permuted grids must have the same dimensions!");
knPermuteAxes<T>(*this, out, axis0, axis1, axis2);
}
template<> void Grid<Vec3>::join(const Grid<Vec3> &a, bool keepMax)
{
knJoinVec(*this, a, keepMax);
}
template<> void Grid<int>::join(const Grid<int> &a, bool keepMax)
{
knJoinInt(*this, a, keepMax);
}
template<> void Grid<Real>::join(const Grid<Real> &a, bool keepMax)
{
knJoinReal(*this, a, keepMax);
}
template<> Real Grid<Real>::getMax() const
{

View File

@@ -966,10 +966,38 @@ template<class T> class Grid : public GridBase {
}
}
//! join other grid by either keeping min or max value at cell
void join(const Grid<T> &a, bool keepMax = true);
static PyObject *_W_27(PyObject *_self, PyObject *_linargs, PyObject *_kwds)
{
try {
PbArgs _args(_linargs, _kwds);
Grid *pbo = dynamic_cast<Grid *>(Pb::objFromPy(_self));
bool noTiming = _args.getOpt<bool>("notiming", -1, 0);
pbPreparePlugin(pbo->getParent(), "Grid::join", !noTiming);
PyObject *_retval = 0;
{
ArgLocker _lock;
const Grid<T> &a = *_args.getPtr<Grid<T>>("a", 0, &_lock);
bool keepMax = _args.getOpt<bool>("keepMax", 1, true, &_lock);
pbo->_args.copy(_args);
_retval = getPyNone();
pbo->join(a, keepMax);
pbo->_args.check();
}
pbFinalizePlugin(pbo->getParent(), "Grid::join", !noTiming);
return _retval;
}
catch (std::exception &e) {
pbSetError("Grid::join", e.what());
return 0;
}
}
// common compound operators
//! get absolute max value in grid
Real getMaxAbs() const;
static PyObject *_W_27(PyObject *_self, PyObject *_linargs, PyObject *_kwds)
static PyObject *_W_28(PyObject *_self, PyObject *_linargs, PyObject *_kwds)
{
try {
PbArgs _args(_linargs, _kwds);
@@ -994,7 +1022,7 @@ template<class T> class Grid : public GridBase {
//! get max value in grid
Real getMax() const;
static PyObject *_W_28(PyObject *_self, PyObject *_linargs, PyObject *_kwds)
static PyObject *_W_29(PyObject *_self, PyObject *_linargs, PyObject *_kwds)
{
try {
PbArgs _args(_linargs, _kwds);
@@ -1019,7 +1047,7 @@ template<class T> class Grid : public GridBase {
//! get min value in grid
Real getMin() const;
static PyObject *_W_29(PyObject *_self, PyObject *_linargs, PyObject *_kwds)
static PyObject *_W_30(PyObject *_self, PyObject *_linargs, PyObject *_kwds)
{
try {
PbArgs _args(_linargs, _kwds);
@@ -1044,7 +1072,7 @@ template<class T> class Grid : public GridBase {
//! calculate L1 norm of grid content
Real getL1(int bnd = 0);
static PyObject *_W_30(PyObject *_self, PyObject *_linargs, PyObject *_kwds)
static PyObject *_W_31(PyObject *_self, PyObject *_linargs, PyObject *_kwds)
{
try {
PbArgs _args(_linargs, _kwds);
@@ -1070,7 +1098,7 @@ template<class T> class Grid : public GridBase {
//! calculate L2 norm of grid content
Real getL2(int bnd = 0);
static PyObject *_W_31(PyObject *_self, PyObject *_linargs, PyObject *_kwds)
static PyObject *_W_32(PyObject *_self, PyObject *_linargs, PyObject *_kwds)
{
try {
PbArgs _args(_linargs, _kwds);
@@ -1096,7 +1124,7 @@ template<class T> class Grid : public GridBase {
//! set all boundary cells to constant value (Dirichlet)
void setBound(T value, int boundaryWidth = 1);
static PyObject *_W_32(PyObject *_self, PyObject *_linargs, PyObject *_kwds)
static PyObject *_W_33(PyObject *_self, PyObject *_linargs, PyObject *_kwds)
{
try {
PbArgs _args(_linargs, _kwds);
@@ -1124,7 +1152,7 @@ template<class T> class Grid : public GridBase {
//! set all boundary cells to last inner value (Neumann)
void setBoundNeumann(int boundaryWidth = 1);
static PyObject *_W_33(PyObject *_self, PyObject *_linargs, PyObject *_kwds)
static PyObject *_W_34(PyObject *_self, PyObject *_linargs, PyObject *_kwds)
{
try {
PbArgs _args(_linargs, _kwds);
@@ -1151,7 +1179,7 @@ template<class T> class Grid : public GridBase {
//! get data pointer of grid
std::string getDataPointer();
static PyObject *_W_34(PyObject *_self, PyObject *_linargs, PyObject *_kwds)
static PyObject *_W_35(PyObject *_self, PyObject *_linargs, PyObject *_kwds)
{
try {
PbArgs _args(_linargs, _kwds);
@@ -1176,7 +1204,7 @@ template<class T> class Grid : public GridBase {
//! debugging helper, print grid from python. skip boundary of width bnd
void printGrid(int zSlice = -1, bool printIndex = false, int bnd = 1);
static PyObject *_W_35(PyObject *_self, PyObject *_linargs, PyObject *_kwds)
static PyObject *_W_36(PyObject *_self, PyObject *_linargs, PyObject *_kwds)
{
try {
PbArgs _args(_linargs, _kwds);
@@ -1244,7 +1272,7 @@ class MACGrid : public Grid<Vec3> {
{
mType = (GridType)(TypeMAC | TypeVec3);
}
static int _W_36(PyObject *_self, PyObject *_linargs, PyObject *_kwds)
static int _W_37(PyObject *_self, PyObject *_linargs, PyObject *_kwds)
{
PbClass *obj = Pb::objFromPy(_self);
if (obj)
@@ -1326,7 +1354,7 @@ class MACGrid : public Grid<Vec3> {
//! set all boundary cells of a MAC grid to certain value (Dirchlet). Respects staggered grid
//! locations optionally, only set normal components
void setBoundMAC(Vec3 value, int boundaryWidth, bool normalOnly = false);
static PyObject *_W_37(PyObject *_self, PyObject *_linargs, PyObject *_kwds)
static PyObject *_W_38(PyObject *_self, PyObject *_linargs, PyObject *_kwds)
{
try {
PbArgs _args(_linargs, _kwds);
@@ -1367,7 +1395,7 @@ class FlagGrid : public Grid<int> {
{
mType = (GridType)(TypeFlags | TypeInt);
}
static int _W_38(PyObject *_self, PyObject *_linargs, PyObject *_kwds)
static int _W_39(PyObject *_self, PyObject *_linargs, PyObject *_kwds)
{
PbClass *obj = Pb::objFromPy(_self);
if (obj)
@@ -1547,7 +1575,7 @@ class FlagGrid : public Grid<int> {
const std::string &inflow = " ",
const std::string &outflow = " ",
Grid<Real> *phiWalls = 0x00);
static PyObject *_W_39(PyObject *_self, PyObject *_linargs, PyObject *_kwds)
static PyObject *_W_40(PyObject *_self, PyObject *_linargs, PyObject *_kwds)
{
try {
PbArgs _args(_linargs, _kwds);
@@ -1581,7 +1609,7 @@ class FlagGrid : public Grid<int> {
//! set fluid flags inside levelset (liquids)
void updateFromLevelset(LevelsetGrid &levelset);
static PyObject *_W_40(PyObject *_self, PyObject *_linargs, PyObject *_kwds)
static PyObject *_W_41(PyObject *_self, PyObject *_linargs, PyObject *_kwds)
{
try {
PbArgs _args(_linargs, _kwds);
@@ -1608,7 +1636,7 @@ class FlagGrid : public Grid<int> {
//! set all cells (except obs/in/outflow) to type (fluid by default)
void fillGrid(int type = TypeFluid);
static PyObject *_W_41(PyObject *_self, PyObject *_linargs, PyObject *_kwds)
static PyObject *_W_42(PyObject *_self, PyObject *_linargs, PyObject *_kwds)
{
try {
PbArgs _args(_linargs, _kwds);
@@ -1637,7 +1665,7 @@ class FlagGrid : public Grid<int> {
//! warning for large grids! only regular int returned (due to python interface)
//! optionally creates mask in RealGrid (1 where flag matches, 0 otherwise)
int countCells(int flag, int bnd = 0, Grid<Real> *mask = NULL);
static PyObject *_W_42(PyObject *_self, PyObject *_linargs, PyObject *_kwds)
static PyObject *_W_43(PyObject *_self, PyObject *_linargs, PyObject *_kwds)
{
try {
PbArgs _args(_linargs, _kwds);

View File

@@ -8,11 +8,11 @@ namespace Manta {
#ifdef _C_FlagGrid
static const Pb::Register _R_26("FlagGrid", "FlagGrid", "Grid<int>");
template<> const char *Namify<FlagGrid>::S = "FlagGrid";
static const Pb::Register _R_27("FlagGrid", "FlagGrid", FlagGrid::_W_38);
static const Pb::Register _R_28("FlagGrid", "initDomain", FlagGrid::_W_39);
static const Pb::Register _R_29("FlagGrid", "updateFromLevelset", FlagGrid::_W_40);
static const Pb::Register _R_30("FlagGrid", "fillGrid", FlagGrid::_W_41);
static const Pb::Register _R_31("FlagGrid", "countCells", FlagGrid::_W_42);
static const Pb::Register _R_27("FlagGrid", "FlagGrid", FlagGrid::_W_39);
static const Pb::Register _R_28("FlagGrid", "initDomain", FlagGrid::_W_40);
static const Pb::Register _R_29("FlagGrid", "updateFromLevelset", FlagGrid::_W_41);
static const Pb::Register _R_30("FlagGrid", "fillGrid", FlagGrid::_W_42);
static const Pb::Register _R_31("FlagGrid", "countCells", FlagGrid::_W_43);
#endif
#ifdef _C_Grid
static const Pb::Register _R_32("Grid<int>", "Grid<int>", "GridBase");
@@ -35,92 +35,95 @@ static const Pb::Register _R_47("Grid<int>", "clamp", Grid<int>::_W_23);
static const Pb::Register _R_48("Grid<int>", "stomp", Grid<int>::_W_24);
static const Pb::Register _R_49("Grid<int>", "permuteAxes", Grid<int>::_W_25);
static const Pb::Register _R_50("Grid<int>", "permuteAxesCopyToGrid", Grid<int>::_W_26);
static const Pb::Register _R_51("Grid<int>", "getMaxAbs", Grid<int>::_W_27);
static const Pb::Register _R_52("Grid<int>", "getMax", Grid<int>::_W_28);
static const Pb::Register _R_53("Grid<int>", "getMin", Grid<int>::_W_29);
static const Pb::Register _R_54("Grid<int>", "getL1", Grid<int>::_W_30);
static const Pb::Register _R_55("Grid<int>", "getL2", Grid<int>::_W_31);
static const Pb::Register _R_56("Grid<int>", "setBound", Grid<int>::_W_32);
static const Pb::Register _R_57("Grid<int>", "setBoundNeumann", Grid<int>::_W_33);
static const Pb::Register _R_58("Grid<int>", "getDataPointer", Grid<int>::_W_34);
static const Pb::Register _R_59("Grid<int>", "printGrid", Grid<int>::_W_35);
static const Pb::Register _R_60("Grid<Real>", "Grid<Real>", "GridBase");
static const Pb::Register _R_51("Grid<int>", "join", Grid<int>::_W_27);
static const Pb::Register _R_52("Grid<int>", "getMaxAbs", Grid<int>::_W_28);
static const Pb::Register _R_53("Grid<int>", "getMax", Grid<int>::_W_29);
static const Pb::Register _R_54("Grid<int>", "getMin", Grid<int>::_W_30);
static const Pb::Register _R_55("Grid<int>", "getL1", Grid<int>::_W_31);
static const Pb::Register _R_56("Grid<int>", "getL2", Grid<int>::_W_32);
static const Pb::Register _R_57("Grid<int>", "setBound", Grid<int>::_W_33);
static const Pb::Register _R_58("Grid<int>", "setBoundNeumann", Grid<int>::_W_34);
static const Pb::Register _R_59("Grid<int>", "getDataPointer", Grid<int>::_W_35);
static const Pb::Register _R_60("Grid<int>", "printGrid", Grid<int>::_W_36);
static const Pb::Register _R_61("Grid<Real>", "Grid<Real>", "GridBase");
template<> const char *Namify<Grid<Real>>::S = "Grid<Real>";
static const Pb::Register _R_61("Grid<Real>", "Grid", Grid<Real>::_W_9);
static const Pb::Register _R_62("Grid<Real>", "save", Grid<Real>::_W_10);
static const Pb::Register _R_63("Grid<Real>", "load", Grid<Real>::_W_11);
static const Pb::Register _R_64("Grid<Real>", "clear", Grid<Real>::_W_12);
static const Pb::Register _R_65("Grid<Real>", "copyFrom", Grid<Real>::_W_13);
static const Pb::Register _R_66("Grid<Real>", "getGridType", Grid<Real>::_W_14);
static const Pb::Register _R_67("Grid<Real>", "add", Grid<Real>::_W_15);
static const Pb::Register _R_68("Grid<Real>", "sub", Grid<Real>::_W_16);
static const Pb::Register _R_69("Grid<Real>", "setConst", Grid<Real>::_W_17);
static const Pb::Register _R_70("Grid<Real>", "addConst", Grid<Real>::_W_18);
static const Pb::Register _R_71("Grid<Real>", "addScaled", Grid<Real>::_W_19);
static const Pb::Register _R_72("Grid<Real>", "mult", Grid<Real>::_W_20);
static const Pb::Register _R_73("Grid<Real>", "multConst", Grid<Real>::_W_21);
static const Pb::Register _R_74("Grid<Real>", "safeDivide", Grid<Real>::_W_22);
static const Pb::Register _R_75("Grid<Real>", "clamp", Grid<Real>::_W_23);
static const Pb::Register _R_76("Grid<Real>", "stomp", Grid<Real>::_W_24);
static const Pb::Register _R_77("Grid<Real>", "permuteAxes", Grid<Real>::_W_25);
static const Pb::Register _R_78("Grid<Real>", "permuteAxesCopyToGrid", Grid<Real>::_W_26);
static const Pb::Register _R_79("Grid<Real>", "getMaxAbs", Grid<Real>::_W_27);
static const Pb::Register _R_80("Grid<Real>", "getMax", Grid<Real>::_W_28);
static const Pb::Register _R_81("Grid<Real>", "getMin", Grid<Real>::_W_29);
static const Pb::Register _R_82("Grid<Real>", "getL1", Grid<Real>::_W_30);
static const Pb::Register _R_83("Grid<Real>", "getL2", Grid<Real>::_W_31);
static const Pb::Register _R_84("Grid<Real>", "setBound", Grid<Real>::_W_32);
static const Pb::Register _R_85("Grid<Real>", "setBoundNeumann", Grid<Real>::_W_33);
static const Pb::Register _R_86("Grid<Real>", "getDataPointer", Grid<Real>::_W_34);
static const Pb::Register _R_87("Grid<Real>", "printGrid", Grid<Real>::_W_35);
static const Pb::Register _R_88("Grid<Vec3>", "Grid<Vec3>", "GridBase");
static const Pb::Register _R_62("Grid<Real>", "Grid", Grid<Real>::_W_9);
static const Pb::Register _R_63("Grid<Real>", "save", Grid<Real>::_W_10);
static const Pb::Register _R_64("Grid<Real>", "load", Grid<Real>::_W_11);
static const Pb::Register _R_65("Grid<Real>", "clear", Grid<Real>::_W_12);
static const Pb::Register _R_66("Grid<Real>", "copyFrom", Grid<Real>::_W_13);
static const Pb::Register _R_67("Grid<Real>", "getGridType", Grid<Real>::_W_14);
static const Pb::Register _R_68("Grid<Real>", "add", Grid<Real>::_W_15);
static const Pb::Register _R_69("Grid<Real>", "sub", Grid<Real>::_W_16);
static const Pb::Register _R_70("Grid<Real>", "setConst", Grid<Real>::_W_17);
static const Pb::Register _R_71("Grid<Real>", "addConst", Grid<Real>::_W_18);
static const Pb::Register _R_72("Grid<Real>", "addScaled", Grid<Real>::_W_19);
static const Pb::Register _R_73("Grid<Real>", "mult", Grid<Real>::_W_20);
static const Pb::Register _R_74("Grid<Real>", "multConst", Grid<Real>::_W_21);
static const Pb::Register _R_75("Grid<Real>", "safeDivide", Grid<Real>::_W_22);
static const Pb::Register _R_76("Grid<Real>", "clamp", Grid<Real>::_W_23);
static const Pb::Register _R_77("Grid<Real>", "stomp", Grid<Real>::_W_24);
static const Pb::Register _R_78("Grid<Real>", "permuteAxes", Grid<Real>::_W_25);
static const Pb::Register _R_79("Grid<Real>", "permuteAxesCopyToGrid", Grid<Real>::_W_26);
static const Pb::Register _R_80("Grid<Real>", "join", Grid<Real>::_W_27);
static const Pb::Register _R_81("Grid<Real>", "getMaxAbs", Grid<Real>::_W_28);
static const Pb::Register _R_82("Grid<Real>", "getMax", Grid<Real>::_W_29);
static const Pb::Register _R_83("Grid<Real>", "getMin", Grid<Real>::_W_30);
static const Pb::Register _R_84("Grid<Real>", "getL1", Grid<Real>::_W_31);
static const Pb::Register _R_85("Grid<Real>", "getL2", Grid<Real>::_W_32);
static const Pb::Register _R_86("Grid<Real>", "setBound", Grid<Real>::_W_33);
static const Pb::Register _R_87("Grid<Real>", "setBoundNeumann", Grid<Real>::_W_34);
static const Pb::Register _R_88("Grid<Real>", "getDataPointer", Grid<Real>::_W_35);
static const Pb::Register _R_89("Grid<Real>", "printGrid", Grid<Real>::_W_36);
static const Pb::Register _R_90("Grid<Vec3>", "Grid<Vec3>", "GridBase");
template<> const char *Namify<Grid<Vec3>>::S = "Grid<Vec3>";
static const Pb::Register _R_89("Grid<Vec3>", "Grid", Grid<Vec3>::_W_9);
static const Pb::Register _R_90("Grid<Vec3>", "save", Grid<Vec3>::_W_10);
static const Pb::Register _R_91("Grid<Vec3>", "load", Grid<Vec3>::_W_11);
static const Pb::Register _R_92("Grid<Vec3>", "clear", Grid<Vec3>::_W_12);
static const Pb::Register _R_93("Grid<Vec3>", "copyFrom", Grid<Vec3>::_W_13);
static const Pb::Register _R_94("Grid<Vec3>", "getGridType", Grid<Vec3>::_W_14);
static const Pb::Register _R_95("Grid<Vec3>", "add", Grid<Vec3>::_W_15);
static const Pb::Register _R_96("Grid<Vec3>", "sub", Grid<Vec3>::_W_16);
static const Pb::Register _R_97("Grid<Vec3>", "setConst", Grid<Vec3>::_W_17);
static const Pb::Register _R_98("Grid<Vec3>", "addConst", Grid<Vec3>::_W_18);
static const Pb::Register _R_99("Grid<Vec3>", "addScaled", Grid<Vec3>::_W_19);
static const Pb::Register _R_100("Grid<Vec3>", "mult", Grid<Vec3>::_W_20);
static const Pb::Register _R_101("Grid<Vec3>", "multConst", Grid<Vec3>::_W_21);
static const Pb::Register _R_102("Grid<Vec3>", "safeDivide", Grid<Vec3>::_W_22);
static const Pb::Register _R_103("Grid<Vec3>", "clamp", Grid<Vec3>::_W_23);
static const Pb::Register _R_104("Grid<Vec3>", "stomp", Grid<Vec3>::_W_24);
static const Pb::Register _R_105("Grid<Vec3>", "permuteAxes", Grid<Vec3>::_W_25);
static const Pb::Register _R_106("Grid<Vec3>", "permuteAxesCopyToGrid", Grid<Vec3>::_W_26);
static const Pb::Register _R_107("Grid<Vec3>", "getMaxAbs", Grid<Vec3>::_W_27);
static const Pb::Register _R_108("Grid<Vec3>", "getMax", Grid<Vec3>::_W_28);
static const Pb::Register _R_109("Grid<Vec3>", "getMin", Grid<Vec3>::_W_29);
static const Pb::Register _R_110("Grid<Vec3>", "getL1", Grid<Vec3>::_W_30);
static const Pb::Register _R_111("Grid<Vec3>", "getL2", Grid<Vec3>::_W_31);
static const Pb::Register _R_112("Grid<Vec3>", "setBound", Grid<Vec3>::_W_32);
static const Pb::Register _R_113("Grid<Vec3>", "setBoundNeumann", Grid<Vec3>::_W_33);
static const Pb::Register _R_114("Grid<Vec3>", "getDataPointer", Grid<Vec3>::_W_34);
static const Pb::Register _R_115("Grid<Vec3>", "printGrid", Grid<Vec3>::_W_35);
static const Pb::Register _R_91("Grid<Vec3>", "Grid", Grid<Vec3>::_W_9);
static const Pb::Register _R_92("Grid<Vec3>", "save", Grid<Vec3>::_W_10);
static const Pb::Register _R_93("Grid<Vec3>", "load", Grid<Vec3>::_W_11);
static const Pb::Register _R_94("Grid<Vec3>", "clear", Grid<Vec3>::_W_12);
static const Pb::Register _R_95("Grid<Vec3>", "copyFrom", Grid<Vec3>::_W_13);
static const Pb::Register _R_96("Grid<Vec3>", "getGridType", Grid<Vec3>::_W_14);
static const Pb::Register _R_97("Grid<Vec3>", "add", Grid<Vec3>::_W_15);
static const Pb::Register _R_98("Grid<Vec3>", "sub", Grid<Vec3>::_W_16);
static const Pb::Register _R_99("Grid<Vec3>", "setConst", Grid<Vec3>::_W_17);
static const Pb::Register _R_100("Grid<Vec3>", "addConst", Grid<Vec3>::_W_18);
static const Pb::Register _R_101("Grid<Vec3>", "addScaled", Grid<Vec3>::_W_19);
static const Pb::Register _R_102("Grid<Vec3>", "mult", Grid<Vec3>::_W_20);
static const Pb::Register _R_103("Grid<Vec3>", "multConst", Grid<Vec3>::_W_21);
static const Pb::Register _R_104("Grid<Vec3>", "safeDivide", Grid<Vec3>::_W_22);
static const Pb::Register _R_105("Grid<Vec3>", "clamp", Grid<Vec3>::_W_23);
static const Pb::Register _R_106("Grid<Vec3>", "stomp", Grid<Vec3>::_W_24);
static const Pb::Register _R_107("Grid<Vec3>", "permuteAxes", Grid<Vec3>::_W_25);
static const Pb::Register _R_108("Grid<Vec3>", "permuteAxesCopyToGrid", Grid<Vec3>::_W_26);
static const Pb::Register _R_109("Grid<Vec3>", "join", Grid<Vec3>::_W_27);
static const Pb::Register _R_110("Grid<Vec3>", "getMaxAbs", Grid<Vec3>::_W_28);
static const Pb::Register _R_111("Grid<Vec3>", "getMax", Grid<Vec3>::_W_29);
static const Pb::Register _R_112("Grid<Vec3>", "getMin", Grid<Vec3>::_W_30);
static const Pb::Register _R_113("Grid<Vec3>", "getL1", Grid<Vec3>::_W_31);
static const Pb::Register _R_114("Grid<Vec3>", "getL2", Grid<Vec3>::_W_32);
static const Pb::Register _R_115("Grid<Vec3>", "setBound", Grid<Vec3>::_W_33);
static const Pb::Register _R_116("Grid<Vec3>", "setBoundNeumann", Grid<Vec3>::_W_34);
static const Pb::Register _R_117("Grid<Vec3>", "getDataPointer", Grid<Vec3>::_W_35);
static const Pb::Register _R_118("Grid<Vec3>", "printGrid", Grid<Vec3>::_W_36);
#endif
#ifdef _C_GridBase
static const Pb::Register _R_116("GridBase", "GridBase", "PbClass");
static const Pb::Register _R_119("GridBase", "GridBase", "PbClass");
template<> const char *Namify<GridBase>::S = "GridBase";
static const Pb::Register _R_117("GridBase", "GridBase", GridBase::_W_0);
static const Pb::Register _R_118("GridBase", "getSizeX", GridBase::_W_1);
static const Pb::Register _R_119("GridBase", "getSizeY", GridBase::_W_2);
static const Pb::Register _R_120("GridBase", "getSizeZ", GridBase::_W_3);
static const Pb::Register _R_121("GridBase", "getSize", GridBase::_W_4);
static const Pb::Register _R_122("GridBase", "is3D", GridBase::_W_5);
static const Pb::Register _R_123("GridBase", "is4D", GridBase::_W_6);
static const Pb::Register _R_124("GridBase", "getSizeT", GridBase::_W_7);
static const Pb::Register _R_125("GridBase", "getStrideT", GridBase::_W_8);
static const Pb::Register _R_120("GridBase", "GridBase", GridBase::_W_0);
static const Pb::Register _R_121("GridBase", "getSizeX", GridBase::_W_1);
static const Pb::Register _R_122("GridBase", "getSizeY", GridBase::_W_2);
static const Pb::Register _R_123("GridBase", "getSizeZ", GridBase::_W_3);
static const Pb::Register _R_124("GridBase", "getSize", GridBase::_W_4);
static const Pb::Register _R_125("GridBase", "is3D", GridBase::_W_5);
static const Pb::Register _R_126("GridBase", "is4D", GridBase::_W_6);
static const Pb::Register _R_127("GridBase", "getSizeT", GridBase::_W_7);
static const Pb::Register _R_128("GridBase", "getStrideT", GridBase::_W_8);
#endif
#ifdef _C_MACGrid
static const Pb::Register _R_126("MACGrid", "MACGrid", "Grid<Vec3>");
static const Pb::Register _R_129("MACGrid", "MACGrid", "Grid<Vec3>");
template<> const char *Namify<MACGrid>::S = "MACGrid";
static const Pb::Register _R_127("MACGrid", "MACGrid", MACGrid::_W_36);
static const Pb::Register _R_128("MACGrid", "setBoundMAC", MACGrid::_W_37);
static const Pb::Register _R_130("MACGrid", "MACGrid", MACGrid::_W_37);
static const Pb::Register _R_131("MACGrid", "setBoundMAC", MACGrid::_W_38);
#endif
static const Pb::Register _R_7("GridType_TypeNone", 0);
static const Pb::Register _R_8("GridType_TypeReal", 1);
@@ -247,6 +250,9 @@ void PbRegister_file_7()
KEEP_UNUSED(_R_126);
KEEP_UNUSED(_R_127);
KEEP_UNUSED(_R_128);
KEEP_UNUSED(_R_129);
KEEP_UNUSED(_R_130);
KEEP_UNUSED(_R_131);
}
}
} // namespace Manta

View File

@@ -525,7 +525,7 @@ struct knFlipSampleSecondaryParticlesMoreCylinders : public KernelBase {
if (!(flags(i, j, k) & itype))
return;
RandomStream mRand(9832);
static RandomStream mRand(9832);
Real radius =
0.25; // diameter=0.5 => sampling with two cylinders in each dimension since cell size=1
for (Real x = i - radius; x <= i + radius; x += 2 * radius) {
@@ -791,11 +791,9 @@ struct knFlipSampleSecondaryParticles : public KernelBase {
const int n = KE * (k_ta * TA + k_wc * WC) * dt; // number of secondary particles
if (n == 0)
return;
RandomStream mRand(9832);
static RandomStream mRand(9832);
Vec3 xi = Vec3(i + mRand.getReal(),
j + mRand.getReal(),
k + mRand.getReal()); // randomized offset uniform in cell
Vec3 xi = Vec3(i, j, k) + mRand.getVec3(); // randomized offset uniform in cell
Vec3 vi = v.getInterpolated(xi);
Vec3 dir = dt * vi; // direction of movement of current particle
Vec3 e1 = getNormalized(Vec3(dir.z, 0, -dir.x)); // perpendicular to dir
@@ -1834,7 +1832,7 @@ struct knFlipDeleteParticlesInObstacle : public KernelBase {
}
int gridIndex = flags.index(xidx);
// remove particles that penetrate obstacles
if (flags[gridIndex] == FlagGrid::TypeObstacle || flags[gridIndex] == FlagGrid::TypeOutflow) {
if (flags.isObstacle(gridIndex) || flags.isOutflow(gridIndex)) {
pts.kill(idx);
}
}

View File

@@ -313,9 +313,7 @@ if(WITH_CYCLES_CUDA_BINARIES AND (NOT WITH_CYCLES_CUBIN_COMPILER))
set(MAX_MSVC 1910)
elseif(${CUDA_VERSION} EQUAL "9.1")
set(MAX_MSVC 1911)
elseif(${CUDA_VERSION} EQUAL "10.0")
set(MAX_MSVC 1999)
elseif(${CUDA_VERSION} EQUAL "10.1")
elseif(${CUDA_VERSION} LESS "11.0")
set(MAX_MSVC 1999)
endif()
if(NOT MSVC_VERSION LESS ${MAX_MSVC} OR CMAKE_C_COMPILER_ID MATCHES "Clang")
@@ -332,7 +330,7 @@ if(WITH_CYCLES_CUDA_BINARIES AND (NOT WITH_CYCLES_CUBIN_COMPILER))
endif()
# NVRTC gives wrong rendering result in CUDA 10.0, so we must use NVCC.
if(WITH_CYCLES_CUDA_BINARIES AND WITH_CYCLES_CUBIN_COMPILER)
if(WITH_CYCLES_CUDA_BINARIES AND WITH_CYCLES_CUBIN_COMPILER AND NOT WITH_CYCLES_CUBIN_COMPILER_OVERRRIDE)
if(NOT (${CUDA_VERSION} VERSION_LESS 10.0))
message(STATUS "cycles_cubin_cc not supported for CUDA 10.0+, using nvcc instead.")
set(WITH_CYCLES_CUBIN_COMPILER OFF)

View File

@@ -43,7 +43,8 @@ template<typename T> std::string to_string(const T &n)
class CompilationSettings {
public:
CompilationSettings() : target_arch(0), bits(64), verbose(false), fast_math(false)
CompilationSettings()
: target_arch(0), bits(64), verbose(false), fast_math(false), ptx_only(false)
{
}
@@ -57,12 +58,13 @@ class CompilationSettings {
int bits;
bool verbose;
bool fast_math;
bool ptx_only;
};
static bool compile_cuda(CompilationSettings &settings)
{
const char *headers[] = {"stdlib.h", "float.h", "math.h", "stdio.h"};
const char *header_content[] = {"\n", "\n", "\n", "\n"};
const char *headers[] = {"stdlib.h", "float.h", "math.h", "stdio.h", "stddef.h"};
const char *header_content[] = {"\n", "\n", "\n", "\n", "\n"};
printf("Building %s\n", settings.input_file.c_str());
@@ -83,6 +85,8 @@ static bool compile_cuda(CompilationSettings &settings)
options.push_back("-D__KERNEL_CUDA_VERSION__=" + std::to_string(cuewNvrtcVersion()));
options.push_back("-arch=compute_" + std::to_string(settings.target_arch));
options.push_back("--device-as-default-execution-space");
options.push_back("-DCYCLES_CUBIN_CC");
options.push_back("--std=c++11");
if (settings.fast_math)
options.push_back("--use_fast_math");
@@ -134,10 +138,14 @@ static bool compile_cuda(CompilationSettings &settings)
fprintf(stderr, "Error: nvrtcGetPTX failed (%d)\n\n", (int)result);
return false;
}
/* Write a file in the temp folder with the ptx code. */
settings.ptx_file = OIIO::Filesystem::temp_directory_path() + "/" +
OIIO::Filesystem::unique_path();
if (settings.ptx_only) {
settings.ptx_file = settings.output_file;
}
else {
/* Write a file in the temp folder with the ptx code. */
settings.ptx_file = OIIO::Filesystem::temp_directory_path() + "/" +
OIIO::Filesystem::unique_path();
}
FILE *f = fopen(settings.ptx_file.c_str(), "wb");
fwrite(&ptx_code[0], 1, ptx_size, f);
fclose(f);
@@ -249,6 +257,9 @@ static bool parse_parameters(int argc, const char **argv, CompilationSettings &s
"-D %L",
&settings.defines,
"Add additional defines",
"-ptx",
&settings.ptx_only,
"emit PTX code",
"-v",
&settings.verbose,
"Use verbose logging",
@@ -303,8 +314,10 @@ int main(int argc, const char **argv)
exit(EXIT_FAILURE);
}
if (!link_ptxas(settings)) {
exit(EXIT_FAILURE);
if (!settings.ptx_only) {
if (!link_ptxas(settings)) {
exit(EXIT_FAILURE);
}
}
return 0;

View File

@@ -260,15 +260,16 @@ def list_render_passes(srl):
if crl.use_pass_volume_indirect: yield ("VolumeInd", "RGB", 'COLOR')
# Cryptomatte passes.
crypto_depth = (crl.pass_crypto_depth + 1) // 2
if crl.use_pass_crypto_object:
for i in range(0, crl.pass_crypto_depth, 2):
yield ("CryptoObject" + '{:02d}'.format(i//2), "RGBA", 'COLOR')
for i in range(0, crypto_depth):
yield ("CryptoObject" + '{:02d}'.format(i), "RGBA", 'COLOR')
if crl.use_pass_crypto_material:
for i in range(0, crl.pass_crypto_depth, 2):
yield ("CryptoMaterial" + '{:02d}'.format(i//2), "RGBA", 'COLOR')
for i in range(0, crypto_depth):
yield ("CryptoMaterial" + '{:02d}'.format(i), "RGBA", 'COLOR')
if srl.cycles.use_pass_crypto_asset:
for i in range(0, srl.cycles.pass_crypto_depth, 2):
yield ("CryptoAsset" + '{:02d}'.format(i//2), "RGBA", 'COLOR')
for i in range(0, crypto_depth):
yield ("CryptoAsset" + '{:02d}'.format(i), "RGBA", 'COLOR')
# Denoising passes.
if crl.use_denoising or crl.denoising_store_passes:

View File

@@ -1917,7 +1917,6 @@ class CYCLES_RENDER_PT_bake_influence(CyclesButtonsPanel, Panel):
flow.prop(cbk, "use_pass_diffuse")
flow.prop(cbk, "use_pass_glossy")
flow.prop(cbk, "use_pass_transmission")
flow.prop(cbk, "use_pass_subsurface")
flow.prop(cbk, "use_pass_ambient_occlusion")
flow.prop(cbk, "use_pass_emit")
@@ -2087,7 +2086,7 @@ class CYCLES_RENDER_PT_simplify_viewport(CyclesButtonsPanel, Panel):
col.prop(rd, "simplify_child_particles", text="Child Particles")
col.prop(cscene, "texture_limit", text="Texture Limit")
col.prop(cscene, "ao_bounces", text="AO Bounces")
col.prop(rd, "use_simplify_smoke_highres")
class CYCLES_RENDER_PT_simplify_render(CyclesButtonsPanel, Panel):
bl_label = "Render"

View File

@@ -633,11 +633,11 @@ vector<Pass> BlenderSync::sync_render_passes(BL::RenderLayer &b_rlay,
/* Cryptomatte stores two ID/weight pairs per RGBA layer.
* User facing parameter is the number of pairs. */
int crypto_depth = min(16, get_int(crp, "pass_crypto_depth")) / 2;
int crypto_depth = divide_up(min(16, get_int(crp, "pass_crypto_depth")), 2);
scene->film->cryptomatte_depth = crypto_depth;
scene->film->cryptomatte_passes = CRYPT_NONE;
if (get_boolean(crp, "use_pass_crypto_object")) {
for (int i = 0; i < crypto_depth; ++i) {
for (int i = 0; i < crypto_depth; i++) {
string passname = cryptomatte_prefix + string_printf("Object%02d", i);
b_engine.add_pass(passname.c_str(), 4, "RGBA", b_view_layer.name().c_str());
Pass::add(PASS_CRYPTOMATTE, passes, passname.c_str());
@@ -646,7 +646,7 @@ vector<Pass> BlenderSync::sync_render_passes(BL::RenderLayer &b_rlay,
CRYPT_OBJECT);
}
if (get_boolean(crp, "use_pass_crypto_material")) {
for (int i = 0; i < crypto_depth; ++i) {
for (int i = 0; i < crypto_depth; i++) {
string passname = cryptomatte_prefix + string_printf("Material%02d", i);
b_engine.add_pass(passname.c_str(), 4, "RGBA", b_view_layer.name().c_str());
Pass::add(PASS_CRYPTOMATTE, passes, passname.c_str());
@@ -655,7 +655,7 @@ vector<Pass> BlenderSync::sync_render_passes(BL::RenderLayer &b_rlay,
CRYPT_MATERIAL);
}
if (get_boolean(crp, "use_pass_crypto_asset")) {
for (int i = 0; i < crypto_depth; ++i) {
for (int i = 0; i < crypto_depth; i++) {
string passname = cryptomatte_prefix + string_printf("Asset%02d", i);
b_engine.add_pass(passname.c_str(), 4, "RGBA", b_view_layer.name().c_str());
Pass::add(PASS_CRYPTOMATTE, passes, passname.c_str());

View File

@@ -597,6 +597,7 @@ DeviceInfo Device::get_multi_device(const vector<DeviceInfo> &subdevices,
info.has_half_images = true;
info.has_volume_decoupled = true;
info.has_adaptive_stop_per_sample = true;
info.has_osl = true;
info.has_profiling = true;
@@ -639,6 +640,7 @@ DeviceInfo Device::get_multi_device(const vector<DeviceInfo> &subdevices,
/* Accumulate device info. */
info.has_half_images &= device.has_half_images;
info.has_volume_decoupled &= device.has_volume_decoupled;
info.has_adaptive_stop_per_sample &= device.has_adaptive_stop_per_sample;
info.has_osl &= device.has_osl;
info.has_profiling &= device.has_profiling;
}

View File

@@ -75,12 +75,13 @@ class DeviceInfo {
string description;
string id; /* used for user preferences, should stay fixed with changing hardware config */
int num;
bool display_device; /* GPU is used as a display device. */
bool has_half_images; /* Support half-float textures. */
bool has_volume_decoupled; /* Decoupled volume shading. */
bool has_osl; /* Support Open Shading Language. */
bool use_split_kernel; /* Use split or mega kernel. */
bool has_profiling; /* Supports runtime collection of profiling info. */
bool display_device; /* GPU is used as a display device. */
bool has_half_images; /* Support half-float textures. */
bool has_volume_decoupled; /* Decoupled volume shading. */
bool has_adaptive_stop_per_sample; /* Per-sample adaptive sampling stopping. */
bool has_osl; /* Support Open Shading Language. */
bool use_split_kernel; /* Use split or mega kernel. */
bool has_profiling; /* Supports runtime collection of profiling info. */
int cpu_threads;
vector<DeviceInfo> multi_devices;
vector<DeviceInfo> denoising_devices;
@@ -94,6 +95,7 @@ class DeviceInfo {
display_device = false;
has_half_images = false;
has_volume_decoupled = false;
has_adaptive_stop_per_sample = false;
has_osl = false;
use_split_kernel = false;
has_profiling = false;

View File

@@ -839,7 +839,7 @@ class CPUDevice : public Device {
return true;
}
bool adaptive_sampling_filter(KernelGlobals *kg, RenderTile &tile)
bool adaptive_sampling_filter(KernelGlobals *kg, RenderTile &tile, int sample)
{
WorkTile wtile;
wtile.x = tile.x;
@@ -850,11 +850,24 @@ class CPUDevice : public Device {
wtile.stride = tile.stride;
wtile.buffer = (float *)tile.buffer;
/* For CPU we do adaptive stopping per sample so we can stop earlier, but
* for combined CPU + GPU rendering we match the GPU and do it per tile
* after a given number of sample steps. */
if (!kernel_data.integrator.adaptive_stop_per_sample) {
for (int y = wtile.y; y < wtile.y + wtile.h; ++y) {
for (int x = wtile.x; x < wtile.x + wtile.w; ++x) {
const int index = wtile.offset + x + y * wtile.stride;
float *buffer = wtile.buffer + index * kernel_data.film.pass_stride;
kernel_do_adaptive_stopping(kg, buffer, sample);
}
}
}
bool any = false;
for (int y = tile.y; y < tile.y + tile.h; ++y) {
for (int y = wtile.y; y < wtile.y + wtile.h; ++y) {
any |= kernel_do_adaptive_filter_x(kg, y, &wtile);
}
for (int x = tile.x; x < tile.x + tile.w; ++x) {
for (int x = wtile.x; x < wtile.x + wtile.w; ++x) {
any |= kernel_do_adaptive_filter_y(kg, x, &wtile);
}
return (!any);
@@ -917,7 +930,7 @@ class CPUDevice : public Device {
tile.sample = sample + 1;
if (task.adaptive_sampling.use && task.adaptive_sampling.need_filter(sample)) {
const bool stop = adaptive_sampling_filter(kg, tile);
const bool stop = adaptive_sampling_filter(kg, tile, sample);
if (stop) {
const int num_progress_samples = end_sample - sample;
tile.sample = end_sample;
@@ -1327,6 +1340,7 @@ void device_cpu_info(vector<DeviceInfo> &devices)
info.id = "CPU";
info.num = 0;
info.has_volume_decoupled = true;
info.has_adaptive_stop_per_sample = true;
info.has_osl = true;
info.has_half_images = true;
info.has_profiling = true;

View File

@@ -129,6 +129,7 @@ void device_cuda_info(vector<DeviceInfo> &devices)
info.has_half_images = (major >= 3);
info.has_volume_decoupled = false;
info.has_adaptive_stop_per_sample = false;
int pci_location[3] = {0, 0, 0};
cuDeviceGetAttribute(&pci_location[0], CU_DEVICE_ATTRIBUTE_PCI_DOMAIN_ID, num);

View File

@@ -311,6 +311,7 @@ void device_network_info(vector<DeviceInfo> &devices)
/* todo: get this info from device */
info.has_volume_decoupled = false;
info.has_adaptive_stop_per_sample = false;
info.has_osl = false;
devices.push_back(info);

View File

@@ -119,6 +119,7 @@ void device_opencl_info(vector<DeviceInfo> &devices)
info.display_device = true;
info.use_split_kernel = true;
info.has_volume_decoupled = false;
info.has_adaptive_stop_per_sample = false;
info.id = id;
/* Check OpenCL extensions */

View File

@@ -1558,7 +1558,7 @@ void device_optix_info(vector<DeviceInfo> &devices)
}
// Only add devices with RTX support
if (rtcore_version == 0)
if (rtcore_version == 0 && !getenv("CYCLES_OPTIX_TEST"))
it = cuda_devices.erase(it);
else
++it;

View File

@@ -138,8 +138,7 @@ void DeviceTask::update_progress(RenderTile *rtile, int pixel_samples)
/* Adaptive Sampling */
AdaptiveSampling::AdaptiveSampling()
: use(true), adaptive_step(ADAPTIVE_SAMPLE_STEP), min_samples(0)
AdaptiveSampling::AdaptiveSampling() : use(true), adaptive_step(0), min_samples(0)
{
}

View File

@@ -88,9 +88,12 @@ class OpenCLInfo {
static bool device_supported(const string &platform_name, const cl_device_id device_id);
static bool platform_version_check(cl_platform_id platform, string *error = NULL);
static bool device_version_check(cl_device_id device, string *error = NULL);
static bool get_device_version(cl_device_id device,
int *r_major,
int *r_minor,
string *error = NULL);
static string get_hardware_id(const string &platform_name, cl_device_id device_id);
static void get_usable_devices(vector<OpenCLPlatformDevice> *usable_devices,
bool force_all = false);
static void get_usable_devices(vector<OpenCLPlatformDevice> *usable_devices);
/* ** Some handy shortcuts to low level cl*GetInfo() functions. ** */

View File

@@ -257,16 +257,16 @@ void OpenCLDevice::OpenCLSplitPrograms::load_kernels(
/* Ordered with most complex kernels first, to reduce overall compile time. */
ADD_SPLIT_KERNEL_PROGRAM(subsurface_scatter);
ADD_SPLIT_KERNEL_PROGRAM(direct_lighting);
ADD_SPLIT_KERNEL_PROGRAM(indirect_background);
if (requested_features.use_volume || is_preview) {
ADD_SPLIT_KERNEL_PROGRAM(do_volume);
}
ADD_SPLIT_KERNEL_PROGRAM(shader_eval);
ADD_SPLIT_KERNEL_PROGRAM(lamp_emission);
ADD_SPLIT_KERNEL_PROGRAM(holdout_emission_blurring_pathtermination_ao);
ADD_SPLIT_KERNEL_PROGRAM(shadow_blocked_dl);
ADD_SPLIT_KERNEL_PROGRAM(shadow_blocked_ao);
ADD_SPLIT_KERNEL_PROGRAM(holdout_emission_blurring_pathtermination_ao);
ADD_SPLIT_KERNEL_PROGRAM(lamp_emission);
ADD_SPLIT_KERNEL_PROGRAM(direct_lighting);
ADD_SPLIT_KERNEL_PROGRAM(indirect_background);
ADD_SPLIT_KERNEL_PROGRAM(shader_eval);
/* Quick kernels bundled in a single program to reduce overhead of starting
* Blender processes. */
@@ -1896,6 +1896,17 @@ string OpenCLDevice::kernel_build_options(const string *debug_src)
{
string build_options = "-cl-no-signed-zeros -cl-mad-enable ";
/* Build with OpenCL 2.0 if available, this improves performance
* with AMD OpenCL drivers on Windows and Linux (legacy drivers).
* Note that OpenCL selects the highest 1.x version by default,
* only for 2.0 do we need the explicit compiler flag. */
int version_major, version_minor;
if (OpenCLInfo::get_device_version(cdDevice, &version_major, &version_minor)) {
if (version_major >= 2) {
build_options += "-cl-std=CL2.0 ";
}
}
if (platform_name == "NVIDIA CUDA") {
build_options +=
"-D__KERNEL_OPENCL_NVIDIA__ "

View File

@@ -23,6 +23,7 @@
# include "util/util_logging.h"
# include "util/util_md5.h"
# include "util/util_path.h"
# include "util/util_semaphore.h"
# include "util/util_system.h"
# include "util/util_time.h"
@@ -390,8 +391,27 @@ static void escape_python_string(string &str)
string_replace(str, "'", "\'");
}
static int opencl_compile_process_limit()
{
/* Limit number of concurrent processes compiling, with a heuristic based
* on total physical RAM and estimate of memory usage needed when compiling
* with all Cycles features enabled.
*
* This is somewhat arbitrary as we don't know the actual available RAM or
* how much the kernel compilation will needed depending on the features, but
* better than not limiting at all. */
static const int64_t GB = 1024LL * 1024LL * 1024LL;
static const int64_t process_memory = 2 * GB;
static const int64_t base_memory = 2 * GB;
static const int64_t system_memory = system_physical_ram();
static const int64_t process_limit = (system_memory - base_memory) / process_memory;
return max((int)process_limit, 1);
}
bool OpenCLDevice::OpenCLProgram::compile_separate(const string &clbin)
{
/* Construct arguments. */
vector<string> args;
args.push_back("--background");
args.push_back("--factory-startup");
@@ -419,14 +439,23 @@ bool OpenCLDevice::OpenCLProgram::compile_separate(const string &clbin)
kernel_file_escaped.c_str(),
clbin_escaped.c_str()));
double starttime = time_dt();
/* Limit number of concurrent processes compiling. */
static thread_counting_semaphore semaphore(opencl_compile_process_limit());
semaphore.acquire();
/* Compile. */
const double starttime = time_dt();
add_log(string("Cycles: compiling OpenCL program ") + program_name + "...", false);
add_log(string("Build flags: ") + kernel_build_options, true);
if (!system_call_self(args) || !path_exists(clbin)) {
const bool success = system_call_self(args);
const double elapsed = time_dt() - starttime;
semaphore.release();
if (!success || !path_exists(clbin)) {
return false;
}
double elapsed = time_dt() - starttime;
add_log(
string_printf("Kernel compilation of %s finished in %.2lfs.", program_name.c_str(), elapsed),
false);
@@ -747,6 +776,10 @@ bool OpenCLInfo::device_supported(const string &platform_name, const cl_device_i
}
VLOG(3) << "OpenCL driver version " << driver_major << "." << driver_minor;
if (getenv("CYCLES_OPENCL_TEST")) {
return true;
}
/* It is possible to have Iris GPU on AMD/Apple OpenCL framework
* (aka, it will not be on Intel framework). This isn't supported
* and needs an explicit blacklist.
@@ -806,18 +839,30 @@ bool OpenCLInfo::platform_version_check(cl_platform_id platform, string *error)
return true;
}
bool OpenCLInfo::device_version_check(cl_device_id device, string *error)
bool OpenCLInfo::get_device_version(cl_device_id device, int *r_major, int *r_minor, string *error)
{
const int req_major = 1, req_minor = 1;
int major, minor;
char version[256];
clGetDeviceInfo(device, CL_DEVICE_OPENCL_C_VERSION, sizeof(version), &version, NULL);
if (sscanf(version, "OpenCL C %d.%d", &major, &minor) < 2) {
if (sscanf(version, "OpenCL C %d.%d", r_major, r_minor) < 2) {
if (error != NULL) {
*error = string_printf("OpenCL: failed to parse OpenCL C version string (%s).", version);
}
return false;
}
if (error != NULL) {
*error = "";
}
return true;
}
bool OpenCLInfo::device_version_check(cl_device_id device, string *error)
{
const int req_major = 1, req_minor = 1;
int major, minor;
if (!get_device_version(device, &major, &minor, error)) {
return false;
}
if (!((major == req_major && minor >= req_minor) || (major > req_major))) {
if (error != NULL) {
*error = string_printf("OpenCL: C version 1.1 or later required, found %d.%d", major, minor);
@@ -858,7 +903,7 @@ string OpenCLInfo::get_hardware_id(const string &platform_name, cl_device_id dev
return "";
}
void OpenCLInfo::get_usable_devices(vector<OpenCLPlatformDevice> *usable_devices, bool force_all)
void OpenCLInfo::get_usable_devices(vector<OpenCLPlatformDevice> *usable_devices)
{
const cl_device_type device_type = OpenCLInfo::device_type();
static bool first_time = true;
@@ -924,7 +969,7 @@ void OpenCLInfo::get_usable_devices(vector<OpenCLPlatformDevice> *usable_devices
FIRST_VLOG(2) << "Ignoring device " << device_name << " due to old compiler version.";
continue;
}
if (force_all || device_supported(platform_name, device_id)) {
if (device_supported(platform_name, device_id)) {
cl_device_type device_type;
if (!get_device_type(device_id, &device_type, &error)) {
FIRST_VLOG(2) << "Ignoring device " << device_name

View File

@@ -452,7 +452,7 @@ if(WITH_CYCLES_CUDA_BINARIES)
endif()
add_custom_command(
OUTPUT ${cuda_cubin}
OUTPUT ${cuda_file}
COMMAND ${CUBIN_CC_ENV}
"$<TARGET_FILE:cycles_cubin_cc>"
-target ${CUDA_ARCH}
@@ -461,7 +461,6 @@ if(WITH_CYCLES_CUDA_BINARIES)
-v
-cuda-toolkit-dir "${CUDA_TOOLKIT_ROOT_DIR}"
DEPENDS ${kernel_sources} cycles_cubin_cc)
set(cuda_file ${cuda_cubin})
else()
add_custom_command(
OUTPUT ${cuda_file}
@@ -517,7 +516,6 @@ if(WITH_CYCLES_DEVICE_OPTIX)
-I "${OPTIX_INCLUDE_DIR}"
-I "${CMAKE_CURRENT_SOURCE_DIR}/.."
-I "${CMAKE_CURRENT_SOURCE_DIR}/kernels/cuda"
-arch=sm_30
--use_fast_math
-o ${output})
@@ -525,25 +523,62 @@ if(WITH_CYCLES_DEVICE_OPTIX)
set(cuda_flags ${cuda_flags}
-D __KERNEL_DEBUG__)
endif()
if(WITH_CYCLES_CUBIN_COMPILER)
add_custom_command(
OUTPUT
${output}
DEPENDS
${input}
${SRC_HEADERS}
${SRC_KERNELS_CUDA_HEADERS}
${SRC_KERNELS_OPTIX_HEADERS}
${SRC_BVH_HEADERS}
${SRC_SVM_HEADERS}
${SRC_GEOM_HEADERS}
${SRC_CLOSURE_HEADERS}
${SRC_UTIL_HEADERS}
COMMAND
${CUDA_NVCC_EXECUTABLE} --ptx ${cuda_flags} ${input}
WORKING_DIRECTORY
"${CMAKE_CURRENT_SOURCE_DIR}")
# Needed to find libnvrtc-builtins.so. Can't do it from inside
# cycles_cubin_cc since the env variable is read before main()
if(APPLE)
set(CUBIN_CC_ENV ${CMAKE_COMMAND}
-E env DYLD_LIBRARY_PATH="${CUDA_TOOLKIT_ROOT_DIR}/lib")
elseif(UNIX)
set(CUBIN_CC_ENV ${CMAKE_COMMAND}
-E env LD_LIBRARY_PATH="${CUDA_TOOLKIT_ROOT_DIR}/lib64")
endif()
add_custom_command(
OUTPUT ${output}
DEPENDS
${input}
${SRC_HEADERS}
${SRC_KERNELS_CUDA_HEADERS}
${SRC_KERNELS_OPTIX_HEADERS}
${SRC_BVH_HEADERS}
${SRC_SVM_HEADERS}
${SRC_GEOM_HEADERS}
${SRC_CLOSURE_HEADERS}
${SRC_UTIL_HEADERS}
COMMAND ${CUBIN_CC_ENV}
"$<TARGET_FILE:cycles_cubin_cc>"
-target 30
-ptx
-i ${CMAKE_CURRENT_SOURCE_DIR}/${input}
${cuda_flags}
-v
-cuda-toolkit-dir "${CUDA_TOOLKIT_ROOT_DIR}"
DEPENDS ${kernel_sources} cycles_cubin_cc)
else()
add_custom_command(
OUTPUT
${output}
DEPENDS
${input}
${SRC_HEADERS}
${SRC_KERNELS_CUDA_HEADERS}
${SRC_KERNELS_OPTIX_HEADERS}
${SRC_BVH_HEADERS}
${SRC_SVM_HEADERS}
${SRC_GEOM_HEADERS}
${SRC_CLOSURE_HEADERS}
${SRC_UTIL_HEADERS}
COMMAND
${CUDA_NVCC_EXECUTABLE}
--ptx
-arch=sm_30
${cuda_flags}
${input}
WORKING_DIRECTORY
"${CMAKE_CURRENT_SOURCE_DIR}")
endif()
list(APPEND optix_ptx ${output})
delayed_install("${CMAKE_CURRENT_BINARY_DIR}" "${output}" ${CYCLES_INSTALL_PATH}/lib)

View File

@@ -493,6 +493,36 @@ ccl_device void bsdf_principled_hair_blur(ShaderClosure *sc, float roughness)
bsdf->m0_roughness = fmaxf(roughness, bsdf->m0_roughness);
}
/* Hair Albedo */
ccl_device_inline float bsdf_principled_hair_albedo_roughness_scale(
const float azimuthal_roughness)
{
const float x = azimuthal_roughness;
return (((((0.245f * x) + 5.574f) * x - 10.73f) * x + 2.532f) * x - 0.215f) * x + 5.969f;
}
ccl_device float3 bsdf_principled_hair_albedo(ShaderClosure *sc)
{
PrincipledHairBSDF *bsdf = (PrincipledHairBSDF *)sc;
return exp3(-sqrt(bsdf->sigma) * bsdf_principled_hair_albedo_roughness_scale(bsdf->v));
}
ccl_device_inline float3
bsdf_principled_hair_sigma_from_reflectance(const float3 color, const float azimuthal_roughness)
{
const float3 sigma = log3(color) /
bsdf_principled_hair_albedo_roughness_scale(azimuthal_roughness);
return sigma * sigma;
}
ccl_device_inline float3 bsdf_principled_hair_sigma_from_concentration(const float eumelanin,
const float pheomelanin)
{
return eumelanin * make_float3(0.506f, 0.841f, 1.653f) +
pheomelanin * make_float3(0.343f, 0.733f, 1.924f);
}
CCL_NAMESPACE_END
#endif /* __BSDF_HAIR_PRINCIPLED_H__ */

View File

@@ -103,17 +103,21 @@ ccl_device_inline
const Ray *ray,
float3 verts[3])
{
# ifdef __KERNEL_OPTIX__
/* isect->t is always in world space with OptiX. */
return motion_triangle_refine(kg, sd, isect, ray, verts);
# else
float3 P = ray->P;
float3 D = ray->D;
float t = isect->t;
# ifdef __INTERSECTION_REFINE__
# ifdef __INTERSECTION_REFINE__
if (isect->object != OBJECT_NONE) {
# ifdef __OBJECT_MOTION__
# ifdef __OBJECT_MOTION__
Transform tfm = sd->ob_itfm;
# else
# else
Transform tfm = object_fetch_transform(kg, isect->object, OBJECT_INVERSE_TRANSFORM);
# endif
# endif
P = transform_point(&tfm, P);
D = transform_direction(&tfm, D);
@@ -135,19 +139,20 @@ ccl_device_inline
P = P + D * rt;
if (isect->object != OBJECT_NONE) {
# ifdef __OBJECT_MOTION__
# ifdef __OBJECT_MOTION__
Transform tfm = sd->ob_tfm;
# else
# else
Transform tfm = object_fetch_transform(kg, isect->object, OBJECT_TRANSFORM);
# endif
# endif
P = transform_point(&tfm, P);
}
return P;
# else /* __INTERSECTION_REFINE__ */
# else /* __INTERSECTION_REFINE__ */
return P + D * t;
# endif /* __INTERSECTION_REFINE__ */
# endif /* __INTERSECTION_REFINE__ */
# endif
}
#endif /* __BVH_LOCAL__ */

View File

@@ -690,16 +690,20 @@ ccl_device_inline float3 triangle_refine_local(KernelGlobals *kg,
const Intersection *isect,
const Ray *ray)
{
#ifdef __KERNEL_OPTIX__
/* isect->t is always in world space with OptiX. */
return triangle_refine(kg, sd, isect, ray);
#else
float3 P = ray->P;
float3 D = ray->D;
float t = isect->t;
if (isect->object != OBJECT_NONE) {
#ifdef __OBJECT_MOTION__
# ifdef __OBJECT_MOTION__
Transform tfm = sd->ob_itfm;
#else
# else
Transform tfm = object_fetch_transform(kg, isect->object, OBJECT_INVERSE_TRANSFORM);
#endif
# endif
P = transform_point(&tfm, P);
D = transform_direction(&tfm, D);
@@ -708,7 +712,7 @@ ccl_device_inline float3 triangle_refine_local(KernelGlobals *kg,
P = P + D * t;
#ifdef __INTERSECTION_REFINE__
# ifdef __INTERSECTION_REFINE__
const uint tri_vindex = kernel_tex_fetch(__prim_tri_index, isect->prim);
const float4 tri_a = kernel_tex_fetch(__prim_tri_verts, tri_vindex + 0),
tri_b = kernel_tex_fetch(__prim_tri_verts, tri_vindex + 1),
@@ -728,19 +732,20 @@ ccl_device_inline float3 triangle_refine_local(KernelGlobals *kg,
float rt = dot(edge2, qvec) / det;
P = P + D * rt;
}
#endif /* __INTERSECTION_REFINE__ */
# endif /* __INTERSECTION_REFINE__ */
if (isect->object != OBJECT_NONE) {
#ifdef __OBJECT_MOTION__
# ifdef __OBJECT_MOTION__
Transform tfm = sd->ob_tfm;
#else
# else
Transform tfm = object_fetch_transform(kg, isect->object, OBJECT_TRANSFORM);
#endif
# endif
P = transform_point(&tfm, P);
}
return P;
#endif
}
CCL_NAMESPACE_END

View File

@@ -150,6 +150,7 @@ ccl_device void kernel_adaptive_post_adjust(KernelGlobals *kg,
}
#endif /* __DENOISING_FEATURES__ */
/* Cryptomatte. */
if (kernel_data.film.cryptomatte_passes) {
int num_slots = 0;
num_slots += (kernel_data.film.cryptomatte_passes & CRYPT_OBJECT) ? 1 : 0;
@@ -162,6 +163,14 @@ ccl_device void kernel_adaptive_post_adjust(KernelGlobals *kg,
id_buffer[slot].y *= sample_multiplier;
}
}
/* AOVs. */
for (int i = 0; i < kernel_data.film.pass_aov_value_num; i++) {
*(buffer + kernel_data.film.pass_aov_value + i) *= sample_multiplier;
}
for (int i = 0; i < kernel_data.film.pass_aov_color_num; i++) {
*((ccl_global float4 *)(buffer + kernel_data.film.pass_aov_color) + i) *= sample_multiplier;
}
}
/* This is a simple box filter in two passes.

View File

@@ -37,8 +37,11 @@ typedef unsigned long long uint64_t;
typedef unsigned short half;
typedef unsigned long long CUtexObject;
#define FLT_MIN 1.175494350822287507969e-38f
#define FLT_MAX 340282346638528859811704183484516925440.0f
#ifdef CYCLES_CUBIN_CC
# define FLT_MIN 1.175494350822287507969e-38f
# define FLT_MAX 340282346638528859811704183484516925440.0f
# define FLT_EPSILON 1.192092896e-07F
#endif
__device__ half __float2half(const float f)
{

View File

@@ -35,9 +35,11 @@ typedef unsigned int uint32_t;
typedef unsigned long long uint64_t;
typedef unsigned short half;
typedef unsigned long long CUtexObject;
#define FLT_MIN 1.175494350822287507969e-38f
#define FLT_MAX 340282346638528859811704183484516925440.0f
#ifdef CYCLES_CUBIN_CC
# define FLT_MIN 1.175494350822287507969e-38f
# define FLT_MAX 340282346638528859811704183484516925440.0f
# define FLT_EPSILON 1.192092896e-07F
#endif
__device__ half __float2half(const float f)
{

View File

@@ -87,6 +87,9 @@ ccl_device_inline void kernel_update_denoising_features(KernelGlobals *kg,
PrincipledSheenBsdf *bsdf = (PrincipledSheenBsdf *)sc;
closure_albedo *= bsdf->avg_value;
}
else if (sc->type == CLOSURE_BSDF_HAIR_PRINCIPLED_ID) {
closure_albedo *= bsdf_principled_hair_albedo(sc);
}
if (bsdf_get_specular_roughness_squared(sc) > sqr(0.075f)) {
diffuse_albedo += closure_albedo;
@@ -400,9 +403,13 @@ ccl_device_inline void kernel_write_result(KernelGlobals *kg,
make_float4(L_sum.x * 2.0f, L_sum.y * 2.0f, L_sum.z * 2.0f, 0.0f));
}
#ifdef __KERNEL_CPU__
if (sample > kernel_data.integrator.adaptive_min_samples &&
(sample & (ADAPTIVE_SAMPLE_STEP - 1)) == (ADAPTIVE_SAMPLE_STEP - 1)) {
kernel_do_adaptive_stopping(kg, buffer, sample);
if ((sample > kernel_data.integrator.adaptive_min_samples) &&
kernel_data.integrator.adaptive_stop_per_sample) {
const int step = kernel_data.integrator.adaptive_step;
if ((sample & (step - 1)) == (step - 1)) {
kernel_do_adaptive_stopping(kg, buffer, sample);
}
}
#endif
}

View File

@@ -428,12 +428,17 @@ ccl_device_noinline
hit = (ss_isect->num_hits > 0);
if (hit) {
#ifdef __KERNEL_OPTIX__
/* t is always in world space with OptiX. */
t = ss_isect->hits[0].t;
#else
/* Compute world space distance to surface hit. */
float3 D = ray->D;
object_inverse_dir_transform(kg, sd, &D);
D = normalize(D) * ss_isect->hits[0].t;
object_dir_transform(kg, sd, &D);
t = len(D);
#endif
}
/* Advance to new scatter location. */

View File

@@ -63,11 +63,6 @@ CCL_NAMESPACE_BEGIN
#define VOLUME_STACK_SIZE 32
/* Adaptive sampling constants */
#define ADAPTIVE_SAMPLE_STEP 4
static_assert((ADAPTIVE_SAMPLE_STEP & (ADAPTIVE_SAMPLE_STEP - 1)) == 0,
"ADAPTIVE_SAMPLE_STEP must be power of two for bitwise operations to work");
/* Split kernel constants */
#define WORK_POOL_SIZE_GPU 64
#define WORK_POOL_SIZE_CPU 1
@@ -111,8 +106,6 @@ static_assert((ADAPTIVE_SAMPLE_STEP & (ADAPTIVE_SAMPLE_STEP - 1)) == 0,
#ifndef __KERNEL_AO_PREVIEW__
# define __SVM__
# define __EMISSION__
# define __TEXTURES__
# define __EXTRA_NODES__
# define __HOLDOUT__
# define __MULTI_CLOSURE__
# define __TRANSPARENT_SHADOWS__
@@ -1244,7 +1237,9 @@ typedef struct KernelFilm {
int pass_aov_color;
int pass_aov_value;
int pad1;
int pass_aov_color_num;
int pass_aov_value_num;
int pad1, pad2, pad3;
/* XYZ to rendering color space transform. float4 instead of float3 to
* ensure consistent padding/alignment across devices. */
@@ -1267,7 +1262,7 @@ typedef struct KernelFilm {
int use_display_exposure;
int use_display_pass_alpha;
int pad3, pad4, pad5;
int pad4, pad5, pad6;
} KernelFilm;
static_assert_align(KernelFilm, 16);
@@ -1350,6 +1345,8 @@ typedef struct KernelIntegrator {
int sampling_pattern;
int aa_samples;
int adaptive_min_samples;
int adaptive_step;
int adaptive_stop_per_sample;
float adaptive_threshold;
/* volume render */
@@ -1362,7 +1359,7 @@ typedef struct KernelIntegrator {
int max_closures;
int pad1, pad2, pad3;
int pad1;
} KernelIntegrator;
static_assert_align(KernelIntegrator, 16);

View File

@@ -231,6 +231,8 @@ ccl_device_noinline void svm_eval_nodes(KernelGlobals *kg,
uint4 node = read_node(kg, &offset);
switch (node.x) {
case NODE_END:
return;
#if NODES_GROUP(NODE_GROUP_LEVEL_0)
case NODE_SHADER_JUMP: {
if (type == SHADER_TYPE_SURFACE)
@@ -310,7 +312,6 @@ ccl_device_noinline void svm_eval_nodes(KernelGlobals *kg,
svm_node_vector_displacement(kg, sd, stack, node, &offset);
break;
# endif /* NODES_FEATURE(NODE_FEATURE_BUMP) */
# ifdef __TEXTURES__
case NODE_TEX_IMAGE:
svm_node_tex_image(kg, sd, stack, node, &offset);
break;
@@ -320,9 +321,7 @@ ccl_device_noinline void svm_eval_nodes(KernelGlobals *kg,
case NODE_TEX_NOISE:
svm_node_tex_noise(kg, sd, stack, node.y, node.z, node.w, &offset);
break;
# endif /* __TEXTURES__ */
# ifdef __EXTRA_NODES__
# if NODES_FEATURE(NODE_FEATURE_BUMP)
# if NODES_FEATURE(NODE_FEATURE_BUMP)
case NODE_SET_BUMP:
svm_node_set_bump(kg, sd, stack, node);
break;
@@ -347,20 +346,19 @@ ccl_device_noinline void svm_eval_nodes(KernelGlobals *kg,
case NODE_CLOSURE_SET_NORMAL:
svm_node_set_normal(kg, sd, stack, node.y, node.z);
break;
# if NODES_FEATURE(NODE_FEATURE_BUMP_STATE)
# if NODES_FEATURE(NODE_FEATURE_BUMP_STATE)
case NODE_ENTER_BUMP_EVAL:
svm_node_enter_bump_eval(kg, sd, stack, node.y);
break;
case NODE_LEAVE_BUMP_EVAL:
svm_node_leave_bump_eval(kg, sd, stack, node.y);
break;
# endif /* NODES_FEATURE(NODE_FEATURE_BUMP_STATE) */
# endif /* NODES_FEATURE(NODE_FEATURE_BUMP) */
# endif /* NODES_FEATURE(NODE_FEATURE_BUMP_STATE) */
# endif /* NODES_FEATURE(NODE_FEATURE_BUMP) */
case NODE_HSV:
svm_node_hsv(kg, sd, stack, node, &offset);
break;
# endif /* __EXTRA_NODES__ */
#endif /* NODES_GROUP(NODE_GROUP_LEVEL_0) */
#endif /* NODES_GROUP(NODE_GROUP_LEVEL_0) */
#if NODES_GROUP(NODE_GROUP_LEVEL_1)
case NODE_CLOSURE_HOLDOUT:
@@ -380,7 +378,6 @@ ccl_device_noinline void svm_eval_nodes(KernelGlobals *kg,
svm_node_principled_volume(kg, sd, stack, node, type, path_flag, &offset);
break;
# endif /* NODES_FEATURE(NODE_FEATURE_VOLUME) */
# ifdef __EXTRA_NODES__
case NODE_MATH:
svm_node_math(kg, sd, stack, node.y, node.z, node.w, &offset);
break;
@@ -405,15 +402,12 @@ ccl_device_noinline void svm_eval_nodes(KernelGlobals *kg,
case NODE_PARTICLE_INFO:
svm_node_particle_info(kg, sd, stack, node.y, node.z);
break;
# ifdef __HAIR__
# if NODES_FEATURE(NODE_FEATURE_HAIR)
# if defined(__HAIR__) && NODES_FEATURE(NODE_FEATURE_HAIR)
case NODE_HAIR_INFO:
svm_node_hair_info(kg, sd, stack, node.y, node.z);
break;
# endif /* NODES_FEATURE(NODE_FEATURE_HAIR) */
# endif /* __HAIR__ */
# endif /* __EXTRA_NODES__ */
#endif /* NODES_GROUP(NODE_GROUP_LEVEL_1) */
# endif /* NODES_FEATURE(NODE_FEATURE_HAIR) */
#endif /* NODES_GROUP(NODE_GROUP_LEVEL_1) */
#if NODES_GROUP(NODE_GROUP_LEVEL_2)
case NODE_TEXTURE_MAPPING:
@@ -428,7 +422,6 @@ ccl_device_noinline void svm_eval_nodes(KernelGlobals *kg,
case NODE_CAMERA:
svm_node_camera(kg, sd, stack, node.y, node.z, node.w);
break;
# ifdef __TEXTURES__
case NODE_TEX_ENVIRONMENT:
svm_node_tex_environment(kg, sd, stack, node);
break;
@@ -459,8 +452,6 @@ ccl_device_noinline void svm_eval_nodes(KernelGlobals *kg,
case NODE_TEX_WHITE_NOISE:
svm_node_tex_white_noise(kg, sd, stack, node.y, node.z, node.w, &offset);
break;
# endif /* __TEXTURES__ */
# ifdef __EXTRA_NODES__
case NODE_NORMAL:
svm_node_normal(kg, sd, stack, node.y, node.z, node.w, &offset);
break;
@@ -470,19 +461,7 @@ ccl_device_noinline void svm_eval_nodes(KernelGlobals *kg,
case NODE_IES:
svm_node_ies(kg, sd, stack, node, &offset);
break;
case NODE_AOV_START:
if (!svm_node_aov_check(state, buffer)) {
return;
}
break;
case NODE_AOV_COLOR:
svm_node_aov_color(kg, sd, stack, node, buffer);
break;
case NODE_AOV_VALUE:
svm_node_aov_value(kg, sd, stack, node, buffer);
break;
# endif /* __EXTRA_NODES__ */
#endif /* NODES_GROUP(NODE_GROUP_LEVEL_2) */
#endif /* NODES_GROUP(NODE_GROUP_LEVEL_2) */
#if NODES_GROUP(NODE_GROUP_LEVEL_3)
case NODE_RGB_CURVES:
@@ -495,7 +474,6 @@ ccl_device_noinline void svm_eval_nodes(KernelGlobals *kg,
case NODE_NORMAL_MAP:
svm_node_normal_map(kg, sd, stack, node);
break;
# ifdef __EXTRA_NODES__
case NODE_INVERT:
svm_node_invert(sd, stack, node.y, node.z, node.w);
break;
@@ -535,12 +513,6 @@ ccl_device_noinline void svm_eval_nodes(KernelGlobals *kg,
case NODE_CLAMP:
svm_node_clamp(kg, sd, stack, node.y, node.z, node.w, &offset);
break;
# endif /* __EXTRA_NODES__ */
# if NODES_FEATURE(NODE_FEATURE_VOLUME)
case NODE_TEX_VOXEL:
svm_node_tex_voxel(kg, sd, stack, node, &offset);
break;
# endif /* NODES_FEATURE(NODE_FEATURE_VOLUME) */
# ifdef __SHADER_RAYTRACE__
case NODE_BEVEL:
svm_node_bevel(kg, sd, state, stack, node);
@@ -550,8 +522,25 @@ ccl_device_noinline void svm_eval_nodes(KernelGlobals *kg,
break;
# endif /* __SHADER_RAYTRACE__ */
#endif /* NODES_GROUP(NODE_GROUP_LEVEL_3) */
case NODE_END:
return;
#if NODES_GROUP(NODE_GROUP_LEVEL_4)
# if NODES_FEATURE(NODE_FEATURE_VOLUME)
case NODE_TEX_VOXEL:
svm_node_tex_voxel(kg, sd, stack, node, &offset);
break;
# endif /* NODES_FEATURE(NODE_FEATURE_VOLUME) */
case NODE_AOV_START:
if (!svm_node_aov_check(state, buffer)) {
return;
}
break;
case NODE_AOV_COLOR:
svm_node_aov_color(kg, sd, stack, node, buffer);
break;
case NODE_AOV_VALUE:
svm_node_aov_value(kg, sd, stack, node, buffer);
break;
#endif /* NODES_GROUP(NODE_GROUP_LEVEL_4) */
default:
kernel_assert(!"Unknown node type was passed to the SVM machine");
return;

View File

@@ -16,23 +16,6 @@
CCL_NAMESPACE_BEGIN
/* Hair Melanin */
ccl_device_inline float3 sigma_from_concentration(float eumelanin, float pheomelanin)
{
return eumelanin * make_float3(0.506f, 0.841f, 1.653f) +
pheomelanin * make_float3(0.343f, 0.733f, 1.924f);
}
ccl_device_inline float3 sigma_from_reflectance(float3 color, float azimuthal_roughness)
{
float x = azimuthal_roughness;
float roughness_fac = (((((0.245f * x) + 5.574f) * x - 10.73f) * x + 2.532f) * x - 0.215f) * x +
5.969f;
float3 sigma = log3(color) / roughness_fac;
return sigma * sigma;
}
/* Closure Nodes */
ccl_device void svm_node_glass_setup(
@@ -868,24 +851,26 @@ ccl_device void svm_node_closure_bsdf(KernelGlobals *kg,
/* Benedikt Bitterli's melanin ratio remapping. */
float eumelanin = melanin * (1.0f - melanin_redness);
float pheomelanin = melanin * melanin_redness;
float3 melanin_sigma = sigma_from_concentration(eumelanin, pheomelanin);
float3 melanin_sigma = bsdf_principled_hair_sigma_from_concentration(eumelanin,
pheomelanin);
/* Optional tint. */
float3 tint = stack_load_float3(stack, tint_ofs);
float3 tint_sigma = sigma_from_reflectance(tint, radial_roughness);
float3 tint_sigma = bsdf_principled_hair_sigma_from_reflectance(tint,
radial_roughness);
bsdf->sigma = melanin_sigma + tint_sigma;
break;
}
case NODE_PRINCIPLED_HAIR_REFLECTANCE: {
float3 color = stack_load_float3(stack, color_ofs);
bsdf->sigma = sigma_from_reflectance(color, radial_roughness);
bsdf->sigma = bsdf_principled_hair_sigma_from_reflectance(color, radial_roughness);
break;
}
default: {
/* Fallback to brownish hair, same as defaults for melanin. */
kernel_assert(!"Invalid Principled Hair parametrization!");
bsdf->sigma = sigma_from_concentration(0.0f, 0.8054375f);
bsdf->sigma = bsdf_principled_hair_sigma_from_concentration(0.0f, 0.8054375f);
break;
}
}

View File

@@ -16,8 +16,6 @@
CCL_NAMESPACE_BEGIN
#ifdef __TEXTURES__
ccl_device float4 svm_image_texture(KernelGlobals *kg, int id, float x, float y, uint flags)
{
if (id == -1) {
@@ -246,6 +244,4 @@ ccl_device void svm_node_tex_environment(KernelGlobals *kg,
stack_store_float(stack, alpha_offset, f.w);
}
#endif /* __TEXTURES__ */
CCL_NAMESPACE_END

View File

@@ -51,7 +51,7 @@ ccl_device void svm_node_vector_math(KernelGlobals *kg,
float3 a = stack_load_float3(stack, a_stack_offset);
float3 b = stack_load_float3(stack, b_stack_offset);
float3 c;
float3 c = make_float3(0.0f, 0.0f, 0.0f);
float scale = stack_load_float(stack, scale_stack_offset);
float value;

View File

@@ -65,7 +65,7 @@ ccl_device_noinline_cpu float perlin_1d(float x)
* supported, we do a standard implementation, but if it is supported, we
* do an implementation using SSE intrinsics.
*/
#ifndef __KERNEL_SSE2__
#if !defined(__KERNEL_SSE2__)
/* ** Standard Implementation ** */
@@ -266,7 +266,7 @@ ccl_device_noinline_cpu float perlin_4d(float x, float y, float z, float w)
return r;
}
#else
#else /* SSE is supported. */
/* ** SSE Implementation ** */
@@ -300,6 +300,57 @@ ccl_device_inline ssef bi_mix(ssef p, ssef f)
return mix(g, shuffle<1>(g), shuffle<1>(f));
}
ccl_device_inline ssef fade(const ssef &t)
{
ssef a = madd(t, 6.0f, -15.0f);
ssef b = madd(t, a, 10.0f);
return (t * t) * (t * b);
}
/* Negate val if the nth bit of h is 1. */
# define negate_if_nth_bit(val, h, n) ((val) ^ cast(((h) & (1 << (n))) << (31 - (n))))
ccl_device_inline ssef grad(const ssei &hash, const ssef &x, const ssef &y)
{
ssei h = hash & 7;
ssef u = select(h < 4, x, y);
ssef v = 2.0f * select(h < 4, y, x);
return negate_if_nth_bit(u, h, 0) + negate_if_nth_bit(v, h, 1);
}
/* We use SSE to compute and interpolate 4 gradients at once:
*
* Point Offset from v0
* v0 (0, 0)
* v1 (0, 1)
* v2 (1, 0) (0, 1, 0, 1) = shuffle<0, 2, 0, 2>(shuffle<1, 1, 1, 1>(V, V + 1))
* v3 (1, 1) ^
* | |__________| (0, 0, 1, 1) = shuffle<0, 0, 0, 0>(V, V + 1)
* | ^
* |__________________________|
*
*/
ccl_device_noinline float perlin_2d(float x, float y)
{
ssei XY;
ssef fxy = floorfrac(ssef(x, y, 0.0f, 0.0f), &XY);
ssef uv = fade(fxy);
ssei XY1 = XY + 1;
ssei X = shuffle<0, 0, 0, 0>(XY, XY1);
ssei Y = shuffle<0, 2, 0, 2>(shuffle<1, 1, 1, 1>(XY, XY1));
ssei h = hash_ssei2(X, Y);
ssef fxy1 = fxy - 1.0f;
ssef fx = shuffle<0, 0, 0, 0>(fxy, fxy1);
ssef fy = shuffle<0, 2, 0, 2>(shuffle<1, 1, 1, 1>(fxy, fxy1));
ssef g = grad(h, fx, fy);
return extract<0>(bi_mix(g, uv));
}
/* SSE Trilinear Interpolation:
*
* The function takes three ssef inputs:
@@ -340,34 +391,12 @@ ccl_device_inline ssef tri_mix(ssef p, ssef q, ssef f)
return mix(g, shuffle<1>(g), shuffle<2>(f));
}
/* SSE Quadrilinear Interpolation:
*
* Quadrilinear interpolation is as simple as a linear interpolation
* between two trilinear interpolations.
*
/* 3D and 4D noise can be accelerated using AVX, so we first check if AVX
* is supported, that is, if __KERNEL_AVX__ is defined. If it is not
* supported, we do an SSE implementation, but if it is supported,
* we do an implementation using AVX intrinsics.
*/
ccl_device_inline ssef quad_mix(ssef p, ssef q, ssef r, ssef s, ssef f)
{
return mix(tri_mix(p, q, f), tri_mix(r, s, f), shuffle<3>(f));
}
ccl_device_inline ssef fade(const ssef &t)
{
ssef a = madd(t, 6.0f, -15.0f);
ssef b = madd(t, a, 10.0f);
return (t * t) * (t * b);
}
/* Negate val if the nth bit of h is 1. */
# define negate_if_nth_bit(val, h, n) ((val) ^ cast(((h) & (1 << (n))) << (31 - (n))))
ccl_device_inline ssef grad(const ssei &hash, const ssef &x, const ssef &y)
{
ssei h = hash & 7;
ssef u = select(h < 4, x, y);
ssef v = 2.0f * select(h < 4, y, x);
return negate_if_nth_bit(u, h, 0) + negate_if_nth_bit(v, h, 1);
}
# if !defined(__KERNEL_AVX__)
ccl_device_inline ssef grad(const ssei &hash, const ssef &x, const ssef &y, const ssef &z)
{
@@ -388,37 +417,15 @@ grad(const ssei &hash, const ssef &x, const ssef &y, const ssef &z, const ssef &
return negate_if_nth_bit(u, h, 0) + negate_if_nth_bit(v, h, 1) + negate_if_nth_bit(s, h, 2);
}
/* We use SSE to compute and interpolate 4 gradients at once:
/* SSE Quadrilinear Interpolation:
*
* Point Offset from v0
* v0 (0, 0)
* v1 (0, 1)
* v2 (1, 0) (0, 1, 0, 1) = shuffle<0, 2, 0, 2>(shuffle<1, 1, 1, 1>(V, V + 1))
* v3 (1, 1) ^
* | |__________| (0, 0, 1, 1) = shuffle<0, 0, 0, 0>(V, V + 1)
* | ^
* |__________________________|
* Quadrilinear interpolation is as simple as a linear interpolation
* between two trilinear interpolations.
*
*/
ccl_device_noinline float perlin_2d(float x, float y)
ccl_device_inline ssef quad_mix(ssef p, ssef q, ssef r, ssef s, ssef f)
{
ssei XY;
ssef fxy = floorfrac(ssef(x, y, 0.0f, 0.0f), &XY);
ssef uv = fade(fxy);
ssei XY1 = XY + 1;
ssei X = shuffle<0, 0, 0, 0>(XY, XY1);
ssei Y = shuffle<0, 2, 0, 2>(shuffle<1, 1, 1, 1>(XY, XY1));
ssei h = hash_ssei2(X, Y);
ssef fxy1 = fxy - 1.0f;
ssef fx = shuffle<0, 0, 0, 0>(fxy, fxy1);
ssef fy = shuffle<0, 2, 0, 2>(shuffle<1, 1, 1, 1>(fxy, fxy1));
ssef g = grad(h, fx, fy);
return extract<0>(bi_mix(g, uv));
return mix(tri_mix(p, q, f), tri_mix(r, s, f), shuffle<3>(f));
}
/* We use SSE to compute and interpolate 4 gradients at once. Since we have 8
@@ -522,6 +529,148 @@ ccl_device_noinline float perlin_4d(float x, float y, float z, float w)
return extract<0>(quad_mix(g1, g2, g3, g4, uvws));
}
# else /* AVX is supported. */
/* AVX Implementation */
ccl_device_inline avxf grad(const avxi &hash, const avxf &x, const avxf &y, const avxf &z)
{
avxi h = hash & 15;
avxf u = select(h < 8, x, y);
avxf vt = select((h == 12) | (h == 14), x, z);
avxf v = select(h < 4, y, vt);
return negate_if_nth_bit(u, h, 0) + negate_if_nth_bit(v, h, 1);
}
ccl_device_inline avxf
grad(const avxi &hash, const avxf &x, const avxf &y, const avxf &z, const avxf &w)
{
avxi h = hash & 31;
avxf u = select(h < 24, x, y);
avxf v = select(h < 16, y, z);
avxf s = select(h < 8, z, w);
return negate_if_nth_bit(u, h, 0) + negate_if_nth_bit(v, h, 1) + negate_if_nth_bit(s, h, 2);
}
/* SSE Quadrilinear Interpolation:
*
* The interpolation is done in two steps:
* 1. Interpolate p and q along the w axis to get s.
* 2. Trilinearly interpolate (s0, s1, s2, s3) and (s4, s5, s6, s7) to get the final
* value. (s0, s1, s2, s3) and (s4, s5, s6, s7) are generated by extracting the
* low and high ssef from s.
*
*/
ccl_device_inline ssef quad_mix(avxf p, avxf q, ssef f)
{
ssef fv = shuffle<3>(f);
avxf s = mix(p, q, avxf(fv, fv));
return tri_mix(low(s), high(s), f);
}
/* We use AVX to compute and interpolate 8 gradients at once.
*
* Point Offset from v0
* v0 (0, 0, 0)
* v1 (0, 0, 1) The full avx type is computed by inserting the following
* v2 (0, 1, 0) sse types into both the low and high parts of the avx.
* v3 (0, 1, 1)
* v4 (1, 0, 0)
* v5 (1, 0, 1) (0, 1, 0, 1) = shuffle<0, 2, 0, 2>(shuffle<2, 2, 2, 2>(V, V + 1))
* v6 (1, 1, 0) ^
* v7 (1, 1, 1) |
* | |__________| (0, 0, 1, 1) = shuffle<1, 1, 1, 1>(V, V + 1)
* | ^
* |__________________________|
*
*/
ccl_device_noinline float perlin_3d(float x, float y, float z)
{
ssei XYZ;
ssef fxyz = floorfrac(ssef(x, y, z, 0.0f), &XYZ);
ssef uvw = fade(fxyz);
ssei XYZ1 = XYZ + 1;
ssei X = shuffle<0>(XYZ);
ssei X1 = shuffle<0>(XYZ1);
ssei Y = shuffle<1, 1, 1, 1>(XYZ, XYZ1);
ssei Z = shuffle<0, 2, 0, 2>(shuffle<2, 2, 2, 2>(XYZ, XYZ1));
avxi h = hash_avxi3(avxi(X, X1), avxi(Y, Y), avxi(Z, Z));
ssef fxyz1 = fxyz - 1.0f;
ssef fx = shuffle<0>(fxyz);
ssef fx1 = shuffle<0>(fxyz1);
ssef fy = shuffle<1, 1, 1, 1>(fxyz, fxyz1);
ssef fz = shuffle<0, 2, 0, 2>(shuffle<2, 2, 2, 2>(fxyz, fxyz1));
avxf g = grad(h, avxf(fx, fx1), avxf(fy, fy), avxf(fz, fz));
return extract<0>(tri_mix(low(g), high(g), uvw));
}
/* We use AVX to compute and interpolate 8 gradients at once. Since we have 16
* gradients in 4D, we need to compute two sets of gradients at the points:
*
* Point Offset from v0
* v0 (0, 0, 0, 0)
* v1 (0, 0, 1, 0) The full avx type is computed by inserting the following
* v2 (0, 1, 0, 0) sse types into both the low and high parts of the avx.
* v3 (0, 1, 1, 0)
* v4 (1, 0, 0, 0)
* v5 (1, 0, 1, 0) (0, 1, 0, 1) = shuffle<0, 2, 0, 2>(shuffle<2, 2, 2, 2>(V, V + 1))
* v6 (1, 1, 0, 0) ^
* v7 (1, 1, 1, 0) |
* | |________| (0, 0, 1, 1) = shuffle<1, 1, 1, 1>(V, V + 1)
* | ^
* |_______________________|
*
* Point Offset from v0
* v8 (0, 0, 0, 1)
* v9 (0, 0, 1, 1)
* v10 (0, 1, 0, 1)
* v11 (0, 1, 1, 1)
* v12 (1, 0, 0, 1)
* v13 (1, 0, 1, 1)
* v14 (1, 1, 0, 1)
* v15 (1, 1, 1, 1)
*
*/
ccl_device_noinline float perlin_4d(float x, float y, float z, float w)
{
ssei XYZW;
ssef fxyzw = floorfrac(ssef(x, y, z, w), &XYZW);
ssef uvws = fade(fxyzw);
ssei XYZW1 = XYZW + 1;
ssei X = shuffle<0>(XYZW);
ssei X1 = shuffle<0>(XYZW1);
ssei Y = shuffle<1, 1, 1, 1>(XYZW, XYZW1);
ssei Z = shuffle<0, 2, 0, 2>(shuffle<2, 2, 2, 2>(XYZW, XYZW1));
ssei W = shuffle<3>(XYZW);
ssei W1 = shuffle<3>(XYZW1);
avxi h1 = hash_avxi4(avxi(X, X1), avxi(Y, Y), avxi(Z, Z), avxi(W, W));
avxi h2 = hash_avxi4(avxi(X, X1), avxi(Y, Y), avxi(Z, Z), avxi(W1, W1));
ssef fxyzw1 = fxyzw - 1.0f;
ssef fx = shuffle<0>(fxyzw);
ssef fx1 = shuffle<0>(fxyzw1);
ssef fy = shuffle<1, 1, 1, 1>(fxyzw, fxyzw1);
ssef fz = shuffle<0, 2, 0, 2>(shuffle<2, 2, 2, 2>(fxyzw, fxyzw1));
ssef fw = shuffle<3>(fxyzw);
ssef fw1 = shuffle<3>(fxyzw1);
avxf g1 = grad(h1, avxf(fx, fx1), avxf(fy, fy), avxf(fz, fz), avxf(fw, fw));
avxf g2 = grad(h2, avxf(fx, fx1), avxf(fy, fy), avxf(fz, fz), avxf(fw1, fw1));
return extract<0>(quad_mix(g1, g2, uvws));
}
# endif
# undef negate_if_nth_bit
#endif
/* Remap the output of noise to a predictable range [-1, 1].

View File

@@ -42,7 +42,8 @@ CCL_NAMESPACE_BEGIN
#define NODE_GROUP_LEVEL_1 1
#define NODE_GROUP_LEVEL_2 2
#define NODE_GROUP_LEVEL_3 3
#define NODE_GROUP_LEVEL_MAX NODE_GROUP_LEVEL_3
#define NODE_GROUP_LEVEL_4 4
#define NODE_GROUP_LEVEL_MAX NODE_GROUP_LEVEL_4
#define NODE_FEATURE_VOLUME (1 << 0)
#define NODE_FEATURE_HAIR (1 << 1)
@@ -62,98 +63,98 @@ CCL_NAMESPACE_BEGIN
typedef enum ShaderNodeType {
NODE_END = 0,
NODE_SHADER_JUMP,
NODE_CLOSURE_BSDF,
NODE_CLOSURE_EMISSION,
NODE_CLOSURE_BACKGROUND,
NODE_CLOSURE_SET_WEIGHT,
NODE_CLOSURE_WEIGHT,
NODE_EMISSION_WEIGHT,
NODE_MIX_CLOSURE,
NODE_JUMP_IF_ZERO,
NODE_JUMP_IF_ONE,
NODE_TEX_IMAGE,
NODE_TEX_IMAGE_BOX,
NODE_TEX_SKY,
NODE_GEOMETRY,
NODE_GEOMETRY_DUPLI,
NODE_LIGHT_PATH,
NODE_CONVERT,
NODE_TEX_COORD,
NODE_VALUE_F,
NODE_VALUE_V,
NODE_MIX,
NODE_ATTR,
NODE_CONVERT,
NODE_VERTEX_COLOR,
NODE_GEOMETRY_BUMP_DX,
NODE_GEOMETRY_BUMP_DY,
NODE_SET_DISPLACEMENT,
NODE_DISPLACEMENT,
NODE_VECTOR_DISPLACEMENT,
NODE_TEX_IMAGE,
NODE_TEX_IMAGE_BOX,
NODE_TEX_NOISE,
NODE_SET_BUMP,
NODE_ATTR_BUMP_DX,
NODE_ATTR_BUMP_DY,
NODE_VERTEX_COLOR_BUMP_DX,
NODE_VERTEX_COLOR_BUMP_DY,
NODE_TEX_COORD_BUMP_DX,
NODE_TEX_COORD_BUMP_DY,
NODE_CLOSURE_SET_NORMAL,
NODE_ENTER_BUMP_EVAL,
NODE_LEAVE_BUMP_EVAL,
NODE_HSV,
NODE_CLOSURE_HOLDOUT,
NODE_FRESNEL,
NODE_WIREFRAME,
NODE_WAVELENGTH,
NODE_BLACKBODY,
NODE_EMISSION_WEIGHT,
NODE_LAYER_WEIGHT,
NODE_CLOSURE_VOLUME,
NODE_PRINCIPLED_VOLUME,
NODE_MATH,
NODE_VECTOR_MATH,
NODE_RGB_RAMP,
NODE_GAMMA,
NODE_BRIGHTCONTRAST,
NODE_LIGHT_PATH,
NODE_OBJECT_INFO,
NODE_PARTICLE_INFO,
NODE_HAIR_INFO,
NODE_TEXTURE_MAPPING,
NODE_MAPPING,
NODE_MIN_MAX,
NODE_CAMERA,
NODE_TEX_ENVIRONMENT,
NODE_TEX_SKY,
NODE_TEX_GRADIENT,
NODE_TEX_VORONOI,
NODE_TEX_MUSGRAVE,
NODE_TEX_WAVE,
NODE_TEX_MAGIC,
NODE_TEX_NOISE,
NODE_SHADER_JUMP,
NODE_SET_DISPLACEMENT,
NODE_GEOMETRY_BUMP_DX,
NODE_GEOMETRY_BUMP_DY,
NODE_SET_BUMP,
NODE_MATH,
NODE_VECTOR_MATH,
NODE_VECTOR_TRANSFORM,
NODE_MAPPING,
NODE_TEX_COORD,
NODE_TEX_COORD_BUMP_DX,
NODE_TEX_COORD_BUMP_DY,
NODE_ATTR_BUMP_DX,
NODE_ATTR_BUMP_DY,
NODE_TEX_ENVIRONMENT,
NODE_CLOSURE_HOLDOUT,
NODE_LAYER_WEIGHT,
NODE_CLOSURE_VOLUME,
NODE_TEX_CHECKER,
NODE_TEX_BRICK,
NODE_TEX_WHITE_NOISE,
NODE_NORMAL,
NODE_LIGHT_FALLOFF,
NODE_IES,
NODE_RGB_CURVES,
NODE_VECTOR_CURVES,
NODE_TANGENT,
NODE_NORMAL_MAP,
NODE_INVERT,
NODE_MIX,
NODE_SEPARATE_VECTOR,
NODE_COMBINE_VECTOR,
NODE_SEPARATE_HSV,
NODE_COMBINE_HSV,
NODE_HSV,
NODE_CAMERA,
NODE_INVERT,
NODE_NORMAL,
NODE_GAMMA,
NODE_TEX_CHECKER,
NODE_BRIGHTCONTRAST,
NODE_RGB_RAMP,
NODE_RGB_CURVES,
NODE_VECTOR_CURVES,
NODE_MIN_MAX,
NODE_LIGHT_FALLOFF,
NODE_OBJECT_INFO,
NODE_PARTICLE_INFO,
NODE_TEX_BRICK,
NODE_CLOSURE_SET_NORMAL,
NODE_AMBIENT_OCCLUSION,
NODE_TANGENT,
NODE_NORMAL_MAP,
NODE_HAIR_INFO,
NODE_UVMAP,
NODE_TEX_VOXEL,
NODE_ENTER_BUMP_EVAL,
NODE_LEAVE_BUMP_EVAL,
NODE_BEVEL,
NODE_DISPLACEMENT,
NODE_VECTOR_DISPLACEMENT,
NODE_PRINCIPLED_VOLUME,
NODE_IES,
NODE_VECTOR_ROTATE,
NODE_VECTOR_TRANSFORM,
NODE_WIREFRAME,
NODE_WAVELENGTH,
NODE_BLACKBODY,
NODE_MAP_RANGE,
NODE_CLAMP,
NODE_TEXTURE_MAPPING,
NODE_TEX_WHITE_NOISE,
NODE_VERTEX_COLOR,
NODE_VERTEX_COLOR_BUMP_DX,
NODE_VERTEX_COLOR_BUMP_DY,
NODE_BEVEL,
NODE_AMBIENT_OCCLUSION,
NODE_TEX_VOXEL,
NODE_AOV_START,
NODE_AOV_VALUE,
NODE_AOV_COLOR,
NODE_VECTOR_ROTATE,
NODE_AOV_VALUE,
/* NOTE: for best OpenCL performance, item definition in the enum must
* match the switch case order in svm.h. */
} ShaderNodeType;
typedef enum NodeAttributeType {

View File

@@ -48,7 +48,7 @@ Attribute::Attribute(
Attribute::~Attribute()
{
/* For voxel data, we need to free the image handle. */
if (element == ATTR_ELEMENT_VOXEL) {
if (element == ATTR_ELEMENT_VOXEL && buffer.size()) {
ImageHandle &handle = data_voxel();
handle.~ImageHandle();
}

View File

@@ -59,7 +59,11 @@ class Attribute {
AttributeElement element,
Geometry *geom,
AttributePrimitive prim);
Attribute(Attribute &&other) = default;
Attribute(const Attribute &other) = delete;
Attribute &operator=(const Attribute &other) = delete;
~Attribute();
void set(ustring name, TypeDesc type, AttributeElement element);
void resize(Geometry *geom, AttributePrimitive prim, bool reserve_only);
void resize(size_t num_elements);

View File

@@ -203,9 +203,10 @@ void Pass::add(PassType type, vector<Pass> &passes, const char *name)
passes.push_back(pass);
/* order from by components, to ensure alignment so passes with size 4
* come first and then passes with size 1 */
sort(&passes[0], &passes[0] + passes.size(), compare_pass_order);
/* Order from by components, to ensure alignment so passes with size 4
* come first and then passes with size 1. Note this must use stable sort
* so cryptomatte passes remain in the right order. */
stable_sort(&passes[0], &passes[0] + passes.size(), compare_pass_order);
if (pass.divide_type != PASS_NONE)
Pass::add(pass.divide_type, passes);
@@ -361,8 +362,10 @@ void Film::device_update(Device *device, DeviceScene *dscene, Scene *scene)
kfilm->light_pass_flag = 0;
kfilm->pass_stride = 0;
kfilm->use_light_pass = use_light_visibility;
kfilm->pass_aov_value_num = 0;
kfilm->pass_aov_color_num = 0;
bool have_cryptomatte = false, have_aov_color = false, have_aov_value = false;
bool have_cryptomatte = false;
for (size_t i = 0; i < passes.size(); i++) {
Pass &pass = passes[i];
@@ -497,16 +500,16 @@ void Film::device_update(Device *device, DeviceScene *dscene, Scene *scene)
kfilm->pass_sample_count = kfilm->pass_stride;
break;
case PASS_AOV_COLOR:
if (!have_aov_color) {
if (kfilm->pass_aov_color_num == 0) {
kfilm->pass_aov_color = kfilm->pass_stride;
have_aov_color = true;
}
kfilm->pass_aov_color_num++;
break;
case PASS_AOV_VALUE:
if (!have_aov_value) {
if (kfilm->pass_aov_value_num == 0) {
kfilm->pass_aov_value = kfilm->pass_stride;
have_aov_value = true;
}
kfilm->pass_aov_value_num++;
break;
default:
assert(false);

View File

@@ -119,6 +119,9 @@ void ImageHandle::clear()
foreach (const int slot, tile_slots) {
manager->remove_image_user(slot);
}
tile_slots.clear();
manager = NULL;
}
bool ImageHandle::empty()
@@ -280,6 +283,7 @@ void ImageManager::set_osl_texture_system(void *texture_system)
bool ImageManager::set_animation_frame_update(int frame)
{
if (frame != animation_frame) {
thread_scoped_lock device_lock(images_mutex);
animation_frame = frame;
for (size_t slot = 0; slot < images.size(); slot++) {
@@ -374,7 +378,7 @@ int ImageManager::add_image_slot(ImageLoader *loader,
Image *img;
size_t slot;
thread_scoped_lock device_lock(device_mutex);
thread_scoped_lock device_lock(images_mutex);
/* Fnd existing image. */
for (slot = 0; slot < images.size(); slot++) {
@@ -415,6 +419,7 @@ int ImageManager::add_image_slot(ImageLoader *loader,
void ImageManager::add_image_user(int slot)
{
thread_scoped_lock device_lock(images_mutex);
Image *image = images[slot];
assert(image && image->users >= 1);
@@ -423,6 +428,7 @@ void ImageManager::add_image_user(int slot)
void ImageManager::remove_image_user(int slot)
{
thread_scoped_lock device_lock(images_mutex);
Image *image = images[slot];
assert(image && image->users >= 1);

View File

@@ -206,6 +206,7 @@ class ImageManager {
bool has_half_images;
thread_mutex device_mutex;
thread_mutex images_mutex;
int animation_frame;
vector<Image *> images;

View File

@@ -190,6 +190,13 @@ void Integrator::device_update(Device *device, DeviceScene *dscene, Scene *scene
else {
kintegrator->adaptive_min_samples = max(4, adaptive_min_samples);
}
kintegrator->adaptive_step = 4;
kintegrator->adaptive_stop_per_sample = device->info.has_adaptive_stop_per_sample;
/* Adaptive step must be a power of two for bitwise operations to work. */
assert((kintegrator->adaptive_step & (kintegrator->adaptive_step - 1)) == 0);
if (aa_samples > 0 && adaptive_threshold == 0.0f) {
kintegrator->adaptive_threshold = max(0.001f, 1.0f / (float)aa_samples);
VLOG(1) << "Cycles adaptive sampling: automatic threshold = "

View File

@@ -25,18 +25,18 @@
CCL_NAMESPACE_BEGIN
static size_t compute_voxel_index(const int3 &resolution, size_t x, size_t y, size_t z)
const int64_t VOXEL_INDEX_NONE = -1;
static int64_t compute_voxel_index(const int3 &resolution, int64_t x, int64_t y, int64_t z)
{
if (x == -1 || x >= resolution.x) {
return -1;
if (x < 0 || x >= resolution.x) {
return VOXEL_INDEX_NONE;
}
if (y == -1 || y >= resolution.y) {
return -1;
else if (y < 0 || y >= resolution.y) {
return VOXEL_INDEX_NONE;
}
if (z == -1 || z >= resolution.z) {
return -1;
else if (z < 0 || z >= resolution.z) {
return VOXEL_INDEX_NONE;
}
return x + y * resolution.x + z * resolution.x * resolution.y;
@@ -184,15 +184,15 @@ VolumeMeshBuilder::VolumeMeshBuilder(VolumeParams *volume_params)
params = volume_params;
number_of_nodes = 0;
const size_t x = divide_up(params->resolution.x, CUBE_SIZE);
const size_t y = divide_up(params->resolution.y, CUBE_SIZE);
const size_t z = divide_up(params->resolution.z, CUBE_SIZE);
const int64_t x = divide_up(params->resolution.x, CUBE_SIZE);
const int64_t y = divide_up(params->resolution.y, CUBE_SIZE);
const int64_t z = divide_up(params->resolution.z, CUBE_SIZE);
/* Adding 2*pad_size since we pad in both positive and negative directions
* along the axis. */
const size_t px = divide_up(params->resolution.x + 2 * params->pad_size, CUBE_SIZE);
const size_t py = divide_up(params->resolution.y + 2 * params->pad_size, CUBE_SIZE);
const size_t pz = divide_up(params->resolution.z + 2 * params->pad_size, CUBE_SIZE);
const int64_t px = divide_up(params->resolution.x + 2 * params->pad_size, CUBE_SIZE);
const int64_t py = divide_up(params->resolution.y + 2 * params->pad_size, CUBE_SIZE);
const int64_t pz = divide_up(params->resolution.z + 2 * params->pad_size, CUBE_SIZE);
res = make_int3(px, py, pz);
pad_offset = make_int3(px - x, py - y, pz - z);
@@ -209,7 +209,10 @@ void VolumeMeshBuilder::add_node(int x, int y, int z)
assert((index_x >= 0) && (index_y >= 0) && (index_z >= 0));
const size_t index = compute_voxel_index(res, index_x, index_y, index_z);
const int64_t index = compute_voxel_index(res, index_x, index_y, index_z);
if (index == VOXEL_INDEX_NONE) {
return;
}
/* We already have a node here. */
if (grid[index] == 1) {
@@ -256,7 +259,7 @@ void VolumeMeshBuilder::generate_vertices_and_quads(vector<ccl::int3> &vertices_
for (int z = 0; z < res.z; ++z) {
for (int y = 0; y < res.y; ++y) {
for (int x = 0; x < res.x; ++x) {
size_t voxel_index = compute_voxel_index(res, x, y, z);
int64_t voxel_index = compute_voxel_index(res, x, y, z);
if (grid[voxel_index] == 0) {
continue;
}
@@ -285,32 +288,32 @@ void VolumeMeshBuilder::generate_vertices_and_quads(vector<ccl::int3> &vertices_
*/
voxel_index = compute_voxel_index(res, x - 1, y, z);
if (voxel_index == -1 || grid[voxel_index] == 0) {
if (voxel_index == VOXEL_INDEX_NONE || grid[voxel_index] == 0) {
create_quad(corners, vertices_is, quads, res, used_verts, QUAD_X_MIN);
}
voxel_index = compute_voxel_index(res, x + 1, y, z);
if (voxel_index == -1 || grid[voxel_index] == 0) {
if (voxel_index == VOXEL_INDEX_NONE || grid[voxel_index] == 0) {
create_quad(corners, vertices_is, quads, res, used_verts, QUAD_X_MAX);
}
voxel_index = compute_voxel_index(res, x, y - 1, z);
if (voxel_index == -1 || grid[voxel_index] == 0) {
if (voxel_index == VOXEL_INDEX_NONE || grid[voxel_index] == 0) {
create_quad(corners, vertices_is, quads, res, used_verts, QUAD_Y_MIN);
}
voxel_index = compute_voxel_index(res, x, y + 1, z);
if (voxel_index == -1 || grid[voxel_index] == 0) {
if (voxel_index == VOXEL_INDEX_NONE || grid[voxel_index] == 0) {
create_quad(corners, vertices_is, quads, res, used_verts, QUAD_Y_MAX);
}
voxel_index = compute_voxel_index(res, x, y, z - 1);
if (voxel_index == -1 || grid[voxel_index] == 0) {
if (voxel_index == VOXEL_INDEX_NONE || grid[voxel_index] == 0) {
create_quad(corners, vertices_is, quads, res, used_verts, QUAD_Z_MIN);
}
voxel_index = compute_voxel_index(res, x, y, z + 1);
if (voxel_index == -1 || grid[voxel_index] == 0) {
if (voxel_index == VOXEL_INDEX_NONE || grid[voxel_index] == 0) {
create_quad(corners, vertices_is, quads, res, used_verts, QUAD_Z_MAX);
}
}
@@ -455,7 +458,7 @@ void GeometryManager::create_volume_mesh(Mesh *mesh, Progress &progress)
for (int z = 0; z < resolution.z; ++z) {
for (int y = 0; y < resolution.y; ++y) {
for (int x = 0; x < resolution.x; ++x) {
size_t voxel_index = compute_voxel_index(resolution, x, y, z);
int64_t voxel_index = compute_voxel_index(resolution, x, y, z);
for (size_t i = 0; i < voxel_grids.size(); ++i) {
const VoxelAttributeGrid &voxel_grid = voxel_grids[i];

View File

@@ -197,6 +197,11 @@ class OutputAOVNode : public ShaderNode {
ustring name;
virtual int get_group()
{
return NODE_GROUP_LEVEL_4;
}
/* Don't allow output node de-duplication. */
virtual bool equals(const ShaderNode & /*other*/)
{
@@ -339,7 +344,7 @@ class PointDensityTextureNode : public ShaderNode {
SHADER_NODE_NO_CLONE_CLASS(PointDensityTextureNode)
virtual int get_group()
{
return NODE_GROUP_LEVEL_3;
return NODE_GROUP_LEVEL_4;
}
~PointDensityTextureNode();

View File

@@ -1110,6 +1110,7 @@ void Session::render(bool with_denoising)
task.adaptive_sampling.use = (scene->integrator->sampling_pattern == SAMPLING_PATTERN_PMJ) &&
scene->dscene.data.film.pass_adaptive_aux_buffer;
task.adaptive_sampling.min_samples = scene->dscene.data.integrator.adaptive_min_samples;
task.adaptive_sampling.adaptive_step = scene->dscene.data.integrator.adaptive_step;
/* Acquire render tiles by default. */
task.tile_types = RenderTile::PATH_TRACE;

View File

@@ -102,6 +102,7 @@ set(SRC_HEADERS
util_sky_model_data.h
util_avxf.h
util_avxb.h
util_semaphore.h
util_sseb.h
util_ssef.h
util_ssei.h

View File

@@ -25,6 +25,7 @@ using std::max;
using std::min;
using std::remove;
using std::sort;
using std::stable_sort;
using std::swap;
CCL_NAMESPACE_END

View File

@@ -16,7 +16,7 @@
*/
#ifndef __UTIL_AVXB_H__
# define __UTIL_AVXB_H__
#define __UTIL_AVXB_H__
CCL_NAMESPACE_BEGIN
@@ -53,6 +53,10 @@ struct avxb {
__forceinline avxb(const __m256 input) : m256(input)
{
}
__forceinline avxb(const __m128 &a, const __m128 &b)
: m256(_mm256_insertf128_ps(_mm256_castps128_ps256(a), b, 1))
{
}
__forceinline operator const __m256 &(void)const
{
return m256;
@@ -146,9 +150,9 @@ __forceinline const avxb operator!=(const avxb &a, const avxb &b)
}
__forceinline const avxb operator==(const avxb &a, const avxb &b)
{
# ifdef __KERNEL_AVX2__
#ifdef __KERNEL_AVX2__
return _mm256_castsi256_ps(_mm256_cmpeq_epi32(a, b));
# else
#else
__m128i a_lo = _mm_castps_si128(_mm256_extractf128_ps(a, 0));
__m128i a_hi = _mm_castps_si128(_mm256_extractf128_ps(a, 1));
__m128i b_lo = _mm_castps_si128(_mm256_extractf128_ps(b, 0));
@@ -157,16 +161,16 @@ __forceinline const avxb operator==(const avxb &a, const avxb &b)
__m128i c_hi = _mm_cmpeq_epi32(a_hi, b_hi);
__m256i result = _mm256_insertf128_si256(_mm256_castsi128_si256(c_lo), c_hi, 1);
return _mm256_castsi256_ps(result);
# endif
#endif
}
__forceinline const avxb select(const avxb &m, const avxb &t, const avxb &f)
{
# if defined(__KERNEL_SSE41__)
#if defined(__KERNEL_SSE41__)
return _mm256_blendv_ps(f, t, m);
# else
#else
return _mm256_or_ps(_mm256_and_ps(m, t), _mm256_andnot_ps(m, f));
# endif
#endif
}
////////////////////////////////////////////////////////////////////////////////
@@ -186,18 +190,18 @@ __forceinline const avxb unpackhi(const avxb &a, const avxb &b)
/// Reduction Operations
////////////////////////////////////////////////////////////////////////////////
# if defined(__KERNEL_SSE41__)
#if defined(__KERNEL_SSE41__)
__forceinline size_t popcnt(const avxb &a)
{
return __popcnt(_mm256_movemask_ps(a));
}
# else
#else
__forceinline size_t popcnt(const avxb &a)
{
return bool(a[0]) + bool(a[1]) + bool(a[2]) + bool(a[3]) + bool(a[4]) + bool(a[5]) + bool(a[6]) +
bool(a[7]);
}
# endif
#endif
__forceinline bool reduce_and(const avxb &a)
{
@@ -234,8 +238,6 @@ ccl_device_inline void print_avxb(const char *label, const avxb &a)
printf("%s: %d %d %d %d %d %d %d %d\n", label, a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7]);
}
#endif
CCL_NAMESPACE_END
//#endif
#endif

View File

@@ -15,7 +15,7 @@
*/
#ifndef __UTIL_AVXF_H__
# define __UTIL_AVXF_H__
#define __UTIL_AVXF_H__
CCL_NAMESPACE_BEGIN
@@ -140,6 +140,11 @@ __forceinline void dot3(const avxf &a, const avxf &b, float &den, float &den2)
/// Unary Operators
////////////////////////////////////////////////////////////////////////////////
__forceinline const avxf cast(const __m256i &a)
{
return _mm256_castsi256_ps(a);
}
__forceinline const avxf mm256_sqrt(const avxf &a)
{
return _mm256_sqrt_ps(a.m256);
@@ -259,16 +264,35 @@ template<size_t i0> __forceinline const avxf shuffle(const avxf &a)
return shuffle<i0>(a, a);
}
template<size_t i> __forceinline float extract(const avxf &a)
{
__m256 b = shuffle<i, i, i, i>(a).m256;
return _mm256_cvtss_f32(b);
}
template<> __forceinline float extract<0>(const avxf &a)
{
return _mm256_cvtss_f32(a.m256);
}
__forceinline ssef low(const avxf &a)
{
return _mm256_extractf128_ps(a.m256, 0);
}
__forceinline ssef high(const avxf &a)
{
return _mm256_extractf128_ps(a.m256, 1);
}
template<int i0, int i1, int i2, int i3, int i4, int i5, int i6, int i7>
__forceinline const avxf permute(const avxf &a)
{
# ifdef __KERNEL_AVX2__
#ifdef __KERNEL_AVX2__
return _mm256_permutevar8x32_ps(a, _mm256_set_epi32(i7, i6, i5, i4, i3, i2, i1, i0));
# else
#else
float temp[8];
_mm256_storeu_ps((float *)&temp, a);
return avxf(temp[i7], temp[i6], temp[i5], temp[i4], temp[i3], temp[i2], temp[i1], temp[i0]);
# endif
#endif
}
template<int S0, int S1, int S2, int S3, int S4, int S5, int S6, int S7>
@@ -309,39 +333,51 @@ __forceinline avxf mini(const avxf &a, const avxf &b)
////////////////////////////////////////////////////////////////////////////////
__forceinline const avxf madd(const avxf &a, const avxf &b, const avxf &c)
{
# ifdef __KERNEL_AVX2__
#ifdef __KERNEL_AVX2__
return _mm256_fmadd_ps(a, b, c);
# else
#else
return c + (a * b);
# endif
#endif
}
__forceinline const avxf nmadd(const avxf &a, const avxf &b, const avxf &c)
{
# ifdef __KERNEL_AVX2__
#ifdef __KERNEL_AVX2__
return _mm256_fnmadd_ps(a, b, c);
# else
#else
return c - (a * b);
# endif
#endif
}
__forceinline const avxf msub(const avxf &a, const avxf &b, const avxf &c)
{
# ifdef __KERNEL_AVX2__
#ifdef __KERNEL_AVX2__
return _mm256_fmsub_ps(a, b, c);
# else
#else
return (a * b) - c;
# endif
#endif
}
////////////////////////////////////////////////////////////////////////////////
/// Comparison Operators
/// Comparison Operators + Select
////////////////////////////////////////////////////////////////////////////////
__forceinline const avxb operator<=(const avxf &a, const avxf &b)
{
return _mm256_cmp_ps(a.m256, b.m256, _CMP_LE_OS);
}
#endif
__forceinline const avxf select(const avxb &m, const avxf &t, const avxf &f)
{
return _mm256_blendv_ps(f, t, m);
}
////////////////////////////////////////////////////////////////////////////////
/// Common Functions
////////////////////////////////////////////////////////////////////////////////
__forceinline avxf mix(const avxf &a, const avxf &b, const avxf &t)
{
return madd(t, b, (avxf(1.0f) - t) * a);
}
#ifndef _mm256_set_m128
# define _mm256_set_m128(/* __m128 */ hi, /* __m128 */ lo) \
@@ -352,3 +388,5 @@ __forceinline const avxb operator<=(const avxf &a, const avxf &b)
_mm256_set_m128(_mm_loadu_ps(hiaddr), _mm_loadu_ps(loaddr))
CCL_NAMESPACE_END
#endif

View File

@@ -0,0 +1,745 @@
/*
* Copyright 2009-2013 Intel Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef __UTIL_AVXI_H__
#define __UTIL_AVXI_H__
CCL_NAMESPACE_BEGIN
struct avxb;
struct avxi {
typedef avxb Mask; // mask type for us
enum { size = 8 }; // number of SIMD elements
union { // data
__m256i m256;
#if !defined(__KERNEL_AVX2__)
struct {
__m128i l, h;
};
#endif
int32_t v[8];
};
////////////////////////////////////////////////////////////////////////////////
/// Constructors, Assignment & Cast Operators
////////////////////////////////////////////////////////////////////////////////
__forceinline avxi()
{
}
__forceinline avxi(const avxi &a)
{
m256 = a.m256;
}
__forceinline avxi &operator=(const avxi &a)
{
m256 = a.m256;
return *this;
}
__forceinline avxi(const __m256i a) : m256(a)
{
}
__forceinline operator const __m256i &(void)const
{
return m256;
}
__forceinline operator __m256i &(void)
{
return m256;
}
__forceinline explicit avxi(const ssei &a)
: m256(_mm256_insertf128_si256(_mm256_castsi128_si256(a), a, 1))
{
}
__forceinline avxi(const ssei &a, const ssei &b)
: m256(_mm256_insertf128_si256(_mm256_castsi128_si256(a), b, 1))
{
}
#if defined(__KERNEL_AVX2__)
__forceinline avxi(const __m128i &a, const __m128i &b)
: m256(_mm256_insertf128_si256(_mm256_castsi128_si256(a), b, 1))
{
}
#else
__forceinline avxi(const __m128i &a, const __m128i &b) : l(a), h(b)
{
}
#endif
__forceinline explicit avxi(const int32_t *const a)
: m256(_mm256_castps_si256(_mm256_loadu_ps((const float *)a)))
{
}
__forceinline avxi(int32_t a) : m256(_mm256_set1_epi32(a))
{
}
__forceinline avxi(int32_t a, int32_t b) : m256(_mm256_set_epi32(b, a, b, a, b, a, b, a))
{
}
__forceinline avxi(int32_t a, int32_t b, int32_t c, int32_t d)
: m256(_mm256_set_epi32(d, c, b, a, d, c, b, a))
{
}
__forceinline avxi(
int32_t a, int32_t b, int32_t c, int32_t d, int32_t e, int32_t f, int32_t g, int32_t h)
: m256(_mm256_set_epi32(h, g, f, e, d, c, b, a))
{
}
__forceinline explicit avxi(const __m256 a) : m256(_mm256_cvtps_epi32(a))
{
}
////////////////////////////////////////////////////////////////////////////////
/// Constants
////////////////////////////////////////////////////////////////////////////////
__forceinline avxi(ZeroTy) : m256(_mm256_setzero_si256())
{
}
#if defined(__KERNEL_AVX2__)
__forceinline avxi(OneTy) : m256(_mm256_set1_epi32(1))
{
}
__forceinline avxi(PosInfTy) : m256(_mm256_set1_epi32(pos_inf))
{
}
__forceinline avxi(NegInfTy) : m256(_mm256_set1_epi32(neg_inf))
{
}
#else
__forceinline avxi(OneTy) : m256(_mm256_set_epi32(1, 1, 1, 1, 1, 1, 1, 1))
{
}
__forceinline avxi(PosInfTy)
: m256(_mm256_set_epi32(
pos_inf, pos_inf, pos_inf, pos_inf, pos_inf, pos_inf, pos_inf, pos_inf))
{
}
__forceinline avxi(NegInfTy)
: m256(_mm256_set_epi32(
neg_inf, neg_inf, neg_inf, neg_inf, neg_inf, neg_inf, neg_inf, neg_inf))
{
}
#endif
__forceinline avxi(StepTy) : m256(_mm256_set_epi32(7, 6, 5, 4, 3, 2, 1, 0))
{
}
////////////////////////////////////////////////////////////////////////////////
/// Array Access
////////////////////////////////////////////////////////////////////////////////
__forceinline const int32_t &operator[](const size_t i) const
{
assert(i < 8);
return v[i];
}
__forceinline int32_t &operator[](const size_t i)
{
assert(i < 8);
return v[i];
}
};
////////////////////////////////////////////////////////////////////////////////
/// Unary Operators
////////////////////////////////////////////////////////////////////////////////
__forceinline const avxi cast(const __m256 &a)
{
return _mm256_castps_si256(a);
}
__forceinline const avxi operator+(const avxi &a)
{
return a;
}
#if defined(__KERNEL_AVX2__)
__forceinline const avxi operator-(const avxi &a)
{
return _mm256_sub_epi32(_mm256_setzero_si256(), a.m256);
}
__forceinline const avxi abs(const avxi &a)
{
return _mm256_abs_epi32(a.m256);
}
#else
__forceinline const avxi operator-(const avxi &a)
{
return avxi(_mm_sub_epi32(_mm_setzero_si128(), a.l), _mm_sub_epi32(_mm_setzero_si128(), a.h));
}
__forceinline const avxi abs(const avxi &a)
{
return avxi(_mm_abs_epi32(a.l), _mm_abs_epi32(a.h));
}
#endif
////////////////////////////////////////////////////////////////////////////////
/// Binary Operators
////////////////////////////////////////////////////////////////////////////////
#if defined(__KERNEL_AVX2__)
__forceinline const avxi operator+(const avxi &a, const avxi &b)
{
return _mm256_add_epi32(a.m256, b.m256);
}
#else
__forceinline const avxi operator+(const avxi &a, const avxi &b)
{
return avxi(_mm_add_epi32(a.l, b.l), _mm_add_epi32(a.h, b.h));
}
#endif
__forceinline const avxi operator+(const avxi &a, const int32_t b)
{
return a + avxi(b);
}
__forceinline const avxi operator+(const int32_t a, const avxi &b)
{
return avxi(a) + b;
}
#if defined(__KERNEL_AVX2__)
__forceinline const avxi operator-(const avxi &a, const avxi &b)
{
return _mm256_sub_epi32(a.m256, b.m256);
}
#else
__forceinline const avxi operator-(const avxi &a, const avxi &b)
{
return avxi(_mm_sub_epi32(a.l, b.l), _mm_sub_epi32(a.h, b.h));
}
#endif
__forceinline const avxi operator-(const avxi &a, const int32_t b)
{
return a - avxi(b);
}
__forceinline const avxi operator-(const int32_t a, const avxi &b)
{
return avxi(a) - b;
}
#if defined(__KERNEL_AVX2__)
__forceinline const avxi operator*(const avxi &a, const avxi &b)
{
return _mm256_mullo_epi32(a.m256, b.m256);
}
#else
__forceinline const avxi operator*(const avxi &a, const avxi &b)
{
return avxi(_mm_mullo_epi32(a.l, b.l), _mm_mullo_epi32(a.h, b.h));
}
#endif
__forceinline const avxi operator*(const avxi &a, const int32_t b)
{
return a * avxi(b);
}
__forceinline const avxi operator*(const int32_t a, const avxi &b)
{
return avxi(a) * b;
}
#if defined(__KERNEL_AVX2__)
__forceinline const avxi operator&(const avxi &a, const avxi &b)
{
return _mm256_and_si256(a.m256, b.m256);
}
#else
__forceinline const avxi operator&(const avxi &a, const avxi &b)
{
return _mm256_castps_si256(_mm256_and_ps(_mm256_castsi256_ps(a), _mm256_castsi256_ps(b)));
}
#endif
__forceinline const avxi operator&(const avxi &a, const int32_t b)
{
return a & avxi(b);
}
__forceinline const avxi operator&(const int32_t a, const avxi &b)
{
return avxi(a) & b;
}
#if defined(__KERNEL_AVX2__)
__forceinline const avxi operator|(const avxi &a, const avxi &b)
{
return _mm256_or_si256(a.m256, b.m256);
}
#else
__forceinline const avxi operator|(const avxi &a, const avxi &b)
{
return _mm256_castps_si256(_mm256_or_ps(_mm256_castsi256_ps(a), _mm256_castsi256_ps(b)));
}
#endif
__forceinline const avxi operator|(const avxi &a, const int32_t b)
{
return a | avxi(b);
}
__forceinline const avxi operator|(const int32_t a, const avxi &b)
{
return avxi(a) | b;
}
#if defined(__KERNEL_AVX2__)
__forceinline const avxi operator^(const avxi &a, const avxi &b)
{
return _mm256_xor_si256(a.m256, b.m256);
}
#else
__forceinline const avxi operator^(const avxi &a, const avxi &b)
{
return _mm256_castps_si256(_mm256_xor_ps(_mm256_castsi256_ps(a), _mm256_castsi256_ps(b)));
}
#endif
__forceinline const avxi operator^(const avxi &a, const int32_t b)
{
return a ^ avxi(b);
}
__forceinline const avxi operator^(const int32_t a, const avxi &b)
{
return avxi(a) ^ b;
}
#if defined(__KERNEL_AVX2__)
__forceinline const avxi operator<<(const avxi &a, const int32_t n)
{
return _mm256_slli_epi32(a.m256, n);
}
__forceinline const avxi operator>>(const avxi &a, const int32_t n)
{
return _mm256_srai_epi32(a.m256, n);
}
__forceinline const avxi sra(const avxi &a, const int32_t b)
{
return _mm256_srai_epi32(a.m256, b);
}
__forceinline const avxi srl(const avxi &a, const int32_t b)
{
return _mm256_srli_epi32(a.m256, b);
}
#else
__forceinline const avxi operator<<(const avxi &a, const int32_t n)
{
return avxi(_mm_slli_epi32(a.l, n), _mm_slli_epi32(a.h, n));
}
__forceinline const avxi operator>>(const avxi &a, const int32_t n)
{
return avxi(_mm_srai_epi32(a.l, n), _mm_srai_epi32(a.h, n));
}
__forceinline const avxi sra(const avxi &a, const int32_t b)
{
return avxi(_mm_srai_epi32(a.l, b), _mm_srai_epi32(a.h, b));
}
__forceinline const avxi srl(const avxi &a, const int32_t b)
{
return avxi(_mm_srli_epi32(a.l, b), _mm_srli_epi32(a.h, b));
}
#endif
#if defined(__KERNEL_AVX2__)
__forceinline const avxi min(const avxi &a, const avxi &b)
{
return _mm256_min_epi32(a.m256, b.m256);
}
#else
__forceinline const avxi min(const avxi &a, const avxi &b)
{
return avxi(_mm_min_epi32(a.l, b.l), _mm_min_epi32(a.h, b.h));
}
#endif
__forceinline const avxi min(const avxi &a, const int32_t b)
{
return min(a, avxi(b));
}
__forceinline const avxi min(const int32_t a, const avxi &b)
{
return min(avxi(a), b);
}
#if defined(__KERNEL_AVX2__)
__forceinline const avxi max(const avxi &a, const avxi &b)
{
return _mm256_max_epi32(a.m256, b.m256);
}
#else
__forceinline const avxi max(const avxi &a, const avxi &b)
{
return avxi(_mm_max_epi32(a.l, b.l), _mm_max_epi32(a.h, b.h));
}
#endif
__forceinline const avxi max(const avxi &a, const int32_t b)
{
return max(a, avxi(b));
}
__forceinline const avxi max(const int32_t a, const avxi &b)
{
return max(avxi(a), b);
}
////////////////////////////////////////////////////////////////////////////////
/// Assignment Operators
////////////////////////////////////////////////////////////////////////////////
__forceinline avxi &operator+=(avxi &a, const avxi &b)
{
return a = a + b;
}
__forceinline avxi &operator+=(avxi &a, const int32_t b)
{
return a = a + b;
}
__forceinline avxi &operator-=(avxi &a, const avxi &b)
{
return a = a - b;
}
__forceinline avxi &operator-=(avxi &a, const int32_t b)
{
return a = a - b;
}
__forceinline avxi &operator*=(avxi &a, const avxi &b)
{
return a = a * b;
}
__forceinline avxi &operator*=(avxi &a, const int32_t b)
{
return a = a * b;
}
__forceinline avxi &operator&=(avxi &a, const avxi &b)
{
return a = a & b;
}
__forceinline avxi &operator&=(avxi &a, const int32_t b)
{
return a = a & b;
}
__forceinline avxi &operator|=(avxi &a, const avxi &b)
{
return a = a | b;
}
__forceinline avxi &operator|=(avxi &a, const int32_t b)
{
return a = a | b;
}
__forceinline avxi &operator^=(avxi &a, const avxi &b)
{
return a = a ^ b;
}
__forceinline avxi &operator^=(avxi &a, const int32_t b)
{
return a = a ^ b;
}
__forceinline avxi &operator<<=(avxi &a, const int32_t b)
{
return a = a << b;
}
__forceinline avxi &operator>>=(avxi &a, const int32_t b)
{
return a = a >> b;
}
////////////////////////////////////////////////////////////////////////////////
/// Comparison Operators + Select
////////////////////////////////////////////////////////////////////////////////
#if defined(__KERNEL_AVX2__)
__forceinline const avxb operator==(const avxi &a, const avxi &b)
{
return _mm256_castsi256_ps(_mm256_cmpeq_epi32(a.m256, b.m256));
}
#else
__forceinline const avxb operator==(const avxi &a, const avxi &b)
{
return avxb(_mm_castsi128_ps(_mm_cmpeq_epi32(a.l, b.l)),
_mm_castsi128_ps(_mm_cmpeq_epi32(a.h, b.h)));
}
#endif
__forceinline const avxb operator==(const avxi &a, const int32_t b)
{
return a == avxi(b);
}
__forceinline const avxb operator==(const int32_t a, const avxi &b)
{
return avxi(a) == b;
}
__forceinline const avxb operator!=(const avxi &a, const avxi &b)
{
return !(a == b);
}
__forceinline const avxb operator!=(const avxi &a, const int32_t b)
{
return a != avxi(b);
}
__forceinline const avxb operator!=(const int32_t a, const avxi &b)
{
return avxi(a) != b;
}
#if defined(__KERNEL_AVX2__)
__forceinline const avxb operator<(const avxi &a, const avxi &b)
{
return _mm256_castsi256_ps(_mm256_cmpgt_epi32(b.m256, a.m256));
}
#else
__forceinline const avxb operator<(const avxi &a, const avxi &b)
{
return avxb(_mm_castsi128_ps(_mm_cmplt_epi32(a.l, b.l)),
_mm_castsi128_ps(_mm_cmplt_epi32(a.h, b.h)));
}
#endif
__forceinline const avxb operator<(const avxi &a, const int32_t b)
{
return a < avxi(b);
}
__forceinline const avxb operator<(const int32_t a, const avxi &b)
{
return avxi(a) < b;
}
__forceinline const avxb operator>=(const avxi &a, const avxi &b)
{
return !(a < b);
}
__forceinline const avxb operator>=(const avxi &a, const int32_t b)
{
return a >= avxi(b);
}
__forceinline const avxb operator>=(const int32_t a, const avxi &b)
{
return avxi(a) >= b;
}
#if defined(__KERNEL_AVX2__)
__forceinline const avxb operator>(const avxi &a, const avxi &b)
{
return _mm256_castsi256_ps(_mm256_cmpgt_epi32(a.m256, b.m256));
}
#else
__forceinline const avxb operator>(const avxi &a, const avxi &b)
{
return avxb(_mm_castsi128_ps(_mm_cmpgt_epi32(a.l, b.l)),
_mm_castsi128_ps(_mm_cmpgt_epi32(a.h, b.h)));
}
#endif
__forceinline const avxb operator>(const avxi &a, const int32_t b)
{
return a > avxi(b);
}
__forceinline const avxb operator>(const int32_t a, const avxi &b)
{
return avxi(a) > b;
}
__forceinline const avxb operator<=(const avxi &a, const avxi &b)
{
return !(a > b);
}
__forceinline const avxb operator<=(const avxi &a, const int32_t b)
{
return a <= avxi(b);
}
__forceinline const avxb operator<=(const int32_t a, const avxi &b)
{
return avxi(a) <= b;
}
__forceinline const avxi select(const avxb &m, const avxi &t, const avxi &f)
{
return _mm256_castps_si256(_mm256_blendv_ps(_mm256_castsi256_ps(f), _mm256_castsi256_ps(t), m));
}
////////////////////////////////////////////////////////////////////////////////
/// Movement/Shifting/Shuffling Functions
////////////////////////////////////////////////////////////////////////////////
#if defined(__KERNEL_AVX2__)
__forceinline avxi unpacklo(const avxi &a, const avxi &b)
{
return _mm256_unpacklo_epi32(a.m256, b.m256);
}
__forceinline avxi unpackhi(const avxi &a, const avxi &b)
{
return _mm256_unpackhi_epi32(a.m256, b.m256);
}
#else
__forceinline avxi unpacklo(const avxi &a, const avxi &b)
{
return _mm256_castps_si256(_mm256_unpacklo_ps(_mm256_castsi256_ps(a), _mm256_castsi256_ps(b)));
}
__forceinline avxi unpackhi(const avxi &a, const avxi &b)
{
return _mm256_castps_si256(_mm256_unpackhi_ps(_mm256_castsi256_ps(a), _mm256_castsi256_ps(b)));
}
#endif
template<size_t i> __forceinline const avxi shuffle(const avxi &a)
{
return _mm256_castps_si256(_mm256_permute_ps(_mm256_castsi256_ps(a), _MM_SHUFFLE(i, i, i, i)));
}
template<size_t i0, size_t i1> __forceinline const avxi shuffle(const avxi &a)
{
return _mm256_permute2f128_si256(a, a, (i1 << 4) | (i0 << 0));
}
template<size_t i0, size_t i1> __forceinline const avxi shuffle(const avxi &a, const avxi &b)
{
return _mm256_permute2f128_si256(a, b, (i1 << 4) | (i0 << 0));
}
template<size_t i0, size_t i1, size_t i2, size_t i3>
__forceinline const avxi shuffle(const avxi &a)
{
return _mm256_castps_si256(
_mm256_permute_ps(_mm256_castsi256_ps(a), _MM_SHUFFLE(i3, i2, i1, i0)));
}
template<size_t i0, size_t i1, size_t i2, size_t i3>
__forceinline const avxi shuffle(const avxi &a, const avxi &b)
{
return _mm256_castps_si256(_mm256_shuffle_ps(
_mm256_castsi256_ps(a), _mm256_castsi256_ps(b), _MM_SHUFFLE(i3, i2, i1, i0)));
}
template<> __forceinline const avxi shuffle<0, 0, 2, 2>(const avxi &b)
{
return _mm256_castps_si256(_mm256_moveldup_ps(_mm256_castsi256_ps(b)));
}
template<> __forceinline const avxi shuffle<1, 1, 3, 3>(const avxi &b)
{
return _mm256_castps_si256(_mm256_movehdup_ps(_mm256_castsi256_ps(b)));
}
template<> __forceinline const avxi shuffle<0, 1, 0, 1>(const avxi &b)
{
return _mm256_castps_si256(
_mm256_castpd_ps(_mm256_movedup_pd(_mm256_castps_pd(_mm256_castsi256_ps(b)))));
}
__forceinline const avxi broadcast(const int *ptr)
{
return _mm256_castps_si256(_mm256_broadcast_ss((const float *)ptr));
}
template<size_t i> __forceinline const avxi insert(const avxi &a, const ssei &b)
{
return _mm256_insertf128_si256(a, b, i);
}
template<size_t i> __forceinline const ssei extract(const avxi &a)
{
return _mm256_extractf128_si256(a, i);
}
////////////////////////////////////////////////////////////////////////////////
/// Reductions
////////////////////////////////////////////////////////////////////////////////
__forceinline const avxi vreduce_min2(const avxi &v)
{
return min(v, shuffle<1, 0, 3, 2>(v));
}
__forceinline const avxi vreduce_min4(const avxi &v)
{
avxi v1 = vreduce_min2(v);
return min(v1, shuffle<2, 3, 0, 1>(v1));
}
__forceinline const avxi vreduce_min(const avxi &v)
{
avxi v1 = vreduce_min4(v);
return min(v1, shuffle<1, 0>(v1));
}
__forceinline const avxi vreduce_max2(const avxi &v)
{
return max(v, shuffle<1, 0, 3, 2>(v));
}
__forceinline const avxi vreduce_max4(const avxi &v)
{
avxi v1 = vreduce_max2(v);
return max(v1, shuffle<2, 3, 0, 1>(v1));
}
__forceinline const avxi vreduce_max(const avxi &v)
{
avxi v1 = vreduce_max4(v);
return max(v1, shuffle<1, 0>(v1));
}
__forceinline const avxi vreduce_add2(const avxi &v)
{
return v + shuffle<1, 0, 3, 2>(v);
}
__forceinline const avxi vreduce_add4(const avxi &v)
{
avxi v1 = vreduce_add2(v);
return v1 + shuffle<2, 3, 0, 1>(v1);
}
__forceinline const avxi vreduce_add(const avxi &v)
{
avxi v1 = vreduce_add4(v);
return v1 + shuffle<1, 0>(v1);
}
__forceinline int reduce_min(const avxi &v)
{
return extract<0>(extract<0>(vreduce_min(v)));
}
__forceinline int reduce_max(const avxi &v)
{
return extract<0>(extract<0>(vreduce_max(v)));
}
__forceinline int reduce_add(const avxi &v)
{
return extract<0>(extract<0>(vreduce_add(v)));
}
__forceinline size_t select_min(const avxi &v)
{
return __bsf(movemask(v == vreduce_min(v)));
}
__forceinline size_t select_max(const avxi &v)
{
return __bsf(movemask(v == vreduce_max(v)));
}
__forceinline size_t select_min(const avxb &valid, const avxi &v)
{
const avxi a = select(valid, v, avxi(pos_inf));
return __bsf(movemask(valid & (a == vreduce_min(a))));
}
__forceinline size_t select_max(const avxb &valid, const avxi &v)
{
const avxi a = select(valid, v, avxi(neg_inf));
return __bsf(movemask(valid & (a == vreduce_max(a))));
}
////////////////////////////////////////////////////////////////////////////////
/// Output Operators
////////////////////////////////////////////////////////////////////////////////
ccl_device_inline void print_avxi(const char *label, const avxi &a)
{
printf("%s: %d %d %d %d %d %d %d %d\n", label, a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7]);
}
CCL_NAMESPACE_END
#endif

View File

@@ -312,6 +312,60 @@ ccl_device_inline ssei hash_ssei4(ssei kx, ssei ky, ssei kz, ssei kw)
return c;
}
# if defined(__KERNEL_AVX__)
ccl_device_inline avxi hash_avxi(avxi kx)
{
avxi a, b, c;
a = b = c = avxi(0xdeadbeef + (1 << 2) + 13);
a += kx;
final(a, b, c);
return c;
}
ccl_device_inline avxi hash_avxi2(avxi kx, avxi ky)
{
avxi a, b, c;
a = b = c = avxi(0xdeadbeef + (2 << 2) + 13);
b += ky;
a += kx;
final(a, b, c);
return c;
}
ccl_device_inline avxi hash_avxi3(avxi kx, avxi ky, avxi kz)
{
avxi a, b, c;
a = b = c = avxi(0xdeadbeef + (3 << 2) + 13);
c += kz;
b += ky;
a += kx;
final(a, b, c);
return c;
}
ccl_device_inline avxi hash_avxi4(avxi kx, avxi ky, avxi kz, avxi kw)
{
avxi a, b, c;
a = b = c = avxi(0xdeadbeef + (4 << 2) + 13);
a += kx;
b += ky;
c += kz;
mix(a, b, c);
a += kw;
final(a, b, c);
return c;
}
# endif
# undef rot
# undef final
# undef mix

View File

@@ -0,0 +1,61 @@
/*
* Copyright 2011-2020 Blender Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef __UTIL_SEMAPHORE_H__
#define __UTIL_SEMAPHORE_H__
#include "util/util_thread.h"
CCL_NAMESPACE_BEGIN
/* Counting Semaphore
*
* To restrict concurrent access to a resource to a specified number
* of threads. Similar to std::counting_semaphore from C++20. */
class thread_counting_semaphore {
public:
explicit thread_counting_semaphore(const int count) : count(count)
{
}
thread_counting_semaphore(const thread_counting_semaphore &) = delete;
void acquire()
{
thread_scoped_lock lock(mutex);
while (count == 0) {
condition.wait(lock);
}
count--;
}
void release()
{
thread_scoped_lock lock(mutex);
count++;
condition.notify_one();
}
protected:
thread_mutex mutex;
thread_condition_variable condition;
int count;
};
CCL_NAMESPACE_END
#endif /* __UTIL_SEMAPHORE_H__ */

View File

@@ -75,6 +75,28 @@ static struct FalseTy {
}
} False ccl_maybe_unused;
static struct ZeroTy {
__forceinline operator float() const
{
return 0;
}
__forceinline operator int() const
{
return 0;
}
} zero ccl_maybe_unused;
static struct OneTy {
__forceinline operator float() const
{
return 1;
}
__forceinline operator int() const
{
return 1;
}
} one ccl_maybe_unused;
static struct NegInfTy {
__forceinline operator float() const
{
@@ -97,6 +119,9 @@ static struct PosInfTy {
}
} inf ccl_maybe_unused, pos_inf ccl_maybe_unused;
static struct StepTy {
} step ccl_maybe_unused;
/* Intrinsics Functions */
# if defined(__BMI__) && defined(__GNUC__)
@@ -563,6 +588,13 @@ __forceinline __m128 _mm_round_ps_emu(__m128 value, const int flags)
# endif /* !(defined(__KERNEL_SSE41__) || defined(__SSE4_1__) || defined(__SSE4_2__)) */
/* Older GCC versions do not have _mm256_cvtss_f32 yet, so define it ourselves.
* _mm256_castps256_ps128 generates no instructions so this is just as efficient. */
# if defined(__KERNEL_AVX__) || defined(__KERNEL_AVX2__)
# undef _mm256_cvtss_f32
# define _mm256_cvtss_f32(a) (_mm_cvtss_f32(_mm256_castps256_ps128(a)))
# endif
# else /* __KERNEL_SSE2__ */
/* This section is for utility functions which operates on non-register data

View File

@@ -24,9 +24,9 @@
CCL_NAMESPACE_BEGIN
#ifdef __KERNEL_OPENCL__
#if defined(__KERNEL_OPENCL__) || defined(CYCLES_CUBIN_CC)
# define static_assert(statement, message)
#endif /* __KERNEL_GPU__ */
#endif /* __KERNEL_OPENCL__ */
#define static_assert_align(st, align) \
static_assert((sizeof(st) % (align) == 0), "Structure must be strictly aligned") // NOLINT

View File

@@ -158,6 +158,7 @@ CCL_NAMESPACE_END
# if defined(__KERNEL_AVX__) || defined(__KERNEL_AVX2__)
# include "util/util_avxb.h"
# include "util/util_avxf.h"
# include "util/util_avxi.h"
# endif
#endif

View File

@@ -19,6 +19,10 @@
#include "GeoCommon.h"
#ifdef WITH_CXX_GUARDEDALLOC
# include "MEM_guardedalloc.h"
#endif
/*
* Virtual class for input file readers
*

View File

@@ -368,11 +368,11 @@ if(WITH_XR_OPENXR)
GHOST_IXrContext.h
intern/GHOST_IXrGraphicsBinding.h
intern/GHOST_Xr_intern.h
intern/GHOST_Xr_openxr_includes.h
intern/GHOST_XrContext.h
intern/GHOST_XrSession.h
intern/GHOST_XrSwapchain.h
intern/GHOST_Xr_intern.h
intern/GHOST_Xr_openxr_includes.h
)
list(APPEND INC_SYS
${XR_OPENXR_SDK_INCLUDE_DIR}

View File

@@ -214,25 +214,6 @@ extern GHOST_ContextHandle GHOST_CreateOpenGLContext(GHOST_SystemHandle systemha
extern GHOST_TSuccess GHOST_DisposeOpenGLContext(GHOST_SystemHandle systemhandle,
GHOST_ContextHandle contexthandle);
#ifdef WIN32
/**
* Create a new offscreen context.
* Never explicitly delete the context, use disposeContext() instead.
* \param systemhandle The handle to the system
* \return A handle to the new context ( == NULL if creation failed).
*/
GHOST_ContextHandle GHOST_CreateDirectXContext(GHOST_SystemHandle systemhandle);
/**
* Dispose of a context.
* \param systemhandle The handle to the system
* \param contexthandle Handle to the context to be disposed.
* \return Indication of success.
*/
GHOST_TSuccess GHOST_DisposeDirectXContext(GHOST_SystemHandle systemhandle,
GHOST_ContextHandle contexthandle);
#endif
/**
* Returns the window user data.
* \param windowhandle The handle to the window
@@ -757,7 +738,7 @@ extern GHOST_TSuccess GHOST_ActivateOpenGLContext(GHOST_ContextHandle contexthan
extern GHOST_TSuccess GHOST_ReleaseOpenGLContext(GHOST_ContextHandle contexthandle);
/**
* Get the OpenGL framebuffer handle that serves as a default framebuffer.
* Get the OpenGL frame-buffer handle that serves as a default frame-buffer.
*/
extern unsigned int GHOST_GetContextDefaultOpenGLFramebuffer(GHOST_ContextHandle contexthandle);
@@ -769,7 +750,7 @@ extern unsigned int GHOST_GetContextDefaultOpenGLFramebuffer(GHOST_ContextHandle
extern int GHOST_isUpsideDownContext(GHOST_ContextHandle contexthandle);
/**
* Get the OpenGL framebuffer handle that serves as a default framebuffer.
* Get the OpenGL frame-buffer handle that serves as a default frame-buffer.
*/
extern unsigned int GHOST_GetDefaultOpenGLFramebuffer(GHOST_WindowHandle windwHandle);
@@ -780,13 +761,6 @@ extern unsigned int GHOST_GetDefaultOpenGLFramebuffer(GHOST_WindowHandle windwHa
*/
extern void GHOST_SetTabletAPI(GHOST_SystemHandle systemhandle, GHOST_TTabletAPI api);
/**
* Returns the status of the tablet
* \param windowhandle The handle to the window
* \return Status of tablet
*/
extern const GHOST_TabletData *GHOST_GetTabletData(GHOST_WindowHandle windowhandle);
/**
* Access to rectangle width.
* \param rectanglehandle The handle to the rectangle
@@ -1078,6 +1052,13 @@ void GHOST_XrSessionDrawViews(GHOST_XrContextHandle xr_context, void *customdata
*/
int GHOST_XrSessionIsRunning(const GHOST_XrContextHandle xr_context);
/**
* Check if \a xr_context has a session that requires an upside-down frame-buffer (compared to
* OpenGL). If true, the render result should be flipped vertically for correct output.
* \note: Only to be called after session start, may otherwise result in a false negative.
*/
int GHOST_XrSessionNeedsUpsideDownDrawing(const GHOST_XrContextHandle xr_context);
/* events */
/**
* Invoke handling of all OpenXR events for \a xr_context. Should be called on every main-loop

View File

@@ -60,11 +60,6 @@ class GHOST_IContext {
virtual GHOST_TSuccess swapBuffers() = 0;
/**
* Returns if the window is rendered upside down compared to OpenGL.
*/
virtual bool isUpsideDown() const = 0;
#ifdef WITH_CXX_GUARDEDALLOC
MEM_CXX_CLASS_ALLOC_FUNCS("GHOST:GHOST_IContext")
#endif

View File

@@ -266,12 +266,6 @@ class GHOST_ISystem {
*/
virtual GHOST_IContext *createOffscreenContext() = 0;
/**
* Overload to allow requesting a different context type. By default only OpenGL is supported.
* However by explicitly overloading this a system may add support for others.
*/
virtual GHOST_IContext *createOffscreenContext(GHOST_TDrawingContextType type) = 0;
/**
* Dispose of a context.
* \param context Pointer to the context to be disposed.

View File

@@ -243,16 +243,6 @@ class GHOST_IWindow {
virtual bool isDialog() const = 0;
/**
* Returns the tablet data (pressure etc).
* \return The tablet data (pressure etc).
*/
virtual const GHOST_TabletData &GetTabletData()
{
/* Default state when no tablet is used, for systems without tablet support. */
return GHOST_TABLET_DATA_DEFAULT;
}
/***************************************************************************************
* Progress bar functionality
***************************************************************************************/

View File

@@ -37,6 +37,8 @@ class GHOST_IXrContext {
virtual void setGraphicsContextBindFuncs(GHOST_XrGraphicsContextBindFn bind_fn,
GHOST_XrGraphicsContextUnbindFn unbind_fn) = 0;
virtual void setDrawViewFunc(GHOST_XrDrawViewFn draw_view_fn) = 0;
virtual bool needsUpsideDownDrawing() const = 0;
};
#endif // __GHOST_IXRCONTEXT_H__

View File

@@ -117,8 +117,8 @@ typedef struct GHOST_TabletData {
float Ytilt; /* as above */
} GHOST_TabletData;
static const GHOST_TabletData GHOST_TABLET_DATA_DEFAULT = {
GHOST_kTabletModeNone, /* No tablet connected. */
static const GHOST_TabletData GHOST_TABLET_DATA_NONE = {
GHOST_kTabletModeNone, /* No cursor in range */
1.0f, /* Pressure */
0.0f, /* Xtilt */
0.0f}; /* Ytilt */
@@ -598,8 +598,8 @@ typedef void (*GHOST_TimerProcPtr)(struct GHOST_TimerTaskHandle__ *task, GHOST_T
#ifdef WITH_XR_OPENXR
struct GHOST_XrError;
struct GHOST_XrDrawViewInfo;
struct GHOST_XrError;
/**
* The XR view (i.e. the OpenXR runtime) may require a different graphics library than OpenGL. An
* offscreen texture of the viewport will then be drawn into using OpenGL, but the final texture
@@ -621,9 +621,8 @@ typedef void (*GHOST_XrErrorHandlerFn)(const struct GHOST_XrError *);
typedef void (*GHOST_XrSessionExitFn)(void *customdata);
typedef void *(*GHOST_XrGraphicsContextBindFn)(enum GHOST_TXrGraphicsBinding graphics_lib);
typedef void (*GHOST_XrGraphicsContextUnbindFn)(enum GHOST_TXrGraphicsBinding graphics_lib,
GHOST_ContextHandle graphics_context);
typedef void *(*GHOST_XrGraphicsContextBindFn)(void);
typedef void (*GHOST_XrGraphicsContextUnbindFn)(GHOST_ContextHandle graphics_context);
typedef void (*GHOST_XrDrawViewFn)(const struct GHOST_XrDrawViewInfo *draw_view, void *customdata);
/* An array of GHOST_TXrGraphicsBinding items defining the candidate bindings to use. The first

View File

@@ -150,25 +150,6 @@ GHOST_TSuccess GHOST_DisposeOpenGLContext(GHOST_SystemHandle systemhandle,
return system->disposeContext(context);
}
#ifdef WIN32
GHOST_ContextHandle GHOST_CreateDirectXContext(GHOST_SystemHandle systemhandle)
{
GHOST_ISystem *system = (GHOST_ISystem *)systemhandle;
return (GHOST_ContextHandle)system->createOffscreenContext(GHOST_kDrawingContextTypeD3D);
}
GHOST_TSuccess GHOST_DisposeDirectXContext(GHOST_SystemHandle systemhandle,
GHOST_ContextHandle contexthandle)
{
GHOST_ISystem *system = (GHOST_ISystem *)systemhandle;
GHOST_IContext *context = (GHOST_IContext *)contexthandle;
return system->disposeContext(context);
}
#endif
GHOST_WindowHandle GHOST_CreateWindow(GHOST_SystemHandle systemhandle,
const char *title,
GHOST_TInt32 left,
@@ -716,13 +697,6 @@ unsigned int GHOST_GetContextDefaultOpenGLFramebuffer(GHOST_ContextHandle contex
return context->getDefaultFramebuffer();
}
int GHOST_isUpsideDownContext(GHOST_ContextHandle contexthandle)
{
GHOST_IContext *context = (GHOST_IContext *)contexthandle;
return context->isUpsideDown();
}
unsigned int GHOST_GetDefaultOpenGLFramebuffer(GHOST_WindowHandle windowhandle)
{
GHOST_IWindow *window = (GHOST_IWindow *)windowhandle;
@@ -743,11 +717,6 @@ void GHOST_SetTabletAPI(GHOST_SystemHandle systemhandle, GHOST_TTabletAPI api)
system->setTabletAPI(api);
}
const GHOST_TabletData *GHOST_GetTabletData(GHOST_WindowHandle windowhandle)
{
return &((GHOST_IWindow *)windowhandle)->GetTabletData();
}
GHOST_TInt32 GHOST_GetWidthRectangle(GHOST_RectangleHandle rectanglehandle)
{
return ((GHOST_Rect *)rectanglehandle)->getWidth();
@@ -991,4 +960,12 @@ void GHOST_XrDrawViewFunc(GHOST_XrContextHandle xr_contexthandle, GHOST_XrDrawVi
GHOST_XR_CAPI_CALL(xr_context->setDrawViewFunc(draw_view_fn), xr_context);
}
int GHOST_XrSessionNeedsUpsideDownDrawing(const GHOST_XrContextHandle xr_contexthandle)
{
GHOST_IXrContext *xr_context = (GHOST_IXrContext *)xr_contexthandle;
GHOST_XR_CAPI_CALL_RET(xr_context->needsUpsideDownDrawing(), xr_context);
return 0; /* Only reached if exception is thrown. */
}
#endif

View File

@@ -120,9 +120,9 @@ class GHOST_Context : public GHOST_IContext {
}
/**
* Returns if the window is rendered upside down compared to OpenGL.
* Returns if the context is rendered upside down compared to OpenGL.
*/
inline bool isUpsideDown() const
virtual inline bool isUpsideDown() const
{
return false;
}

View File

@@ -18,7 +18,7 @@
*/
/** \file
* \ingroup GHOST
* \ingroup GHOST
*
* Definition of GHOST_ContextCGL class.
*/

View File

@@ -37,17 +37,19 @@ class GHOST_EventButton : public GHOST_Event {
* Constructor.
* \param time The time this event was generated.
* \param type The type of this event.
* \param window: The window of this event.
* \param button: The state of the buttons were at the time of the event.
* \param window The window of this event.
* \param button The state of the buttons were at the time of the event.
* \param tablet The tablet data associated with this event.
*/
GHOST_EventButton(GHOST_TUns64 time,
GHOST_TEventType type,
GHOST_IWindow *window,
GHOST_TButtonMask button)
GHOST_TButtonMask button,
const GHOST_TabletData &tablet)
: GHOST_Event(time, type, window)
{
m_buttonEventData.button = button;
m_buttonEventData.tablet = window->GetTabletData();
m_buttonEventData.tablet = tablet;
m_data = &m_buttonEventData;
}

View File

@@ -38,17 +38,19 @@ class GHOST_EventCursor : public GHOST_Event {
* \param type The type of this event.
* \param x The x-coordinate of the location the cursor was at the time of the event.
* \param y The y-coordinate of the location the cursor was at the time of the event.
* \param tablet The tablet data associated with this event.
*/
GHOST_EventCursor(GHOST_TUns64 msec,
GHOST_TEventType type,
GHOST_IWindow *window,
GHOST_TInt32 x,
GHOST_TInt32 y)
GHOST_TInt32 y,
const GHOST_TabletData &tablet)
: GHOST_Event(msec, type, window)
{
m_cursorEventData.x = x;
m_cursorEventData.y = y;
m_cursorEventData.tablet = window->GetTabletData();
m_cursorEventData.tablet = tablet;
m_data = &m_cursorEventData;
}

Some files were not shown because too many files have changed in this diff Show More