Commit Graph

3790 Commits

Author SHA1 Message Date
Jacques Lucke
ae4cee19ba Merge branch 'blender-v4.2-release' 2024-06-19 18:35:45 +02:00
Laurynas Duburas
9ae063d40b Fix #123325: Curve selection more does not highlight curves
Adds handles to curve types `CURVE_TYPE_CATMULL_ROM`,`CURVE_TYPE_POLY` to fix #123325.
Previously not shown as seemed redundant in `Control Point` edit mode.

Pull Request: https://projects.blender.org/blender/blender/pulls/123373
2024-06-19 18:31:02 +02:00
Hans Goudey
79416a8b96 Refactor: GPU: Simplify access to vertex buffer data
Add a `.data<T>()` method that retrieves a mutable span. This is useful
more and more as we change to filling in vertex buffer data arrays
directly, and compared to raw pointers it's safer too because of asserts
in debug builds.

Pull Request: https://projects.blender.org/blender/blender/pulls/123338
2024-06-18 21:10:45 +02:00
Clément Foucault
979e142965 Fix: EEVEE: Object holdout not working
This implement the holdout flag by switching to
the holdout case in the shader. This has a few benefits:
- Doesn't recompile the shaders.
- Makes the object infos mandatory (already the case in
  practice)
- Handle transparent materials properly, keeping the
  transparency working.

Fix #123284

Pull Request: https://projects.blender.org/blender/blender/pulls/123315
2024-06-18 15:35:04 +02:00
Clément Foucault
b5a9a67dcf Fix: EEVEE: Object holdout not working
This implement the holdout flag by switching to
the holdout case in the shader. This has a few benefits:
- Doesn't recompile the shaders.
- Makes the object infos mandatory (already the case in
  practice)
- Handle transparent materials properly, keeping the
  transparency working.

Fix #123284

Pull Request: https://projects.blender.org/blender/blender/pulls/123315
2024-06-17 19:08:37 +02:00
Jeroen Bakker
1363eb26ab Merge branch 'blender-v4.2-release' 2024-06-17 13:47:43 +02:00
Jeroen Bakker
832918f9d8 Fix #115344: Generated coordinates for hair psys
When using particle system the generated coordinates where not set.
The reason is that a loose resource handle was created for particle
system that didn't contain enough information to calculate orcos.

This PR will create the object info from its parent object.

Pull Request: https://projects.blender.org/blender/blender/pulls/123307
2024-06-17 13:45:23 +02:00
Hans Goudey
654ead045b Merge branch 'blender-v4.2-release' 2024-06-13 10:29:03 -04:00
Hans Goudey
2d4c624a87 Fix #123171: Mesh edit mode lines index buffer crash with curve modifier
I didn't think the BMesh extraction mode could arrive at the case where
only loose edges are requested, but turns out it can because of the
mesh wrapper system where the evaluated mesh is actually a BMesh with
deformed positions.
2024-06-13 10:22:11 -04:00
William Leeson
81d5af15a6 Fix: Crash and or assert in mesh index buffer creation
The mapping was read multiple times from the `map` structure in that time the `map` value could have changed (set to -1). To stop this, the mapping is read once and set to -1 earlier to reduce the possibility to other threads performing the operation and changing the mapping value.

Pull Request: https://projects.blender.org/blender/blender/pulls/123056
2024-06-11 16:13:27 +02:00
Lukas Tönne
e175259f44 Fix #73168: Stop particle draw code from crashing
Not a real fix, just preventing crashes due to broken particle data.
Particle draw code can get into an invalid state, which can crash
drawing code. This just prevents the crash.

Pull Request: https://projects.blender.org/blender/blender/pulls/123075
2024-06-11 15:39:52 +02:00
Jeroen Bakker
e48ba6c508 Merge branch 'blender-v4.2-release' 2024-06-11 14:12:02 +02:00
Jeroen Bakker
e1ee3ed7df Fix #123045: Accumulate Samples When Navigating
When navigating the samples were always reset. This was introduced
by 7ec59b05ff where samples needed
to be reset when painting.

This PR solves it by separating the navigation and the painting more
clearly in the API. Also cleans up some calls that are also encapsulated
via the EEVEE Instance class.

Validated that painting and navigating still worked with these changes
applied.

Pull Request: https://projects.blender.org/blender/blender/pulls/123064
2024-06-11 14:07:26 +02:00
Hans Goudey
a0cf59c186 Fix #122770: Crash with "High Quality Normals" and loose edges/verts
Caused by a simple mistake in 84c4ddbbb9.
2024-06-10 22:33:15 -04:00
Hans Goudey
7e75ef20ca Fix #122770: Crash with "High Quality Normals" and loose edges/verts
Caused by a simple mistake in 84c4ddbbb9.
2024-06-10 22:31:48 -04:00
Harley Acheson
4f36fb1afe Merge branch 'blender-v4.2-release' 2024-06-10 14:39:36 -07:00
Brecht Van Lommel
27f467e028 Draw: Avoid hang when depsgraph update happens during draw
This should not happen and any failure here should be considered a bug.
But for end users better not to hang Blender, and to have a better
diagnostic for developers in bug reports.

Ref #82483

Pull Request: https://projects.blender.org/blender/blender/pulls/123023
2024-06-10 18:11:41 +02:00
Hans Goudey
729bfe7800 Cleanup: Rename more paint variables
Avoid the one letter variable names and rename "tar" to "dst".
2024-06-10 09:04:35 -04:00
Jeroen Bakker
f13e51543c Cleanup: Fix spelling mistake
Attachement -> Attachment

Pull Request: https://projects.blender.org/blender/blender/pulls/122988
2024-06-10 09:57:15 +02:00
Hans Goudey
f371f46a50 Fix: Crash extracting vertex buffer for incomplete set of Mesh UV maps
The ranges in the vertex buffer were indexed incorrectly when
some of the UV maps weren't uploaded.
2024-06-09 11:22:09 -04:00
Hans Goudey
a6d00905f0 Cleanup: Sculpt: Simplify retrieval of multires draw buffers layout
Pull Request: https://projects.blender.org/blender/blender/pulls/122899
2024-06-07 21:35:21 +02:00
Hans Goudey
5013ab90f6 Cleanup: Sculpt: Rename PBVH draw multires variable
Everything here is drawn as triangles in the end, and currently we use
index buffers either way, so "needs_tri_index" isn't a meaningful name.
What this really controls is whether the layout is flattened to duplicate
each subdiv vertex 4 times, for drawing flat shading.
2024-06-07 21:35:19 +02:00
Hans Goudey
8df0690ab4 Sculpt: Optimize mesh wireframe index buffer creation
Retrieve the index buffer data as a span and set it directly rather than
using the API functions to add vertices which add overhead. Also pass
all the necessary data as arguments instead of retrieving them from
the "args" struct on every use.

In a test with a 16 million vertex grid, this reduces the runtime of
generating all the wireframe index buffers by about 25%, from 95 to 76 ms
for that step of the drawing process.
2024-06-07 21:35:19 +02:00
Hans Goudey
0d9d6fad41 Cleanup: Sculpt: Remove unnecessary draw debugging code 2024-06-07 21:35:19 +02:00
Hans Goudey
a9907c4ed9 Sculpt: Fix over-allocation of wireframe index buffers
The lines index buffers were twice as big as they needed to be.
The init function already multiplies by the number of indices in
the primitive type.
2024-06-07 21:35:19 +02:00
Hans Goudey
39894f4beb Sculpt: Avoid double map lookup creating draw batches 2024-06-07 21:35:19 +02:00
Hans Goudey
279fda3dcd Cleanup: Sculpt: Reorder function to avoid forward declaration 2024-06-07 21:35:19 +02:00
Hans Goudey
c18d209b85 Refactor: Sculpt: Move some drawing code out of classes
Most functions in `draw_pbvh.cc` are inside of the `PBVHBatch` or
`PBVHBatches` classes, besides the more recently added attribute
copying code. This means they have access to "all the information"
and it's hard to get a sense for the proper order of calculation and
what each function is responsible for. This commit is an attempt to
clarify things a bit by changing to regular static functions.
2024-06-07 21:35:19 +02:00
Hans Goudey
dc0fe8a26c Cleanup: Sculpt: Remove unnecessary variables from draw batches
lines_count was set but never used. tris_count was the same in one
case and just set to the same value as faces_count in another.
2024-06-07 21:35:19 +02:00
Hans Goudey
fd992c57bf Cleanup: Sculpt: Avoid unnecessary clearing of index buffers 2024-06-07 21:35:19 +02:00
Hans Goudey
8cac7bc6cc Cleanup: Sculpt: Use CCG grid index access utility in drawing code 2024-06-07 13:39:12 -04:00
Hans Goudey
9f4930509e Cleanup: Sculpt: Rename multires draw iteration variables
These "j" and "k" are actually X and Y, it's a bit easier to understand
what's going on if they're named that way.
2024-06-07 13:39:12 -04:00
Miguel Pozo
ca7f1785fc Merge branch 'blender-v4.2-release' 2024-06-07 16:25:37 +02:00
Miguel Pozo
fb98edf322 GPU: Add GPU_material_batch_compile
Add `GPU_material_batch` API.
It uses the new `GPU_shader_batch` from #122232 internally and it
works in the same way.

Note: This doesn't implement parallel material optimizations.

Pull Request: https://projects.blender.org/blender/blender/pulls/122793
2024-06-07 16:11:50 +02:00
Campbell Barton
846f86d1ad Cleanup: spelling in comments 2024-06-06 11:35:00 +10:00
Hans Goudey
84c4ddbbb9 Cleanup: GPU: Use references for some vertex buffer functions
Pull Request: https://projects.blender.org/blender/blender/pulls/122784
2024-06-05 18:47:22 +02:00
Hans Goudey
905ceaeacc Merge branch 'blender-v4.2-release' 2024-06-05 10:33:04 -04:00
Hans Goudey
05142b3ea8 Fix #122523: Crash/missing loose edge drawing with two viewports
With two viewports, and one viewport with overlays turned off, one viewport
first requests positions without calculating loose geometry, then the second
viewport can request the loose geometry index buffer. In that case the
previously-calculated positions VBO has the wrong size.

To fix this, always calculate loose geometry when the positions are requested.
That's required because we no simple way of checking whether the previously
uploaded positions included loose geometry. That was the state before recent
refactors in this area anyway.

This makes it clear that the optimization to not calculate loose geometry is
meaningless, because the positions buffer will always be requested at some
point when drawing a mesh.
2024-06-05 10:32:27 -04:00
Hans Goudey
92bfb754af Cleanup: Use unique_ptr for MeshRenderData
Also slightly simplify the main task graph node creation.

Pull Request: https://projects.blender.org/blender/blender/pulls/122722
2024-06-05 14:20:05 +02:00
Hans Goudey
24055d1837 Cleanup: Remove unused MeshExtract virtual iteration abstraction
Part of #116901.
This has been removed step by step in the previous commits.
2024-06-05 14:20:01 +02:00
Hans Goudey
eb4f3516a6 Mesh: Draw: Replace extractor abstraction for attributes buffers
Part of #116901.
The last extractor removed. This was already written in a data-oriented
manner so only the entry point changes in this commit.
2024-06-05 14:20:01 +02:00
Hans Goudey
deedbee971 Mesh: Draw: Replace extractor abstraction for UV edit index buffers
Part of #116901.
This file contains the creation of four different UV edit index buffers:
triangles, lines, points, and face dots. The main changes are about making
it clearer when faces are skipped. Other than that, changes are faily
extensive but straightfoward. In a few places some parts of existing
loops have been split out and parallelized, but the bulk of the work for
each IBO remains largely single threaded.
2024-06-05 14:20:01 +02:00
Hans Goudey
7292667db6 Mesh: Draw: Replace extractor abstraction for face dots UV edit data buffer
Part of #116901.
2024-06-05 14:20:01 +02:00
Hans Goudey
01b0096b5e Mesh: Draw: Replace extractor abstraction for edit data buffer
Part of #116901.
Due to the BMesh data format, there is less optimization possible here.
2024-06-05 14:20:01 +02:00
Hans Goudey
5931c82238 Mesh: Draw: Replace extractor abstraction for UV angle stretch buffer
Part of #116901.
The algorithm is complicated and isn't tweaked here.
2024-06-05 14:20:01 +02:00
Hans Goudey
4a852cdaa7 Mesh: Draw: Replace extractor abstraction for UV area stretch buffer
Part of #116901.
Besides the typical changes from past similar refactors, the loops are
now multithreaded.
2024-06-05 14:20:01 +02:00
Hans Goudey
498f4ba284 Mesh: Draw: Replace extractor abstraction for mesh analysis buffer
Part of #116901.
The code was already structured to not use the extractor iterators, so I
only changed the entry point.
2024-06-05 14:20:01 +02:00
Hans Goudey
1adb557806 Mesh: Draw: Replace extractor abstraction for ocro buffer
Part of #116901.
A straightforward change like all the others.
2024-06-05 14:20:01 +02:00
Hans Goudey
0edae45d15 Mesh: Draw: Replace extractor abstraction for sculpt overlay buffer
Part of #116901.
Includes a general standardization of the code, removing constant
checks from hot loops, standardizing naming, tweaking BMesh face
iteration. And includes parallelization too.
2024-06-05 14:20:01 +02:00
Hans Goudey
17a3d065f4 Mesh: Draw: Replace extractor abstraction for skin roots buffer
Part of #116901.
To avoid resizing the buffer, the data is added to a temporary vector
first. That should be fine because the number of roots is expected to
be quite small compared to the size of the mesh.
2024-06-05 14:20:01 +02:00