Age | Commit message (Collapse) | Author |
|
|
|
This is a code refactor in preparation of supporting canvas
compositing and fix all cropping issues on full frame implementation.
No functional changes, all canvases are at (0, 0) position matching
tiled implementation.
|
|
Full frame doesn't support this option as all operations are already
buffered. UI option will be removed in the future.
|
|
If an input is only used as a constant it doesn't rendering
because its already calculated after constant folding.
|
|
Row stride and the area x coordinate offset were not taken into
account.
|
|
|
|
|
|
It was using viewer instead of render border. A copy-paste error.
|
|
It was only affecting tiled fallback on full frame mode. If tiles from a
constant operation were multi-thread initialized, its buffer
was inflated multiple times.
|
|
Adds full frame implementation to "Bokeh Image" node, "Track Position"
node, `SetVectorOperation` and `MovieClipAttribute`.
The other nodes in "Input" submenu are implemented separately.
`MovieClipAttribute` needs resolution to calculate its constant value, it can't be constant folded,
which requires it to be a `ConstantOperation`. Now `ConstantOperation` contemplate this case
and any operation that is always constant without depending on inputs should implement it.
If in the future an operation needs to get an input constant element during
`determineResolution` it must first determine its input resolution.
The nodes have no functional changes.
Reviewed By: jbakker
Differential Revision: https://developer.blender.org/D12090
|
|
|
|
It has an impact in performance when used in deep loops.
If area have negative coordinates it will round
toward zero but buffers should be displaced later on to always
work with positive coordinates.
|
|
|
|
|
|
|
|
|
|
|
|
The variable was uninitialized at that point of execution.
|
|
|
|
|
|
|
|
Current sampling methods do not take into account area offsets
and have some off by 1 issues on full frame. For example on bilinear
bottom and left image border pixel is not fully sampled and
creates edges.
Other issue is they use `wrap_pixel` when most of the time is not
needed.
In order to not affect tiled implementation, this commit creates
specific sampling methods for full frame needs.
|
|
Adds full frame implementation to this node operations.
No functional changes.
Includes a new operation method `init_data` used to initialize any data
needed after operations are linked and resolutions determined.
Once tiled implementation is removed `initExecution` may be renamed
to `init_rendering` and `init_data` to `init_execution`.
Reviewed By: jbakker
Differential Revision: https://developer.blender.org/D11944
|
|
|
|
Adds full frame implementation to this node operations.
No functional changes.
Reviewed By: jbakker
Differential Revision: https://developer.blender.org/D11749
|
|
|
|
Adds full frame implementation to this node operations.
No functional changes.
Includes a new operation method `init_data` used to initialize any data
needed after operations are linked and resolutions determined.
Once tiled implementation is removed `initExecution` may be renamed
to `init_rendering` and `init_data` to `init_execution`.
Reviewed By: jbakker
Differential Revision: https://developer.blender.org/D11944
|
|
|
|
|
|
It's the case of Image or Movie Clip node when not selecting any
source or an empty one.
Render methods expect an output buffer with size, only render
operations with resolution.
|
|
|
|
Allows to cover many use cases where iterating both buffers and
coordinates is needed.
|
|
Operation receiving inputs was being folded more than once
when it was constant foldable.
|
|
When fixing issues, seeing operation results can be helpful for
detecting which operation went wrong.
This commit adds an option for exporting all operations results to
image files.
Exceptions are:
- Output operations: They are already exported or can be seen in UI.
- Constant operations: There are too many and is rarely useful.
They are exported to "<temp session folder>/COM_operations/"
with filenames "<operation class name>_<operation id>.png".
Only works on full frame execution mode.
Reviewed By: jbakker
Differential Revision: https://developer.blender.org/D11722
|
|
Currently we mostly iterate buffer areas using x/y loops or through
utility methods extending from base classes.
To simplify code in simple operations this commit adds wrappers for
specifying buffer areas and their iterators for raw buffers with any
element stride:
- BufferRange: Specifies a range of contiguous buffer elements from a
given element index.
- BufferRangeIterator: Iterates elements in a BufferRange.
- BufferArea: Specifies a rectangle area of elements in a 2D buffer.
- BufferAreaIterator: Iterates elements in a BufferArea.
- BuffersIterator: Simultaneously iterates an area of elements in an
output buffer and any number of input buffers.
- BuffersIteratorBuilder: Helper for building BuffersIterator adding
buffers one by one.
For iterating areas coordinates it adds `XRange` and `YRange` methods
that return `IndexRange`.
Reviewed By: jbakker
Differential Revision: https://developer.blender.org/D11882
|
|
This shows the text as part of the assertion message.
|
|
Not causing issues in current master because all buffer areas are at
(0, 0) position and `Extend` is not used. But areas may be at any
position in future developments and it will crash.
Reviewed By: jbakker
Differential Revision: https://developer.blender.org/D11784
|
|
Link sockets are always connected to inserted translate or scale
operation `Color` sockets even when they have different data type.
This causes crashes on full frame mode when operations read inputs
with non expected datatypes.
Because data type conversions need to be executed before, convert
resolutions must ensure same datatypes are linked.
|
|
|
|
Many operations do not expect single element buffers as output.
Use full buffers with a single pixel instead.
|
|
Work scheduler needed initialization and execution models are
not created during constant folding. This moves work execution
method to execution system.
|
|
|
|
Graphs are usually large, needing a lot of horizontal scrolling and
they can include more information for debugging.
This patch makes graph more compact horizontally by splitting
labels in lines and removing namespaces.
Furthermore it adds following information:
- Operation ID.
- SetValueOperation float value.
- Optionally, operation node name.
Reviewed By: jbakker
Differential Revision: https://developer.blender.org/D11720
|
|
Currently there is no clear way to know if an operation is constant
(i.e. when all rendered pixels have same values). Operations may
need to get constant input values before rendering to determine
their resolution or areas of interest. This is the case of scale, rotate
and translate operations. Only "set operations" are known as
constant but many more are constant when all their inputs are so.
Such cases can be optimized by only rendering one pixel.
Current solution for tiled implementation is to get first pixel
from input. This works for root execution groups, others
need previous groups to be rendered.
On full frame implementation this is not possible, because buffers
are created on rendering to reduce peak memory and there is
no per pixel calls.
This patch evaluates all operations that are constant into primitive
operations (Value/Vector/Color) before determining resolutions.
Reviewed By: jbakker
Differential Revision: https://developer.blender.org/D11490
|
|
|
|
Tiled fallback doesn't support single element buffers.
Ensure tiles are initialized as full buffers.
|
|
Simplifies code for operations with correlated
coordinates between inputs and output.
|
|
Also use doxy style function reference `#` prefix chars when
referencing identifiers.
|
|
|
|
|