Merge branch 'blender-v2.83-release'

This commit is contained in:
Jeroen Bakker 2020-05-14 14:30:34 +02:00
commit 236794d07a
Notes: blender-bot 2023-02-14 05:36:11 +01:00
Referenced by issue #76277, Enabling Viewer Border in Compositor Crashes Blender
17 changed files with 74 additions and 60 deletions

View File

@ -21,24 +21,24 @@
#include "../MEM_guardedalloc.h"
#include <new>
void *operator new(size_t size, const char *str) throw(std::bad_alloc);
void *operator new[](size_t size, const char *str) throw(std::bad_alloc);
void *operator new(size_t size, const char *str);
void *operator new[](size_t size, const char *str);
/* not default but can be used when needing to set a string */
void *operator new(size_t size, const char *str) throw(std::bad_alloc)
void *operator new(size_t size, const char *str)
{
return MEM_mallocN(size, str);
}
void *operator new[](size_t size, const char *str) throw(std::bad_alloc)
void *operator new[](size_t size, const char *str)
{
return MEM_mallocN(size, str);
}
void *operator new(size_t size) throw(std::bad_alloc)
void *operator new(size_t size)
{
return MEM_mallocN(size, "C++/anonymous");
}
void *operator new[](size_t size) throw(std::bad_alloc)
void *operator new[](size_t size)
{
return MEM_mallocN(size, "C++/anonymous[]");
}

@ -1 +1 @@
Subproject commit 80f390fd0e20d7e2aadf07c43a45717e810fa10d
Subproject commit 1d9b8b2ffa67a8832073acf316150b2dfaa2db02

@ -1 +1 @@
Subproject commit 44c17b01168ea180d7ea865e9ec1ef6e93097b3a
Subproject commit 590710871b7b2e1f7f50bb622f1409b794ad38c2

View File

@ -191,7 +191,6 @@ bool BKE_pbvh_node_find_nearest_to_ray(PBVH *bvh,
/* Drawing */
void BKE_pbvh_draw_cb(PBVH *bvh,
bool show_vcol,
bool update_only_visible,
PBVHFrustumPlanes *update_frustum,
PBVHFrustumPlanes *draw_frustum,

View File

@ -1009,7 +1009,6 @@ typedef struct PBVHUpdateData {
float (*vnors)[3];
int flag;
bool show_vcol;
bool show_sculpt_face_sets;
} PBVHUpdateData;
@ -1250,12 +1249,10 @@ void pbvh_update_BB_redraw(PBVH *bvh, PBVHNode **nodes, int totnode, int flag)
BLI_task_parallel_range(0, totnode, &data, pbvh_update_BB_redraw_task_cb, &settings);
}
static int pbvh_get_buffers_update_flags(PBVH *bvh, bool show_vcol)
static int pbvh_get_buffers_update_flags(PBVH *UNUSED(bvh))
{
int update_flags = 0;
update_flags |= bvh->show_mask ? GPU_PBVH_BUFFERS_SHOW_MASK : 0;
update_flags |= show_vcol ? GPU_PBVH_BUFFERS_SHOW_VCOL : 0;
update_flags |= bvh->show_face_sets ? GPU_PBVH_BUFFERS_SHOW_SCULPT_FACE_SETS : 0;
int update_flags = GPU_PBVH_BUFFERS_SHOW_VCOL | GPU_PBVH_BUFFERS_SHOW_MASK |
GPU_PBVH_BUFFERS_SHOW_SCULPT_FACE_SETS;
return update_flags;
}
@ -1295,7 +1292,7 @@ static void pbvh_update_draw_buffer_cb(void *__restrict userdata,
}
if (node->flag & PBVH_UpdateDrawBuffers) {
const int update_flags = pbvh_get_buffers_update_flags(bvh, data->show_vcol);
const int update_flags = pbvh_get_buffers_update_flags(bvh);
switch (bvh->type) {
case PBVH_GRIDS:
GPU_pbvh_grid_buffers_update(node->draw_buffers,
@ -1335,8 +1332,7 @@ static void pbvh_update_draw_buffer_cb(void *__restrict userdata,
}
}
static void pbvh_update_draw_buffers(
PBVH *bvh, PBVHNode **nodes, int totnode, bool show_vcol, int update_flag)
static void pbvh_update_draw_buffers(PBVH *bvh, PBVHNode **nodes, int totnode, int update_flag)
{
if ((update_flag & PBVH_RebuildDrawBuffers) || ELEM(bvh->type, PBVH_GRIDS, PBVH_BMESH)) {
/* Free buffers uses OpenGL, so not in parallel. */
@ -1362,7 +1358,6 @@ static void pbvh_update_draw_buffers(
PBVHUpdateData data = {
.bvh = bvh,
.nodes = nodes,
.show_vcol = show_vcol,
};
TaskParallelSettings settings;
@ -2679,7 +2674,6 @@ static bool pbvh_draw_search_cb(PBVHNode *node, void *data_v)
}
void BKE_pbvh_draw_cb(PBVH *bvh,
bool show_vcol,
bool update_only_visible,
PBVHFrustumPlanes *update_frustum,
PBVHFrustumPlanes *draw_frustum,
@ -2696,7 +2690,7 @@ void BKE_pbvh_draw_cb(PBVH *bvh,
BKE_pbvh_search_gather(bvh, update_search_cb, POINTER_FROM_INT(update_flag), &nodes, &totnode);
if (totnode) {
pbvh_update_draw_buffers(bvh, nodes, totnode, show_vcol, update_flag);
pbvh_update_draw_buffers(bvh, nodes, totnode, update_flag);
}
MEM_SAFE_FREE(nodes);
@ -2708,7 +2702,7 @@ void BKE_pbvh_draw_cb(PBVH *bvh,
if (update_only_visible && (data.accum_update_flag & update_flag)) {
/* Update draw buffers in visible nodes. */
pbvh_update_draw_buffers(bvh, nodes, totnode, show_vcol, data.accum_update_flag);
pbvh_update_draw_buffers(bvh, nodes, totnode, data.accum_update_flag);
}
/* Draw. */

View File

@ -231,19 +231,17 @@ static void blo_update_defaults_screen(bScreen *screen,
/* 2D animation template. */
if (app_template && STREQ(app_template, "2D_Animation")) {
LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
LISTBASE_FOREACH (ARegion *, region, &area->regionbase) {
if (area->spacetype == SPACE_ACTION) {
SpaceAction *saction = area->spacedata.first;
/* Enable Sliders. */
saction->flag |= SACTION_SLIDERS;
}
else if (area->spacetype == SPACE_VIEW3D) {
View3D *v3d = area->spacedata.first;
/* Set Material Color by default. */
v3d->shading.color_type = V3D_SHADING_MATERIAL_COLOR;
/* Enable Annotations. */
v3d->flag2 |= V3D_SHOW_ANNOTATION;
}
if (area->spacetype == SPACE_ACTION) {
SpaceAction *saction = area->spacedata.first;
/* Enable Sliders. */
saction->flag |= SACTION_SLIDERS;
}
else if (area->spacetype == SPACE_VIEW3D) {
View3D *v3d = area->spacedata.first;
/* Set Material Color by default. */
v3d->shading.color_type = V3D_SHADING_MATERIAL_COLOR;
/* Enable Annotations. */
v3d->flag2 |= V3D_SHOW_ANNOTATION;
}
}
}

View File

@ -202,7 +202,7 @@ static void basic_cache_populate(void *vedata, Object *ob)
stl->g_data->depth_shgrp[do_in_front];
if (use_sculpt_pbvh) {
DRW_shgroup_call_sculpt(shgrp, ob, false, false, false);
DRW_shgroup_call_sculpt(shgrp, ob, false, false);
}
else {
struct GPUBatch *geom = DRW_cache_object_surface_get(ob);

View File

@ -2073,23 +2073,21 @@ void EEVEE_materials_cache_populate(EEVEE_Data *vedata,
}
if (use_sculpt_pbvh) {
/* Vcol is not supported in the modes that require PBVH drawing. */
const bool use_vcol = false;
struct DRWShadingGroup **sculpt_shgrps_array = BLI_array_alloca(sculpt_shgrps_array,
materials_len);
for (int i = 0; i < materials_len; i++) {
sculpt_shgrps_array[i] = shgrps_array[i].shading_grp;
}
DRW_shgroup_call_sculpt_with_materials(sculpt_shgrps_array, materials_len, ob, use_vcol);
DRW_shgroup_call_sculpt_with_materials(sculpt_shgrps_array, materials_len, ob);
for (int i = 0; i < materials_len; i++) {
sculpt_shgrps_array[i] = shgrps_array[i].depth_grp;
}
DRW_shgroup_call_sculpt_with_materials(sculpt_shgrps_array, materials_len, ob, use_vcol);
DRW_shgroup_call_sculpt_with_materials(sculpt_shgrps_array, materials_len, ob);
for (int i = 0; i < materials_len; i++) {
sculpt_shgrps_array[i] = shgrps_array[i].depth_clip_grp;
}
DRW_shgroup_call_sculpt_with_materials(sculpt_shgrps_array, materials_len, ob, use_vcol);
DRW_shgroup_call_sculpt_with_materials(sculpt_shgrps_array, materials_len, ob);
for (int renderpass_index = 0;
renderpass_index < stl->g_data->render_passes_material_count;
@ -2097,7 +2095,7 @@ void EEVEE_materials_cache_populate(EEVEE_Data *vedata,
for (int i = 0; i < materials_len; i++) {
sculpt_shgrps_array[i] = shgrps_array[i].material_accum_grp[renderpass_index];
}
DRW_shgroup_call_sculpt_with_materials(sculpt_shgrps_array, materials_len, ob, use_vcol);
DRW_shgroup_call_sculpt_with_materials(sculpt_shgrps_array, materials_len, ob);
}
/* TODO(fclem): Support shadows in sculpt mode. */

View File

@ -25,10 +25,12 @@
#include "DRW_render.h"
#include "DNA_modifier_types.h"
#include "DNA_screen_types.h"
#include "DNA_view3d_types.h"
#include "BKE_object.h"
#include "BKE_particle.h"
#include "ED_screen.h"
@ -166,6 +168,24 @@ static void external_cache_populate(void *vedata, Object *ob)
return;
}
if (ob->type == OB_MESH && ob->modifiers.first != NULL) {
LISTBASE_FOREACH (ModifierData *, md, &ob->modifiers) {
if (md->type != eModifierType_ParticleSystem) {
continue;
}
ParticleSystem *psys = ((ParticleSystemModifierData *)md)->psys;
if (!DRW_object_is_visible_psys_in_active_context(ob, psys)) {
continue;
}
ParticleSettings *part = psys->part;
const int draw_as = (part->draw_as == PART_DRAW_REND) ? part->ren_as : part->draw_as;
if (draw_as == PART_DRAW_PATH) {
struct GPUBatch *hairs = DRW_cache_particles_get_hair(ob, psys, NULL);
DRW_shgroup_call(stl->g_data->depth_shgrp, hairs, NULL);
}
}
}
struct GPUBatch *geom = DRW_cache_object_surface_get(ob);
if (geom) {
/* Depth Prepass */

View File

@ -63,7 +63,7 @@ void OVERLAY_facing_cache_populate(OVERLAY_Data *vedata, Object *ob)
const bool is_xray = (ob->dtx & OB_DRAWXRAY) != 0;
if (use_sculpt_pbvh) {
DRW_shgroup_call_sculpt(pd->facing_grp[is_xray], ob, false, false, false);
DRW_shgroup_call_sculpt(pd->facing_grp[is_xray], ob, false, false);
}
else {
struct GPUBatch *geom = DRW_cache_object_surface_get(ob);

View File

@ -54,7 +54,7 @@ void OVERLAY_sculpt_cache_populate(OVERLAY_Data *vedata, Object *ob)
if (use_pbvh || !ob->sculpt->deform_modifiers_active || ob->sculpt->shapekey_active) {
if (!use_pbvh || pbvh_has_mask(pbvh) || pbvh_has_face_sets(pbvh)) {
DRW_shgroup_call_sculpt(pd->sculpt_mask_grp, ob, false, true, false);
DRW_shgroup_call_sculpt(pd->sculpt_mask_grp, ob, false, true);
}
}
}

View File

@ -230,7 +230,7 @@ void OVERLAY_wireframe_cache_populate(OVERLAY_Data *vedata,
DRW_shgroup_call_no_cull(shgrp, geom, ob);
}
else if (use_sculpt_pbvh) {
DRW_shgroup_call_sculpt(shgrp, ob, true, false, false);
DRW_shgroup_call_sculpt(shgrp, ob, true, false);
}
else {
DRW_shgroup_call(shgrp, geom, ob);

View File

@ -176,6 +176,14 @@ void workbench_antialiasing_engine_init(WORKBENCH_Data *vedata)
}
}
/* Reset the TAA when we have already draw a sample, but the sample count differs from previous
* time. This removes render artifacts when the viewport anti-aliasing in the user preferences is
* set to a lower value. */
if (wpd->taa_sample_len != wpd->taa_sample_len_previous) {
wpd->taa_sample = 0;
wpd->taa_sample_len_previous = wpd->taa_sample_len;
}
if (wpd->view_updated) {
wpd->taa_sample = 0;
wpd->view_updated = false;

View File

@ -55,6 +55,7 @@ void workbench_engine_init(void *ved)
if (!stl->wpd) {
stl->wpd = MEM_callocN(sizeof(*stl->wpd), __func__);
stl->wpd->taa_sample_len_previous = -1;
stl->wpd->view_updated = true;
}
@ -118,7 +119,7 @@ static void workbench_cache_sculpt_populate(WORKBENCH_PrivateData *wpd,
if (use_single_drawcall) {
DRWShadingGroup *grp = workbench_material_setup(wpd, ob, 0, color_type, NULL);
DRW_shgroup_call_sculpt(grp, ob, false, false, use_vcol);
DRW_shgroup_call_sculpt(grp, ob, false, false);
}
else {
const int materials_len = DRW_cache_object_material_count_get(ob);
@ -126,7 +127,7 @@ static void workbench_cache_sculpt_populate(WORKBENCH_PrivateData *wpd,
for (int i = 0; i < materials_len; i++) {
shgrps[i] = workbench_material_setup(wpd, ob, i + 1, color_type, NULL);
}
DRW_shgroup_call_sculpt_with_materials(shgrps, materials_len, ob, false);
DRW_shgroup_call_sculpt_with_materials(shgrps, materials_len, ob);
}
}

View File

@ -261,6 +261,8 @@ typedef struct WORKBENCH_PrivateData {
/* Temporal Antialiasing */
/** Total number of samples to after which TAA stops accumulating samples. */
int taa_sample_len;
/** Total number of samples of the previous TAA. When changed TAA will be reset. */
int taa_sample_len_previous;
/** Current TAA sample index in [0..taa_sample_len[ range. */
int taa_sample;
/** Inverse of taa_sample to divide the accumulation buffer. */

View File

@ -410,11 +410,8 @@ void DRW_shgroup_call_instances_with_attrs(DRWShadingGroup *shgroup,
struct GPUBatch *geom,
struct GPUBatch *inst_attributes);
void DRW_shgroup_call_sculpt(DRWShadingGroup *sh, Object *ob, bool wire, bool mask, bool vcol);
void DRW_shgroup_call_sculpt_with_materials(DRWShadingGroup **sh,
int num_sh,
Object *ob,
bool vcol);
void DRW_shgroup_call_sculpt(DRWShadingGroup *sh, Object *ob, bool wire, bool mask);
void DRW_shgroup_call_sculpt_with_materials(DRWShadingGroup **sh, int num_sh, Object *ob);
DRWCallBuffer *DRW_shgroup_call_buffer(DRWShadingGroup *shading_group,
struct GPUVertFormat *format,

View File

@ -954,7 +954,7 @@ static void drw_sculpt_get_frustum_planes(Object *ob, float planes[6][4])
}
}
static void drw_sculpt_generate_calls(DRWSculptCallbackData *scd, bool use_vcol)
static void drw_sculpt_generate_calls(DRWSculptCallbackData *scd)
{
/* PBVH should always exist for non-empty meshes, created by depsgrah eval. */
PBVH *pbvh = (scd->ob->sculpt) ? scd->ob->sculpt->pbvh : NULL;
@ -1015,7 +1015,6 @@ static void drw_sculpt_generate_calls(DRWSculptCallbackData *scd, bool use_vcol)
BKE_pbvh_update_normals(pbvh, mesh->runtime.subdiv_ccg);
BKE_pbvh_draw_cb(pbvh,
use_vcol,
update_only_visible,
&update_frustum,
&draw_frustum,
@ -1033,8 +1032,7 @@ static void drw_sculpt_generate_calls(DRWSculptCallbackData *scd, bool use_vcol)
}
}
void DRW_shgroup_call_sculpt(
DRWShadingGroup *shgroup, Object *ob, bool use_wire, bool use_mask, bool use_vcol)
void DRW_shgroup_call_sculpt(DRWShadingGroup *shgroup, Object *ob, bool use_wire, bool use_mask)
{
DRWSculptCallbackData scd = {
.ob = ob,
@ -1044,13 +1042,12 @@ void DRW_shgroup_call_sculpt(
.use_mats = false,
.use_mask = use_mask,
};
drw_sculpt_generate_calls(&scd, use_vcol);
drw_sculpt_generate_calls(&scd);
}
void DRW_shgroup_call_sculpt_with_materials(DRWShadingGroup **shgroups,
int num_shgroups,
Object *ob,
bool use_vcol)
Object *ob)
{
DRWSculptCallbackData scd = {
.ob = ob,
@ -1060,7 +1057,7 @@ void DRW_shgroup_call_sculpt_with_materials(DRWShadingGroup **shgroups,
.use_mats = true,
.use_mask = false,
};
drw_sculpt_generate_calls(&scd, use_vcol);
drw_sculpt_generate_calls(&scd);
}
static GPUVertFormat inst_select_format = {0};