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
diff options
context:
space:
mode:
authorFalk David <falkdavid@gmx.de>2021-01-21 23:59:56 +0300
committerFalk David <falkdavid@gmx.de>2021-01-21 23:59:56 +0300
commit41982af6a0fc8e11cf004a356f97222d7eb72c02 (patch)
treeb2516ecfb2b8be83abd4e4271dd6c8d4f8c15916 /source/blender
parentb4b02eb4ff772f1df6f37c5910695e2e8168d078 (diff)
parentf24992d2ec76bae600879ee6222ffbcc98de3fe8 (diff)
Merge branch 'blender-v2.92-release'
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/blenkernel/intern/attribute_access.cc13
-rw-r--r--source/blender/editors/gpencil/gpencil_interpolate.c14
-rw-r--r--source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp30
3 files changed, 35 insertions, 22 deletions
diff --git a/source/blender/blenkernel/intern/attribute_access.cc b/source/blender/blenkernel/intern/attribute_access.cc
index 21ab7f61447..85dabe4490c 100644
--- a/source/blender/blenkernel/intern/attribute_access.cc
+++ b/source/blender/blenkernel/intern/attribute_access.cc
@@ -873,10 +873,19 @@ OutputAttributePtr::OutputAttributePtr(GeometryComponent &component,
const int domain_size = component.attribute_domain_size(domain);
void *buffer = MEM_malloc_arrayN(domain_size, cpp_type->size(), __func__);
- cpp_type->construct_default_n(buffer, domain_size);
+ GMutableSpan new_span{*cpp_type, buffer, domain_size};
+
+ /* Copy converted values from conflicting attribute, in case the value is read.
+ * TODO: An optimization could be to not do this, when the caller says that the attribute will
+ * only be written. */
+ ReadAttributePtr src_attribute = component.attribute_get_for_read(
+ final_name, domain, data_type, nullptr);
+ for (const int i : blender::IndexRange(domain_size)) {
+ src_attribute->get(i, new_span[i]);
+ }
attribute_ = std::make_unique<blender::bke::TemporaryWriteAttribute>(
- domain, GMutableSpan{*cpp_type, buffer, domain_size}, component, std::move(final_name));
+ domain, new_span, component, std::move(final_name));
}
/* Store the computed attribute. If it was stored from the beginning already, nothing is done. This
diff --git a/source/blender/editors/gpencil/gpencil_interpolate.c b/source/blender/editors/gpencil/gpencil_interpolate.c
index fd0d5656448..55456cf717e 100644
--- a/source/blender/editors/gpencil/gpencil_interpolate.c
+++ b/source/blender/editors/gpencil/gpencil_interpolate.c
@@ -554,6 +554,13 @@ static int gpencil_interpolate_invoke(bContext *C, wmOperator *op, const wmEvent
return OPERATOR_CANCELLED;
}
+ if (GPENCIL_CURVE_EDIT_SESSIONS_ON(gpd)) {
+ BKE_report(op->reports,
+ RPT_ERROR,
+ "Cannot interpolate in curve edit mode");
+ return OPERATOR_CANCELLED;
+ }
+
/* need editable strokes */
if (!gpencil_interpolate_check_todo(C, gpd)) {
BKE_report(op->reports, RPT_ERROR, "Interpolation requires some editable strokes");
@@ -978,6 +985,13 @@ static int gpencil_interpolate_seq_exec(bContext *C, wmOperator *op)
return OPERATOR_CANCELLED;
}
+ if (GPENCIL_CURVE_EDIT_SESSIONS_ON(gpd)) {
+ BKE_report(op->reports,
+ RPT_ERROR,
+ "Cannot interpolate in curve edit mode");
+ return OPERATOR_CANCELLED;
+ }
+
/* loop all layer to check if need interpolation */
LISTBASE_FOREACH (bGPDlayer *, gpl, &gpd->layers) {
bGPDframe *prevFrame, *nextFrame;
diff --git a/source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp b/source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp
index 65fa193f92f..f45ff77cf41 100644
--- a/source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp
+++ b/source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp
@@ -178,24 +178,6 @@ static void init_view(Render *re)
}
}
-static void init_camera(Render *re)
-{
- // It is assumed that imported meshes are in the camera coordinate system.
- // Therefore, the view point (i.e., camera position) is at the origin, and
- // the model-view matrix is simply the identity matrix.
-
- zero_v3(g_freestyle.viewpoint);
-
- unit_m4(g_freestyle.mv);
-
- copy_m4_m4(g_freestyle.proj, re->winmat);
-
-#if 0
- print_m4("mv", g_freestyle.mv);
- print_m4("proj", g_freestyle.proj);
-#endif
-}
-
static char *escape_quotes(char *name)
{
char *s = (char *)MEM_mallocN(strlen(name) * 2 + 1, "escape_quotes");
@@ -632,9 +614,8 @@ void FRS_init_stroke_renderer(Render *re)
controller->ResetRenderCount();
}
-void FRS_begin_stroke_rendering(Render *re)
+void FRS_begin_stroke_rendering(Render *UNUSED(re))
{
- init_camera(re);
}
void FRS_do_stroke_rendering(Render *re, ViewLayer *view_layer)
@@ -657,6 +638,15 @@ void FRS_do_stroke_rendering(Render *re, ViewLayer *view_layer)
Depsgraph *depsgraph = DEG_graph_new(re->main, re->scene, scene_view_layer, DAG_EVAL_RENDER);
BKE_scene_graph_update_for_newframe(depsgraph);
+ /* Init camera
+ * Objects are transformed into camera coordinate system, therefore the camera position
+ * is zero and the modelview matrix is the identity matrix. */
+ Object *ob_camera_orig = RE_GetCamera(re);
+ Object *ob_camera_eval = DEG_get_evaluated_object(depsgraph, ob_camera_orig);
+ zero_v3(g_freestyle.viewpoint);
+ unit_m4(g_freestyle.mv);
+ RE_GetCameraWindow(re, ob_camera_eval, g_freestyle.proj);
+
// prepare Freestyle:
// - load mesh
// - add style modules