Commit Graph

9252 Commits

Author SHA1 Message Date
Guillem Baldi
2536b04a21 Fix #133104: Make Indices Overlay look like Attribute Viewer
The Indices Overlay used a blue color without shadow to render the
indices in edit mode unlike the Attribute Viewer which uses white text
with shadow. So for consistency, the Indices Overlay has been changed
to use the same style.

Pull Request: https://projects.blender.org/blender/blender/pulls/133262
2025-01-31 19:01:18 +01:00
Brecht Van Lommel
569e0f5e7f Fix: Build error in eevee tests after recent cleanups 2025-01-31 18:46:01 +01:00
Clément Foucault
12748e5521 Fix: Overlay: Add back support for empty scale in armature custom shape
This function was not ported during the overlay-next project.
2025-01-31 18:26:44 +01:00
Clément Foucault
a50e07a533 Fix #133699: Overlay: Empty as Bone custom shape display error
Add workaround path to process the vertices the same way as
the `overlay_extra_vert` shader.
We nudge the non-origin vertices in the batch to be able
to not require loading the VCLASS attribute. Thus making
the change local to the shader and not requiring another
shader variant.
2025-01-31 18:26:44 +01:00
Brecht Van Lommel
61eedabae9 Cleanup: Various clang-tidy warnings in draw
Pull Request: https://projects.blender.org/blender/blender/pulls/133734
2025-01-31 17:03:18 +01:00
Omar Emara
75f1cbb6dd Refactor: Clarify code around scheduling composite nodes
There is a special case in the compositor code where viewer nodes are
treated as composite nodes. This patch renames relevant methods and
updates comments to clarify this use case.

Pull Request: https://projects.blender.org/blender/blender/pulls/133811
2025-01-31 07:43:00 +01:00
Jacques Lucke
e1753900b7 BLI: improve UTF-8 safety when copying StringRef to char buffers
Previously, there was a `StringRef.copy` method which would copy the string into
the given buffer. However, it was not defined for the case when the buffer was
too small. It moved the responsibility of making sure the buffer is large enough
to the caller.

Unfortunately, in practice that easily hides bugs in builds without asserts
which don't come up in testing much. Now, the method is replaced with
`StringRef.copy_utf8_truncated` which has much more well defined semantics and
also makes sure that the string remains valid utf-8.

This also renames `unsafe_copy` to `copy_unsafe` to make the naming more similar
to `copy_utf8_truncated`.

Pull Request: https://projects.blender.org/blender/blender/pulls/133677
2025-01-29 12:12:27 +01:00
Philipp Oeser
bf2264a3b8 Cleanup: typo 2025-01-29 10:09:59 +01:00
Clément Foucault
bb72bd509e Fix #88185: EEVEE: Collection Holdout not working properly in Blended mode
This was caused by using the same factor as in dithered.
But dithered already has the transparency applied from
the dithered transparency. The transparency needs to be
applied to holdout in forward.
2025-01-28 17:48:33 +01:00
Hans Goudey
7d6e098ca1 Cleanup: Remove unused includes in blenkernel
Pull Request: https://projects.blender.org/blender/blender/pulls/133688
2025-01-28 15:27:34 +01:00
Iliya Katueshenock
c646feac47 Cleanup: BLI: Delete incorrect dimension up-cast via pointer constructor
Since one user-defined conversion operator is allowed during implicit conversion,
 and after this conversion here is a constructor which can accept result
of conversion, there was a backdoor for a vector types to up-cast their
dimensions via cast to pointer type of a component of a vector. Since it was
implicit and non-intentional it led to buffer overflows.

Pull Request: https://projects.blender.org/blender/blender/pulls/132927
2025-01-27 18:38:14 +01:00
Jesse Yurkovich
ca491185f8 Fix #132876: Remove assert and use proper limit when drawing instances
The assert would fire for perfectly valid scenes and the limit used, as
well as the cast, was incorrect.

Pull Request: https://projects.blender.org/blender/blender/pulls/133561
2025-01-27 18:28:20 +01:00
Omar Emara
2028bc8d7d Compositor: Add derived resources optimization
This patch introduces a new Derived Resources concept to the compositor.
Derived resources are resources that are computed from a particular
result and cached in it in case it is needed by another operation, which
can greatly improve performance in some cases at the cost of more memory
usage.

The first use case is to store denoised versions of the Denoising Albedo
and Denoising Normals passes if auxiliary pass denoising is enabled in
the denoise node. Consequently, multi-pass denoising setups where the
same auxiliary passes are used in multiple denoise nodes should be much
faster due to caching of the derived resources.

This implementation has the limitation that it can't preemptively
invalidate the cache when the derived resources are no longer needed to
free up memory. This requires a special resource tracking mechanism that
need to happen during node tree compilation, and will be submitted
later. The limitation is not significant in the particular derived
resources that is currently implemented. Since the auxiliary passes are
rarely used outside of denoising.

Fixes #131171.

Pull Request: https://projects.blender.org/blender/blender/pulls/125671
2025-01-27 14:58:09 +01:00
Jeroen Bakker
8c014d0a32 Fix #133646: Grease Pencil: Crash when disabling simplified anti-aliasing
Uninitialized textures are bound when simplified anti-aliasing is disabled.
The textures are initialized later. Fixing by referencing the textures
similar to the other passes.

Pull Request: https://projects.blender.org/blender/blender/pulls/133648
2025-01-27 14:37:11 +01:00
Miguel Pozo
956236f7d4 Fix: Draw: Add missing shaders to DRW_subdiv_free 2025-01-24 16:01:48 +01:00
Jeroen Bakker
9db5f61403 Fix: DrawManager: Missing include for draw manager tests
`draw_manager_testing.hh` was needed otherwise the compiler would print
a warning.

Pull Request: https://projects.blender.org/blender/blender/pulls/133538
2025-01-24 12:57:13 +01:00
Jacques Lucke
2fda20e1db Fix #132099: crash when using same geometry on objects with different material counts
The core issue was that the geometry batch cache (e.g. `MeshBatchCache` or
`PointCloudBatchCache`) was dependent on the object. This is problematic when
the the same geometry is used with multiple different objects because the cache
can't be consistent with all of them.

Fortunately, the only thing that was retrieved from the object was the number of
material slots, so if that can be avoided we should be fine. We can't just use
the number of material slots stored on the geometry because that may have no
material slots but still has material indices which are overridden on the object
level.

The solution is to take make the number of materials for a geometry only
dependent on the actual `material_index` attribute and not on the number of
available slots. More specifically, we find the maximal referenced material
index and handle that many materials. This number does not depend on how many
material slots there are on the object, but it still allows the object to
override materials slots that the mesh references.

A downside is that the maximum material index has to be computed which often
requires an iteration over the mesh. Fortunately, we can cache that quite easily
and the computation can be done in parallel. Also we are probably able to
eagerly update the material index in many cases when it's set instead of
computing it lazily. That is not implemented in this patch though.

The largest part of the patch is making the maximal material index easily
available on all the geometry types. Besides that, the material API is slightly
replaced and the drawing code now makes use of the updated API.

Pull Request: https://projects.blender.org/blender/blender/pulls/133498
2025-01-24 12:05:25 +01:00
Jonas Holzman
b701ba6554 macOS: Fix WITH_GPU_DRAW_TESTS build linking error
The issue was twofold, the `draw_tests` library was missing a link
dependency on `gpu_tests`, and the `gpu_tests` would only be generated
if `WITH_GPU_BACKEND_TESTS` or `WITH_VULKAN_BACKEND` were also ON due
to a superflous condition.

Pull Request: https://projects.blender.org/blender/blender/pulls/133511
2025-01-24 11:00:34 +01:00
Clément Foucault
f8c1154e7f Fix: DRW: Broken compilation because of missing header 2025-01-23 21:30:07 +01:00
Clément Foucault
160d9508fe Fix: Overlay: Broken GPU compilation tests
The clip variation was added to a common create info
which should not be compiled.
2025-01-23 21:30:07 +01:00
Clément Foucault
cfd5d9e3ad Fix #132895: Overlay: Dashed/flickering wireframe overlay on solid shading
This add back the NDC offset that was present in the legacy overlay.

But instead of adding a new view for it, we add `ndc_offset_factor`
to `State` to simplify wire offseting

Instead of modifying the projection matrix, we compute the unit
offset and pass it to the shader which choose the appropriate
factor to apply to the vertex position.

The value is put inside `State` so that it can be referenced
easily by multiple overlays.
Later on (once we move the global UBO inside Overlay) we can
move this to a UBO.

This only implements it for wireframe and edit mesh vert and
edges.

Note: that there seems to be some code duplication with the
edit mesh vertex code. That's to be tackled in another commit.

Pull Request: https://projects.blender.org/blender/blender/pulls/133433
2025-01-23 18:08:20 +01:00
Clément Foucault
1ac4651778 Cleanup: DRW: Remove legacy common_view_lib.glsl
No functional changes. Only moving and renaming stuff.

Pull Request: https://projects.blender.org/blender/blender/pulls/131558
2025-01-23 18:06:22 +01:00
Clément Foucault
4938ac7fa5 Fix: Overlay: Alt+B clipping not working in some edit modes
There was several issue making it broken:
- Missing UBO binding
- Missing shader variation
- Missing shader implementation for edit edges clipping
2025-01-23 17:48:46 +01:00
Clément Foucault
bf77aae7b5 Fix: Selection: Edit mesh selection does not honnor alt+B clipping
The clipping plane state was missing from the passes.
2025-01-23 17:48:46 +01:00
Clément Foucault
dcfd87f01c Fix: Overlay: Missing Alt-B clipping frustum overlay
Detected thanks to a GL error.
2025-01-23 17:48:46 +01:00
Miguel Pozo
97b4f99aed Fix #133483: Auto Depth broken when X-Ray enabled
Disable x-ray for depth only drawings.

Pull Request: https://projects.blender.org/blender/blender/pulls/133496
2025-01-23 17:11:54 +01:00
Brecht Van Lommel
d5d686d540 Fix: Build error with draw test after recent cleanup 2025-01-23 13:17:20 +01:00
Sean Kim
a4a0c81cd6 Overlay: Fade Inactive Geometry filter on object being interactable
Prior to this commit, the Fade Inactive Geometry overlay would inspect
the active object and compare each other object's mode and hide them if
they did not share the same mode.

This was incorrect in the following case:
* If multiple objects were all in similar modes, as can be the case
  with "Lock Object Modes" off, or with multi-edit mode, then objects
  would remain unfaded if they shared the same mode as the active
  object.

To fix this, we explicitly check for both the active and the "other"
object being in edit mode and avoid fading in this case.

Ref: #87704
Pull Request: https://projects.blender.org/blender/blender/pulls/132255
2025-01-23 12:10:45 +01:00
Hans Goudey
e07cd2b982 Cleanup: Remove unused and transitive includes in draw module
Especially through DRW_render.hh, there were a lot of unnecessary
includes almost everywhere in the module. This typically makes
dependencies less explicit and slows down compile times, so switch
to including what files actual use.

Pull Request: https://projects.blender.org/blender/blender/pulls/133450
2025-01-22 19:37:38 +01:00
Hans Goudey
d54a7bcb11 Cleanup: Use reinterpret_cast instead of two static casts 2025-01-22 12:50:01 -05:00
Miguel Pozo
20bd132703 Fix: Overlay-Next: Jagged wireframes when Overlay AA is disabled
Fixes the issue described in
https://projects.blender.org/blender/blender/issues/132895#issuecomment-1390739.

Pull Request: https://projects.blender.org/blender/blender/pulls/133446
2025-01-22 17:18:37 +01:00
Brecht Van Lommel
890455affe Refactor: Rename function to clarify it's for sRGB only
Pull Request: https://projects.blender.org/blender/blender/pulls/133368
2025-01-21 18:05:56 +01:00
Miguel Pozo
79201d0aee Cleanup: Overlay-Next: Move edit_mesh_faces_ps_ back with the other edit mesh passes
Partially reverts 5f24c61225.
This part was not required.
2025-01-21 17:44:49 +01:00
Miguel Pozo
71c889d283 Fix: Selection-Next: Material asset drag&drop slot selection
The user code expects a single hit result when SELECT_PICK_NEAREST
is used.

Note there's still an issue causing the picking to be slightly offset.

Pull Request: https://projects.blender.org/blender/blender/pulls/133382
2025-01-21 17:34:12 +01:00
Lukas Tönne
cde64dbdd5 Fix #129145: Grease Pencil: Stroke depth detection and interpolation for drawing and primitives
GPv2 used the depth buffer at the end of a stroke drawing operation to project points and interpolated between detected values. This does not work in GPv3 because the strokes are added directly to drawings. Depth projection has to happen continuously, updating points between the last depth value and the next when a new hit is recorded.

Resolves #125258.

Pull Request: https://projects.blender.org/blender/blender/pulls/131842
2025-01-21 13:04:48 +01:00
Clément Foucault
3d980b459d Fix #133084: Overlay: Negative Z-Axis overlay not displayed
Simpler fix than 4be177a12d
2025-01-21 10:00:51 +01:00
Clément Foucault
4a0ba6b457 Revert "Fix #133084: Overlay-Next: Viewport Z-Axis"
This reverts commit 4be177a12d.

A much simpler fix is possible.
2025-01-21 10:00:51 +01:00
YimingWu
932fa1b8bf Fix #132113: Grease Pencil: Sort cache before draw_scene early return
`GPENCIL_draw_scene` uses `pd->tobjects.first == nullptr` to determine
whether to early return (draw nothing). When there's only "In Front"
grease pencil objects in scene, `tobjects.first` can be `nullptr` but
`tobjects_infront.first` is valid, in which case no grease pencil would
be drawn. Becase `gpencil_object_cache_sort` will link those two command
lists both to `tobjects` and allow `infront` ones to draw after others,
thus move it before the early return to allow drawing to proceed
normally.

Pull Request: https://projects.blender.org/blender/blender/pulls/132155
2025-01-21 06:54:21 +01:00
Clément Foucault
5614d2543b Cleanup: Overlay: Simplify object_is_paint_mode condition
Follow up to #132159
2025-01-21 05:50:03 +01:00
Campbell Barton
90b03d2344 Cleanup: spelling in comments 2025-01-20 11:19:23 +11:00
Miguel Pozo
0a72db9f94 Fix #133198: Overlay-Next: Texture Paint workspace crash
Regression from 1406b9e656
Ensure it matches the Overlay Legacy behavior.
2025-01-17 22:59:39 +01:00
Miguel Pozo
20332e89a9 Selection: Improve Display as Bounds/Wires selection behavior
Make the selection behavior more visually consistent in Render mode.

Pull Request: https://projects.blender.org/blender/blender/pulls/133007
2025-01-17 16:30:32 +01:00
Pratik Borhade
25286dd2cd Fix #132112: Grease Pencil: Draw overlays for active object
`object_is_paint_mode()` returns true for objects that are not in active
interaction mode. This results in drawing of overlays for each Grease
Pencil object. Now fixed with adjusted condition.

Pull Request: https://projects.blender.org/blender/blender/pulls/132159
2025-01-17 10:16:39 +01:00
Miguel Pozo
1406b9e656 Fix #133073: Overlay-Next: Meshes without UVs crashes the UV Editor
Add missing check for has_active_edit_uvmap.
2025-01-16 17:14:22 +01:00
Miguel Pozo
a08de337db Fix #131981, #132995: Overlay-Next: Fix In-Front selection and cycling
The code relied on `disable_depth_test` to render without depth testing
on selection, but it was set at pre-draw, so it was always false when
calling `res.select_bind` inside the sync code.

There was also no code to tell in-front and regular objects apart, so
in-front objects were not prioritized.
The previous engine seemingly divided the depth of In Front objects by
100, so I'm reproducing the same behavior here.

Fix #131981
Fix #132995

Pull Request: https://projects.blender.org/blender/blender/pulls/133020
2025-01-16 16:45:25 +01:00
Miguel Pozo
80bd81a4f6 Fix #132890: Grease Pencil: Selection crash in wireframe mode
`dtxl->depth` may not be valid until draw time, so acquire the viewport
textures/framebuffers inside the draw callback instead.

Pull Request: https://projects.blender.org/blender/blender/pulls/132922
2025-01-16 15:14:54 +01:00
Miguel Pozo
51770cd698 Fix #133106: Overlay-Next: Solid selection doesn't work in XRay mode
Regression from 2abc3ad801
2025-01-15 18:10:26 +01:00
Miguel Pozo
dd20922167 Cleanup: Overlay-Next: Remove unrequired casting 2025-01-15 17:39:59 +01:00
Miguel Pozo
4be177a12d Fix #133084: Overlay-Next: Viewport Z-Axis
ba074d1670 created subpasses based on flags that were not yet set up.
2025-01-15 17:38:43 +01:00
Jeroen Bakker
6cb8cdaa45 Fix: Draw: Tests
Visibility test is not setup correctly and only tests positives. This
test should be adapted with better testing. For now we skip the test.

Resource id test was wrong as it didn't add the null resource for
drawcalls with no handle. Ref `DrawCommandBuf::generate_commands`.

Pull Request: https://projects.blender.org/blender/blender/pulls/133040
2025-01-14 12:11:32 +01:00