Commit Graph

9983 Commits

Author SHA1 Message Date
Clément Foucault
aebf5fa5e4 Fix #145993: Edit Mesh: Can't select behind wire objects with retopology
This was a logic mistake in #134940.

Candidate for backporting to 4.5 LTS.

Pull Request: https://projects.blender.org/blender/blender/pulls/146766
2025-09-25 19:07:25 +02:00
Nika Kutsniashvili
28b97afda2 UI: Theme: Generalize geometry attribute properties
This PR generalizes properties for geometry (currently mesh only) attributes
found in 3D Viewport theme, namely:

- Combine "Edge Bevel" and "Vertex Bevel" into one "Bevel" property.
- Combine "Freestyle Edge Mark" and "Freestyle Face Mark" into one "Freestyle" property.
- Remove word "Edge" from Crease, Sharp, and Seam properties, to match others.
- Group all of the above together in the UI.

This is a breaking change (that will be handled with others in migration),
but doesn't introduce any visual changes in the default theme (and almost any theme).

Pull Request: https://projects.blender.org/blender/blender/pulls/146732
2025-09-25 14:02:46 +02:00
Brecht Van Lommel
d290ff16c8 Color Management: Simplify image format initialization
No need to have a not for render case, these settings are only used when
Save as Render or Override are on and in that case it make sense to match
the default render view transform.

Ref #144911

Pull Request: https://projects.blender.org/blender/blender/pulls/146487
2025-09-25 13:50:20 +02:00
Clément Foucault
fe213f80a4 GPU: Shader: Make info files generated
This is the first step of moving the create infos
back inside shader sources.

All info files are now treated as source files.
However, they are not considered in the include tree
yet. This will come in another following PR.

Each shader source file now generate a `.info` file
containing only the create info declarations.

This renames all info files so that they do not
conflict with their previous versions that were
copied (non-generated).

Pull Request: https://projects.blender.org/blender/blender/pulls/146676
2025-09-25 10:57:02 +02:00
Nika Kutsniashvili
e0392599f8 UI: Theme: Remove face dot color property
Mesh faces have a separate theme color for selected dots (1px dot in the center of the face),
in both the 3D Viewport and the Image Editor.

I don't think there is any justification for why that 1 pixel has to be a different color from rest
of the active face. Even if result isn't satisfying, we should be tweaking Face Selected color
for this purpose. 1 pixel doesn't deserve its own theme setting.

This PR removes property from both editors, and instead uses "Face Selected" color with alpha
hardcoded to 1 (removed properties didn't have alpha). Also note that dot is still visible in 3D viewport
because Face Selected color is different from Face Mode Selected color, which is used for faces
when dots are drawn.

There are no visual changes in default themes.

Pull Request: https://projects.blender.org/blender/blender/pulls/145364
2025-09-24 19:04:28 +02:00
Clément Foucault
34e5f0a4a6 Fix #146281: Overlay: Uninitialized data in Paint Mask
The early out case did not initialize the data.

This caused garbage data to be used for the visibility
flag, producing inconsistent result.

Pull Request: https://projects.blender.org/blender/blender/pulls/146704
2025-09-24 17:26:50 +02:00
Brecht Van Lommel
09d9239efd Fix #146619: Random Color workbench mode too saturated with ACEScg working space
Pull Request: https://projects.blender.org/blender/blender/pulls/146664
2025-09-23 18:56:31 +02:00
Clément Foucault
acb2f02910 EEVEE: Reduce necessary includes
This saves a few milisecond of compile time per shader.

This removes the need for occlusion lib when not using occlusion
node.

To improve detection of uneeded includes, we add a new logging
system which output can be fed to mermaid to inspect dependencies.

The new dependencies can be inspected using `--log "gpu.shader_dependencies"`

Example pasted here:
```mermaid
flowchart LR
draw_curves_lib.glsl_7298 --> gpu_shader_math_constants_lib.glsl_600
style gpu_shader_math_constants_lib.glsl_600 fill:#0f0
gpu_shader_math_matrix_conversion_lib.glsl_1032 --> gpu_shader_math_base_lib.glsl_1406
style gpu_shader_math_base_lib.glsl_1406 fill:#1e0
gpu_shader_math_matrix_conversion_lib.glsl_1032 --> gpu_shader_math_euler_lib.glsl_461
style gpu_shader_math_euler_lib.glsl_461 fill:#0f0
gpu_shader_math_matrix_compare_lib.glsl_2964 --> gpu_shader_math_vector_compare_lib.glsl_2489
style gpu_shader_math_vector_compare_lib.glsl_2489 fill:#2d0
gpu_shader_math_matrix_conversion_lib.glsl_1032 --> gpu_shader_math_matrix_compare_lib.glsl_2964
style gpu_shader_math_matrix_compare_lib.glsl_2964 fill:#2d0
gpu_shader_math_matrix_conversion_lib.glsl_1032 --> gpu_shader_math_quaternion_lib.glsl_395
style gpu_shader_math_quaternion_lib.glsl_395 fill:#0f0
gpu_shader_math_matrix_conversion_lib.glsl_1032 --> gpu_shader_utildefines_lib.glsl_3112
style gpu_shader_utildefines_lib.glsl_3112 fill:#3c0
draw_curves_lib.glsl_7298 --> gpu_shader_math_matrix_conversion_lib.glsl_1032
style gpu_shader_math_matrix_conversion_lib.glsl_1032 fill:#1e0
draw_curves_lib.glsl_7298 --> gpu_shader_math_matrix_transform_lib.glsl_706
style gpu_shader_math_matrix_transform_lib.glsl_706 fill:#0f0
eevee_surf_deferred_frag.glsl_4531 --> draw_curves_lib.glsl_7298
style draw_curves_lib.glsl_7298 fill:#780
eevee_surf_deferred_frag.glsl_4531 --> draw_view_lib.glsl_3551
style draw_view_lib.glsl_3551 fill:#3c0
eevee_gbuffer_lib.glsl_14598 --> gpu_shader_math_vector_reduce_lib.glsl_1383
style gpu_shader_math_vector_reduce_lib.glsl_1383 fill:#1e0
eevee_gbuffer_lib.glsl_14598 --> gpu_shader_codegen_lib.glsl_6143
style gpu_shader_codegen_lib.glsl_6143 fill:#690
eevee_gbuffer_lib.glsl_14598 --> gpu_shader_math_vector_lib.glsl_5038
style gpu_shader_math_vector_lib.glsl_5038 fill:#5a0
eevee_gbuffer_lib.glsl_14598 --> gpu_shader_utildefines_lib.glsl_3112
style gpu_shader_utildefines_lib.glsl_3112 fill:#3c0
eevee_gbuffer_write_lib.glsl_7324 --> eevee_gbuffer_lib.glsl_14598
style eevee_gbuffer_lib.glsl_14598 fill:#e10
eevee_surf_deferred_frag.glsl_4531 --> eevee_gbuffer_write_lib.glsl_7324
style eevee_gbuffer_write_lib.glsl_7324 fill:#780
eevee_ambient_occlusion_lib.glsl_10738 --> draw_view_lib.glsl_3551
style draw_view_lib.glsl_3551 fill:#3c0
draw_math_geom_lib.glsl_5172 --> gpu_shader_math_vector_lib.glsl_5038
style gpu_shader_math_vector_lib.glsl_5038 fill:#5a0
draw_math_geom_lib.glsl_5172 --> gpu_shader_math_vector_reduce_lib.glsl_1383
style gpu_shader_math_vector_reduce_lib.glsl_1383 fill:#1e0
eevee_ray_types_lib.glsl_2390 --> draw_math_geom_lib.glsl_5172
style draw_math_geom_lib.glsl_5172 fill:#5a0
eevee_ray_types_lib.glsl_2390 --> draw_view_lib.glsl_3551
style draw_view_lib.glsl_3551 fill:#3c0
eevee_ray_types_lib.glsl_2390 --> gpu_shader_math_matrix_transform_lib.glsl_706
style gpu_shader_math_matrix_transform_lib.glsl_706 fill:#0f0
gpu_shader_math_safe_lib.glsl_1235 --> gpu_shader_math_constants_lib.glsl_600
style gpu_shader_math_constants_lib.glsl_600 fill:#0f0
eevee_ray_types_lib.glsl_2390 --> gpu_shader_math_safe_lib.glsl_1235
style gpu_shader_math_safe_lib.glsl_1235 fill:#1e0
eevee_ray_types_lib.glsl_2390 --> gpu_shader_ray_lib.glsl_137
style gpu_shader_ray_lib.glsl_137 fill:#0f0
eevee_ambient_occlusion_lib.glsl_10738 --> eevee_ray_types_lib.glsl_2390
style eevee_ray_types_lib.glsl_2390 fill:#2d0
eevee_sampling_lib.glsl_4291 --> gpu_shader_math_base_lib.glsl_1406
style gpu_shader_math_base_lib.glsl_1406 fill:#1e0
eevee_sampling_lib.glsl_4291 --> gpu_shader_math_constants_lib.glsl_600
style gpu_shader_math_constants_lib.glsl_600 fill:#0f0
eevee_sampling_lib.glsl_4291 --> gpu_shader_math_safe_lib.glsl_1235
style gpu_shader_math_safe_lib.glsl_1235 fill:#1e0
eevee_ambient_occlusion_lib.glsl_10738 --> eevee_sampling_lib.glsl_4291
style eevee_sampling_lib.glsl_4291 fill:#4b0
eevee_ambient_occlusion_lib.glsl_10738 --> eevee_utility_tx_lib.glsl_1225
style eevee_utility_tx_lib.glsl_1225 fill:#1e0
eevee_ambient_occlusion_lib.glsl_10738 --> gpu_shader_math_base_lib.glsl_1406
style gpu_shader_math_base_lib.glsl_1406 fill:#1e0
gpu_shader_math_fast_lib.glsl_921 --> gpu_shader_math_constants_lib.glsl_600
style gpu_shader_math_constants_lib.glsl_600 fill:#0f0
eevee_ambient_occlusion_lib.glsl_10738 --> gpu_shader_math_fast_lib.glsl_921
style gpu_shader_math_fast_lib.glsl_921 fill:#0f0
gpu_shader_math_vector_safe_lib.glsl_5847 --> gpu_shader_math_safe_lib.glsl_1235
style gpu_shader_math_safe_lib.glsl_1235 fill:#1e0
eevee_ambient_occlusion_lib.glsl_10738 --> gpu_shader_math_vector_safe_lib.glsl_5847
style gpu_shader_math_vector_safe_lib.glsl_5847 fill:#5a0
eevee_ambient_occlusion_lib.glsl_10738 --> gpu_shader_utildefines_lib.glsl_3112
style gpu_shader_utildefines_lib.glsl_3112 fill:#3c0
eevee_nodetree_frag_lib.glsl_395 --> eevee_ambient_occlusion_lib.glsl_10738
style eevee_ambient_occlusion_lib.glsl_10738 fill:#a50
eevee_nodetree_frag_lib.glsl_395 --> eevee_geom_types_lib.glsl_682
style eevee_geom_types_lib.glsl_682 fill:#0f0
draw_model_lib.glsl_2563 --> draw_view_lib.glsl_3551
style draw_view_lib.glsl_3551 fill:#3c0
eevee_nodetree_lib.glsl_16051 --> draw_model_lib.glsl_2563
style draw_model_lib.glsl_2563 fill:#2d0
draw_object_infos_lib.glsl_1114 --> draw_model_lib.glsl_2563
style draw_model_lib.glsl_2563 fill:#2d0
eevee_nodetree_lib.glsl_16051 --> draw_object_infos_lib.glsl_1114
style draw_object_infos_lib.glsl_1114 fill:#1e0
eevee_nodetree_lib.glsl_16051 --> draw_view_lib.glsl_3551
style draw_view_lib.glsl_3551 fill:#3c0
eevee_nodetree_lib.glsl_16051 --> eevee_renderpass_lib.glsl_1793
style eevee_renderpass_lib.glsl_1793 fill:#1e0
eevee_nodetree_lib.glsl_16051 --> eevee_utility_tx_lib.glsl_1225
style eevee_utility_tx_lib.glsl_1225 fill:#1e0
eevee_nodetree_lib.glsl_16051 --> gpu_shader_codegen_lib.glsl_6143
style gpu_shader_codegen_lib.glsl_6143 fill:#690
eevee_nodetree_lib.glsl_16051 --> gpu_shader_math_base_lib.glsl_1406
style gpu_shader_math_base_lib.glsl_1406 fill:#1e0
eevee_nodetree_lib.glsl_16051 --> gpu_shader_math_safe_lib.glsl_1235
style gpu_shader_math_safe_lib.glsl_1235 fill:#1e0
eevee_nodetree_lib.glsl_16051 --> gpu_shader_math_vector_reduce_lib.glsl_1383
style gpu_shader_math_vector_reduce_lib.glsl_1383 fill:#1e0
eevee_nodetree_lib.glsl_16051 --> gpu_shader_utildefines_lib.glsl_3112
style gpu_shader_utildefines_lib.glsl_3112 fill:#3c0
eevee_nodetree_frag_lib.glsl_395 --> eevee_nodetree_lib.glsl_16051
style eevee_nodetree_lib.glsl_16051 fill:#f00
gpu_shader_material_ambient_occlusion.glsl_558 --> gpu_shader_math_vector_safe_lib.glsl_5847
style gpu_shader_math_vector_safe_lib.glsl_5847 fill:#5a0
eevee_nodetree_frag_lib.glsl_395 --> gpu_shader_material_ambient_occlusion.glsl_558
style gpu_shader_material_ambient_occlusion.glsl_558 fill:#0f0
eevee_nodetree_frag_lib.glsl_395 --> gpu_shader_material_emission.glsl_380
style gpu_shader_material_emission.glsl_380 fill:#0f0
gpu_shader_material_output_material.glsl_850 --> gpu_shader_material_transform_utils.glsl_2136
style gpu_shader_material_transform_utils.glsl_2136 fill:#2d0
eevee_nodetree_frag_lib.glsl_395 --> gpu_shader_material_output_material.glsl_850
style gpu_shader_material_output_material.glsl_850 fill:#0f0
eevee_nodetree_frag_lib.glsl_395 --> gpu_shader_material_world_normals.glsl_128
style gpu_shader_material_world_normals.glsl_128 fill:#0f0
eevee_surf_deferred_frag.glsl_4531 --> eevee_nodetree_frag_lib.glsl_395
style eevee_nodetree_frag_lib.glsl_395 fill:#0f0
eevee_surf_deferred_frag.glsl_4531 --> eevee_sampling_lib.glsl_4291
style eevee_sampling_lib.glsl_4291 fill:#4b0
eevee_surf_lib.glsl_3650 --> draw_view_lib.glsl_3551
style draw_view_lib.glsl_3551 fill:#3c0
eevee_surf_lib.glsl_3650 --> gpu_shader_codegen_lib.glsl_6143
style gpu_shader_codegen_lib.glsl_6143 fill:#690
eevee_surf_lib.glsl_3650 --> gpu_shader_math_base_lib.glsl_1406
style gpu_shader_math_base_lib.glsl_1406 fill:#1e0
eevee_surf_lib.glsl_3650 --> gpu_shader_math_vector_safe_lib.glsl_5847
style gpu_shader_math_vector_safe_lib.glsl_5847 fill:#5a0
eevee_surf_deferred_frag.glsl_4531 --> eevee_surf_lib.glsl_3650
style eevee_surf_lib.glsl_3650 fill:#3c0
```

Pull Request: https://projects.blender.org/blender/blender/pulls/146580
2025-09-23 17:21:56 +02:00
Clément Foucault
3ccdd28458 Cleanup: EEVEE: Avoid duplicate computation in bsdf_lut function
This is likely not an issue but it is preferable to not do it.

Also reorder some lines for readability and and add `const`.

Pull Request: https://projects.blender.org/blender/blender/pulls/146575
2025-09-22 14:26:20 +02:00
Clément Foucault
f7e19909f6 EEVEE: Move position renderpass to deferred combined pass
This is supposed to save a few milliseconds of compilation
time per material shader.

This might reduce output precision. If that is an issue
this commit can be reverted.

Rel #145347.

Pull Request: https://projects.blender.org/blender/blender/pulls/146464
2025-09-22 14:18:23 +02:00
Clément Foucault
fdd8d85f89 EEVEE: Detect simple GBuffer packing cases
This simplifies the GBuffer packing code in a lot
of common use cases. This improves compilation
speed.

The trivial case is either a single closure (already handled)
or 2 closures with no second data layer.

We detect if reflection and refractions can
be assumed colorless depending on the nodetree config.
Colorless reflection or refraction are only using one
data layer.

Pull Request: https://projects.blender.org/blender/blender/pulls/146455
2025-09-22 12:06:42 +02:00
Clément Foucault
fb3904ce45 GPU: Shader Codegen: Split different graph includes
This allows to reduce the number of includes for each
tree graph (surface, volume, displacement) and
reduce the code size significantly for most vertex
shaders, speeding up compile time.

Rel #145347

Pull Request: https://projects.blender.org/blender/blender/pulls/146419
2025-09-22 10:24:10 +02:00
Clément Foucault
9d0fe5573b GPU: FrameBuffer: Remove GPUFrameBuffer wrapper opaque type
This is the first step into merging DRW_gpu_wrapper.hh into
the GPU module.

This is very similar to #119825.

Pull Request: https://projects.blender.org/blender/blender/pulls/146372
2025-09-16 17:50:48 +02:00
Clément Foucault
ecc495ac39 EEVEE: Optimize Principled BSDF compilation time
This removes unused closure branches in the principled BSDF
code using the Material flags.

On top of this, use constants for weights to use compiler
dead code eliminitation for unused branches when there
is different variants of the principled BSDF node used.

Finally, remove Gbuffer packing cases that are not present
inside the nodetree.

Testing with the same setup as #145347:
|          | main (ms) |  PR (ms) |   Delta (ms) |
| -------- | ----------- | ------------ |------------ |
| Nvidia   |         174 |  132 (1.31x) |          42 |
| Mesa AMD |         191 |  170 (1.12x) |         21 |

Barbershop compilation time is almost equal because it is not using
the principled BSDF.

Rel #145347

Pull Request: https://projects.blender.org/blender/blender/pulls/146324
2025-09-16 16:44:01 +02:00
Philipp Oeser
60978e0b90 Fix #146349: 3D cursor still draws even though location is offscreen
Can happen if you set cursor location by snapping or manually.

In order to really skip drawing in `draw_output`, we have to set
`enabled_` to false in `begin_sync`.
This is already done for the "simple" cases covered by
`is_cursor_visible_XXX` but not for the "special" case where the cursor
is clipped in the view.

This is what this PR does.

Pull Request: https://projects.blender.org/blender/blender/pulls/146354
2025-09-16 16:09:21 +02:00
Clément Foucault
c3688e9d05 Fix #146132: EEVEE: Use uniform to additional data layer
Workaround driver bug.

Pull Request: https://projects.blender.org/blender/blender/pulls/146329
2025-09-16 08:57:35 +02:00
Casey Bianco-Davis
ce2005318a Fix: Grease Pencil: Points with zero aspect ratio not displayed
A aspect ratio less than or equal to zero will cause point to not be
displayed.
This behavior problematic because use strokes create by Geometry Nodes
(or bugs) can cause the `aspect_ratio` to default to zero.
And as there is currently no operator to set `aspect_ratio` this
invisible geometry can not be fixed by most users.

This PR fixes this by returning `1.0f` when the `aspect_ratio` is
invalided.

Pull Request: https://projects.blender.org/blender/blender/pulls/146279
2025-09-15 18:51:33 +02:00
Clément Foucault
50283b9573 GPU: Split GLSL, C++ and metal shader defines
This makes all the defines and boiler plate code use
the generated source include system.

This makes source hierarchy more understandable.

Pull Request: https://projects.blender.org/blender/blender/pulls/146289
2025-09-15 17:22:19 +02:00
Clément Foucault
680fec144c Cleanup: GPU: Remove prefix 'e' from enum types
_No response_

Pull Request: https://projects.blender.org/blender/blender/pulls/146034
2025-09-15 15:11:02 +02:00
Clément Foucault
b7d3b22db4 EEVEE: Move AOV clearing to its own separate pass
This splits the clearing code in a separate shader,
avoiding overhead for all material.

Testing with the same setup as #145347:
|          | main (ms) |  PR (ms) |   Delta (ms) |
| -------- | ----------- | ------------ |------------ |
| Nvidia   |         194 |  174 (1.11x) |          20 |
| Mesa AMD |         200 |  191 (1.04x) |           9 |

Pull Request: https://projects.blender.org/blender/blender/pulls/146286
2025-09-15 14:24:29 +02:00
Clément Foucault
bb8e987904 GPU: Simplify matrix lib to reduce dead code
This greatly reduce shader compilation time on some systems.

Pull Request: https://projects.blender.org/blender/blender/pulls/146100
2025-09-15 12:07:26 +02:00
Omar Emara
78e58bd595 Fix #146133: Render Layers doesn't work in viewport
The Render Layers node doesn't work if a viewlayer other than the first
is selected. This was hard coded in code, so we just allow any view
layer, on the condition that it is the active one.

Pull Request: https://projects.blender.org/blender/blender/pulls/146285
2025-09-15 10:27:14 +02:00
Habib Gahbiche
1b4daf9d2e Nodes: remove "Use Nodes" in Shader Editor for Object Materials
"Use Nodes" was removed in the compositor to simplify the compositing
workflow. This introduced a slight inconsistency with the Shader Node
Editor.

This PR removes "Use Nodes" for object materials.

For Line Style, no changes are planned (not sure how to preserve
compatibility yet).
This simplifies the state of objects; either they have a material or
they don't.

Backward compatibility:
- If Use Nodes is turned Off, new nodes are added to the node tree to
simulate the same material:
- DNA: Only `use_nodes` is marked deprecated
- Python API:
  - `material.use_nodes` is marked deprecated and will be removed in
6.0. Reading it always returns `True` and setting it has no effect.
  - `material.diffuse_color`, `material.specular` etc.. Are not used by
EEVEE anymore but are kept because they are used by Workbench.

Forward compatibility:
Always enable 'Use Nodes' when writing blend files.

Known Issues:
Some UI tests are failing on macOS

Pull Request: https://projects.blender.org/blender/blender/pulls/141278
2025-09-14 17:53:54 +02:00
Campbell Barton
d1b76b6554 Cleanup: only use "r_" prefix for return arguments
Ref !146253
2025-09-14 11:08:50 +00:00
Clément Foucault
f729e639f4 GPU: Simplify Codegen dependency injection
Dependencies were previously merged manually
inside the generated_sources by EEVEE.
This caused issues with double includes.

Instead, we now only gather the name of the
nodetree dependencies and add them to the
dependencies of the `GeneratedSource`.

This also make the compositor use the `GeneratedSource`
mechanism.

Pull Request: https://projects.blender.org/blender/blender/pulls/146106
2025-09-12 16:07:55 +02:00
Clément Foucault
e19e9e57ee EEVEE: Split eevee_shader_shared.hh into multiple files
The goal of this patch is to reduce final shader code footprint to
hopefully reduce shader compile time (see #145347).

This also contains a pass over most shader file to remove unused
include or use more granular ones to reduce final shader code
length.

Testing with the same setup as #145347:
|          | main (ms) |  PR (ms) |   Delta (ms) |
| -------- | ----------- | ------------ |------------ |
| Nvidia   |         257 |  207 (1.24x) |         50 |
| Mesa AMD |         323 |  295 (1.09x)    |        28 |

In barbershop test scene however the saving are not so noticeable:
|          | main (s) |  PR (s) |   Delta (s) |
| -------- | ----------- | ------------ |------------ |
| Nvidia (OpenGL)  |         40 |  39 (1.02x) |         1 |
| Nvidia (Vulkan)   |         29 |  29 (1.0x) |         0 |

Pull Request: https://projects.blender.org/blender/blender/pulls/145803
2025-09-12 14:09:35 +02:00
Campbell Barton
1e2ed785f7 Cleanup: use assume attribute to quiet array bounds warning for GCC 15
Ref !146150
2025-09-12 22:03:35 +10:00
Sean Kim
a426e70bf6 Fix: Use new USER_DEVELOPER_TOOL_TEST macro where appropriate
Missed in fb91e576ca

Changes all of the non-sanitized, always available options to use the
new macro to match previous behavior.

Pull Request: https://projects.blender.org/blender/blender/pulls/146118
2025-09-12 01:42:52 +02:00
Sergey Sharybin
963569caf4 Fix #146086: Regression: OpenSubdiv: GPU Shaders gets recompiled for each evaluation
Regression in 1e4764a9a5 which accidentally removed use of
the g_subdiv_evaluator_cache.

Pull Request: https://projects.blender.org/blender/blender/pulls/146097
2025-09-11 17:17:30 +02:00
Clément Foucault
5561b97aa0 Cleanup: Metal: Avoid MSL warning in curves interpolation shader 2025-09-10 20:26:53 +02:00
Clément Foucault
6148d50105 GPU: Shader: Remove section of code guarded by #if directives
These lines can be removed to avoid parsing them.
This allow to keep the same processing for shared host files.

Also removes a few lines of code to reduce the size of
shader sources.

This also contains a rewrite of the include parsing using
the shader parser.

Pull Request: https://projects.blender.org/blender/blender/pulls/146025
2025-09-10 16:35:41 +02:00
Clément Foucault
36b80971de Cleanup: EEVEE: Typo in interlieved_gradient_noise 2025-09-10 12:47:49 +02:00
Clément Foucault
455d749c52 Fix: GPU: Implicit cast from int to bool in assert()
These are not valid in GLSL.
2025-09-10 12:20:59 +02:00
Clément Foucault
f0806ac6b4 Fix #145743: EEVEE: Instance leak when Stereoscopy is enabled
The `eevee_render_to_image` can be called multiple time in the
case of multiview rendering.

To avoid the leak, free the previous instance before allocating
the new one. Reusing the instance doesn't seems to work here.

Another fix will follow this one to fix it more gracefuly.
This fix is kept simple for backporting purpose.

Pull Request: https://projects.blender.org/blender/blender/pulls/146015
2025-09-10 12:18:49 +02:00
Clément Foucault
c302b7de7b Refactor: EEVEE: Simplify Gbuffer packing
Implementation of #145417

For more information see pull request.

Pull Request: https://projects.blender.org/blender/blender/pulls/145520
2025-09-10 12:17:21 +02:00
luz paz
0c3005ca0c Cleanup: Fix typos in source/blender/draw
Fixes user-facing and non-user-facing typos.
Found via codespell

Pull Request: https://projects.blender.org/blender/blender/pulls/145972
2025-09-10 11:19:36 +02:00
Clément Foucault
91614ee5d6 Fix #145203: Switching armatures in pose mode fails when behind mesh
The code introduced in a08de337db
did not account for the special case of `SELECT_PICK_NEAREST`
where the depth data is actually bitshifted.

Pull Request: https://projects.blender.org/blender/blender/pulls/145924
2025-09-10 10:52:21 +02:00
Jacques Lucke
32c301e3cf Shader Nodes: support repeat zones, closures and bundles
This adds a function that can turn an existing `bNodeTree` into an inlined one.
The new node tree has all node groups, repeat zones, closures and bundles
inlined. So it's just a flat tree that ideally can be consumed easily by render
engines. As part of the process, it also does constant folding.

The goal is to support more advanced features from geometry nodes (repeat zones,
etc.) in shader nodes which the evaluator is more limited because it has to be
able to run on the GPU. Creating an inlined `bNodeTree` is likely the most
direct way to get but may also be limiting in the future. Since this is a fairly
local change, it's likely still worth it to support these features in all render
engines without having to make their evaluators significantly more complex.

Some limitations apply here that do not apply in Geometry Nodes. For example,
the iterations count in a repeat zone has to be a constant after constant
folding.

There is also a `Test Inlining Shader Nodes` operator that creates the inlined
tree and creates a group node for it. This is just for testing purposes.

#145811 will make this functionality available to the Python API as well so that
external renderers can use it too.
2025-09-09 16:15:43 +02:00
Clément Foucault
51b5ae24f5 Fix #145028: Regression: 3D cursor misaligned with axes
The port in 38ce310c17
missed that axes in 3D view are drawn using the perspective
projection matrix and not the 2D one.

Pull Request: https://projects.blender.org/blender/blender/pulls/145927
2025-09-09 14:45:37 +02:00
Clément Foucault
7761b8cfb2 Fix: Overlay: Outline of subpixel Curves produce high aliasing
Issue introduced by #143180. The code was there beforehand but
was not clear. It was left commented out.
Modify it so that it matches the new code.
2025-09-09 14:15:55 +02:00
Clément Foucault
ff468e44ee Fix #144213: Overlay: Transparency ordering issue in texture paint
Caused by missing depth of in front objects in in-front buffer.
Forcing a depth prepass fixes the issue.
2025-09-08 12:55:16 +02:00
Clément Foucault
f8303efd57 Revert "Draw: Use ResourceHandleRange"
This reverts commit 8adb3e758f.
This is a partial revert that just always use the fallback
path.

The new optimized path is causing issues with overlays #145446 and
volumes #145420.

The new path will be enabled back when we fix those issues.
2025-09-08 12:00:14 +02:00
Clément Foucault
af1af75006 Fix #145783: Edit Mesh: Crash when selecting edge in some setup
This was caused by DRW_select_buffer_elem_get not being
failsafe. Handling the failure case properly fixes the issue.
2025-09-08 12:00:13 +02:00
Campbell Barton
34feb2cefd Fix #145770: UV sync select hides unselected faces
Regression [0] from fix for  #144035 caused the meaning of sync-select
to be flipped in drawing code, causing UV sync select to display
incorrectly in edit-mode.

Resolve by reversing the value returned by `skip_bm_face` as well as
checks in the drawing code.

Co-authored-by: Eitan Traurig <eitant13@gmail.com>

[0]: e02eb13a59
2025-09-07 00:23:29 +00:00
W_Cloud
43fdf067ab Geometry Nodes: improve Viewer Attribute Text Readability
- Corner Domain Text Overlap: Text is now offset along the angle bisector of
  each corner. The offset distance is dynamically adjusted based on the view
  zoom and corner angle sharpness.
- Wrap Long Line: Split Vectors, Colors, and Quaternions into labeled line for
  each component.

Pull Request: https://projects.blender.org/blender/blender/pulls/145290
2025-09-05 13:46:03 +02:00
Jeroen Bakker
4f4104d047 EEVEE: Fix pointcloud rendering for Vulkan
When using Vulkan the point clouds were not drawn correctly
in EEVEE. The reason is that only the back faces were drawn.

Pull Request: https://projects.blender.org/blender/blender/pulls/145787
2025-09-05 13:29:15 +02:00
Brecht Van Lommel
9856615813 Color Management: Change byte color attributes to always be sRGB
These don't really work as scene linear with sRGB transfer function for e.g.
ACEScg, there are not enough bits. If you want wide gamut you need to use
float colors.

Pull Request: https://projects.blender.org/blender/blender/pulls/145763
2025-09-05 11:11:33 +02:00
Brecht Van Lommel
ffa4f8c7ad Refactor: Split off lighter BLI_color_types.hh from BLI_color.hh
Functions for convert between the color types and ostream support are
now outside the classes.

Many files were changed to fix cases where direct includes for headers
were missing.

Pull Request: https://projects.blender.org/blender/blender/pulls/145756
2025-09-05 11:11:32 +02:00
Mattias Fredriksson
1789a7c3d1 Fix #145600: UV Editor crash with Text objects
Introduced with e02eb13a59

Pull Request: https://projects.blender.org/blender/blender/pulls/145601
2025-09-04 02:50:27 +02:00
Bart van der Braak
a80b4ce22b Fix #145566: Crash in GPU_shader_builtin_warm_up when unbound GL context
glCreateProgram was called without a valid OpenGL context after
DRW_gpu_context_create unbound it. Rebind context before GPU_init
to prevent crash.

Fixes #145566

Pull Request: https://projects.blender.org/blender/blender/pulls/145606

Co-Authored-By: Miguel Pozo <pragma37@gmail.com>
2025-09-03 12:39:29 +02:00