Merge branch 'blender-v3.1-release'

This commit is contained in:
Sergey Sharybin 2022-03-01 11:46:53 +01:00
commit f493e2f23a
4 changed files with 14 additions and 6 deletions

View File

@ -1513,7 +1513,9 @@ static void editbmesh_calc_modifiers(struct Depsgraph *depsgraph,
}
else {
Mesh *me_orig = mesh_input;
if (me_orig->id.tag & LIB_TAG_COPIED_ON_WRITE) {
/* Modifying the input mesh is weak, however as there can only be one object in edit mode
* even if multiple are sharing the same mesh this should be thread safe. */
if ((me_orig->id.tag & LIB_TAG_COPIED_ON_WRITE) && (ob->mode & OB_MODE_EDIT)) {
if (!BKE_mesh_runtime_ensure_edit_data(me_orig)) {
BKE_mesh_runtime_reset_edit_data(me_orig);
}

View File

@ -491,7 +491,9 @@ template<typename TextureMethod> class ScreenSpaceDrawingMode : public AbstractD
/* Step: Add the GPU textures to the shgroup. */
instance_data->update_batches();
add_depth_shgroups(*instance_data, image, iuser);
if (!instance_data->flags.do_tile_drawing) {
add_depth_shgroups(*instance_data, image, iuser);
}
add_shgroups(instance_data);
}
@ -507,8 +509,10 @@ template<typename TextureMethod> class ScreenSpaceDrawingMode : public AbstractD
DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get();
GPU_framebuffer_bind(dfbl->default_fb);
static float clear_col[4] = {0.0f, 0.0f, 0.0f, 0.0f};
GPU_framebuffer_clear_color_depth(dfbl->default_fb, clear_col, 1.0);
float clear_depth = instance_data->flags.do_tile_drawing ? 0.75 : 1.0f;
GPU_framebuffer_clear_color_depth(dfbl->default_fb, clear_col, clear_depth);
DRW_view_set_active(instance_data->view);
DRW_draw_pass(instance_data->passes.depth_pass);

View File

@ -106,7 +106,7 @@ struct IMAGE_InstanceData {
void update_image_usage(const ImageUser *image_user)
{
ImageUsage usage(image, image_user);
ImageUsage usage(image, image_user, flags.do_tile_drawing);
if (last_usage != usage) {
last_usage = usage;
reset_dirty_flag(true);

View File

@ -9,7 +9,7 @@
/**
* ImageUsage contains data of the image and image user to identify changes that require a rebuild
* of the texture slots.
* the texture slots.
*/
struct ImageUsage {
/** Render pass of the image that is used. */
@ -22,11 +22,12 @@ struct ImageUsage {
ColorManagedColorspaceSettings colorspace_settings;
/** IMA_ALPHA_* */
char alpha_mode;
bool last_tile_drawing;
const void *last_image = nullptr;
ImageUsage() = default;
ImageUsage(const struct Image *image, const struct ImageUser *image_user)
ImageUsage(const struct Image *image, const struct ImageUser *image_user, bool do_tile_drawing)
{
pass = image_user ? image_user->pass : 0;
layer = image_user ? image_user->layer : 0;
@ -34,6 +35,7 @@ struct ImageUsage {
colorspace_settings = image->colorspace_settings;
alpha_mode = image->alpha_mode;
last_image = static_cast<const void *>(image);
last_tile_drawing = do_tile_drawing;
}
bool operator==(const ImageUsage &other) const