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
path: root/source
diff options
context:
space:
mode:
authorRichard Antalik <richardantalik@gmail.com>2021-01-26 19:51:51 +0300
committerRichard Antalik <richardantalik@gmail.com>2021-01-26 19:51:51 +0300
commitae5c15bb4349426c5db276d7d73d750c43cc0346 (patch)
treeea8f7afa1901ff5186e6aa3b846f07945ecb19ad /source
parentff7a557c67096fc8de870e5fb43caa17b649c538 (diff)
parent6d40d7218971b558074eb418afd244ab13ab8fbf (diff)
Merge branch 'blender-v2.92-release'
Diffstat (limited to 'source')
-rw-r--r--source/blender/blenkernel/intern/customdata.c2
-rw-r--r--source/blender/compositor/operations/COM_RenderLayersProg.h9
-rw-r--r--source/blender/compositor/operations/COM_SocketProxyOperation.h4
-rw-r--r--source/blender/draw/engines/workbench/workbench_data.c9
-rw-r--r--source/blender/draw/engines/workbench/workbench_effect_dof.c4
-rw-r--r--source/blender/draw/engines/workbench/workbench_engine.c7
-rw-r--r--source/blender/draw/engines/workbench/workbench_private.h5
-rw-r--r--source/blender/draw/engines/workbench/workbench_render.c2
-rw-r--r--source/blender/editors/space_sequencer/sequencer_edit.c4
-rw-r--r--source/blender/editors/space_sequencer/sequencer_proxy.c4
-rw-r--r--source/blender/makesrna/intern/rna_sequencer.c3
-rw-r--r--source/blender/sequencer/intern/strip_relations.c35
12 files changed, 70 insertions, 18 deletions
diff --git a/source/blender/blenkernel/intern/customdata.c b/source/blender/blenkernel/intern/customdata.c
index 42f59a710c1..37e9c810123 100644
--- a/source/blender/blenkernel/intern/customdata.c
+++ b/source/blender/blenkernel/intern/customdata.c
@@ -5167,7 +5167,7 @@ void CustomData_blend_read(BlendDataReader *reader, CustomData *data, int count)
if (CustomData_verify_versions(data, i)) {
BLO_read_data_address(reader, &layer->data);
- if (layer->data == NULL) {
+ if (layer->data == NULL && count > 0 && layer->type == CD_PROP_BOOL) {
/* Usually this should never happen, except when a custom data layer has not been written
* to a file correctly. */
CLOG_WARN(&LOG, "Reallocating custom data layer that was not saved correctly.");
diff --git a/source/blender/compositor/operations/COM_RenderLayersProg.h b/source/blender/compositor/operations/COM_RenderLayersProg.h
index ec98969b223..a0d5bc2953b 100644
--- a/source/blender/compositor/operations/COM_RenderLayersProg.h
+++ b/source/blender/compositor/operations/COM_RenderLayersProg.h
@@ -68,7 +68,8 @@ class RenderLayersProg : public NodeOperation {
/**
* Determine the output resolution. The resolution is retrieved from the Renderer
*/
- void determineResolution(unsigned int resolution[2], unsigned int preferredResolution[2]);
+ void determineResolution(unsigned int resolution[2],
+ unsigned int preferredResolution[2]) override;
/**
* retrieve the reference to the float buffer of the renderer.
@@ -118,9 +119,9 @@ class RenderLayersProg : public NodeOperation {
{
return this->m_viewName;
}
- void initExecution();
- void deinitExecution();
- void executePixelSampled(float output[4], float x, float y, PixelSampler sampler);
+ void initExecution() override;
+ void deinitExecution() override;
+ void executePixelSampled(float output[4], float x, float y, PixelSampler sampler) override;
std::unique_ptr<MetaData> getMetaData() const override;
};
diff --git a/source/blender/compositor/operations/COM_SocketProxyOperation.h b/source/blender/compositor/operations/COM_SocketProxyOperation.h
index 435083f5008..712347a8ea2 100644
--- a/source/blender/compositor/operations/COM_SocketProxyOperation.h
+++ b/source/blender/compositor/operations/COM_SocketProxyOperation.h
@@ -24,11 +24,11 @@ class SocketProxyOperation : public NodeOperation {
public:
SocketProxyOperation(DataType type, bool use_conversion);
- bool isProxyOperation() const
+ bool isProxyOperation() const override
{
return true;
}
- bool useDatatypeConversion() const
+ bool useDatatypeConversion() const override
{
return m_use_conversion;
}
diff --git a/source/blender/draw/engines/workbench/workbench_data.c b/source/blender/draw/engines/workbench/workbench_data.c
index c566b35cd34..4f689fd55a5 100644
--- a/source/blender/draw/engines/workbench/workbench_data.c
+++ b/source/blender/draw/engines/workbench/workbench_data.c
@@ -137,6 +137,15 @@ static void workbench_studiolight_data_update(WORKBENCH_PrivateData *wpd, WORKBE
wd->use_specular = workbench_is_specular_highlight_enabled(wpd);
}
+void workbench_private_data_alloc(WORKBENCH_StorageList *stl)
+{
+ if (!stl->wpd) {
+ stl->wpd = MEM_callocN(sizeof(*stl->wpd), __func__);
+ stl->wpd->taa_sample_len_previous = -1;
+ stl->wpd->view_updated = true;
+ }
+}
+
void workbench_private_data_init(WORKBENCH_PrivateData *wpd)
{
const DRWContextState *draw_ctx = DRW_context_state_get();
diff --git a/source/blender/draw/engines/workbench/workbench_effect_dof.c b/source/blender/draw/engines/workbench/workbench_effect_dof.c
index fcee8c270dd..73cd501190f 100644
--- a/source/blender/draw/engines/workbench/workbench_effect_dof.c
+++ b/source/blender/draw/engines/workbench/workbench_effect_dof.c
@@ -133,14 +133,14 @@ void workbench_dof_engine_init(WORKBENCH_Data *vedata)
const DRWContextState *draw_ctx = DRW_context_state_get();
RegionView3D *rv3d = draw_ctx->rv3d;
View3D *v3d = draw_ctx->v3d;
- Scene *scene = draw_ctx->scene;
+
Object *camera;
if (v3d && rv3d) {
camera = (rv3d->persp == RV3D_CAMOB) ? v3d->camera : NULL;
}
else {
- camera = scene->camera;
+ camera = wpd->cam_original_ob;
}
Camera *cam = camera != NULL ? camera->data : NULL;
diff --git a/source/blender/draw/engines/workbench/workbench_engine.c b/source/blender/draw/engines/workbench/workbench_engine.c
index 37dbfe4d2a6..bd5b61b26e9 100644
--- a/source/blender/draw/engines/workbench/workbench_engine.c
+++ b/source/blender/draw/engines/workbench/workbench_engine.c
@@ -53,12 +53,7 @@ void workbench_engine_init(void *ved)
workbench_shader_library_ensure();
- if (!stl->wpd) {
- stl->wpd = MEM_callocN(sizeof(*stl->wpd), __func__);
- stl->wpd->taa_sample_len_previous = -1;
- stl->wpd->view_updated = true;
- }
-
+ workbench_private_data_alloc(stl);
WORKBENCH_PrivateData *wpd = stl->wpd;
workbench_private_data_init(wpd);
workbench_update_world_ubo(wpd);
diff --git a/source/blender/draw/engines/workbench/workbench_private.h b/source/blender/draw/engines/workbench/workbench_private.h
index f3ff0616668..d157c260fbd 100644
--- a/source/blender/draw/engines/workbench/workbench_private.h
+++ b/source/blender/draw/engines/workbench/workbench_private.h
@@ -70,6 +70,7 @@ extern struct DrawEngineType draw_engine_workbench;
#define OBJECT_ID_PASS_ENABLED(wpd) (OBJECT_OUTLINE_ENABLED(wpd) || CURVATURE_ENABLED(wpd))
#define NORMAL_ENCODING_ENABLED() (true)
+struct Object;
struct RenderEngine;
struct RenderLayer;
struct rcti;
@@ -351,6 +352,9 @@ typedef struct WORKBENCH_PrivateData {
float dof_rotation;
float dof_ratio;
+ /* Camera override for rendering. */
+ struct Object *cam_original_ob;
+
/** True if any volume needs to be rendered. */
bool volumes_do;
/** Convenience boolean. */
@@ -504,6 +508,7 @@ DRWShadingGroup *workbench_image_setup_ex(WORKBENCH_PrivateData *wpd,
workbench_image_setup_ex(wpd, ob, mat_nr, ima, iuser, interp, WORKBENCH_DATATYPE_HAIR)
/* workbench_data.c */
+void workbench_private_data_alloc(WORKBENCH_StorageList *stl);
void workbench_private_data_init(WORKBENCH_PrivateData *wpd);
void workbench_update_world_ubo(WORKBENCH_PrivateData *wpd);
void workbench_update_material_ubos(WORKBENCH_PrivateData *wpd);
diff --git a/source/blender/draw/engines/workbench/workbench_render.c b/source/blender/draw/engines/workbench/workbench_render.c
index 2c3b5a5f935..cec372ba732 100644
--- a/source/blender/draw/engines/workbench/workbench_render.c
+++ b/source/blender/draw/engines/workbench/workbench_render.c
@@ -175,6 +175,8 @@ void workbench_render(void *ved, RenderEngine *engine, RenderLayer *render_layer
return;
}
+ workbench_private_data_alloc(data->stl);
+ data->stl->wpd->cam_original_ob = DEG_get_evaluated_object(depsgraph, RE_GetCamera(engine->re));
workbench_engine_init(data);
workbench_cache_init(data);
diff --git a/source/blender/editors/space_sequencer/sequencer_edit.c b/source/blender/editors/space_sequencer/sequencer_edit.c
index f470d1913dc..7474f8034de 100644
--- a/source/blender/editors/space_sequencer/sequencer_edit.c
+++ b/source/blender/editors/space_sequencer/sequencer_edit.c
@@ -1395,6 +1395,10 @@ static int sequencer_split_exec(bContext *C, wmOperator *op)
SEQ_prefetch_stop(scene);
+ LISTBASE_FOREACH (Sequence *, seq, ed->seqbasep) {
+ seq->tmp = NULL;
+ }
+
LISTBASE_FOREACH_BACKWARD (Sequence *, seq, ed->seqbasep) {
if (use_cursor_position && seq->machine != split_channel) {
continue;
diff --git a/source/blender/editors/space_sequencer/sequencer_proxy.c b/source/blender/editors/space_sequencer/sequencer_proxy.c
index b208f320591..b9698492aa5 100644
--- a/source/blender/editors/space_sequencer/sequencer_proxy.c
+++ b/source/blender/editors/space_sequencer/sequencer_proxy.c
@@ -168,13 +168,13 @@ static void seq_proxy_build_job(const bContext *C, ReportList *reports)
}
SEQ_CURRENT_END;
+ BLI_gset_free(file_list, MEM_freeN);
+
if (!selected) {
BKE_reportf(reports, RPT_WARNING, "Select movie or image strips");
return;
}
- BLI_gset_free(file_list, MEM_freeN);
-
if (selected && !WM_jobs_is_running(wm_job)) {
G.is_break = false;
WM_jobs_start(CTX_wm_manager(C), wm_job);
diff --git a/source/blender/makesrna/intern/rna_sequencer.c b/source/blender/makesrna/intern/rna_sequencer.c
index 217321b4991..01b083dc3c8 100644
--- a/source/blender/makesrna/intern/rna_sequencer.c
+++ b/source/blender/makesrna/intern/rna_sequencer.c
@@ -927,9 +927,10 @@ static void rna_Sequence_filepath_update(Main *bmain, Scene *UNUSED(scene), Poin
rna_Sequence_invalidate_raw_update(bmain, scene, ptr);
}
-static void rna_Sequence_sound_update(Main *UNUSED(bmain), Scene *scene, PointerRNA *UNUSED(ptr))
+static void rna_Sequence_sound_update(Main *bmain, Scene *scene, PointerRNA *UNUSED(ptr))
{
DEG_id_tag_update(&scene->id, ID_RECALC_SEQUENCER_STRIPS | ID_RECALC_AUDIO);
+ DEG_relations_tag_update(bmain);
}
static int seqproxy_seq_cmp_fn(Sequence *seq, void *arg_pt)
diff --git a/source/blender/sequencer/intern/strip_relations.c b/source/blender/sequencer/intern/strip_relations.c
index 18ae21e3a65..1a2ff08bd08 100644
--- a/source/blender/sequencer/intern/strip_relations.c
+++ b/source/blender/sequencer/intern/strip_relations.c
@@ -127,17 +127,49 @@ static void sequence_invalidate_cache(Scene *scene,
SEQ_prefetch_stop(scene);
}
+/* Find metastrips that contain invalidated_seq and invalidate them. */
+static bool seq_relations_find_and_invalidate_metas(Scene *scene,
+ Sequence *invalidated_seq,
+ Sequence *meta_seq)
+{
+ ListBase *seqbase;
+
+ if (meta_seq == NULL) {
+ Editing *ed = SEQ_editing_get(scene, false);
+ seqbase = &ed->seqbase;
+ }
+ else {
+ seqbase = &meta_seq->seqbase;
+ }
+
+ LISTBASE_FOREACH (Sequence *, seq, seqbase) {
+ if (seq->type == SEQ_TYPE_META) {
+ if (seq_relations_find_and_invalidate_metas(scene, invalidated_seq, seq)) {
+ sequence_invalidate_cache(scene, seq, true, SEQ_CACHE_ALL_TYPES);
+ return true;
+ }
+ }
+ if (seq == invalidated_seq && meta_seq != NULL) {
+ sequence_invalidate_cache(scene, meta_seq, true, SEQ_CACHE_ALL_TYPES);
+ return true;
+ }
+ }
+ return false;
+}
+
void SEQ_relations_invalidate_cache_in_range(Scene *scene,
Sequence *seq,
Sequence *range_mask,
int invalidate_types)
{
seq_cache_cleanup_sequence(scene, seq, range_mask, invalidate_types, true);
+ seq_relations_find_and_invalidate_metas(scene, seq, NULL);
}
void SEQ_relations_invalidate_cache_raw(Scene *scene, Sequence *seq)
{
sequence_invalidate_cache(scene, seq, true, SEQ_CACHE_ALL_TYPES);
+ seq_relations_find_and_invalidate_metas(scene, seq, NULL);
}
void SEQ_relations_invalidate_cache_preprocessed(Scene *scene, Sequence *seq)
@@ -147,6 +179,7 @@ void SEQ_relations_invalidate_cache_preprocessed(Scene *scene, Sequence *seq)
true,
SEQ_CACHE_STORE_PREPROCESSED | SEQ_CACHE_STORE_COMPOSITE |
SEQ_CACHE_STORE_FINAL_OUT);
+ seq_relations_find_and_invalidate_metas(scene, seq, NULL);
}
void SEQ_relations_invalidate_cache_composite(Scene *scene, Sequence *seq)
@@ -157,6 +190,7 @@ void SEQ_relations_invalidate_cache_composite(Scene *scene, Sequence *seq)
sequence_invalidate_cache(
scene, seq, true, SEQ_CACHE_STORE_COMPOSITE | SEQ_CACHE_STORE_FINAL_OUT);
+ seq_relations_find_and_invalidate_metas(scene, seq, NULL);
}
void SEQ_relations_invalidate_dependent(Scene *scene, Sequence *seq)
@@ -167,6 +201,7 @@ void SEQ_relations_invalidate_dependent(Scene *scene, Sequence *seq)
sequence_invalidate_cache(
scene, seq, false, SEQ_CACHE_STORE_COMPOSITE | SEQ_CACHE_STORE_FINAL_OUT);
+ seq_relations_find_and_invalidate_metas(scene, seq, NULL);
}
static void invalidate_scene_strips(Scene *scene, Scene *scene_target, ListBase *seqbase)