Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2022-01-11Fix T94671: performance regression with subsurf modifierKévin Dietrich
rBeed45d2a239a introduced a GPU backend for OpenSubDiv which lets us do the subdivision at render time. However, some tools might still need to have the subdivision data available on the CPU side. For this a subdivision mesh wrapper was also introduced, and is computed whenever a CPU side mesh is needed. The subdivision settings for this wrapper are stored during modifier evaluation if GPU subdivision can be done. The performance regression is due to the fact that although the subdivision mesh was already computed on the CPU, and no subdivision wrapper is generated, some checks for creating subdivision data in `BKE_mesh_wrapper_ensure_subdivision` where still run, one of which is very expensive. To fix this we first check the runtime settings of the mesh to see if subdivision is needed at all.
2021-12-28Fix T94420: deadlock with subsurf modifiersKévin Dietrich
The deadlock was caused as the lock on the Mesh mutex used to compute the subdivision wrapper was not released in some early exits of the function.
2021-12-27OpenSubDiv: add support for an OpenGL evaluatorKévin Dietrich
This evaluator is used in order to evaluate subdivision at render time, allowing for faster renders of meshes with a subdivision surface modifier placed at the last position in the modifier list. When evaluating the subsurf modifier, we detect whether we can delegate evaluation to the draw code. If so, the subdivision is first evaluated on the GPU using our own custom evaluator (only the coarse data needs to be initially sent to the GPU), then, buffers for the final `MeshBufferCache` are filled on the GPU using a set of compute shaders. However, some buffers are still filled on the CPU side, if doing so on the GPU is impractical (e.g. the line adjacency buffer used for x-ray, whose logic is hardly GPU compatible). This is done at the mesh buffer extraction level so that the result can be readily used in the various OpenGL engines, without having to write custom geometry or tesselation shaders. We use our own subdivision evaluation shaders, instead of OpenSubDiv's vanilla one, in order to control the data layout, and interpolation. For example, we store vertex colors as compressed 16-bit integers, while OpenSubDiv's default evaluator only work for float types. In order to still access the modified geometry on the CPU side, for use in modifiers or transform operators, a dedicated wrapper type is added `MESH_WRAPPER_TYPE_SUBD`. Subdivision will be lazily evaluated via `BKE_object_get_evaluated_mesh` which will create such a wrapper if possible. If the final subdivision surface is not needed on the CPU side, `BKE_object_get_evaluated_mesh_no_subsurf` should be used. Enabling or disabling GPU subdivision can be done through the user preferences (under Viewport -> Subdivision). See patch description for benchmarks. Reviewed By: campbellbarton, jbakker, fclem, brecht, #eevee_viewport Differential Revision: https://developer.blender.org/D12406
2021-09-02Fix regression in recent change 0708733c46cb6b50697c1b80a6541d6fb410267eCampbell Barton
Adding a mirror modifier in edit-mode crashed. Freeing meshes that hold a shallow copy happens in multiple places while calculating modifiers, making it impractical to clear the edit-mode pointer before freeing the mesh (as done in BKE_editmesh_free_derived_caches). Add a struct member to the edit-mesh struct so evaluated copies don't free the edit-mesh contents.
2021-09-02Cleanup: remove redundant edit-mesh memory allocationCampbell Barton
This memory was only duplicated to satisfy mesh_data_free which was incorrectly freeing the pointer (but nothing else).
2021-06-22Fix deadlock with shrinkwrap and other modifiersBrecht Van Lommel
More code that needs task isolation. Encountered in sprite fright production file. Ref D11603
2021-06-17Cleanup: split BKE_mesh_copy_settings into two functionsCampbell Barton
- BKE_mesh_copy_parameters_for_eval to be used for evaluated meshes only as it doesn't handle ID user-counts. - BKE_mesh_copy_parameters is a general function for copying parameters between meshes.
2021-03-24Cleanup: use new BLI_assert_unreachable macroCampbell Barton
2020-07-29Fix T78285: Invalid thread safety in shrinkwrap modifier code.Bastien Montagne
This uses mesh's runtime mutex for both `BKE_mesh_runtime_looptri_ensure` (was using its own global RW mutex before), and `BKE_mesh_wrapper_ensure_mdata` (was not protected at all before). This is more like a band-aid than a proper fix, as mentioned in the report proper fix would be for the modifier to request those data (the relevant BVHTree, which would implicitely also call the tow others) through flags, just like it does for regular CDData layers. But this is a much bigger refactor to be done outside of bugfix scope. Reviewed By: sergey Maniphest Tasks: T78285 Differential Revision: https://developer.blender.org/D8415
2020-06-12Cleanup: minor changes to deform functionsCampbell Barton
- Use 'float (*)[3]' to avoid casts. - Remove unnecessary float[3] copy in gpencil_deform_verts. - Use MEM_SAFE_FREE - Use const arguments.
2020-06-10Cleanup: redundant headersCampbell Barton
2020-06-10Cleanup: move BKE_mesh_wrapper functions into own headerCampbell Barton
2020-06-10Mesh: utility functions to access wrapped mesh coordinatesCampbell Barton
2020-05-25Fix building after rBdeaff945d0b9... sic.Bastien Montagne
2020-05-25Mesh: skip conversion from edit-mesh to mesh in edit-modeCampbell Barton
This resolves a performance regression in 2.8x where every edit-mode update performed an edit-mesh to mesh conversion. Now the conversion will be lazily initialized if/when it's required. New BKE_mesh_wrapper_* functions abstract over mesh data access. Currently only edit-mesh and regular meshes are supported. In the future sub-surface meshes may be supported too.