Put DefaultFramebufferList and DefaultTextureList into an own header
file. These structs were private, but also used by the window manager
and gpu package. The previous implementation we needed to keep these
structs in sync.
We detect the case where we need to invert the facing directly inside the
DRWView update and do the appropriate GL calls at draw time.
Fix T63047 Camera with negative scale works only in Cycles Rendered view
Fix T71352 Negative scale camera causes BLI_assert
This patch adds a dedicated path to extract 16bit normals instead of packing them into 10bits/comp.
The tangents are also packed to 10bits/comp if not using the new High Quality Normal option.
Fix T61024 Degraded texture shading on dense meshes
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D6614
This change will not render the normals for faces that are hidden.
Before we had instance drawing the hidden faces were registered in the
index buffer. During the overlay refactoring the rendering was migrated
to instance rendering. Instance rendering does not use the index buffer
so the data was ignored.
This patch stored the normal visibility in the .w part of the normal or
for face normals it will set the normal to zero. The shader looks at
this and renders the normals fully transparent when detected.
Reviewed By: Clément Foucault
Differential Revision: https://developer.blender.org/D6798
The conservative depth shader is ~4.5x slower than the normal one as it
uses geometry shader and fragment shader discard.
This patch also includes a hack to also fix the view parallel planar
geometry and the really small wire objects.
For some reason, the conservative raster fix does not work with normal
selection but does with box select.
This is a fix for T63356.
Reviewed By: campbellbarton
Differential Revision: https://developer.blender.org/D6714
When using duplicate linked meshes, objects that are not in edit-mode will be drawn as
it is in edit mode, when another object with the same mesh is in edit mode.
This will not be the case when one of the objects are influenced by modifiers. The change
reflects more how it was done in Blender 2.79.
The current change introduces a draw manager method that checks in detail who is responsible
for the drawing (render engine or overlay engine). If the edit mesh is not the original or
the object that is drawn doesn't draw the original mesh the object will be drawn by the render
engine.
Known Limitation of this patch is that the rendering outside edit mode doesn't reflect the
latest changes until the user switches between object and edit mode. When there are no
modifiers in use, the updating is done immediately.
IMO this would be sufficient for blender 2.82, it also fixes parts of T72733.
The updating of the surface batches requires more development and is
post-poned for now.
Reviewed By: fclem, brecht
Differential Revision: https://developer.blender.org/D6737
Only Metaballs are left unsupported.
However, the implementation does not match 100% with cycles which converts
all objects to meshes.
Fixes T63424 EEVEE: Normal map node doesn't works with curve objects
In blender 2.79 you could use a render result as a camera background
image. This is useful during layout/compositing. During Blender 2.80
development there were 2 issues introduced that removed this feature.
* to receive a render result the image required a lock. This lock wasn't passed and therefore no image was read from the result. Generating an GPUTexture from an Blender image also didn't do the locking.
* the iuser->scene field wasn't set what is required for render results.
This change adds an optional `ibuf` parameter to `GPU_texture_from_blender` that can be passed when available.
Reviewed By: fclem, brecht
Differential Revision: https://developer.blender.org/D6684
This was due to the fact the drawing code was expecting the editpoints
to be equaly spaced. Reuse the code in particle.c to output the select
mask in red color channel of the particle (which is unused in new code).
Instead of changing the modifiers behavior, we make sure to always use
the data->totcol instead of the ob->totcol. Also we centralize getting
this number to avoid future issues.
Fix T72593 Blender crashes when separating mesh
Fix T72017 Crash on set visibility change
This adds some kind of dashing to the tube and cone limits. Although the
dashing is in object space and is not a good as old dashing. But it is
the least time consuming and least complex solution.
This way we remove the need for the srgb boolean uniform and a lot of code complexity. However, mesh update is going to be a bit slower.
I did not benchmark the performance impact.
This also fix a typo in draw_cache_impl_particles.c and fix hair not using vertex color in workbench.
Reviewed By: jbakker
Differential Revision: https://developer.blender.org/D6610
There is a cornercase when the user edits an uvmap, that is not part of
the material (yet). When this is the case the uvmap was not added to the
uv buffer and the 'pos' alias was not created.
This change will always request the active uv map when uv editing.
Reviewed By: fclem
Differential Revision: https://developer.blender.org/D6534
Based on @fclem's suggestion in D6421, this commit implements support for
storing all tiles of a UDIM texture in a single 2D array texture on the GPU.
Previously, Eevee was binding one OpenGL texture per tile, quickly running
into hardware limits with nontrivial UDIM texture sets.
Workbench meanwhile had no UDIM support at all, as reusing the per-tile
approach would require splitting the mesh by tile as well as texture.
With this commit, both Workbench as well as Eevee now support huge numbers
of tiles, with the eventual limits being GPU memory and ultimately
GL_MAX_ARRAY_TEXTURE_LAYERS, which tends to be in the 1000s on modern GPUs.
Initially my plan was to have one array texture per unique size, but managing
the different textures and keeping everything consistent ended up being way
too complex.
Therefore, we now use a simpler version that allocates a texture that
is large enough to fit the largest tile and then packs all tiles into as many
layers as necessary.
As a result, each UDIM texture only binds two textures (one for the actual
images, one for metadata) regardless of how many tiles are used.
Note that this rolls back per-tile GPUTextures, meaning that we again have
per-Image GPUTextures like we did before the original UDIM commit,
but now with four instead of two types.
Reviewed By: fclem
Differential Revision: https://developer.blender.org/D6456
This is because even if the glStencilMask is 0x00 the GL_DECR_WRAP and
GL_INCR_WRAP states still works and will modify the stencil.
Fix T73046 Overlapping parts of wireframes don't render at all in workench
with shadows turned on.
The `in int flag;` in `gpu_shader_2D_edituvs_faces_vert.glsl`
don't have the values `FACE_UV_ACTIVE` and `FACE_UV_SELECT`.
Add face flags then.
Original patch is from @EitanSomething
Differential revision: https://developer.blender.org/D6520