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:
authorJeroen Bakker <j.bakker@atmind.nl>2018-04-16 09:20:12 +0300
committerJeroen Bakker <j.bakker@atmind.nl>2018-04-16 09:20:12 +0300
commit7ffc8bc25d1c248900ddf9838490485b2d98effb (patch)
treef2e52c5ba8268e2d2f269ad8461a9ebe342aab49 /source
parent7bf252ddc0b31cac2b944ecdbfdff01a66c11b00 (diff)
parent9777cd2b1e65035085d6fe2f9d0f1923a48afe01 (diff)
Merge branch 'blender2.8' into blender2.8-workbench
Diffstat (limited to 'source')
-rw-r--r--source/blender/blenkernel/BKE_object.h16
-rw-r--r--source/blender/blenkernel/BKE_text.h2
-rw-r--r--source/blender/blenkernel/BKE_undo_system.h1
-rw-r--r--source/blender/blenkernel/intern/action.c2
-rw-r--r--source/blender/blenkernel/intern/object.c16
-rw-r--r--source/blender/blenkernel/intern/text.c93
-rw-r--r--source/blender/blenkernel/intern/undo_system.c10
-rw-r--r--source/blender/blenloader/BLO_undofile.h4
-rw-r--r--source/blender/blenloader/intern/undofile.c30
-rw-r--r--source/blender/blenloader/intern/writefile.c203
-rw-r--r--source/blender/collada/ArmatureImporter.cpp6
-rw-r--r--source/blender/compositor/operations/COM_VectorBlurOperation.cpp608
-rw-r--r--source/blender/draw/CMakeLists.txt1
-rw-r--r--source/blender/draw/engines/eevee/eevee_lights.c155
-rw-r--r--source/blender/draw/engines/eevee/eevee_materials.c19
-rw-r--r--source/blender/draw/engines/eevee/eevee_private.h7
-rw-r--r--source/blender/draw/engines/eevee/shaders/bsdf_common_lib.glsl31
-rw-r--r--source/blender/draw/engines/eevee/shaders/shadow_copy_frag.glsl2
-rw-r--r--source/blender/draw/engines/eevee/shaders/shadow_geom.glsl53
-rw-r--r--source/blender/draw/engines/eevee/shaders/shadow_store_frag.glsl2
-rw-r--r--source/blender/draw/engines/eevee/shaders/shadow_vert.glsl28
-rw-r--r--source/blender/draw/intern/DRW_render.h2
-rw-r--r--source/blender/draw/intern/draw_manager.c2
-rw-r--r--source/blender/draw/intern/draw_manager_exec.c10
-rw-r--r--source/blender/editors/animation/anim_channels_edit.c4
-rw-r--r--source/blender/editors/armature/armature_add.c54
-rw-r--r--source/blender/editors/armature/armature_edit.c46
-rw-r--r--source/blender/editors/armature/armature_naming.c8
-rw-r--r--source/blender/editors/armature/armature_relations.c12
-rw-r--r--source/blender/editors/armature/armature_select.c54
-rw-r--r--source/blender/editors/armature/armature_skinning.c2
-rw-r--r--source/blender/editors/armature/armature_utils.c30
-rw-r--r--source/blender/editors/armature/editarmature_generate.c6
-rw-r--r--source/blender/editors/armature/editarmature_retarget.c14
-rw-r--r--source/blender/editors/armature/editarmature_sketch.c2
-rw-r--r--source/blender/editors/armature/meshlaplacian.c2
-rw-r--r--source/blender/editors/armature/meshlaplacian.h2
-rw-r--r--source/blender/editors/armature/pose_select.c6
-rw-r--r--source/blender/editors/armature/pose_transform.c2
-rw-r--r--source/blender/editors/include/ED_armature.h52
-rw-r--r--source/blender/editors/interface/interface_intern.h1
-rw-r--r--source/blender/editors/interface/interface_widgets.c28
-rw-r--r--source/blender/editors/object/object_add.c2
-rw-r--r--source/blender/editors/object/object_modifier.c6
-rw-r--r--source/blender/editors/object/object_relations.c6
-rw-r--r--source/blender/editors/object/object_transform.c2
-rw-r--r--source/blender/editors/screen/screen_context.c4
-rw-r--r--source/blender/editors/sculpt_paint/paint_vertex_weight_ops.c2
-rw-r--r--source/blender/editors/space_outliner/outliner_select.c2
-rw-r--r--source/blender/editors/space_view3d/view3d_select.c44
-rw-r--r--source/blender/editors/transform/transform_conversions.c4
-rw-r--r--source/blender/editors/transform/transform_generics.c4
-rw-r--r--source/blender/editors/undo/memfile_undo.c3
-rw-r--r--source/blender/editors/util/ed_transverts.c2
-rw-r--r--source/blender/gpu/shaders/gpu_shader_2D_widget_base_vert.glsl21
-rw-r--r--source/blender/makesrna/intern/rna_armature.c6
-rw-r--r--source/blender/makesrna/intern/rna_armature_api.c2
-rw-r--r--source/blender/makesrna/intern/rna_scene.c2
-rw-r--r--source/blender/python/generic/bgl.c18
-rw-r--r--source/blenderplayer/bad_level_call_stubs/stubs.c8
60 files changed, 880 insertions, 886 deletions
diff --git a/source/blender/blenkernel/BKE_object.h b/source/blender/blenkernel/BKE_object.h
index ff05ffc8df7..c698db2e8f5 100644
--- a/source/blender/blenkernel/BKE_object.h
+++ b/source/blender/blenkernel/BKE_object.h
@@ -72,7 +72,7 @@ void BKE_object_free_caches(struct Object *object);
void BKE_object_modifier_hook_reset(struct Object *ob, struct HookModifierData *hmd);
-bool BKE_object_support_modifier_type_check(struct Object *ob, int modifier_type);
+bool BKE_object_support_modifier_type_check(const struct Object *ob, int modifier_type);
void BKE_object_link_modifiers(struct Object *ob_dst, const struct Object *ob_src);
void BKE_object_free_modifiers(struct Object *ob, const int flag);
@@ -80,9 +80,9 @@ void BKE_object_free_modifiers(struct Object *ob, const int flag);
void BKE_object_make_proxy(struct Object *ob, struct Object *target, struct Object *gob);
void BKE_object_copy_proxy_drivers(struct Object *ob, struct Object *target);
-bool BKE_object_exists_check(struct Object *obtest);
-bool BKE_object_is_in_editmode(struct Object *ob);
-bool BKE_object_is_in_editmode_vgroup(struct Object *ob);
+bool BKE_object_exists_check(const struct Object *obtest);
+bool BKE_object_is_in_editmode(const struct Object *ob);
+bool BKE_object_is_in_editmode_vgroup(const struct Object *ob);
bool BKE_object_is_in_wpaint_select_vert(const struct Object *ob);
typedef enum eObjectVisibilityCheck {
@@ -123,8 +123,8 @@ void BKE_object_copy_data(struct Main *bmain, struct Object *ob_dst, const struc
struct Object *BKE_object_copy(struct Main *bmain, const struct Object *ob);
void BKE_object_make_local(struct Main *bmain, struct Object *ob, const bool lib_local);
void BKE_object_make_local_ex(struct Main *bmain, struct Object *ob, const bool lib_local, const bool clear_proxy);
-bool BKE_object_is_libdata(struct Object *ob);
-bool BKE_object_obdata_is_libdata(struct Object *ob);
+bool BKE_object_is_libdata(const struct Object *ob);
+bool BKE_object_obdata_is_libdata(const struct Object *ob);
void BKE_object_obdata_size_init(struct Object *ob, const float scale);
@@ -136,7 +136,7 @@ void BKE_object_to_mat4(struct Object *ob, float mat[4][4]);
void BKE_object_apply_mat4(struct Object *ob, float mat[4][4], const bool use_compat, const bool use_parent);
void BKE_object_matrix_local_get(struct Object *ob, float mat[4][4]);
-bool BKE_object_pose_context_check(struct Object *ob);
+bool BKE_object_pose_context_check(const struct Object *ob);
struct Object *BKE_object_pose_armature_get(struct Object *ob);
struct Object *BKE_object_pose_armature_get_visible(struct Object *ob, struct ViewLayer *view_layer);
@@ -274,7 +274,7 @@ bool BKE_object_shapekey_free(struct Main *bmain, struct Object *ob);
bool BKE_object_flag_test_recursive(const struct Object *ob, short flag);
-bool BKE_object_is_child_recursive(struct Object *ob_parent, struct Object *ob_child);
+bool BKE_object_is_child_recursive(const struct Object *ob_parent, const struct Object *ob_child);
bool BKE_object_is_animated(struct Scene *scene, struct Object *ob);
/* return ModifierMode flag */
diff --git a/source/blender/blenkernel/BKE_text.h b/source/blender/blenkernel/BKE_text.h
index 98db06752c8..b53af3cec53 100644
--- a/source/blender/blenkernel/BKE_text.h
+++ b/source/blender/blenkernel/BKE_text.h
@@ -44,8 +44,6 @@ struct TextUndoBuf;
void BKE_text_free_lines (struct Text *text);
void BKE_text_free (struct Text *text);
-void txt_set_undostate (int u);
-int txt_get_undostate (void);
void BKE_text_init(struct Text *ta);
struct Text *BKE_text_add (struct Main *bmain, const char *name);
int txt_extended_ascii_as_utf8(char **str);
diff --git a/source/blender/blenkernel/BKE_undo_system.h b/source/blender/blenkernel/BKE_undo_system.h
index 9697c7dd8e2..53ea8ddefe8 100644
--- a/source/blender/blenkernel/BKE_undo_system.h
+++ b/source/blender/blenkernel/BKE_undo_system.h
@@ -149,6 +149,7 @@ bool BKE_undosys_step_push_with_type(UndoStack *ustack, struct bContext *C, cons
bool BKE_undosys_step_push(UndoStack *ustack, struct bContext *C, const char *name);
UndoStep *BKE_undosys_step_find_by_name_with_type(UndoStack *ustack, const char *name, const UndoType *ut);
+UndoStep *BKE_undosys_step_find_by_type(UndoStack *ustack, const UndoType *ut);
UndoStep *BKE_undosys_step_find_by_name(UndoStack *ustack, const char *name);
bool BKE_undosys_step_undo_with_data_ex(UndoStack *ustack, struct bContext *C, UndoStep *us, bool use_skip);
diff --git a/source/blender/blenkernel/intern/action.c b/source/blender/blenkernel/intern/action.c
index acb2db8d7ad..e47c87c995b 100644
--- a/source/blender/blenkernel/intern/action.c
+++ b/source/blender/blenkernel/intern/action.c
@@ -500,7 +500,7 @@ bPoseChannel *BKE_pose_channel_active(Object *ob)
}
/**
- * \see #ED_armature_bone_get_mirrored (edit-mode, matching function)
+ * \see #ED_armature_ebone_get_mirrored (edit-mode, matching function)
*/
bPoseChannel *BKE_pose_channel_get_mirrored(const bPose *pose, const char *name)
{
diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c
index 67769c9ae3b..875d716305f 100644
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@ -238,7 +238,7 @@ void BKE_object_modifier_hook_reset(Object *ob, HookModifierData *hmd)
}
}
-bool BKE_object_support_modifier_type_check(Object *ob, int modifier_type)
+bool BKE_object_support_modifier_type_check(const Object *ob, int modifier_type)
{
const ModifierTypeInfo *mti;
@@ -487,7 +487,7 @@ void BKE_object_free(Object *ob)
}
/* actual check for internal data, not context or flags */
-bool BKE_object_is_in_editmode(Object *ob)
+bool BKE_object_is_in_editmode(const Object *ob)
{
if (ob->data == NULL)
return false;
@@ -530,7 +530,7 @@ bool BKE_object_is_in_editmode(Object *ob)
return false;
}
-bool BKE_object_is_in_editmode_vgroup(Object *ob)
+bool BKE_object_is_in_editmode_vgroup(const Object *ob)
{
return (OB_TYPE_SUPPORT_VGROUP(ob->type) &&
BKE_object_is_in_editmode(ob));
@@ -578,7 +578,7 @@ bool BKE_object_is_visible(Object *ob, const eObjectVisibilityCheck mode)
}
}
-bool BKE_object_exists_check(Object *obtest)
+bool BKE_object_exists_check(const Object *obtest)
{
Object *ob;
@@ -1150,7 +1150,7 @@ static void copy_object_lod(Object *obn, const Object *ob, const int UNUSED(flag
obn->currentlod = (LodLevel *)obn->lodlevels.first;
}
-bool BKE_object_pose_context_check(Object *ob)
+bool BKE_object_pose_context_check(const Object *ob)
{
if ((ob) &&
(ob->type == OB_ARMATURE) &&
@@ -1352,13 +1352,13 @@ void BKE_object_make_local(Main *bmain, Object *ob, const bool lib_local)
}
/* Returns true if the Object is from an external blend file (libdata) */
-bool BKE_object_is_libdata(Object *ob)
+bool BKE_object_is_libdata(const Object *ob)
{
return (ob && ID_IS_LINKED(ob));
}
/* Returns true if the Object data is from an external blend file (libdata) */
-bool BKE_object_obdata_is_libdata(Object *ob)
+bool BKE_object_obdata_is_libdata(const Object *ob)
{
/* Linked objects with local obdata are forbidden! */
BLI_assert(!ob || !ob->data || (ID_IS_LINKED(ob) ? ID_IS_LINKED(ob->data) : true));
@@ -3138,7 +3138,7 @@ bool BKE_object_flag_test_recursive(const Object *ob, short flag)
}
}
-bool BKE_object_is_child_recursive(Object *ob_parent, Object *ob_child)
+bool BKE_object_is_child_recursive(const Object *ob_parent, const Object *ob_child)
{
for (ob_child = ob_child->parent; ob_child; ob_child = ob_child->parent) {
if (ob_child == ob_parent) {
diff --git a/source/blender/blenkernel/intern/text.c b/source/blender/blenkernel/intern/text.c
index cd9b8ae339d..b1ff2724375 100644
--- a/source/blender/blenkernel/intern/text.c
+++ b/source/blender/blenkernel/intern/text.c
@@ -174,18 +174,12 @@ static void txt_make_dirty(Text *text);
/***/
-static unsigned char undoing;
-
-/* allow to switch off undoing externally */
-void txt_set_undostate(int u)
-{
- undoing = u;
-}
-
-int txt_get_undostate(void)
-{
- return undoing;
-}
+/**
+ * Set to true when undoing (so we don't generate undo steps while undoing).
+ *
+ * Also use to disable undo entirely.
+ */
+static bool undoing;
/**
* \note caller must handle `undo_buf` and `compiled` members.
@@ -525,29 +519,26 @@ void BKE_text_make_local(Main *bmain, Text *text, const bool lib_local)
void BKE_text_clear(Text *text, TextUndoBuf *utxt) /* called directly from rna */
{
- int oldstate;
-
- if (utxt) {
- oldstate = txt_get_undostate();
- }
- txt_set_undostate(utxt != NULL);
+ const bool undoing_orig = undoing;
+ undoing = (utxt == NULL);
txt_sel_all(text);
txt_delete_sel(text, utxt);
- txt_set_undostate(oldstate);
+ undoing = undoing_orig;
txt_make_dirty(text);
}
void BKE_text_write(Text *text, TextUndoBuf *utxt, const char *str) /* called directly from rna */
{
- int oldstate;
+ const bool undoing_orig = undoing;
+ undoing = (utxt == NULL);
- oldstate = txt_get_undostate();
txt_insert_buf(text, utxt, str);
txt_move_eof(text, 0);
- txt_set_undostate(oldstate);
+
+ undoing = undoing_orig;
txt_make_dirty(text);
}
@@ -1395,7 +1386,8 @@ char *txt_sel_to_buf(Text *text)
void txt_insert_buf(Text *text, TextUndoBuf *utxt, const char *in_buffer)
{
- int l = 0, u, len;
+ const bool undoing_orig = undoing;
+ int l = 0, len;
size_t i = 0, j;
TextLine *add;
char *buffer;
@@ -1408,41 +1400,44 @@ void txt_insert_buf(Text *text, TextUndoBuf *utxt, const char *in_buffer)
buffer = BLI_strdupn(in_buffer, len);
len += txt_extended_ascii_as_utf8(&buffer);
- if (!undoing) txt_undo_add_blockop(text, utxt, UNDO_IBLOCK, buffer);
-
- u = undoing;
- undoing = 1;
+ if (!undoing) {
+ txt_undo_add_blockop(text, utxt, UNDO_IBLOCK, buffer);
+ }
+ undoing = true;
/* Read the first line (or as close as possible */
- while (buffer[i] && buffer[i] != '\n')
+ while (buffer[i] && buffer[i] != '\n') {
txt_add_raw_char(text, utxt, BLI_str_utf8_as_unicode_step(buffer, &i));
+ }
- if (buffer[i] == '\n') txt_split_curline(text, utxt);
- else { undoing = u; MEM_freeN(buffer); return; }
- i++;
+ if (buffer[i] == '\n') {
+ txt_split_curline(text, utxt);
+ i++;
- while (i < len) {
- l = 0;
+ while (i < len) {
+ l = 0;
- while (buffer[i] && buffer[i] != '\n') {
- i++; l++;
- }
-
- if (buffer[i] == '\n') {
- add = txt_new_linen(buffer + (i - l), l);
- BLI_insertlinkbefore(&text->lines, text->curl, add);
- i++;
- }
- else {
- for (j = i - l; j < i && j < len; )
- txt_add_raw_char(text, utxt, BLI_str_utf8_as_unicode_step(buffer, &j));
- break;
+ while (buffer[i] && buffer[i] != '\n') {
+ i++;
+ l++;
+ }
+
+ if (buffer[i] == '\n') {
+ add = txt_new_linen(buffer + (i - l), l);
+ BLI_insertlinkbefore(&text->lines, text->curl, add);
+ i++;
+ }
+ else {
+ for (j = i - l; j < i && j < len; ) {
+ txt_add_raw_char(text, utxt, BLI_str_utf8_as_unicode_step(buffer, &j));
+ }
+ break;
+ }
}
}
-
- MEM_freeN(buffer);
- undoing = u;
+ MEM_freeN(buffer);
+ undoing = undoing_orig;
}
/******************/
diff --git a/source/blender/blenkernel/intern/undo_system.c b/source/blender/blenkernel/intern/undo_system.c
index 40cdd57fc3b..fd62650e898 100644
--- a/source/blender/blenkernel/intern/undo_system.c
+++ b/source/blender/blenkernel/intern/undo_system.c
@@ -505,6 +505,16 @@ UndoStep *BKE_undosys_step_find_by_name(UndoStack *ustack, const char *name)
return BLI_rfindstring(&ustack->steps, name, offsetof(UndoStep, name));
}
+UndoStep *BKE_undosys_step_find_by_type(UndoStack *ustack, const UndoType *ut)
+{
+ for (UndoStep *us = ustack->steps.last; us; us = us->prev) {
+ if (us->type == ut) {
+ return us;
+ }
+ }
+ return NULL;
+}
+
bool BKE_undosys_step_undo_with_data_ex(
UndoStack *ustack, bContext *C, UndoStep *us,
bool use_skip)
diff --git a/source/blender/blenloader/BLO_undofile.h b/source/blender/blenloader/BLO_undofile.h
index b713b963056..c407ea31b9b 100644
--- a/source/blender/blenloader/BLO_undofile.h
+++ b/source/blender/blenloader/BLO_undofile.h
@@ -56,7 +56,9 @@ typedef struct MemFileUndoData {
} MemFileUndoData;
/* actually only used writefile.c */
-extern void memfile_chunk_add(MemFile *compare, MemFile *current, const char *buf, unsigned int size);
+extern void memfile_chunk_add(
+ MemFile *memfile, const char *buf, unsigned int size,
+ MemFileChunk **compchunk_step);
/* exports */
extern void BLO_memfile_free(MemFile *memfile);
diff --git a/source/blender/blenloader/intern/undofile.c b/source/blender/blenloader/intern/undofile.c
index f6584ecf25f..7133dee0e82 100644
--- a/source/blender/blenloader/intern/undofile.c
+++ b/source/blender/blenloader/intern/undofile.c
@@ -96,36 +96,26 @@ void BLO_memfile_merge(MemFile *first, MemFile *second)
BLO_memfile_free(first);
}
-void memfile_chunk_add(MemFile *compare, MemFile *current, const char *buf, unsigned int size)
+void memfile_chunk_add(
+ MemFile *memfile, const char *buf, unsigned int size,
+ MemFileChunk **compchunk_step)
{
- static MemFileChunk *compchunk = NULL;
- MemFileChunk *curchunk;
-
- /* this function inits when compare != NULL or when current == NULL */
- if (compare) {
- compchunk = compare->chunks.first;
- return;
- }
- if (current == NULL) {
- compchunk = NULL;
- return;
- }
-
- curchunk = MEM_mallocN(sizeof(MemFileChunk), "MemFileChunk");
+ MemFileChunk *curchunk = MEM_mallocN(sizeof(MemFileChunk), "MemFileChunk");
curchunk->size = size;
curchunk->buf = NULL;
curchunk->is_identical = false;
- BLI_addtail(&current->chunks, curchunk);
-
+ BLI_addtail(&memfile->chunks, curchunk);
+
/* we compare compchunk with buf */
- if (compchunk) {
+ if (*compchunk_step != NULL) {
+ MemFileChunk *compchunk = *compchunk_step;
if (compchunk->size == curchunk->size) {
if (memcmp(compchunk->buf, buf, size) == 0) {
curchunk->buf = compchunk->buf;
curchunk->is_identical = true;
}
}
- compchunk = compchunk->next;
+ *compchunk_step = compchunk->next;
}
/* not equal... */
@@ -133,7 +123,7 @@ void memfile_chunk_add(MemFile *compare, MemFile *current, const char *buf, unsi
char *buf_new = MEM_mallocN(size, "Chunk buffer");
memcpy(buf_new, buf, size);
curchunk->buf = buf_new;
- current->size += size;
+ memfile->size += size;
}
}
diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c
index 40c54e04ec7..7f4e7fdc646 100644
--- a/source/blender/blenloader/intern/writefile.c
+++ b/source/blender/blenloader/intern/writefile.c
@@ -206,8 +206,11 @@
#define MYWRITE_BUFFER_SIZE (MEM_SIZE_OPTIMAL(1 << 17)) /* 128kb */
#define MYWRITE_MAX_CHUNK (MEM_SIZE_OPTIMAL(1 << 15)) /* ~32kb */
+/** Use if we want to store how many bytes have been written to the file. */
+// #define USE_WRITE_DATA_LEN
-/** \name Small API to handle compression.
+/* -------------------------------------------------------------------- */
+/** \name Internal Write Wrapper's (Abstracts Compression)
* \{ */
typedef enum {
@@ -311,20 +314,41 @@ static void ww_handle_init(eWriteWrapType ww_type, WriteWrap *r_ww)
/** \} */
-
+/* -------------------------------------------------------------------- */
+/** \name Write Data Type & Functions
+ * \{ */
typedef struct {
const struct SDNA *sdna;
- unsigned char *buf;
- MemFile *compare, *current;
+ /** Use for file and memory writing (fixed size of #MYWRITE_BUFFER_SIZE). */
+ uchar *buf;
+ /** Number of bytes used in #WriteData.buf (flushed when exceeded). */
+ int buf_used_len;
+
+#ifdef USE_WRITE_DATA_LEN
+ /** Total number of bytes written. */
+ size_t write_len;
+#endif
- int tot, count;
+ /** Set on unlikely case of an error (ignores further file writing). */
bool error;
- /* Wrap writing, so we can use zlib or
+ /** #MemFile writing (used for undo). */
+ struct {
+ MemFile *current;
+ MemFile *compare;
+ /** Use to de-duplicate chunks when writing. */
+ MemFileChunk *compare_chunk;
+ } mem;
+ /** When true, write to #WriteData.current, could also call 'is_undo'. */
+ bool use_memfile;
+
+ /**
+ * Wrap writing, so we can use zlib or
* other compression types later, see: G_FILE_COMPRESS
- * Will be NULL for UNDO. */
+ * Will be NULL for UNDO.
+ */
WriteWrap *ww;
#ifdef USE_BMESH_SAVE_AS_COMPAT
@@ -356,8 +380,8 @@ static void writedata_do_write(WriteData *wd, const void *mem, int memlen)
}
/* memory based save */
- if (wd->current) {
- memfile_chunk_add(NULL, wd->current, mem, memlen);
+ if (wd->use_memfile) {
+ memfile_chunk_add(wd->mem.current, mem, memlen, &wd->mem.compare_chunk);
}
else {
if (wd->ww->write(wd->ww, mem, memlen) != memlen) {
@@ -372,7 +396,11 @@ static void writedata_free(WriteData *wd)
MEM_freeN(wd);
}
-/***/
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Local Writing API 'mywrite'
+ * \{ */
/**
* Flush helps the de-duplicating memory for undo-save by logically segmenting data,
@@ -380,9 +408,9 @@ static void writedata_free(WriteData *wd)
*/
static void mywrite_flush(WriteData *wd)
{
- if (wd->count) {
- writedata_do_write(wd, wd->buf, wd->count);
- wd->count = 0;
+ if (wd->buf_used_len) {
+ writedata_do_write(wd, wd->buf, wd->buf_used_len);
+ wd->buf_used_len = 0;
}
}
@@ -390,7 +418,6 @@ static void mywrite_flush(WriteData *wd)
* Low level WRITE(2) wrapper that buffers data
* \param adr Pointer to new chunk of data
* \param len Length of new chunk of data
- * \warning Talks to other functions with global parameters
*/
static void mywrite(WriteData *wd, const void *adr, int len)
{
@@ -398,19 +425,21 @@ static void mywrite(WriteData *wd, const void *adr, int len)
return;
}
- if (adr == NULL) {
+ if (UNLIKELY(adr == NULL)) {
BLI_assert(0);
return;
}
- wd->tot += len;
+#ifdef USE_WRITE_DATA_LEN
+ wd->write_len += len;
+#endif
/* if we have a single big chunk, write existing data in
* buffer and write out big chunk in smaller pieces */
if (len > MYWRITE_MAX_CHUNK) {
- if (wd->count) {
- writedata_do_write(wd, wd->buf, wd->count);
- wd->count = 0;
+ if (wd->buf_used_len) {
+ writedata_do_write(wd, wd->buf, wd->buf_used_len);
+ wd->buf_used_len = 0;
}
do {
@@ -424,14 +453,14 @@ static void mywrite(WriteData *wd, const void *adr, int len)
}
/* if data would overflow buffer, write out the buffer */
- if (len + wd->count > MYWRITE_BUFFER_SIZE - 1) {
- writedata_do_write(wd, wd->buf, wd->count);
- wd->count = 0;
+ if (len + wd->buf_used_len > MYWRITE_BUFFER_SIZE - 1) {
+ writedata_do_write(wd, wd->buf, wd->buf_used_len);
+ wd->buf_used_len = 0;
}
/* append data at end of buffer */
- memcpy(&wd->buf[wd->count], adr, len);
- wd->count += len;
+ memcpy(&wd->buf[wd->buf_used_len], adr, len);
+ wd->buf_used_len += len;
}
/**
@@ -441,19 +470,17 @@ static void mywrite(WriteData *wd, const void *adr, int len)
* \param current The current memory file (can be NULL).
* \warning Talks to other functions with global parameters
*/
-static WriteData *bgnwrite(WriteWrap *ww, MemFile *compare, MemFile *current)
+static WriteData *mywrite_begin(WriteWrap *ww, MemFile *compare, MemFile *current)
{
WriteData *wd = writedata_new(ww);
- if (wd == NULL) {
- return NULL;
+ if (current != NULL) {
+ wd->mem.current = current;
+ wd->mem.compare = compare;
+ wd->mem.compare_chunk = compare ? compare->chunks.first : NULL;
+ wd->use_memfile = true;
}
- wd->compare = compare;
- wd->current = current;
- /* this inits comparing */
- memfile_chunk_add(compare, NULL, NULL, 0);
-
return wd;
}
@@ -463,11 +490,11 @@ static WriteData *bgnwrite(WriteWrap *ww, MemFile *compare, MemFile *current)
* \return unknown global variable otherwise
* \warning Talks to other functions with global parameters
*/
-static bool endwrite(WriteData *wd)
+static bool mywrite_end(WriteData *wd)
{
- if (wd->count) {
- writedata_do_write(wd, wd->buf, wd->count);
- wd->count = 0;
+ if (wd->buf_used_len) {
+ writedata_do_write(wd, wd->buf, wd->buf_used_len);
+ wd->buf_used_len = 0;
}
const bool err = wd->error;
@@ -476,7 +503,11 @@ static bool endwrite(WriteData *wd)
return err;
}
-/* ********** WRITE FILE ****************** */
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Generic DNA File Writing
+ * \{ */
static void writestruct_at_address_nr(
WriteData *wd, int filecode, const int struct_nr, int nr,
@@ -602,8 +633,14 @@ static void writelist_id(WriteData *wd, int filecode, const char *structname, co
#define writelist(wd, filecode, struct_id, lb) \
writelist_nr(wd, filecode, SDNA_TYPE_FROM_STRUCT(struct_id), lb)
-/* *************** writing some direct data structs used in more code parts **************** */
-/*These functions are used by blender's .blend system for file saving/loading.*/
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Typed DNA File Writing
+ *
+ * These functions are used by blender's .blend system for file saving/loading.
+ * \{ */
+
void IDP_WriteProperty_OnlyData(const IDProperty *prop, void *wd);
void IDP_WriteProperty(const IDProperty *prop, void *wd);
@@ -830,7 +867,7 @@ static void write_fcurves(WriteData *wd, ListBase *fcurves)
static void write_action(WriteData *wd, bAction *act)
{
- if (act->id.us > 0 || wd->current) {
+ if (act->id.us > 0 || wd->use_memfile) {
writestruct(wd, ID_AC, bAction, 1, act);
write_iddata(wd, &act->id);
@@ -938,7 +975,7 @@ static void write_node_socket(WriteData *wd, bNodeTree *UNUSED(ntree), bNode *no
{
#ifdef USE_NODE_COMPAT_CUSTOMNODES
/* forward compatibility code, so older blenders still open (not for undo) */
- if (wd->current == NULL) {
+ if (wd->use_memfile == false) {
sock->stack_type = 1;
if (node->type == NODE_GROUP) {
@@ -1058,7 +1095,7 @@ static void write_nodetree_nolib(WriteData *wd, bNodeTree *ntree)
* Not ideal (there is no ideal solution here), but should do for now. */
NodeGlare *ndg = node->storage;
/* Not in undo case. */
- if (!wd->current) {
+ if (wd->use_memfile == false) {
switch (ndg->type) {
case 2: /* Grrrr! magic numbers :( */
ndg->angle = ndg->streaks;
@@ -1319,7 +1356,7 @@ static void write_pointcaches(WriteData *wd, ListBase *ptcaches)
static void write_particlesettings(WriteData *wd, ParticleSettings *part)
{
- if (part->id.us > 0 || wd->current) {
+ if (part->id.us > 0 || wd->use_memfile) {
/* write LibData */
writestruct(wd, ID_PA, ParticleSettings, 1, part);
write_iddata(wd, &part->id);
@@ -1904,7 +1941,7 @@ static void write_modifiers(WriteData *wd, ListBase *modbase)
static void write_object(WriteData *wd, Object *ob)
{
- if (ob->id.us > 0 || wd->current) {
+ if (ob->id.us > 0 || wd->use_memfile) {
/* write LibData */
writestruct(wd, ID_OB, Object, 1, ob);
write_iddata(wd, &ob->id);
@@ -1968,7 +2005,7 @@ static void write_object(WriteData *wd, Object *ob)
static void write_vfont(WriteData *wd, VFont *vf)
{
- if (vf->id.us > 0 || wd->current) {
+ if (vf->id.us > 0 || wd->use_memfile) {
/* write LibData */
writestruct(wd, ID_VF, VFont, 1, vf);
write_iddata(wd, &vf->id);
@@ -1985,7 +2022,7 @@ static void write_vfont(WriteData *wd, VFont *vf)
static void write_key(WriteData *wd, Key *key)
{
- if (key->id.us > 0 || wd->current) {
+ if (key->id.us > 0 || wd->use_memfile) {
/* write LibData */
writestruct(wd, ID_KE, Key, 1, key);
write_iddata(wd, &key->id);
@@ -2006,7 +2043,7 @@ static void write_key(WriteData *wd, Key *key)
static void write_camera(WriteData *wd, Camera *cam)
{
- if (cam->id.us > 0 || wd->current) {
+ if (cam->id.us > 0 || wd->use_memfile) {
/* write LibData */
writestruct(wd, ID_CA, Camera, 1, cam);
write_iddata(wd, &cam->id);
@@ -2023,7 +2060,7 @@ static void write_camera(WriteData *wd, Camera *cam)
static void write_mball(WriteData *wd, MetaBall *mb)
{
- if (mb->id.us > 0 || wd->current) {
+ if (mb->id.us > 0 || wd->use_memfile) {
/* write LibData */
writestruct(wd, ID_MB, MetaBall, 1, mb);
write_iddata(wd, &mb->id);
@@ -2042,7 +2079,7 @@ static void write_mball(WriteData *wd, MetaBall *mb)
static void write_curve(WriteData *wd, Curve *cu)
{
- if (cu->id.us > 0 || wd->current) {
+ if (cu->id.us > 0 || wd->use_memfile) {
/* write LibData */
writestruct(wd, ID_CU, Curve, 1, cu);
write_iddata(wd, &cu->id);
@@ -2143,7 +2180,7 @@ static void write_customdata(
int i;
/* write external customdata (not for undo) */
- if (data->external && !wd->current) {
+ if (data->external && (wd->use_memfile == false)) {
CustomData_external_write(data, id, CD_MASK_MESH, count, 0);
}
@@ -2213,7 +2250,7 @@ static void write_mesh(WriteData *wd, Mesh *mesh)
CustomDataLayer *llayers = NULL, llayers_buff[CD_TEMP_CHUNK_SIZE];
CustomDataLayer *players = NULL, players_buff[CD_TEMP_CHUNK_SIZE];
- if (mesh->id.us > 0 || wd->current) {
+ if (mesh->id.us > 0 || wd->use_memfile) {
/* write LibData */
if (!save_for_old_blender) {
/* write a copy of the mesh, don't modify in place because it is
@@ -2355,7 +2392,7 @@ static void write_mesh(WriteData *wd, Mesh *mesh)
static void write_lattice(WriteData *wd, Lattice *lt)
{
- if (lt->id.us > 0 || wd->current) {
+ if (lt->id.us > 0 || wd->use_memfile) {
/* write LibData */
writestruct(wd, ID_LT, Lattice, 1, lt);
write_iddata(wd, &lt->id);
@@ -2374,7 +2411,7 @@ static void write_lattice(WriteData *wd, Lattice *lt)
static void write_image(WriteData *wd, Image *ima)
{
- if (ima->id.us > 0 || wd->current) {
+ if (ima->id.us > 0 || wd->use_memfile) {
ImagePackedFile *imapf;
/* Some trickery to keep forward compatibility of packed images. */
@@ -2410,7 +2447,7 @@ static void write_image(WriteData *wd, Image *ima)
static void write_texture(WriteData *wd, Tex *tex)
{
- if (tex->id.us > 0 || wd->current) {
+ if (tex->id.us > 0 || wd->use_memfile) {
/* write LibData */
writestruct(wd, ID_TE, Tex, 1, tex);
write_iddata(wd, &tex->id);
@@ -2454,7 +2491,7 @@ static void write_texture(WriteData *wd, Tex *tex)
static void write_material(WriteData *wd, Material *ma)
{
- if (ma->id.us > 0 || wd->current) {
+ if (ma->id.us > 0 || wd->use_memfile) {
/* write LibData */
writestruct(wd, ID_MA, Material, 1, ma);
write_iddata(wd, &ma->id);
@@ -2488,7 +2525,7 @@ static void write_material(WriteData *wd, Material *ma)
static void write_world(WriteData *wd, World *wrld)
{
- if (wrld->id.us > 0 || wd->current) {
+ if (wrld->id.us > 0 || wd->use_memfile) {
/* write LibData */
writestruct(wd, ID_WO, World, 1, wrld);
write_iddata(wd, &wrld->id);
@@ -2515,7 +2552,7 @@ static void write_world(WriteData *wd, World *wrld)
static void write_lamp(WriteData *wd, Lamp *la)
{
- if (la->id.us > 0 || wd->current) {
+ if (la->id.us > 0 || wd->use_memfile) {
/* write LibData */
writestruct(wd, ID_LA, Lamp, 1, la);
write_iddata(wd, &la->id);
@@ -2832,7 +2869,7 @@ static void write_scene(WriteData *wd, Scene *sce)
static void write_gpencil(WriteData *wd, bGPdata *gpd)
{
- if (gpd->id.us > 0 || wd->current) {
+ if (gpd->id.us > 0 || wd->use_memfile) {
/* write gpd data block to file */
writestruct(wd, ID_GD, bGPdata, 1, gpd);
write_iddata(wd, &gpd->id);
@@ -3147,7 +3184,7 @@ static void write_bone(WriteData *wd, Bone *bone)
static void write_armature(WriteData *wd, bArmature *arm)
{
- if (arm->id.us > 0 || wd->current) {
+ if (arm->id.us > 0 || wd->use_memfile) {
writestruct(wd, ID_AR, bArmature, 1, arm);
write_iddata(wd, &arm->id);
@@ -3190,7 +3227,7 @@ static void write_text(WriteData *wd, Text *text)
static void write_speaker(WriteData *wd, Speaker *spk)
{
- if (spk->id.us > 0 || wd->current) {
+ if (spk->id.us > 0 || wd->use_memfile) {
/* write LibData */
writestruct(wd, ID_SPK, Speaker, 1, spk);
write_iddata(wd, &spk->id);
@@ -3203,7 +3240,7 @@ static void write_speaker(WriteData *wd, Speaker *spk)
static void write_sound(WriteData *wd, bSound *sound)
{
- if (sound->id.us > 0 || wd->current) {
+ if (sound->id.us > 0 || wd->use_memfile) {
/* write LibData */
writestruct(wd, ID_SO, bSound, 1, sound);
write_iddata(wd, &sound->id);
@@ -3218,7 +3255,7 @@ static void write_sound(WriteData *wd, bSound *sound)
static void write_probe(WriteData *wd, LightProbe *prb)
{
- if (prb->id.us > 0 || wd->current) {
+ if (prb->id.us > 0 || wd->use_memfile) {
/* write LibData */
writestruct(wd, ID_LP, LightProbe, 1, prb);
write_iddata(wd, &prb->id);
@@ -3231,7 +3268,7 @@ static void write_probe(WriteData *wd, LightProbe *prb)
static void write_group(WriteData *wd, Group *group)
{
- if (group->id.us > 0 || wd->current) {
+ if (group->id.us > 0 || wd->use_memfile) {
/* write LibData */
writestruct(wd, ID_GR, Group, 1, group);
write_iddata(wd, &group->id);
@@ -3244,7 +3281,7 @@ static void write_group(WriteData *wd, Group *group)
static void write_nodetree(WriteData *wd, bNodeTree *ntree)
{
- if (ntree->id.us > 0 || wd->current) {
+ if (ntree->id.us > 0 || wd->use_memfile) {
writestruct(wd, ID_NT, bNodeTree, 1, ntree);
/* Note that trees directly used by other IDs (materials etc.) are not 'real' ID, they cannot
* be linked, etc., so we write actual id data here only, for 'real' ID trees. */
@@ -3326,7 +3363,7 @@ static void customnodes_free_deprecated_data(Main *mainvar)
static void write_brush(WriteData *wd, Brush *brush)
{
- if (brush->id.us > 0 || wd->current) {
+ if (brush->id.us > 0 || wd->use_memfile) {
writestruct(wd, ID_BR, Brush, 1, brush);
write_iddata(wd, &brush->id);
@@ -3341,7 +3378,7 @@ static void write_brush(WriteData *wd, Brush *brush)
static void write_palette(WriteData *wd, Palette *palette)
{
- if (palette->id.us > 0 || wd->current) {
+ if (palette->id.us > 0 || wd->use_memfile) {
PaletteColor *color;
writestruct(wd, ID_PAL, Palette, 1, palette);
write_iddata(wd, &palette->id);
@@ -3354,7 +3391,7 @@ static void write_palette(WriteData *wd, Palette *palette)
static void write_paintcurve(WriteData *wd, PaintCurve *pc)
{
- if (pc->id.us > 0 || wd->current) {
+ if (pc->id.us > 0 || wd->use_memfile) {
writestruct(wd, ID_PC, PaintCurve, 1, pc);
write_iddata(wd, &pc->id);
@@ -3402,7 +3439,7 @@ static void write_movieReconstruction(WriteData *wd, MovieTrackingReconstruction
static void write_movieclip(WriteData *wd, MovieClip *clip)
{
- if (clip->id.us > 0 || wd->current) {
+ if (clip->id.us > 0 || wd->use_memfile) {
MovieTracking *tracking = &clip->tracking;
MovieTrackingObject *object;
@@ -3432,7 +3469,7 @@ static void write_movieclip(WriteData *wd, MovieClip *clip)
static void write_mask(WriteData *wd, Mask *mask)
{
- if (mask->id.us > 0 || wd->current) {
+ if (mask->id.us > 0 || wd->use_memfile) {
MaskLayer *masklay;
writestruct(wd, ID_MSK, Mask, 1, mask);
@@ -3737,7 +3774,7 @@ static void write_linestyle_geometry_modifiers(WriteData *wd, ListBase *modifier
static void write_linestyle(WriteData *wd, FreestyleLineStyle *linestyle)
{
- if (linestyle->id.us > 0 || wd->current) {
+ if (linestyle->id.us > 0 || wd->use_memfile) {
writestruct(wd, ID_LS, FreestyleLineStyle, 1, linestyle);
write_iddata(wd, &linestyle->id);
@@ -3763,7 +3800,7 @@ static void write_linestyle(WriteData *wd, FreestyleLineStyle *linestyle)
static void write_cachefile(WriteData *wd, CacheFile *cache_file)
{
- if (cache_file->id.us > 0 || wd->current) {
+ if (cache_file->id.us > 0 || wd->use_memfile) {
writestruct(wd, ID_CF, CacheFile, 1, cache_file);
if (cache_file->adt) {
@@ -3825,7 +3862,7 @@ static void write_libraries(WriteData *wd, Main *main)
PackedFile *pf = main->curlib->packedfile;
writestruct(wd, DATA, PackedFile, 1, pf);
writedata(wd, DATA, pf->size, pf->data);
- if (wd->current == NULL) {
+ if (wd->use_memfile == false) {
printf("write packed .blend: %s\n", main->curlib->name);
}
}
@@ -3853,7 +3890,7 @@ static void write_libraries(WriteData *wd, Main *main)
* - for undofile, curscene needs to be saved */
static void write_global(WriteData *wd, int fileflags, Main *mainvar)
{
- const bool is_undo = (wd->current != NULL);
+ const bool is_undo = wd->use_memfile;
FileGlobal fg;
bScreen *screen;
Scene *scene;
@@ -3910,6 +3947,12 @@ static void write_thumb(WriteData *wd, const BlendThumbnail *thumb)
}
}
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name File Writing (Private)
+ * \{ */
+
/* if MemFile * there's filesave to memory */
static bool write_file_handle(
Main *mainvar,
@@ -3924,7 +3967,7 @@ static bool write_file_handle(
blo_split_main(&mainlist, mainvar);
- wd = bgnwrite(ww, compare, current);
+ wd = mywrite_begin(ww, compare, current);
#ifdef USE_BMESH_SAVE_AS_COMPAT
wd->use_mesh_compat = (write_flags & G_FILE_MESH_COMPAT) != 0;
@@ -3953,7 +3996,7 @@ static bool write_file_handle(
* avoid thumbnail detecting changes because of this. */
mywrite_flush(wd);
- OverrideStaticStorage *override_storage = !wd->current ? BKE_override_static_operations_store_initialize() : NULL;
+ OverrideStaticStorage *override_storage = wd->use_memfile ? NULL : BKE_override_static_operations_store_initialize();
/* This outer loop allows to save first datablocks from real mainvar, then the temp ones from override process,
* if needed, without duplicating whole code. */
@@ -4142,7 +4185,7 @@ static bool write_file_handle(
blo_join_main(&mainlist);
- return endwrite(wd);
+ return mywrite_end(wd);
}
/* do reverse file history: .blend1 -> .blend2, .blend -> .blend1 */
@@ -4187,6 +4230,12 @@ static bool do_history(const char *name, ReportList *reports)
return 0;
}
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name File Writing (Public)
+ * \{ */
+
/**
* \return Success.
*/
@@ -4300,3 +4349,5 @@ bool BLO_write_file_mem(Main *mainvar, MemFile *compare, MemFile *current, int w
return (err == 0);
}
+
+/** \} */
diff --git a/source/blender/collada/ArmatureImporter.cpp b/source/blender/collada/ArmatureImporter.cpp
index b2794b3bd23..f24688479af 100644
--- a/source/blender/collada/ArmatureImporter.cpp
+++ b/source/blender/collada/ArmatureImporter.cpp
@@ -104,7 +104,7 @@ int ArmatureImporter::create_bone(SkinInfo *skin, COLLADAFW::Node *node, EditBon
it = std::find(finished_joints.begin(), finished_joints.end(), node);
if (it != finished_joints.end()) return chain_length;
- EditBone *bone = ED_armature_edit_bone_add(arm, (char *)bc_get_joint_name(node));
+ EditBone *bone = ED_armature_ebone_add(arm, bc_get_joint_name(node));
totbone++;
/*
@@ -636,8 +636,8 @@ Object *ArmatureImporter::create_armature_bones(SkinInfo& skin)
}
void ArmatureImporter::set_pose(Object *ob_arm, COLLADAFW::Node *root_node, const char *parentname, float parent_mat[4][4])
-{
- char *bone_name = (char *) bc_get_joint_name(root_node);
+{
+ const char *bone_name = bc_get_joint_name(root_node);
float mat[4][4];
float obmat[4][4];
diff --git a/source/blender/compositor/operations/COM_VectorBlurOperation.cpp b/source/blender/compositor/operations/COM_VectorBlurOperation.cpp
index bccfe025089..9c04e74a7da 100644
--- a/source/blender/compositor/operations/COM_VectorBlurOperation.cpp
+++ b/source/blender/compositor/operations/COM_VectorBlurOperation.cpp
@@ -24,20 +24,20 @@
#include "MEM_guardedalloc.h"
#include "BLI_math.h"
extern "C" {
- #include "BLI_jitter_2d.h"
+#include "BLI_jitter_2d.h"
}
#include "COM_VectorBlurOperation.h"
/* Defined */
-#define PASS_VECTOR_MAX 10000.0f
+#define PASS_VECTOR_MAX 10000.0f
/* Forward declarations */
struct ZSpan;
struct DrawBufPixel;
void zbuf_accumulate_vecblur(
- NodeBlurData *nbd, int xsize, int ysize, float *newrect,
- const float *imgrect, float *vecbufrect, const float *zbufrect);
+ NodeBlurData *nbd, int xsize, int ysize, float *newrect,
+ const float *imgrect, float *vecbufrect, const float *zbufrect);
void zbuf_alloc_span(ZSpan *zspan, int rectx, int recty, float clipcrop);
void zbuf_free_span(ZSpan *zspan);
void antialias_tagbuf(int xsize, int ysize, char *rectmove);
@@ -70,7 +70,7 @@ void VectorBlurOperation::initExecution()
void VectorBlurOperation::executePixel(float output[4], int x, int y, void *data)
{
- float *buffer = (float *) data;
+ float *buffer = (float *)data;
int index = (y * this->getWidth() + x) * COM_NUM_CHANNELS_COLOR;
copy_v4_v4(output, &buffer[index]);
}
@@ -148,7 +148,7 @@ typedef struct ZSpan {
float zmulx, zmuly, zofsx, zofsy;
int *rectz;
- DrawBufPixel* rectdraw;
+ DrawBufPixel *rectdraw;
float clipcrop;
} ZSpan;
@@ -158,13 +158,13 @@ void zbuf_alloc_span(ZSpan *zspan, int rectx, int recty, float clipcrop)
{
memset(zspan, 0, sizeof(ZSpan));
- zspan->rectx= rectx;
- zspan->recty= recty;
+ zspan->rectx = rectx;
+ zspan->recty = recty;
- zspan->span1= (float*)MEM_mallocN(recty*sizeof(float), "zspan");
- zspan->span2= (float*)MEM_mallocN(recty*sizeof(float), "zspan");
+ zspan->span1 = (float *)MEM_mallocN(recty * sizeof(float), "zspan");
+ zspan->span2 = (float *)MEM_mallocN(recty * sizeof(float), "zspan");
- zspan->clipcrop= clipcrop;
+ zspan->clipcrop = clipcrop;
}
void zbuf_free_span(ZSpan *zspan)
@@ -172,16 +172,16 @@ void zbuf_free_span(ZSpan *zspan)
if (zspan) {
if (zspan->span1) MEM_freeN(zspan->span1);
if (zspan->span2) MEM_freeN(zspan->span2);
- zspan->span1= zspan->span2= NULL;
+ zspan->span1 = zspan->span2 = NULL;
}
}
/* reset range for clipping */
static void zbuf_init_span(ZSpan *zspan)
{
- zspan->miny1= zspan->miny2= zspan->recty+1;
- zspan->maxy1= zspan->maxy2= -1;
- zspan->minp1= zspan->maxp1= zspan->minp2= zspan->maxp2= NULL;
+ zspan->miny1 = zspan->miny2 = zspan->recty + 1;
+ zspan->maxy1 = zspan->maxy2 = -1;
+ zspan->minp1 = zspan->maxp1 = zspan->minp2 = zspan->maxp2 = NULL;
}
static void zbuf_add_to_span(ZSpan *zspan, const float v1[2], const float v2[2])
@@ -191,30 +191,30 @@ static void zbuf_add_to_span(ZSpan *zspan, const float v1[2], const float v2[2])
float xx1, dx0, xs0;
int y, my0, my2;
- if (v1[1]<v2[1]) {
- minv= v1; maxv= v2;
+ if (v1[1] < v2[1]) {
+ minv = v1; maxv = v2;
}
else {
- minv= v2; maxv= v1;
+ minv = v2; maxv = v1;
}
- my0= ceil(minv[1]);
- my2= floor(maxv[1]);
+ my0 = ceil(minv[1]);
+ my2 = floor(maxv[1]);
- if (my2<0 || my0>= zspan->recty) return;
+ if (my2 < 0 || my0 >= zspan->recty) return;
/* clip top */
- if (my2>=zspan->recty) my2= zspan->recty-1;
+ if (my2 >= zspan->recty) my2 = zspan->recty - 1;
/* clip bottom */
- if (my0<0) my0= 0;
+ if (my0 < 0) my0 = 0;
- if (my0>my2) return;
+ if (my0 > my2) return;
/* if (my0>my2) should still fill in, that way we get spans that skip nicely */
- xx1= maxv[1]-minv[1];
- if (xx1>FLT_EPSILON) {
- dx0= (minv[0]-maxv[0])/xx1;
- xs0= dx0*(minv[1]-my2) + minv[0];
+ xx1 = maxv[1] - minv[1];
+ if (xx1 > FLT_EPSILON) {
+ dx0 = (minv[0] - maxv[0]) / xx1;
+ xs0 = dx0 * (minv[1] - my2) + minv[0];
}
else {
dx0 = 0.0f;
@@ -223,43 +223,43 @@ static void zbuf_add_to_span(ZSpan *zspan, const float v1[2], const float v2[2])
/* empty span */
if (zspan->maxp1 == NULL) {
- span= zspan->span1;
+ span = zspan->span1;
}
- else { /* does it complete left span? */
- if ( maxv == zspan->minp1 || minv==zspan->maxp1) {
- span= zspan->span1;
+ else { /* does it complete left span? */
+ if (maxv == zspan->minp1 || minv == zspan->maxp1) {
+ span = zspan->span1;
}
else {
- span= zspan->span2;
+ span = zspan->span2;
}
}
- if (span==zspan->span1) {
+ if (span == zspan->span1) {
// printf("left span my0 %d my2 %d\n", my0, my2);
- if (zspan->minp1==NULL || zspan->minp1[1] > minv[1] ) {
- zspan->minp1= minv;
+ if (zspan->minp1 == NULL || zspan->minp1[1] > minv[1]) {
+ zspan->minp1 = minv;
}
- if (zspan->maxp1==NULL || zspan->maxp1[1] < maxv[1] ) {
- zspan->maxp1= maxv;
+ if (zspan->maxp1 == NULL || zspan->maxp1[1] < maxv[1]) {
+ zspan->maxp1 = maxv;
}
- if (my0<zspan->miny1) zspan->miny1= my0;
- if (my2>zspan->maxy1) zspan->maxy1= my2;
+ if (my0 < zspan->miny1) zspan->miny1 = my0;
+ if (my2 > zspan->maxy1) zspan->maxy1 = my2;
}
else {
// printf("right span my0 %d my2 %d\n", my0, my2);
- if (zspan->minp2==NULL || zspan->minp2[1] > minv[1] ) {
- zspan->minp2= minv;
+ if (zspan->minp2 == NULL || zspan->minp2[1] > minv[1]) {
+ zspan->minp2 = minv;
}
- if (zspan->maxp2==NULL || zspan->maxp2[1] < maxv[1] ) {
- zspan->maxp2= maxv;
+ if (zspan->maxp2 == NULL || zspan->maxp2[1] < maxv[1]) {
+ zspan->maxp2 = maxv;
}
- if (my0<zspan->miny2) zspan->miny2= my0;
- if (my2>zspan->maxy2) zspan->maxy2= my2;
+ if (my0 < zspan->miny2) zspan->miny2 = my0;
+ if (my2 > zspan->maxy2) zspan->maxy2 = my2;
}
- for (y=my2; y>=my0; y--, xs0+= dx0) {
+ for (y = my2; y >= my0; y--, xs0 += dx0) {
/* xs0 is the xcoord! */
- span[y]= xs0;
+ span[y] = xs0;
}
}
@@ -292,79 +292,79 @@ static void zbuf_fill_in_rgba(ZSpan *zspan, DrawBufPixel *col, float *v1, float
zbuf_add_to_span(zspan, v4, v1);
/* clipped */
- if (zspan->minp2==NULL || zspan->maxp2==NULL) return;
+ if (zspan->minp2 == NULL || zspan->maxp2 == NULL) return;
my0 = max_ii(zspan->miny1, zspan->miny2);
my2 = min_ii(zspan->maxy1, zspan->maxy2);
// printf("my %d %d\n", my0, my2);
- if (my2<my0) return;
+ if (my2 < my0) return;
/* ZBUF DX DY, in floats still */
- x1= v1[0]- v2[0];
- x2= v2[0]- v3[0];
- y1= v1[1]- v2[1];
- y2= v2[1]- v3[1];
- z1= v1[2]- v2[2];
- z2= v2[2]- v3[2];
- x0= y1*z2-z1*y2;
- y0= z1*x2-x1*z2;
- z0= x1*y2-y1*x2;
+ x1 = v1[0] - v2[0];
+ x2 = v2[0] - v3[0];
+ y1 = v1[1] - v2[1];
+ y2 = v2[1] - v3[1];
+ z1 = v1[2] - v2[2];
+ z2 = v2[2] - v3[2];
+ x0 = y1 * z2 - z1 * y2;
+ y0 = z1 * x2 - x1 * z2;
+ z0 = x1 * y2 - y1 * x2;
- if (z0==0.0f) return;
+ if (z0 == 0.0f) return;
- xx1= (x0*v1[0] + y0*v1[1])/z0 + v1[2];
+ xx1 = (x0 * v1[0] + y0 * v1[1]) / z0 + v1[2];
- zxd= -(double)x0/(double)z0;
- zyd= -(double)y0/(double)z0;
- zy0= ((double)my2)*zyd + (double)xx1;
+ zxd = -(double)x0 / (double)z0;
+ zyd = -(double)y0 / (double)z0;
+ zy0 = ((double)my2) * zyd + (double)xx1;
/* start-offset in rect */
- rectx= zspan->rectx;
- rectzofs= (float *)(zspan->rectz + rectx*my2);
- rectpofs= ((DrawBufPixel *)zspan->rectdraw) + rectx*my2;
+ rectx = zspan->rectx;
+ rectzofs = (float *)(zspan->rectz + rectx * my2);
+ rectpofs = ((DrawBufPixel *)zspan->rectdraw) + rectx * my2;
/* correct span */
- sn1= (my0 + my2)/2;
+ sn1 = (my0 + my2) / 2;
if (zspan->span1[sn1] < zspan->span2[sn1]) {
- span1= zspan->span1+my2;
- span2= zspan->span2+my2;
+ span1 = zspan->span1 + my2;
+ span2 = zspan->span2 + my2;
}
else {
- span1= zspan->span2+my2;
- span2= zspan->span1+my2;
+ span1 = zspan->span2 + my2;
+ span2 = zspan->span1 + my2;
}
- for (y=my2; y>=my0; y--, span1--, span2--) {
+ for (y = my2; y >= my0; y--, span1--, span2--) {
- sn1= floor(*span1);
- sn2= floor(*span2);
+ sn1 = floor(*span1);
+ sn2 = floor(*span2);
sn1++;
- if (sn2>=rectx) sn2= rectx-1;
- if (sn1<0) sn1= 0;
+ if (sn2 >= rectx) sn2 = rectx - 1;
+ if (sn1 < 0) sn1 = 0;
- if (sn2>=sn1) {
- zverg= (double)sn1*zxd + zy0;
- rz= rectzofs+sn1;
- rp= rectpofs+sn1;
- x= sn2-sn1;
+ if (sn2 >= sn1) {
+ zverg = (double)sn1 * zxd + zy0;
+ rz = rectzofs + sn1;
+ rp = rectpofs + sn1;
+ x = sn2 - sn1;
- while (x>=0) {
+ while (x >= 0) {
if (zverg < (double)*rz) {
- *rz= zverg;
- *rp= *col;
+ *rz = zverg;
+ *rp = *col;
}
- zverg+= zxd;
+ zverg += zxd;
rz++;
rp++;
x--;
}
}
- zy0-=zyd;
- rectzofs-= rectx;
- rectpofs-= rectx;
+ zy0 -= zyd;
+ rectzofs -= rectx;
+ rectpofs -= rectx;
}
}
@@ -377,43 +377,43 @@ void antialias_tagbuf(int xsize, int ysize, char *rectmove)
int a, x, y, step;
/* 1: tag pixels to be candidate for AA */
- for (y=2; y<ysize; y++) {
+ for (y = 2; y < ysize; y++) {
/* setup rows */
- row1= rectmove + (y-2)*xsize;
- row2= row1 + xsize;
- row3= row2 + xsize;
- for (x=2; x<xsize; x++, row1++, row2++, row3++) {
+ row1 = rectmove + (y - 2) * xsize;
+ row2 = row1 + xsize;
+ row3 = row2 + xsize;
+ for (x = 2; x < xsize; x++, row1++, row2++, row3++) {
if (row2[1]) {
- if (row2[0]==0 || row2[2]==0 || row1[1]==0 || row3[1]==0)
- row2[1]= 128;
+ if (row2[0] == 0 || row2[2] == 0 || row1[1] == 0 || row3[1] == 0)
+ row2[1] = 128;
}
}
}
/* 2: evaluate horizontal scanlines and calculate alphas */
- row1= rectmove;
- for (y=0; y<ysize; y++) {
+ row1 = rectmove;
+ for (y = 0; y < ysize; y++) {
row1++;
- for (x=1; x<xsize; x++, row1++) {
- if (row1[0]==128 && row1[1]==128) {
+ for (x = 1; x < xsize; x++, row1++) {
+ if (row1[0] == 128 && row1[1] == 128) {
/* find previous color and next color and amount of steps to blend */
- prev= row1[-1];
- step= 1;
- while (x+step<xsize && row1[step]==128)
+ prev = row1[-1];
+ step = 1;
+ while (x + step < xsize && row1[step] == 128)
step++;
- if (x+step!=xsize) {
+ if (x + step != xsize) {
/* now we can blend values */
- next= row1[step];
+ next = row1[step];
/* note, prev value can be next value, but we do this loop to clear 128 then */
- for (a=0; a<step; a++) {
+ for (a = 0; a < step; a++) {
int fac, mfac;
- fac= ((a+1)<<8)/(step+1);
- mfac= 255-fac;
+ fac = ((a + 1) << 8) / (step + 1);
+ mfac = 255 - fac;
- row1[a]= (prev*mfac + next*fac)>>8;
+ row1[a] = (prev * mfac + next * fac) >> 8;
}
}
}
@@ -422,28 +422,28 @@ void antialias_tagbuf(int xsize, int ysize, char *rectmove)
/* 3: evaluate vertical scanlines and calculate alphas */
/* use for reading a copy of the original tagged buffer */
- for (x=0; x<xsize; x++) {
- row1= rectmove + x+xsize;
+ for (x = 0; x < xsize; x++) {
+ row1 = rectmove + x + xsize;
- for (y=1; y<ysize; y++, row1+=xsize) {
- if (row1[0]==128 && row1[xsize]==128) {
+ for (y = 1; y < ysize; y++, row1 += xsize) {
+ if (row1[0] == 128 && row1[xsize] == 128) {
/* find previous color and next color and amount of steps to blend */
- prev= row1[-xsize];
- step= 1;
- while (y+step<ysize && row1[step*xsize]==128)
+ prev = row1[-xsize];
+ step = 1;
+ while (y + step < ysize && row1[step * xsize] == 128)
step++;
- if (y+step!=ysize) {
+ if (y + step != ysize) {
/* now we can blend values */
- next= row1[step*xsize];
+ next = row1[step * xsize];
/* note, prev value can be next value, but we do this loop to clear 128 then */
- for (a=0; a<step; a++) {
+ for (a = 0; a < step; a++) {
int fac, mfac;
- fac= ((a+1)<<8)/(step+1);
- mfac= 255-fac;
+ fac = ((a + 1) << 8) / (step + 1);
+ mfac = 255 - fac;
- row1[a*xsize]= (prev*mfac + next*fac)>>8;
+ row1[a * xsize] = (prev * mfac + next * fac) >> 8;
}
}
}
@@ -451,15 +451,15 @@ void antialias_tagbuf(int xsize, int ysize, char *rectmove)
}
/* last: pixels with 0 we fill in zbuffer, with 1 we skip for mask */
- for (y=2; y<ysize; y++) {
+ for (y = 2; y < ysize; y++) {
/* setup rows */
- row1= rectmove + (y-2)*xsize;
- row2= row1 + xsize;
- row3= row2 + xsize;
- for (x=2; x<xsize; x++, row1++, row2++, row3++) {
- if (row2[1]==0) {
- if (row2[0]>1 || row2[2]>1 || row1[1]>1 || row3[1]>1)
- row2[1]= 1;
+ row1 = rectmove + (y - 2) * xsize;
+ row2 = row1 + xsize;
+ row3 = row2 + xsize;
+ for (x = 2; x < xsize; x++, row1++, row2++, row3++) {
+ if (row2[1] == 0) {
+ if (row2[0] > 1 || row2[2] > 1 || row1[1] > 1 || row3[1] > 1)
+ row2[1] = 1;
}
}
}
@@ -473,32 +473,32 @@ static void quad_bezier_2d(float *result, float *v1, float *v2, float *ipodata)
{
float p1[2], p2[2], p3[2];
- p3[0]= -v2[0];
- p3[1]= -v2[1];
+ p3[0] = -v2[0];
+ p3[1] = -v2[1];
- p1[0]= v1[0];
- p1[1]= v1[1];
+ p1[0] = v1[0];
+ p1[1] = v1[1];
/* official formula 2*p2 - 0.5*p1 - 0.5*p3 */
- p2[0]= -0.5f*p1[0] - 0.5f*p3[0];
- p2[1]= -0.5f*p1[1] - 0.5f*p3[1];
+ p2[0] = -0.5f * p1[0] - 0.5f * p3[0];
+ p2[1] = -0.5f * p1[1] - 0.5f * p3[1];
- result[0]= ipodata[0]*p1[0] + ipodata[1]*p2[0] + ipodata[2]*p3[0];
- result[1]= ipodata[0]*p1[1] + ipodata[1]*p2[1] + ipodata[2]*p3[1];
+ result[0] = ipodata[0] * p1[0] + ipodata[1] * p2[0] + ipodata[2] * p3[0];
+ result[1] = ipodata[0] * p1[1] + ipodata[1] * p2[1] + ipodata[2] * p3[1];
}
static void set_quad_bezier_ipo(float fac, float *data)
{
- float mfac= (1.0f-fac);
+ float mfac = (1.0f - fac);
- data[0]= mfac*mfac;
- data[1]= 2.0f*mfac*fac;
- data[2]= fac*fac;
+ data[0] = mfac * mfac;
+ data[1] = 2.0f * mfac * fac;
+ data[2] = fac * fac;
}
void zbuf_accumulate_vecblur(
- NodeBlurData *nbd, int xsize, int ysize, float *newrect,
- const float *imgrect, float *vecbufrect, const float *zbufrect)
+ NodeBlurData *nbd, int xsize, int ysize, float *newrect,
+ const float *imgrect, float *vecbufrect, const float *zbufrect)
{
ZSpan zspan;
DrawBufPixel *rectdraw, *dr;
@@ -506,64 +506,64 @@ void zbuf_accumulate_vecblur(
float v1[3], v2[3], v3[3], v4[3], fx, fy;
const float *dimg, *dz, *ro;
float *rectvz, *dvz, *dvec1, *dvec2, *dz1, *dz2, *rectz;
- float *minvecbufrect= NULL, *rectweight, *rw, *rectmax, *rm;
- float maxspeedsq= (float)nbd->maxspeed*nbd->maxspeed;
- int y, x, step, maxspeed=nbd->maxspeed, samples= nbd->samples;
- int tsktsk= 0;
- static int firsttime= 1;
+ float *minvecbufrect = NULL, *rectweight, *rw, *rectmax, *rm;
+ float maxspeedsq = (float)nbd->maxspeed * nbd->maxspeed;
+ int y, x, step, maxspeed = nbd->maxspeed, samples = nbd->samples;
+ int tsktsk = 0;
+ static int firsttime = 1;
char *rectmove, *dm;
zbuf_alloc_span(&zspan, xsize, ysize, 1.0f);
- zspan.zmulx= ((float)xsize)/2.0f;
- zspan.zmuly= ((float)ysize)/2.0f;
- zspan.zofsx= 0.0f;
- zspan.zofsy= 0.0f;
+ zspan.zmulx = ((float)xsize) / 2.0f;
+ zspan.zmuly = ((float)ysize) / 2.0f;
+ zspan.zofsx = 0.0f;
+ zspan.zofsy = 0.0f;
/* the buffers */
- rectz= (float*)MEM_mapallocN(sizeof(float)*xsize*ysize, "zbuf accum");
- zspan.rectz= (int *)rectz;
+ rectz = (float *)MEM_mapallocN(sizeof(float) * xsize * ysize, "zbuf accum");
+ zspan.rectz = (int *)rectz;
- rectmove= (char*)MEM_mapallocN(xsize*ysize, "rectmove");
- rectdraw= (DrawBufPixel*)MEM_mapallocN(sizeof(DrawBufPixel)*xsize*ysize, "rect draw");
- zspan.rectdraw= rectdraw;
+ rectmove = (char *)MEM_mapallocN(xsize * ysize, "rectmove");
+ rectdraw = (DrawBufPixel *)MEM_mapallocN(sizeof(DrawBufPixel) * xsize * ysize, "rect draw");
+ zspan.rectdraw = rectdraw;
- rectweight= (float*)MEM_mapallocN(sizeof(float)*xsize*ysize, "rect weight");
- rectmax= (float*)MEM_mapallocN(sizeof(float)*xsize*ysize, "rect max");
+ rectweight = (float *)MEM_mapallocN(sizeof(float) * xsize * ysize, "rect weight");
+ rectmax = (float *)MEM_mapallocN(sizeof(float) * xsize * ysize, "rect max");
/* debug... check if PASS_VECTOR_MAX still is in buffers */
- dvec1= vecbufrect;
- for (x= 4*xsize*ysize; x>0; x--, dvec1++) {
- if (dvec1[0]==PASS_VECTOR_MAX) {
- dvec1[0]= 0.0f;
- tsktsk= 1;
+ dvec1 = vecbufrect;
+ for (x = 4 * xsize * ysize; x > 0; x--, dvec1++) {
+ if (dvec1[0] == PASS_VECTOR_MAX) {
+ dvec1[0] = 0.0f;
+ tsktsk = 1;
}
}
if (tsktsk) printf("Found uninitialized speed in vector buffer... fixed.\n");
/* min speed? then copy speedbuffer to recalculate speed vectors */
if (nbd->minspeed) {
- float minspeed= (float)nbd->minspeed;
- float minspeedsq= minspeed*minspeed;
+ float minspeed = (float)nbd->minspeed;
+ float minspeedsq = minspeed * minspeed;
- minvecbufrect= (float*)MEM_mapallocN(4*sizeof(float)*xsize*ysize, "minspeed buf");
+ minvecbufrect = (float *)MEM_mapallocN(4 * sizeof(float) * xsize * ysize, "minspeed buf");
- dvec1= vecbufrect;
- dvec2= minvecbufrect;
- for (x= 2*xsize*ysize; x>0; x--, dvec1+=2, dvec2+=2) {
- if (dvec1[0]==0.0f && dvec1[1]==0.0f) {
- dvec2[0]= dvec1[0];
- dvec2[1]= dvec1[1];
+ dvec1 = vecbufrect;
+ dvec2 = minvecbufrect;
+ for (x = 2 * xsize * ysize; x > 0; x--, dvec1 += 2, dvec2 += 2) {
+ if (dvec1[0] == 0.0f && dvec1[1] == 0.0f) {
+ dvec2[0] = dvec1[0];
+ dvec2[1] = dvec1[1];
}
else {
- float speedsq= dvec1[0]*dvec1[0] + dvec1[1]*dvec1[1];
+ float speedsq = dvec1[0] * dvec1[0] + dvec1[1] * dvec1[1];
if (speedsq <= minspeedsq) {
- dvec2[0]= 0.0f;
- dvec2[1]= 0.0f;
+ dvec2[0] = 0.0f;
+ dvec2[1] = 0.0f;
}
else {
speedsq = 1.0f - minspeed / sqrtf(speedsq);
- dvec2[0]= speedsq*dvec1[0];
- dvec2[1]= speedsq*dvec1[1];
+ dvec2[0] = speedsq * dvec1[0];
+ dvec2[1] = speedsq * dvec1[1];
}
}
}
@@ -571,75 +571,75 @@ void zbuf_accumulate_vecblur(
}
/* make vertex buffer with averaged speed and zvalues */
- rectvz= (float*)MEM_mapallocN(4*sizeof(float)*(xsize+1)*(ysize+1), "vertices");
- dvz= rectvz;
- for (y=0; y<=ysize; y++) {
+ rectvz = (float *)MEM_mapallocN(4 * sizeof(float) * (xsize + 1) * (ysize + 1), "vertices");
+ dvz = rectvz;
+ for (y = 0; y <= ysize; y++) {
- if (y==0)
- dvec1= vecbufrect + 4*y*xsize;
+ if (y == 0)
+ dvec1 = vecbufrect + 4 * y * xsize;
else
- dvec1= vecbufrect + 4*(y-1)*xsize;
+ dvec1 = vecbufrect + 4 * (y - 1) * xsize;
- if (y==ysize)
- dvec2= vecbufrect + 4*(y-1)*xsize;
+ if (y == ysize)
+ dvec2 = vecbufrect + 4 * (y - 1) * xsize;
else
- dvec2= vecbufrect + 4*y*xsize;
+ dvec2 = vecbufrect + 4 * y * xsize;
- for (x=0; x<=xsize; x++) {
+ for (x = 0; x <= xsize; x++) {
/* two vectors, so a step loop */
- for (step=0; step<2; step++, dvec1+=2, dvec2+=2, dvz+=2) {
+ for (step = 0; step < 2; step++, dvec1 += 2, dvec2 += 2, dvz += 2) {
/* average on minimal speed */
- int div= 0;
+ int div = 0;
- if (x!=0) {
- if (dvec1[-4]!=0.0f || dvec1[-3]!=0.0f) {
- dvz[0]= dvec1[-4];
- dvz[1]= dvec1[-3];
+ if (x != 0) {
+ if (dvec1[-4] != 0.0f || dvec1[-3] != 0.0f) {
+ dvz[0] = dvec1[-4];
+ dvz[1] = dvec1[-3];
div++;
}
- if (dvec2[-4]!=0.0f || dvec2[-3]!=0.0f) {
- if (div==0) {
- dvz[0]= dvec2[-4];
- dvz[1]= dvec2[-3];
+ if (dvec2[-4] != 0.0f || dvec2[-3] != 0.0f) {
+ if (div == 0) {
+ dvz[0] = dvec2[-4];
+ dvz[1] = dvec2[-3];
div++;
}
- else if ( (ABS(dvec2[-4]) + ABS(dvec2[-3]))< (ABS(dvz[0]) + ABS(dvz[1])) ) {
- dvz[0]= dvec2[-4];
- dvz[1]= dvec2[-3];
+ else if ( (ABS(dvec2[-4]) + ABS(dvec2[-3])) < (ABS(dvz[0]) + ABS(dvz[1])) ) {
+ dvz[0] = dvec2[-4];
+ dvz[1] = dvec2[-3];
}
}
}
- if (x!=xsize) {
- if (dvec1[0]!=0.0f || dvec1[1]!=0.0f) {
- if (div==0) {
- dvz[0]= dvec1[0];
- dvz[1]= dvec1[1];
+ if (x != xsize) {
+ if (dvec1[0] != 0.0f || dvec1[1] != 0.0f) {
+ if (div == 0) {
+ dvz[0] = dvec1[0];
+ dvz[1] = dvec1[1];
div++;
}
- else if ( (ABS(dvec1[0]) + ABS(dvec1[1]))< (ABS(dvz[0]) + ABS(dvz[1])) ) {
- dvz[0]= dvec1[0];
- dvz[1]= dvec1[1];
+ else if ( (ABS(dvec1[0]) + ABS(dvec1[1])) < (ABS(dvz[0]) + ABS(dvz[1])) ) {
+ dvz[0] = dvec1[0];
+ dvz[1] = dvec1[1];
}
}
- if (dvec2[0]!=0.0f || dvec2[1]!=0.0f) {
- if (div==0) {
- dvz[0]= dvec2[0];
- dvz[1]= dvec2[1];
+ if (dvec2[0] != 0.0f || dvec2[1] != 0.0f) {
+ if (div == 0) {
+ dvz[0] = dvec2[0];
+ dvz[1] = dvec2[1];
}
- else if ( (ABS(dvec2[0]) + ABS(dvec2[1]))< (ABS(dvz[0]) + ABS(dvz[1])) ) {
- dvz[0]= dvec2[0];
- dvz[1]= dvec2[1];
+ else if ( (ABS(dvec2[0]) + ABS(dvec2[1])) < (ABS(dvz[0]) + ABS(dvz[1])) ) {
+ dvz[0] = dvec2[0];
+ dvz[1] = dvec2[1];
}
}
}
if (maxspeed) {
- float speedsq= dvz[0]*dvz[0] + dvz[1]*dvz[1];
+ float speedsq = dvz[0] * dvz[0] + dvz[1] * dvz[1];
if (speedsq > maxspeedsq) {
speedsq = (float)maxspeed / sqrtf(speedsq);
- dvz[0]*= speedsq;
- dvz[1]*= speedsq;
+ dvz[0] *= speedsq;
+ dvz[1] *= speedsq;
}
}
}
@@ -647,117 +647,117 @@ void zbuf_accumulate_vecblur(
}
/* set border speeds to keep border speeds on border */
- dz1= rectvz;
- dz2= rectvz+4*(ysize)*(xsize+1);
- for (x=0; x<=xsize; x++, dz1+=4, dz2+=4) {
- dz1[1]= 0.0f;
- dz2[1]= 0.0f;
- dz1[3]= 0.0f;
- dz2[3]= 0.0f;
+ dz1 = rectvz;
+ dz2 = rectvz + 4 * (ysize) * (xsize + 1);
+ for (x = 0; x <= xsize; x++, dz1 += 4, dz2 += 4) {
+ dz1[1] = 0.0f;
+ dz2[1] = 0.0f;
+ dz1[3] = 0.0f;
+ dz2[3] = 0.0f;
}
- dz1= rectvz;
- dz2= rectvz+4*(xsize);
- for (y=0; y<=ysize; y++, dz1+=4*(xsize+1), dz2+=4*(xsize+1)) {
- dz1[0]= 0.0f;
- dz2[0]= 0.0f;
- dz1[2]= 0.0f;
- dz2[2]= 0.0f;
+ dz1 = rectvz;
+ dz2 = rectvz + 4 * (xsize);
+ for (y = 0; y <= ysize; y++, dz1 += 4 * (xsize + 1), dz2 += 4 * (xsize + 1)) {
+ dz1[0] = 0.0f;
+ dz2[0] = 0.0f;
+ dz1[2] = 0.0f;
+ dz2[2] = 0.0f;
}
/* tag moving pixels, only these faces we draw */
- dm= rectmove;
- dvec1= vecbufrect;
- for (x=xsize*ysize; x>0; x--, dm++, dvec1+=4) {
- if ((dvec1[0]!=0.0f || dvec1[1]!=0.0f || dvec1[2]!=0.0f || dvec1[3]!=0.0f))
- *dm= 255;
+ dm = rectmove;
+ dvec1 = vecbufrect;
+ for (x = xsize * ysize; x > 0; x--, dm++, dvec1 += 4) {
+ if ((dvec1[0] != 0.0f || dvec1[1] != 0.0f || dvec1[2] != 0.0f || dvec1[3] != 0.0f))
+ *dm = 255;
}
antialias_tagbuf(xsize, ysize, rectmove);
/* has to become static, the init-jit calls a random-seed, screwing up texture noise node */
if (firsttime) {
- firsttime= 0;
+ firsttime = 0;
BLI_jitter_init(jit, 256);
}
- memset(newrect, 0, sizeof(float)*xsize*ysize*4);
+ memset(newrect, 0, sizeof(float) * xsize * ysize * 4);
/* accumulate */
- samples/= 2;
- for (step= 1; step<=samples; step++) {
- float speedfac= 0.5f*nbd->fac*(float)step/(float)(samples+1);
+ samples /= 2;
+ for (step = 1; step <= samples; step++) {
+ float speedfac = 0.5f * nbd->fac * (float)step / (float)(samples + 1);
int side;
- for (side=0; side<2; side++) {
+ for (side = 0; side < 2; side++) {
float blendfac, ipodata[4];
/* clear zbuf, if we draw future we fill in not moving pixels */
if (0)
- for (x= xsize*ysize-1; x>=0; x--) rectz[x]= 10e16;
+ for (x = xsize * ysize - 1; x >= 0; x--) rectz[x] = 10e16;
else
- for (x= xsize*ysize-1; x>=0; x--) {
- if (rectmove[x]==0)
- rectz[x]= zbufrect[x];
+ for (x = xsize * ysize - 1; x >= 0; x--) {
+ if (rectmove[x] == 0)
+ rectz[x] = zbufrect[x];
else
- rectz[x]= 10e16;
+ rectz[x] = 10e16;
}
/* clear drawing buffer */
- for (x= xsize*ysize-1; x>=0; x--) rectdraw[x].colpoin= NULL;
+ for (x = xsize * ysize - 1; x >= 0; x--) rectdraw[x].colpoin = NULL;
- dimg= imgrect;
- dm= rectmove;
- dz= zbufrect;
- dz1= rectvz;
- dz2= rectvz + 4*(xsize + 1);
+ dimg = imgrect;
+ dm = rectmove;
+ dz = zbufrect;
+ dz1 = rectvz;
+ dz2 = rectvz + 4 * (xsize + 1);
if (side) {
- if (nbd->curved==0) {
- dz1+= 2;
- dz2+= 2;
+ if (nbd->curved == 0) {
+ dz1 += 2;
+ dz2 += 2;
}
- speedfac= -speedfac;
+ speedfac = -speedfac;
}
- set_quad_bezier_ipo(0.5f + 0.5f*speedfac, ipodata);
+ set_quad_bezier_ipo(0.5f + 0.5f * speedfac, ipodata);
- for (fy= -0.5f+jit[step & 255][0], y=0; y<ysize; y++, fy+=1.0f) {
- for (fx= -0.5f+jit[step & 255][1], x=0; x<xsize; x++, fx+=1.0f, dimg+=4, dz1+=4, dz2+=4, dm++, dz++) {
- if (*dm>1) {
+ for (fy = -0.5f + jit[step & 255][0], y = 0; y < ysize; y++, fy += 1.0f) {
+ for (fx = -0.5f + jit[step & 255][1], x = 0; x < xsize; x++, fx += 1.0f, dimg += 4, dz1 += 4, dz2 += 4, dm++, dz++) {
+ if (*dm > 1) {
float jfx = fx + 0.5f;
float jfy = fy + 0.5f;
DrawBufPixel col;
/* make vertices */
- if (nbd->curved) { /* curved */
- quad_bezier_2d(v1, dz1, dz1+2, ipodata);
- v1[0]+= jfx; v1[1]+= jfy; v1[2]= *dz;
+ if (nbd->curved) { /* curved */
+ quad_bezier_2d(v1, dz1, dz1 + 2, ipodata);
+ v1[0] += jfx; v1[1] += jfy; v1[2] = *dz;
- quad_bezier_2d(v2, dz1+4, dz1+4+2, ipodata);
- v2[0]+= jfx+1.0f; v2[1]+= jfy; v2[2]= *dz;
+ quad_bezier_2d(v2, dz1 + 4, dz1 + 4 + 2, ipodata);
+ v2[0] += jfx + 1.0f; v2[1] += jfy; v2[2] = *dz;
- quad_bezier_2d(v3, dz2+4, dz2+4+2, ipodata);
- v3[0]+= jfx+1.0f; v3[1]+= jfy+1.0f; v3[2]= *dz;
+ quad_bezier_2d(v3, dz2 + 4, dz2 + 4 + 2, ipodata);
+ v3[0] += jfx + 1.0f; v3[1] += jfy + 1.0f; v3[2] = *dz;
- quad_bezier_2d(v4, dz2, dz2+2, ipodata);
- v4[0]+= jfx; v4[1]+= jfy+1.0f; v4[2]= *dz;
+ quad_bezier_2d(v4, dz2, dz2 + 2, ipodata);
+ v4[0] += jfx; v4[1] += jfy + 1.0f; v4[2] = *dz;
}
else {
- v1[0]= speedfac*dz1[0]+jfx; v1[1]= speedfac*dz1[1]+jfy; v1[2]= *dz;
- v2[0]= speedfac*dz1[4]+jfx+1.0f; v2[1]= speedfac*dz1[5]+jfy; v2[2]= *dz;
- v3[0]= speedfac*dz2[4]+jfx+1.0f; v3[1]= speedfac*dz2[5]+jfy+1.0f; v3[2]= *dz;
- v4[0]= speedfac*dz2[0]+jfx; v4[1]= speedfac*dz2[1]+jfy+1.0f; v4[2]= *dz;
+ ARRAY_SET_ITEMS(v1, speedfac * dz1[0] + jfx, speedfac * dz1[1] + jfy, *dz);
+ ARRAY_SET_ITEMS(v2, speedfac * dz1[4] + jfx + 1.0f, speedfac * dz1[5] + jfy, *dz);
+ ARRAY_SET_ITEMS(v3, speedfac * dz2[4] + jfx + 1.0f, speedfac * dz2[5] + jfy + 1.0f, *dz);
+ ARRAY_SET_ITEMS(v4, speedfac * dz2[0] + jfx, speedfac * dz2[1] + jfy + 1.0f, *dz);
}
- if (*dm==255) col.alpha= 1.0f;
- else if (*dm<2) col.alpha= 0.0f;
- else col.alpha= ((float)*dm)/255.0f;
- col.colpoin= dimg;
+ if (*dm == 255) col.alpha = 1.0f;
+ else if (*dm < 2) col.alpha = 0.0f;
+ else col.alpha = ((float)*dm) / 255.0f;
+ col.colpoin = dimg;
zbuf_fill_in_rgba(&zspan, &col, v1, v2, v3, v4);
}
}
- dz1+=4;
- dz2+=4;
+ dz1 += 4;
+ dz2 += 4;
}
/* blend with a falloff. this fixes the ugly effect you get with
@@ -767,43 +767,43 @@ void zbuf_accumulate_vecblur(
* we don't know what is behind it so we don't do that. this hack
* overestimates the contribution of foreground pixels but looks a
* bit better without a sudden cutoff. */
- blendfac= ((samples - step)/(float)samples);
+ blendfac = ((samples - step) / (float)samples);
/* smoothstep to make it look a bit nicer as well */
- blendfac= 3.0f*pow(blendfac, 2.0f) - 2.0f*pow(blendfac, 3.0f);
+ blendfac = 3.0f * pow(blendfac, 2.0f) - 2.0f * pow(blendfac, 3.0f);
/* accum */
- rw= rectweight;
- rm= rectmax;
- for (dr= rectdraw, dz2=newrect, x= xsize*ysize-1; x>=0; x--, dr++, dz2+=4, rw++, rm++) {
+ rw = rectweight;
+ rm = rectmax;
+ for (dr = rectdraw, dz2 = newrect, x = xsize * ysize - 1; x >= 0; x--, dr++, dz2 += 4, rw++, rm++) {
if (dr->colpoin) {
- float bfac= dr->alpha*blendfac;
+ float bfac = dr->alpha * blendfac;
- dz2[0] += bfac*dr->colpoin[0];
- dz2[1] += bfac*dr->colpoin[1];
- dz2[2] += bfac*dr->colpoin[2];
- dz2[3] += bfac*dr->colpoin[3];
+ dz2[0] += bfac * dr->colpoin[0];
+ dz2[1] += bfac * dr->colpoin[1];
+ dz2[2] += bfac * dr->colpoin[2];
+ dz2[3] += bfac * dr->colpoin[3];
*rw += bfac;
- *rm= MAX2(*rm, bfac);
+ *rm = MAX2(*rm, bfac);
}
}
}
}
/* blend between original images and accumulated image */
- rw= rectweight;
- rm= rectmax;
- ro= imgrect;
- dm= rectmove;
- for (dz2=newrect, x= xsize*ysize-1; x>=0; x--, dz2+=4, ro+=4, rw++, rm++, dm++) {
+ rw = rectweight;
+ rm = rectmax;
+ ro = imgrect;
+ dm = rectmove;
+ for (dz2 = newrect, x = xsize * ysize - 1; x >= 0; x--, dz2 += 4, ro += 4, rw++, rm++, dm++) {
float mfac = *rm;
- float fac = (*rw == 0.0f)? 0.0f: mfac/(*rw);
+ float fac = (*rw == 0.0f) ? 0.0f : mfac / (*rw);
float nfac = 1.0f - mfac;
- dz2[0]= fac*dz2[0] + nfac*ro[0];
- dz2[1]= fac*dz2[1] + nfac*ro[1];
- dz2[2]= fac*dz2[2] + nfac*ro[2];
- dz2[3]= fac*dz2[3] + nfac*ro[3];
+ dz2[0] = fac * dz2[0] + nfac * ro[0];
+ dz2[1] = fac * dz2[1] + nfac * ro[1];
+ dz2[2] = fac * dz2[2] + nfac * ro[2];
+ dz2[3] = fac * dz2[3] + nfac * ro[3];
}
MEM_freeN(rectz);
diff --git a/source/blender/draw/CMakeLists.txt b/source/blender/draw/CMakeLists.txt
index 3e09cdd9768..f96f496a0f9 100644
--- a/source/blender/draw/CMakeLists.txt
+++ b/source/blender/draw/CMakeLists.txt
@@ -183,7 +183,6 @@ data_to_c_simple(engines/eevee/shaders/lightprobe_planar_downsample_vert.glsl SR
data_to_c_simple(engines/eevee/shaders/prepass_frag.glsl SRC)
data_to_c_simple(engines/eevee/shaders/prepass_vert.glsl SRC)
data_to_c_simple(engines/eevee/shaders/shadow_frag.glsl SRC)
-data_to_c_simple(engines/eevee/shaders/shadow_geom.glsl SRC)
data_to_c_simple(engines/eevee/shaders/shadow_vert.glsl SRC)
data_to_c_simple(engines/eevee/shaders/shadow_store_frag.glsl SRC)
data_to_c_simple(engines/eevee/shaders/shadow_copy_frag.glsl SRC)
diff --git a/source/blender/draw/engines/eevee/eevee_lights.c b/source/blender/draw/engines/eevee/eevee_lights.c
index 7496142a26e..86c9b9c850b 100644
--- a/source/blender/draw/engines/eevee/eevee_lights.c
+++ b/source/blender/draw/engines/eevee/eevee_lights.c
@@ -44,7 +44,6 @@ static struct {
} e_data = {NULL}; /* Engine data */
extern char datatoc_shadow_vert_glsl[];
-extern char datatoc_shadow_geom_glsl[];
extern char datatoc_shadow_frag_glsl[];
extern char datatoc_shadow_store_frag_glsl[];
extern char datatoc_shadow_copy_frag_glsl[];
@@ -106,7 +105,7 @@ void EEVEE_lights_init(EEVEE_ViewLayerData *sldata)
if (!e_data.shadow_sh) {
e_data.shadow_sh = DRW_shader_create(
- datatoc_shadow_vert_glsl, datatoc_shadow_geom_glsl, datatoc_shadow_frag_glsl, NULL);
+ datatoc_shadow_vert_glsl, NULL, datatoc_shadow_frag_glsl, NULL);
}
if (!sldata->lamps) {
@@ -287,8 +286,7 @@ void EEVEE_lights_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS;
psl->shadow_pass = DRW_pass_create("Shadow Pass", state);
- DRWShadingGroup *grp = stl->g_data->shadow_shgrp = DRW_shgroup_create(e_data.shadow_sh, psl->shadow_pass);
- DRW_shgroup_uniform_block(grp, "shadow_render_block", sldata->shadow_render_ubo);
+ stl->g_data->shadow_shgrp = DRW_shgroup_create(e_data.shadow_sh, psl->shadow_pass);
}
}
@@ -387,30 +385,26 @@ void EEVEE_lights_cache_add(EEVEE_ViewLayerData *sldata, Object *ob)
/* Add a shadow caster to the shadowpasses */
void EEVEE_lights_cache_shcaster_add(
- EEVEE_ViewLayerData *sldata, EEVEE_StorageList *stl, struct Gwn_Batch *geom, Object *ob)
+ EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_StorageList *stl, struct Gwn_Batch *geom, Object *ob)
{
- DRW_shgroup_call_object_instances_add(
+ DRW_shgroup_call_object_add(
stl->g_data->shadow_shgrp,
- geom, ob,
- &sldata->lamps->shadow_instance_count);
+ geom, ob);
}
void EEVEE_lights_cache_shcaster_material_add(
- EEVEE_ViewLayerData *sldata, EEVEE_PassList *psl, struct GPUMaterial *gpumat,
- struct Gwn_Batch *geom, struct Object *ob, float (*obmat)[4], float *alpha_threshold)
+ EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_PassList *psl, struct GPUMaterial *gpumat,
+ struct Gwn_Batch *geom, struct Object *ob, float *alpha_threshold)
{
/* TODO / PERF : reuse the same shading group for objects with the same material */
DRWShadingGroup *grp = DRW_shgroup_material_create(gpumat, psl->shadow_pass);
if (grp == NULL) return;
- DRW_shgroup_uniform_block(grp, "shadow_render_block", sldata->shadow_render_ubo);
- DRW_shgroup_uniform_mat4(grp, "ShadowModelMatrix", (float *)obmat);
-
if (alpha_threshold != NULL)
DRW_shgroup_uniform_float(grp, "alphaThreshold", alpha_threshold, 1);
- DRW_shgroup_call_object_instances_add(grp, geom, ob, &sldata->lamps->shadow_instance_count);
+ DRW_shgroup_call_object_add(grp, geom, ob);
}
/* Make that object update shadow casting lamps inside its influence bounding box. */
@@ -719,7 +713,6 @@ static void eevee_shadow_cascade_setup(Object *ob, EEVEE_LampsInfo *linfo, EEVEE
}
/* Lamps Matrices */
- float (*viewmat)[4], projmat[4][4];
int sh_nbr = 1; /* TODO : MSM */
int cascade_nbr = la->cascade_count;
@@ -730,10 +723,10 @@ static void eevee_shadow_cascade_setup(Object *ob, EEVEE_LampsInfo *linfo, EEVEE
/* obmat = Object Space > World Space */
/* viewmat = World Space > View Space */
- invert_m4_m4(sh_data->clipmat.mat[DRW_MAT_VIEW], ob->obmat);
- viewmat = sh_data->clipmat.mat[DRW_MAT_VIEW];
+ float (*viewmat)[4] = sh_data->viewmat;
+ invert_m4_m4(viewmat, ob->obmat);
normalize_m4(viewmat);
- invert_m4_m4(sh_data->clipmat.mat[DRW_MAT_VIEWINV], viewmat);
+ invert_m4_m4(sh_data->viewinv, viewmat);
/* The technique consists into splitting
* the view frustum into several sub-frustum
@@ -833,8 +826,8 @@ static void eevee_shadow_cascade_setup(Object *ob, EEVEE_LampsInfo *linfo, EEVEE
cascade_data->split_start[0] = LERP(la->cascade_fade, cascade_data->split_end[cascade_nbr - 1], prev_split);
/* For each cascade */
- rctf rect_clip, rect_cascade;
for (int c = 0; c < cascade_nbr; ++c) {
+ float (*projmat)[4] = sh_data->projmat[c];
/* Given 8 frustum corners */
float corners[8][3] = {
/* Near Cap */
@@ -877,32 +870,17 @@ static void eevee_shadow_cascade_setup(Object *ob, EEVEE_LampsInfo *linfo, EEVEE
add_v2_v2(center, shadow_texco);
/* Expand the projection to cover frustum range */
+ rctf rect_cascade;
BLI_rctf_init_pt_radius(&rect_cascade, center, sh_data->radius[c]);
orthographic_m4(projmat,
rect_cascade.xmin, rect_cascade.xmax,
rect_cascade.ymin, rect_cascade.ymax,
la->clipsta, la->clipend);
- if (c == 0) {
- memcpy(&rect_clip, &rect_cascade, sizeof(rect_clip));
- }
- else {
- BLI_rctf_union(&rect_clip, &rect_cascade);
- }
-
mul_m4_m4m4(sh_data->viewprojmat[c], projmat, viewmat);
mul_m4_m4m4(cascade_data->shadowmat[c], texcomat, sh_data->viewprojmat[c]);
}
- /* Clipping mats */
- orthographic_m4(sh_data->clipmat.mat[DRW_MAT_WIN],
- rect_clip.xmin, rect_clip.xmax,
- rect_clip.ymin, rect_clip.ymax,
- la->clipsta, la->clipend);
- mul_m4_m4m4(sh_data->clipmat.mat[DRW_MAT_PERS], sh_data->clipmat.mat[DRW_MAT_WIN], viewmat);
- invert_m4_m4(sh_data->clipmat.mat[DRW_MAT_WININV], sh_data->clipmat.mat[DRW_MAT_WIN]);
- invert_m4_m4(sh_data->clipmat.mat[DRW_MAT_PERSINV], sh_data->clipmat.mat[DRW_MAT_PERS]);
-
ubo_data->bias = 0.05f * la->bias;
ubo_data->near = la->clipsta;
ubo_data->far = la->clipend;
@@ -1004,37 +982,6 @@ void EEVEE_lights_update(EEVEE_ViewLayerData *sldata)
}
}
-static void eevee_shadows_cube_culling_frustum(EEVEE_ShadowRender *srd)
-{
- float persmat[4][4], persinv[4][4];
- float viewmat[4][4], viewinv[4][4];
- float winmat[4][4], wininv[4][4];
- orthographic_m4(winmat, -srd->clip_far, srd->clip_far, -srd->clip_far, srd->clip_far, -srd->clip_far, srd->clip_far);
- DRW_viewport_matrix_override_set(winmat, DRW_MAT_WIN);
-
- invert_m4_m4(wininv, winmat);
- DRW_viewport_matrix_override_set(wininv, DRW_MAT_WININV);
-
- unit_m4(viewmat);
- negate_v3_v3(viewmat[3], srd->position);
- DRW_viewport_matrix_override_set(viewmat, DRW_MAT_VIEW);
-
- unit_m4(viewinv);
- copy_v3_v3(viewinv[3], srd->position);
- DRW_viewport_matrix_override_set(viewinv, DRW_MAT_VIEWINV);
-
- mul_m4_m4m4(persmat, winmat, viewmat);
- DRW_viewport_matrix_override_set(persmat, DRW_MAT_PERS);
-
- invert_m4_m4(persinv, persmat);
- DRW_viewport_matrix_override_set(persinv, DRW_MAT_PERSINV);
-}
-
-static void eevee_shadows_cascade_culling_frustum(EEVEE_ShadowCascadeData *evscd)
-{
- DRW_viewport_matrix_override_set_all(&evscd->clipmat);
-}
-
/* this refresh lamps shadow buffers */
void EEVEE_draw_shadows(EEVEE_ViewLayerData *sldata, EEVEE_PassList *psl)
{
@@ -1058,32 +1005,45 @@ void EEVEE_draw_shadows(EEVEE_ViewLayerData *sldata, EEVEE_PassList *psl)
continue;
}
+ DRWMatrixState render_mats;
+ float (*winmat)[4] = render_mats.mat[DRW_MAT_WIN];
+ float (*viewmat)[4] = render_mats.mat[DRW_MAT_VIEW];
+ float (*persmat)[4] = render_mats.mat[DRW_MAT_PERS];
+
EEVEE_ShadowRender *srd = &linfo->shadow_render_data;
EEVEE_ShadowCubeData *evscd = &led->data.scd;
- float cube_projmat[4][4];
- float cube_viewmat[4][4];
- perspective_m4(cube_projmat, -la->clipsta, la->clipsta, -la->clipsta, la->clipsta, la->clipsta, la->clipend);
- unit_m4(cube_viewmat);
+ perspective_m4(winmat, -la->clipsta, la->clipsta, -la->clipsta, la->clipsta, la->clipsta, la->clipend);
srd->clip_near = la->clipsta;
srd->clip_far = la->clipend;
copy_v3_v3(srd->position, ob->obmat[3]);
- negate_v3_v3(cube_viewmat[3], srd->position);
- for (int j = 0; j < 6; j++) {
- mul_m4_m4m4(srd->viewmat[j], cubefacemat[j], cube_viewmat);
- mul_m4_m4m4(srd->shadowmat[j], cube_projmat, srd->viewmat[j]);
- }
DRW_uniformbuffer_update(sldata->shadow_render_ubo, srd);
- eevee_shadows_cube_culling_frustum(srd);
-
/* Render shadow cube */
- linfo->shadow_instance_count = 6;
- GPU_framebuffer_bind(sldata->shadow_cube_target_fb);
- GPU_framebuffer_clear_depth(sldata->shadow_cube_target_fb, 1.0f);
- DRW_draw_pass(psl->shadow_pass);
+ /* Render 6 faces separatly: seems to be faster for the general case.
+ * The only time it's more beneficial is when the CPU culling overhead
+ * outweight the instancing overhead. which is rarelly the case. */
+ for (int j = 0; j < 6; j++) {
+ /* TODO optimize */
+ float tmp[4][4];
+ unit_m4(tmp);
+ negate_v3_v3(tmp[3], srd->position);
+ mul_m4_m4m4(viewmat, cubefacemat[j], tmp);
+ mul_m4_m4m4(persmat, winmat, viewmat);
+ invert_m4_m4(render_mats.mat[DRW_MAT_WININV], winmat);
+ invert_m4_m4(render_mats.mat[DRW_MAT_VIEWINV], viewmat);
+ invert_m4_m4(render_mats.mat[DRW_MAT_PERSINV], persmat);
+
+ DRW_viewport_matrix_override_set_all(&render_mats);
+
+ GPU_framebuffer_texture_cubeface_attach(sldata->shadow_cube_target_fb,
+ sldata->shadow_cube_target, 0, j, 0);
+ GPU_framebuffer_bind(sldata->shadow_cube_target_fb);
+ GPU_framebuffer_clear_depth(sldata->shadow_cube_target_fb, 1.0f);
+ DRW_draw_pass(psl->shadow_pass);
+ }
/* 0.001f is arbitrary, but it should be relatively small so that filter size is not too big. */
float filter_texture_size = la->soft * 0.001f;
@@ -1143,22 +1103,39 @@ void EEVEE_draw_shadows(EEVEE_ViewLayerData *sldata, EEVEE_PassList *psl)
EEVEE_ShadowCascadeData *evscd = &led->data.scad;
EEVEE_ShadowRender *srd = &linfo->shadow_render_data;
+ DRWMatrixState render_mats;
+ float (*winmat)[4] = render_mats.mat[DRW_MAT_WIN];
+ float (*viewmat)[4] = render_mats.mat[DRW_MAT_VIEW];
+ float (*persmat)[4] = render_mats.mat[DRW_MAT_PERS];
+
eevee_shadow_cascade_setup(ob, linfo, led);
srd->clip_near = la->clipsta;
srd->clip_far = la->clipend;
- for (int j = 0; j < la->cascade_count; ++j) {
- copy_m4_m4(srd->shadowmat[j], evscd->viewprojmat[j]);
- }
+
DRW_uniformbuffer_update(sldata->shadow_render_ubo, &linfo->shadow_render_data);
- eevee_shadows_cascade_culling_frustum(evscd);
+ copy_m4_m4(viewmat, evscd->viewmat);
+ invert_m4_m4(render_mats.mat[DRW_MAT_VIEWINV], viewmat);
/* Render shadow cascades */
- linfo->shadow_instance_count = la->cascade_count;
- GPU_framebuffer_bind(sldata->shadow_cascade_target_fb);
- GPU_framebuffer_clear_depth(sldata->shadow_cascade_target_fb, 1.0);
- DRW_draw_pass(psl->shadow_pass);
+ /* Render cascade separatly: seems to be faster for the general case.
+ * The only time it's more beneficial is when the CPU culling overhead
+ * outweight the instancing overhead. which is rarelly the case. */
+ for (int j = 0; j < la->cascade_count; j++) {
+ copy_m4_m4(winmat, evscd->projmat[j]);
+ copy_m4_m4(persmat, evscd->viewprojmat[j]);
+ invert_m4_m4(render_mats.mat[DRW_MAT_WININV], winmat);
+ invert_m4_m4(render_mats.mat[DRW_MAT_PERSINV], persmat);
+
+ DRW_viewport_matrix_override_set_all(&render_mats);
+
+ GPU_framebuffer_texture_layer_attach(sldata->shadow_cascade_target_fb,
+ sldata->shadow_cascade_target, 0, j, 0);
+ GPU_framebuffer_bind(sldata->shadow_cascade_target_fb);
+ GPU_framebuffer_clear_depth(sldata->shadow_cascade_target_fb, 1.0f);
+ DRW_draw_pass(psl->shadow_pass);
+ }
/* TODO: OPTI: Filter all cascade in one/two draw call */
for (linfo->current_shadow_cascade = 0;
diff --git a/source/blender/draw/engines/eevee/eevee_materials.c b/source/blender/draw/engines/eevee/eevee_materials.c
index fc4439a253c..e64b8c4282f 100644
--- a/source/blender/draw/engines/eevee/eevee_materials.c
+++ b/source/blender/draw/engines/eevee/eevee_materials.c
@@ -47,7 +47,6 @@
/* *********** STATIC *********** */
static struct {
- char *shadow_shader_lib;
char *frag_shader_lib;
char *volume_shader_lib;
@@ -90,7 +89,6 @@ extern char datatoc_lit_surface_vert_glsl[];
extern char datatoc_raytrace_lib_glsl[];
extern char datatoc_ssr_lib_glsl[];
extern char datatoc_shadow_vert_glsl[];
-extern char datatoc_shadow_geom_glsl[];
extern char datatoc_lightprobe_geom_glsl[];
extern char datatoc_lightprobe_vert_glsl[];
extern char datatoc_background_vert_glsl[];
@@ -532,7 +530,8 @@ void EEVEE_materials_init(EEVEE_ViewLayerData *sldata, EEVEE_StorageList *stl, E
char *frag_str = NULL;
/* Shaders */
- e_data.shadow_shader_lib = BLI_string_joinN(
+ e_data.frag_shader_lib = BLI_string_joinN(
+ datatoc_common_view_lib_glsl,
datatoc_common_uniforms_lib_glsl,
datatoc_bsdf_common_lib_glsl,
datatoc_bsdf_sampling_lib_glsl,
@@ -556,10 +555,6 @@ void EEVEE_materials_init(EEVEE_ViewLayerData *sldata, EEVEE_StorageList *stl, E
datatoc_lit_surface_frag_glsl,
datatoc_volumetric_lib_glsl);
- e_data.frag_shader_lib = BLI_string_joinN(
- datatoc_common_view_lib_glsl,
- e_data.shadow_shader_lib);
-
e_data.volume_shader_lib = BLI_string_joinN(
datatoc_common_view_lib_glsl,
datatoc_common_uniforms_lib_glsl,
@@ -762,13 +757,13 @@ struct GPUMaterial *EEVEE_material_mesh_depth_get(
char *defines = eevee_get_defines(options);
char *frag_str = BLI_string_joinN(
- (is_shadow) ? e_data.shadow_shader_lib : e_data.frag_shader_lib,
+ e_data.frag_shader_lib,
datatoc_prepass_frag_glsl);
mat = DRW_shader_create_from_material(
scene, ma, engine, options,
(is_shadow) ? datatoc_shadow_vert_glsl : datatoc_lit_surface_vert_glsl,
- (is_shadow) ? datatoc_shadow_geom_glsl : NULL,
+ NULL,
frag_str,
defines);
@@ -1412,11 +1407,11 @@ void EEVEE_materials_cache_populate(EEVEE_Data *vedata, EEVEE_ViewLayerData *sld
break;
case MA_BS_CLIP:
gpumat = EEVEE_material_mesh_depth_get(scene, ma, false, true);
- EEVEE_lights_cache_shcaster_material_add(sldata, psl, gpumat, mat_geom[i], ob, ob->obmat, &ma->alpha_threshold);
+ EEVEE_lights_cache_shcaster_material_add(sldata, psl, gpumat, mat_geom[i], ob, &ma->alpha_threshold);
break;
case MA_BS_HASHED:
gpumat = EEVEE_material_mesh_depth_get(scene, ma, true, true);
- EEVEE_lights_cache_shcaster_material_add(sldata, psl, gpumat, mat_geom[i], ob, ob->obmat, NULL);
+ EEVEE_lights_cache_shcaster_material_add(sldata, psl, gpumat, mat_geom[i], ob, NULL);
break;
case MA_BS_NONE:
default:
@@ -1530,7 +1525,7 @@ void EEVEE_materials_free(void)
for (int i = 0; i < VAR_MAT_MAX; ++i) {
DRW_SHADER_FREE_SAFE(e_data.default_lit[i]);
}
- MEM_SAFE_FREE(e_data.shadow_shader_lib);
+ MEM_SAFE_FREE(e_data.frag_shader_lib);
MEM_SAFE_FREE(e_data.frag_shader_lib);
MEM_SAFE_FREE(e_data.volume_shader_lib);
DRW_SHADER_FREE_SAFE(e_data.default_prepass_sh);
diff --git a/source/blender/draw/engines/eevee/eevee_private.h b/source/blender/draw/engines/eevee/eevee_private.h
index bf77914832e..f0ba458dcc8 100644
--- a/source/blender/draw/engines/eevee/eevee_private.h
+++ b/source/blender/draw/engines/eevee/eevee_private.h
@@ -312,8 +312,6 @@ typedef struct EEVEE_ShadowCascade {
} EEVEE_ShadowCascade;
typedef struct EEVEE_ShadowRender {
- float shadowmat[6][4][4]; /* World->Lamp->NDC : used to render the shadow map. 6 frustum for cubemap shadow */
- float viewmat[6][4][4]; /* World->Lamp : used to render the shadow map. 6 viewmat for cubemap shadow */
float position[3], pad;
float cube_texel_size;
float stored_texel_size;
@@ -675,7 +673,8 @@ typedef struct EEVEE_ShadowCubeData {
typedef struct EEVEE_ShadowCascadeData {
short light_id, shadow_id, cascade_id, layer_id;
float viewprojmat[MAX_CASCADE_NUM][4][4]; /* World->Lamp->NDC : used for rendering the shadow map. */
- DRWMatrixState clipmat; /* Override matrices used for clipping. */
+ float projmat[MAX_CASCADE_NUM][4][4];
+ float viewmat[4][4], viewinv[4][4];
float radius[MAX_CASCADE_NUM];
} EEVEE_ShadowCascadeData;
@@ -806,7 +805,7 @@ void EEVEE_lights_cache_shcaster_add(
void EEVEE_lights_cache_shcaster_material_add(
EEVEE_ViewLayerData *sldata, EEVEE_PassList *psl,
struct GPUMaterial *gpumat, struct Gwn_Batch *geom, struct Object *ob,
- float (*obmat)[4], float *alpha_threshold);
+ float *alpha_threshold);
void EEVEE_lights_cache_shcaster_object_add(EEVEE_ViewLayerData *sldata, struct Object *ob);
void EEVEE_lights_cache_finish(EEVEE_ViewLayerData *sldata);
void EEVEE_lights_update(EEVEE_ViewLayerData *sldata);
diff --git a/source/blender/draw/engines/eevee/shaders/bsdf_common_lib.glsl b/source/blender/draw/engines/eevee/shaders/bsdf_common_lib.glsl
index 77c873c1503..b5e54c8747a 100644
--- a/source/blender/draw/engines/eevee/shaders/bsdf_common_lib.glsl
+++ b/source/blender/draw/engines/eevee/shaders/bsdf_common_lib.glsl
@@ -8,37 +8,6 @@
#define LUT_SIZE 64
-#ifdef SHADOW_SHADER
-layout(std140) uniform shadow_render_block {
- mat4 ShadowMatrix[6];
- mat4 FaceViewMatrix[6];
- vec4 lampPosition;
- float cubeTexelSize;
- float storedTexelSize;
- float nearClip;
- float farClip;
- int shadowSampleCount;
- float shadowInvSampleCount;
-};
-
-flat in int shFace; /* Shadow layer we are rendering to. */
-
-/* Replacing viewBlock */
-#define ViewMatrix FaceViewMatrix[shFace]
-#define ViewProjectionMatrix ShadowMatrix[shFace]
-/* TODO optimize */
-#define ProjectionMatrix \
-mat4(vec4(1.0, 0.0, 0.0, 0.0), \
- vec4(0.0, 1.0, 0.0, 0.0), \
- vec4(0.0, 0.0, -(farClip + nearClip) / (farClip - nearClip), -1.0), \
- vec4(0.0, 0.0, (-2.0 * farClip * nearClip) / (farClip - nearClip), 0.0))
-
-#define ViewMatrixInverse inverse(ViewMatrix)
-#define ViewProjectionMatrixInverse inverse(ViewProjectionMatrix)
-#define ProjectionMatrixInverse inverse(ProjectionMatrix)
-#define CameraTexCoFactors vec4(1.0f, 1.0f, 0.0f, 0.0f)
-#endif
-
/* Buffers */
uniform sampler2D colorBuffer;
uniform sampler2D depthBuffer;
diff --git a/source/blender/draw/engines/eevee/shaders/shadow_copy_frag.glsl b/source/blender/draw/engines/eevee/shaders/shadow_copy_frag.glsl
index 67b0fc2bdfc..4ae22b480f1 100644
--- a/source/blender/draw/engines/eevee/shaders/shadow_copy_frag.glsl
+++ b/source/blender/draw/engines/eevee/shaders/shadow_copy_frag.glsl
@@ -2,8 +2,6 @@
* to linear depth (or other storage method) and doing a 3x3 box filter. */
layout(std140) uniform shadow_render_block {
- mat4 ShadowMatrix[6];
- mat4 FaceViewMatrix[6];
vec4 lampPosition;
float cubeTexelSize;
float storedTexelSize;
diff --git a/source/blender/draw/engines/eevee/shaders/shadow_geom.glsl b/source/blender/draw/engines/eevee/shaders/shadow_geom.glsl
deleted file mode 100644
index ea51fa73a65..00000000000
--- a/source/blender/draw/engines/eevee/shaders/shadow_geom.glsl
+++ /dev/null
@@ -1,53 +0,0 @@
-
-layout(std140) uniform shadow_render_block {
- mat4 ShadowMatrix[6];
- mat4 FaceViewMatrix[6];
- vec4 lampPosition;
- float cubeTexelSize;
- float storedTexelSize;
- float nearClip;
- float farClip;
- int shadowSampleCount;
- float shadowInvSampleCount;
-};
-
-layout(triangles) in;
-layout(triangle_strip, max_vertices=3) out;
-
-in vec4 vPos[];
-flat in int face[];
-
-#ifdef MESH_SHADER
-in vec3 vNor[];
-#endif
-
-out vec3 worldPosition;
-#ifdef MESH_SHADER
-out vec3 viewPosition; /* Required. otherwise generate linking error. */
-out vec3 worldNormal; /* Required. otherwise generate linking error. */
-out vec3 viewNormal; /* Required. otherwise generate linking error. */
-flat out int shFace;
-#else
-int shFace;
-#endif
-
-void main() {
- shFace = face[0];
- gl_Layer = shFace;
-
- for (int v = 0; v < 3; ++v) {
- gl_Position = ShadowMatrix[shFace] * vPos[v];
- worldPosition = vPos[v].xyz;
-#ifdef MESH_SHADER
- worldNormal = vNor[v];
- viewPosition = (FaceViewMatrix[shFace] * vec4(worldPosition, 1.0)).xyz;
- viewNormal = (FaceViewMatrix[shFace] * vec4(worldNormal, 0.0)).xyz;
-#ifdef ATTRIB
- pass_attrib(v);
-#endif
-#endif
- EmitVertex();
- }
-
- EndPrimitive();
-} \ No newline at end of file
diff --git a/source/blender/draw/engines/eevee/shaders/shadow_store_frag.glsl b/source/blender/draw/engines/eevee/shaders/shadow_store_frag.glsl
index 0fc7e4c9396..b40155be454 100644
--- a/source/blender/draw/engines/eevee/shaders/shadow_store_frag.glsl
+++ b/source/blender/draw/engines/eevee/shaders/shadow_store_frag.glsl
@@ -1,7 +1,5 @@
layout(std140) uniform shadow_render_block {
- mat4 ShadowMatrix[6];
- mat4 FaceViewMatrix[6];
vec4 lampPosition;
float cubeTexelSize;
float storedTexelSize;
diff --git a/source/blender/draw/engines/eevee/shaders/shadow_vert.glsl b/source/blender/draw/engines/eevee/shaders/shadow_vert.glsl
index 29cbcfdd6e4..9fa57b8e136 100644
--- a/source/blender/draw/engines/eevee/shaders/shadow_vert.glsl
+++ b/source/blender/draw/engines/eevee/shaders/shadow_vert.glsl
@@ -1,29 +1,33 @@
-uniform mat4 ModelMatrix;
+uniform mat4 ModelViewProjectionMatrix;
#ifdef MESH_SHADER
+uniform mat4 ModelMatrix;
+uniform mat4 ModelViewMatrix;
uniform mat3 WorldNormalMatrix;
+# ifndef ATTRIB
+uniform mat3 NormalMatrix;
+# endif
#endif
in vec3 pos;
-#ifdef MESH_SHADER
in vec3 nor;
-#endif
-out vec4 vPos;
#ifdef MESH_SHADER
-out vec3 vNor;
+out vec3 worldPosition;
+out vec3 viewPosition;
+out vec3 worldNormal;
+out vec3 viewNormal;
#endif
-flat out int face;
-
void main() {
- vPos = ModelMatrix * vec4(pos, 1.0);
- face = gl_InstanceID;
-
+ gl_Position = ModelViewProjectionMatrix * vec4(pos, 1.0);
#ifdef MESH_SHADER
- vNor = WorldNormalMatrix * nor;
+ viewPosition = (ModelViewMatrix * vec4(pos, 1.0)).xyz;
+ worldPosition = (ModelMatrix * vec4(pos, 1.0)).xyz;
+ viewNormal = normalize(NormalMatrix * nor);
+ worldNormal = normalize(WorldNormalMatrix * nor);
#ifdef ATTRIB
pass_attrib(pos);
#endif
#endif
-}
+} \ No newline at end of file
diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h
index 60e855108f9..66ca8971a46 100644
--- a/source/blender/draw/intern/DRW_render.h
+++ b/source/blender/draw/intern/DRW_render.h
@@ -404,7 +404,7 @@ typedef struct DRWMatrixState {
void DRW_viewport_init(const bContext *C);
void DRW_viewport_matrix_get(float mat[4][4], DRWViewportMatrixType type);
void DRW_viewport_matrix_get_all(DRWMatrixState *state);
-void DRW_viewport_matrix_override_set(float mat[4][4], DRWViewportMatrixType type);
+void DRW_viewport_matrix_override_set(const float mat[4][4], DRWViewportMatrixType type);
void DRW_viewport_matrix_override_set_all(DRWMatrixState *state);
void DRW_viewport_matrix_override_unset(DRWViewportMatrixType type);
void DRW_viewport_matrix_override_unset_all(void);
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
index f9968fdc16c..b8ed341e2c5 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -518,7 +518,7 @@ void DRW_viewport_matrix_get_all(DRWMatrixState *state)
memcpy(state, DST.view_data.matstate.mat, sizeof(DRWMatrixState));
}
-void DRW_viewport_matrix_override_set(float mat[4][4], DRWViewportMatrixType type)
+void DRW_viewport_matrix_override_set(const float mat[4][4], DRWViewportMatrixType type)
{
BLI_assert(type < DRW_MAT_COUNT);
copy_m4_m4(DST.view_data.matstate.mat[type], mat);
diff --git a/source/blender/draw/intern/draw_manager_exec.c b/source/blender/draw/intern/draw_manager_exec.c
index e69a1026815..6021863c690 100644
--- a/source/blender/draw/intern/draw_manager_exec.c
+++ b/source/blender/draw/intern/draw_manager_exec.c
@@ -390,7 +390,8 @@ void DRW_state_clip_planes_reset(void)
* BKE_boundbox_init_from_minmax(&bbox, (const float[3]){-1.0f, -1.0f, -1.0f}, (const float[3]){1.0f, 1.0f, 1.0f});
* for (int i = 0; i < 8; i++) {mul_project_m4_v3(viewprojinv, bbox.vec[i]);}
*/
-static void draw_frustum_boundbox_calc(const float (*projmat)[4], const float (*viewinv)[4], BoundBox *r_bbox)
+static void UNUSED_FUNCTION(draw_frustum_boundbox_calc)(
+ const float (*projmat)[4], const float (*viewinv)[4], BoundBox *r_bbox)
{
float screenvecs[3][3], loc[3], near, far, w_half, h_half;
bool is_persp = projmat[3][3] == 0.0f;
@@ -492,7 +493,14 @@ static void draw_clipping_setup_from_view(void)
/* Extract Clipping Planes */
BoundBox bbox;
+#if 0 /* does not currently work for all casses. */
draw_frustum_boundbox_calc(projmat, viewinv, &bbox);
+#else
+ BKE_boundbox_init_from_minmax(&bbox, (const float[3]){-1.0f, -1.0f, -1.0f}, (const float[3]){1.0f, 1.0f, 1.0f});
+ for (int i = 0; i < 8; i++) {
+ mul_project_m4_v3(DST.view_data.matstate.mat[DRW_MAT_PERSINV], bbox.vec[i]);
+ }
+#endif
/* Compute clip planes using the world space frustum corners. */
for (int p = 0; p < 6; p++) {
diff --git a/source/blender/editors/animation/anim_channels_edit.c b/source/blender/editors/animation/anim_channels_edit.c
index 4af8089ffea..36402b82cbf 100644
--- a/source/blender/editors/animation/anim_channels_edit.c
+++ b/source/blender/editors/animation/anim_channels_edit.c
@@ -2817,7 +2817,7 @@ static int mouse_anim_channels(bContext *C, bAnimContext *ac, int channel_index,
/* deselect all other channels */
ANIM_deselect_anim_channels(ac, ac->data, ac->datatype, false, ACHANNEL_SETFLAG_CLEAR);
- if (pchan) ED_pose_de_selectall(ob, SEL_DESELECT, false);
+ if (pchan) ED_pose_deselect_all(ob, SEL_DESELECT, false);
/* only select channels in group and group itself */
for (fcu = agrp->channels.first; fcu && fcu->grp == agrp; fcu = fcu->next)
@@ -2827,7 +2827,7 @@ static int mouse_anim_channels(bContext *C, bAnimContext *ac, int channel_index,
else {
/* select group by itself */
ANIM_deselect_anim_channels(ac, ac->data, ac->datatype, false, ACHANNEL_SETFLAG_CLEAR);
- if (pchan) ED_pose_de_selectall(ob, SEL_DESELECT, false);
+ if (pchan) ED_pose_deselect_all(ob, SEL_DESELECT, false);
agrp->flag |= AGRP_SELECTED;
}
diff --git a/source/blender/editors/armature/armature_add.c b/source/blender/editors/armature/armature_add.c
index bd3ddfe93c6..cb072bee345 100644
--- a/source/blender/editors/armature/armature_add.c
+++ b/source/blender/editors/armature/armature_add.c
@@ -63,12 +63,12 @@
/* default bone add, returns it selected, but without tail set */
/* XXX should be used everywhere, now it mallocs bones still locally in functions */
-EditBone *ED_armature_edit_bone_add(bArmature *arm, const char *name)
+EditBone *ED_armature_ebone_add(bArmature *arm, const char *name)
{
EditBone *bone = MEM_callocN(sizeof(EditBone), "eBone");
BLI_strncpy(bone->name, name, sizeof(bone->name));
- unique_editbone_name(arm->edbo, bone->name, NULL);
+ ED_armature_ebone_unique_name(arm->edbo, bone->name, NULL);
BLI_addtail(arm->edbo, bone);
@@ -97,15 +97,15 @@ EditBone *ED_armature_edit_bone_add(bArmature *arm, const char *name)
return bone;
}
-EditBone *ED_armature_edit_bone_add_primitive(Object *obedit_arm, float length, bool view_aligned)
+EditBone *ED_armature_ebone_add_primitive(Object *obedit_arm, float length, bool view_aligned)
{
bArmature *arm = obedit_arm->data;
EditBone *bone;
- ED_armature_deselect_all(obedit_arm);
+ ED_armature_edit_deselect_all(obedit_arm);
/* Create a bone */
- bone = ED_armature_edit_bone_add(arm, "Bone");
+ bone = ED_armature_ebone_add(arm, "Bone");
arm->act_edbone = bone;
@@ -157,12 +157,12 @@ static int armature_click_extrude_exec(bContext *C, wmOperator *UNUSED(op))
to_root = 1;
}
- ED_armature_deselect_all(obedit);
+ ED_armature_edit_deselect_all(obedit);
/* we re-use code for mirror editing... */
flipbone = NULL;
if (arm->flag & ARM_MIRROR_EDIT)
- flipbone = ED_armature_bone_get_mirrored(arm->edbo, ebone);
+ flipbone = ED_armature_ebone_get_mirrored(arm->edbo, ebone);
for (a = 0; a < 2; a++) {
if (a == 1) {
@@ -173,7 +173,7 @@ static int armature_click_extrude_exec(bContext *C, wmOperator *UNUSED(op))
}
}
- newbone = ED_armature_edit_bone_add(arm, ebone->name);
+ newbone = ED_armature_ebone_add(arm, ebone->name);
arm->act_edbone = newbone;
if (to_root) {
@@ -205,7 +205,7 @@ static int armature_click_extrude_exec(bContext *C, wmOperator *UNUSED(op))
}
- ED_armature_sync_selection(arm->edbo);
+ ED_armature_edit_sync_selection(arm->edbo);
WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, obedit);
@@ -268,7 +268,7 @@ EditBone *add_points_bone(Object *obedit, float head[3], float tail[3])
{
EditBone *ebo;
- ebo = ED_armature_edit_bone_add(obedit->data, "Bone");
+ ebo = ED_armature_ebone_add(obedit->data, "Bone");
copy_v3_v3(ebo->head, head);
copy_v3_v3(ebo->tail, tail);
@@ -333,7 +333,7 @@ void postEditBoneDuplicate(struct ListBase *editbones, Object *ob)
for (EditBone *ebone_src = editbones->first; ebone_src; ebone_src = ebone_src->next) {
EditBone *ebone_dst = ebone_src->temp.ebone;
if (!ebone_dst) {
- ebone_dst = ED_armature_bone_get_mirrored(editbones, ebone_src);
+ ebone_dst = ED_armature_ebone_get_mirrored(editbones, ebone_src);
}
if (ebone_dst) {
BLI_ghash_insert(name_map, ebone_src->name, ebone_dst->name);
@@ -438,7 +438,7 @@ EditBone *duplicateEditBoneObjects(EditBone *curBone, const char *name, ListBase
BLI_strncpy(eBone->name, name, sizeof(eBone->name));
}
- unique_editbone_name(editbones, eBone->name, NULL);
+ ED_armature_ebone_unique_name(editbones, eBone->name, NULL);
BLI_addtail(editbones, eBone);
/* copy the ID property */
@@ -487,7 +487,7 @@ static int armature_duplicate_selected_exec(bContext *C, wmOperator *op)
const bool do_flip_names = RNA_boolean_get(op->ptr, "do_flip_names");
- ED_armature_sync_selection(arm->edbo); // XXX why is this needed?
+ ED_armature_edit_sync_selection(arm->edbo); // XXX why is this needed?
preEditBoneDuplicate(arm->edbo);
@@ -499,7 +499,7 @@ static int armature_duplicate_selected_exec(bContext *C, wmOperator *op)
{
EditBone *ebone;
- ebone = ED_armature_bone_get_mirrored(arm->edbo, ebone_iter);
+ ebone = ED_armature_ebone_get_mirrored(arm->edbo, ebone_iter);
if (ebone) {
ebone->flag |= BONE_SELECTED;
}
@@ -522,7 +522,7 @@ static int armature_duplicate_selected_exec(bContext *C, wmOperator *op)
/* Only use flipped name if not yet in use. Otherwise we'd get again inconsistent namings
* (different numbers), better keep default behavior in this case. */
- if (ED_armature_bone_find_name(arm->edbo, new_bone_name_buff) == NULL) {
+ if (ED_armature_ebone_find_name(arm->edbo, new_bone_name_buff) == NULL) {
new_bone_name = new_bone_name_buff;
}
}
@@ -583,7 +583,7 @@ static int armature_duplicate_selected_exec(bContext *C, wmOperator *op)
postEditBoneDuplicate(arm->edbo, obedit);
- ED_armature_validate_active(arm);
+ ED_armature_edit_validate_active(arm);
WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, obedit);
@@ -630,7 +630,7 @@ static int armature_symmetrize_exec(bContext *C, wmOperator *op)
if (CTX_DATA_COUNT(C, selected_bones) == 0)
return OPERATOR_CANCELLED;
- ED_armature_sync_selection(arm->edbo); // XXX why is this needed?
+ ED_armature_edit_sync_selection(arm->edbo); // XXX why is this needed?
preEditBoneDuplicate(arm->edbo);
@@ -648,7 +648,7 @@ static int armature_symmetrize_exec(bContext *C, wmOperator *op)
ebone_iter->flag &= ~(BONE_SELECTED | BONE_TIPSEL | BONE_ROOTSEL);
}
else {
- EditBone *ebone = ED_armature_bone_find_name(arm->edbo, name_flip);
+ EditBone *ebone = ED_armature_ebone_find_name(arm->edbo, name_flip);
if (ebone) {
if ((ebone->flag & BONE_SELECTED) == 0) {
@@ -738,7 +738,7 @@ static int armature_symmetrize_exec(bContext *C, wmOperator *op)
/* the parent may have been duplicated, if not lookup the mirror parent */
EditBone *ebone_parent =
(ebone_iter->parent->temp.ebone ?
- ebone_iter->parent->temp.ebone : ED_armature_bone_get_mirrored(arm->edbo, ebone_iter->parent));
+ ebone_iter->parent->temp.ebone : ED_armature_ebone_get_mirrored(arm->edbo, ebone_iter->parent));
if (ebone_parent == NULL) {
/* If the mirror lookup failed, (but the current bone has a parent)
@@ -759,7 +759,7 @@ static int armature_symmetrize_exec(bContext *C, wmOperator *op)
}
}
- transform_armature_mirror_update(obedit);
+ ED_armature_edit_transform_mirror_update(obedit);
/* Selected bones now have their 'temp' pointer set,
* so we don't need this anymore */
@@ -786,7 +786,7 @@ static int armature_symmetrize_exec(bContext *C, wmOperator *op)
postEditBoneDuplicate(arm->edbo, obedit);
- ED_armature_validate_active(arm);
+ ED_armature_edit_validate_active(arm);
WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, obedit);
@@ -870,7 +870,7 @@ static int armature_extrude_exec(bContext *C, wmOperator *op)
/* we re-use code for mirror editing... */
flipbone = NULL;
if (arm->flag & ARM_MIRROR_EDIT) {
- flipbone = ED_armature_bone_get_mirrored(arm->edbo, ebone);
+ flipbone = ED_armature_ebone_get_mirrored(arm->edbo, ebone);
if (flipbone) {
forked = 0; // we extrude 2 different bones
if (flipbone->flag & (BONE_TIPSEL | BONE_ROOTSEL | BONE_SELECTED))
@@ -944,7 +944,7 @@ static int armature_extrude_exec(bContext *C, wmOperator *op)
else strcat(newbone->name, "_R");
}
}
- unique_editbone_name(arm->edbo, newbone->name, NULL);
+ ED_armature_ebone_unique_name(arm->edbo, newbone->name, NULL);
/* Add the new bone to the list */
BLI_addtail(arm->edbo, newbone);
@@ -974,7 +974,7 @@ static int armature_extrude_exec(bContext *C, wmOperator *op)
}
/* Transform the endpoints */
- ED_armature_sync_selection(arm->edbo);
+ ED_armature_edit_sync_selection(arm->edbo);
WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, obedit);
@@ -1027,10 +1027,10 @@ static int armature_bone_primitive_add_exec(bContext *C, wmOperator *op)
mul_m3_m3m3(totmat, obmat, viewmat);
invert_m3_m3(imat, totmat);
- ED_armature_deselect_all(obedit);
+ ED_armature_edit_deselect_all(obedit);
/* Create a bone */
- bone = ED_armature_edit_bone_add(obedit->data, name);
+ bone = ED_armature_ebone_add(obedit->data, name);
copy_v3_v3(bone->head, curs);
@@ -1118,7 +1118,7 @@ static int armature_subdivide_exec(bContext *C, wmOperator *op)
newbone->prop = NULL;
- unique_editbone_name(arm->edbo, newbone->name, NULL);
+ ED_armature_ebone_unique_name(arm->edbo, newbone->name, NULL);
/* correct parent bones */
for (tbone = arm->edbo->first; tbone; tbone = tbone->next) {
diff --git a/source/blender/editors/armature/armature_edit.c b/source/blender/editors/armature/armature_edit.c
index bb3c4164fc1..75b80627dff 100644
--- a/source/blender/editors/armature/armature_edit.c
+++ b/source/blender/editors/armature/armature_edit.c
@@ -67,7 +67,7 @@
/* ************************** Object Tools Exports ******************************* */
/* NOTE: these functions are exported to the Object module to be called from the tools there */
-void ED_armature_apply_transform(Object *ob, float mat[4][4], const bool do_props)
+void ED_armature_transform_apply(Object *ob, float mat[4][4], const bool do_props)
{
bArmature *arm = ob->data;
@@ -205,7 +205,7 @@ void ED_armature_origin_set(Object *ob, float cursor[3], int centermode, int aro
/* adjust bone roll to align Z axis with vector
* vec is in local space and is normalized
*/
-float ED_rollBoneToVector(EditBone *bone, const float align_axis[3], const bool axis_only)
+float ED_armature_ebone_roll_to_vector(const EditBone *bone, const float align_axis[3], const bool axis_only)
{
float mat[3][3], nor[3];
float vec[3], align_axis_proj[3], roll = 0.0f;
@@ -331,7 +331,7 @@ static int armature_calc_roll_exec(bContext *C, wmOperator *op)
sub_v3_v3v3(cursor_rel, cursor_local, ebone->head);
if (axis_flip) negate_v3(cursor_rel);
if (normalize_v3(cursor_rel) != 0.0f) {
- ebone->roll = ED_rollBoneToVector(ebone, cursor_rel, axis_only);
+ ebone->roll = ED_armature_ebone_roll_to_vector(ebone, cursor_rel, axis_only);
}
}
}
@@ -370,13 +370,13 @@ static int armature_calc_roll_exec(bContext *C, wmOperator *op)
if (axis_flip) negate_v3(vec);
if (is_edit) {
- ebone->roll = ED_rollBoneToVector(ebone, vec, axis_only);
+ ebone->roll = ED_armature_ebone_roll_to_vector(ebone, vec, axis_only);
}
/* parentless bones use cross product with child */
if (is_edit_parent) {
if (ebone->parent->parent == NULL) {
- ebone->parent->roll = ED_rollBoneToVector(ebone->parent, vec, axis_only);
+ ebone->parent->roll = ED_armature_ebone_roll_to_vector(ebone->parent, vec, axis_only);
}
}
}
@@ -420,7 +420,7 @@ static int armature_calc_roll_exec(bContext *C, wmOperator *op)
for (ebone = arm->edbo->first; ebone; ebone = ebone->next) {
if (EBONE_VISIBLE(arm, ebone) && EBONE_EDITABLE(ebone)) {
/* roll func is a callback which assumes that all is well */
- ebone->roll = ED_rollBoneToVector(ebone, vec, axis_only);
+ ebone->roll = ED_armature_ebone_roll_to_vector(ebone, vec, axis_only);
}
}
}
@@ -428,7 +428,7 @@ static int armature_calc_roll_exec(bContext *C, wmOperator *op)
if (arm->flag & ARM_MIRROR_EDIT) {
for (ebone = arm->edbo->first; ebone; ebone = ebone->next) {
if ((EBONE_VISIBLE(arm, ebone) && EBONE_EDITABLE(ebone)) == 0) {
- EditBone *ebone_mirr = ED_armature_bone_get_mirrored(arm->edbo, ebone);
+ EditBone *ebone_mirr = ED_armature_ebone_get_mirrored(arm->edbo, ebone);
if (ebone_mirr && (EBONE_VISIBLE(arm, ebone_mirr) && EBONE_EDITABLE(ebone_mirr))) {
ebone->roll = -ebone_mirr->roll;
}
@@ -482,7 +482,7 @@ static int armature_roll_clear_exec(bContext *C, wmOperator *op)
if (arm->flag & ARM_MIRROR_EDIT) {
for (ebone = arm->edbo->first; ebone; ebone = ebone->next) {
if ((EBONE_VISIBLE(arm, ebone) && EBONE_EDITABLE(ebone)) == 0) {
- EditBone *ebone_mirr = ED_armature_bone_get_mirrored(arm->edbo, ebone);
+ EditBone *ebone_mirr = ED_armature_ebone_get_mirrored(arm->edbo, ebone);
if (ebone_mirr && (EBONE_VISIBLE(arm, ebone_mirr) && EBONE_EDITABLE(ebone_mirr))) {
ebone->roll = -ebone_mirr->roll;
}
@@ -771,7 +771,7 @@ static int armature_fill_bones_exec(bContext *C, wmOperator *op)
}
if (newbone) {
- ED_armature_deselect_all(obedit);
+ ED_armature_edit_deselect_all(obedit);
arm->act_edbone = newbone;
newbone->flag |= BONE_TIPSEL;
}
@@ -883,7 +883,7 @@ static void bones_merge(Object *obedit, EditBone *start, EditBone *end, EditBone
}
newbone->flag |= (BONE_ROOTSEL | BONE_TIPSEL | BONE_SELECTED);
- ED_armature_sync_selection(arm->edbo);
+ ED_armature_edit_sync_selection(arm->edbo);
}
@@ -959,7 +959,7 @@ static int armature_merge_exec(bContext *C, wmOperator *op)
}
/* updates */
- ED_armature_sync_selection(arm->edbo);
+ ED_armature_edit_sync_selection(arm->edbo);
WM_event_add_notifier(C, NC_OBJECT | ND_POSE, obedit);
return OPERATOR_FINISHED;
@@ -1181,7 +1181,7 @@ static int armature_align_bones_exec(bContext *C, wmOperator *op)
* - if there's no mirrored copy of actbone (i.e. actbone = "parent.C" or "parent")
* then just use actbone. Useful when doing upper arm to spine.
*/
- actmirb = ED_armature_bone_get_mirrored(arm->edbo, actbone);
+ actmirb = ED_armature_ebone_get_mirrored(arm->edbo, actbone);
if (actmirb == NULL)
actmirb = actbone;
}
@@ -1293,7 +1293,7 @@ static bool armature_delete_ebone_cb(const char *bone_name, void *arm_p)
bArmature *arm = arm_p;
EditBone *ebone;
- ebone = ED_armature_bone_find_name(arm->edbo, bone_name);
+ ebone = ED_armature_ebone_find_name(arm->edbo, bone_name);
return (ebone && (ebone->flag & BONE_SELECTED) && (arm->layer & ebone->layer));
}
@@ -1303,7 +1303,7 @@ static int armature_delete_selected_exec(bContext *C, wmOperator *UNUSED(op))
{
bArmature *arm;
EditBone *curBone, *ebone_next;
- Object *obedit = CTX_data_edit_object(C); // XXX get from context
+ Object *obedit = CTX_data_edit_object(C);
bool changed = false;
arm = obedit->data;
@@ -1320,7 +1320,7 @@ static int armature_delete_selected_exec(bContext *C, wmOperator *UNUSED(op))
if (arm->layer & curBone->layer) {
if (curBone->flag & BONE_SELECTED) {
if (curBone == arm->act_edbone) arm->act_edbone = NULL;
- ED_armature_edit_bone_remove(arm, curBone);
+ ED_armature_ebone_remove(arm, curBone);
changed = true;
}
}
@@ -1329,7 +1329,7 @@ static int armature_delete_selected_exec(bContext *C, wmOperator *UNUSED(op))
if (!changed)
return OPERATOR_CANCELLED;
- ED_armature_sync_selection(arm->edbo);
+ ED_armature_edit_sync_selection(arm->edbo);
BKE_pose_tag_recalc(CTX_data_main(C), obedit->pose);
WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, obedit);
@@ -1358,7 +1358,7 @@ static bool armature_dissolve_ebone_cb(const char *bone_name, void *arm_p)
bArmature *arm = arm_p;
EditBone *ebone;
- ebone = ED_armature_bone_find_name(arm->edbo, bone_name);
+ ebone = ED_armature_ebone_find_name(arm->edbo, bone_name);
return (ebone && (ebone->flag & BONE_DONE));
}
@@ -1460,7 +1460,7 @@ static int armature_dissolve_selected_exec(bContext *C, wmOperator *UNUSED(op))
ebone->parent->rad_tail = ebone->rad_tail;
SET_FLAG_FROM_TEST(ebone->parent->flag, ebone->flag & BONE_TIPSEL, BONE_TIPSEL);
- ED_armature_edit_bone_remove_ex(arm, ebone, false);
+ ED_armature_ebone_remove_ex(arm, ebone, false);
changed = true;
}
}
@@ -1493,7 +1493,7 @@ static int armature_dissolve_selected_exec(bContext *C, wmOperator *UNUSED(op))
return OPERATOR_CANCELLED;
}
- ED_armature_sync_selection(arm->edbo);
+ ED_armature_edit_sync_selection(arm->edbo);
WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, obedit);
@@ -1538,8 +1538,8 @@ static int armature_hide_exec(bContext *C, wmOperator *op)
}
}
}
- ED_armature_validate_active(arm);
- ED_armature_sync_selection(arm->edbo);
+ ED_armature_edit_validate_active(arm);
+ ED_armature_edit_sync_selection(arm->edbo);
WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, obedit);
@@ -1581,8 +1581,8 @@ static int armature_reveal_exec(bContext *C, wmOperator *op)
}
}
}
- ED_armature_validate_active(arm);
- ED_armature_sync_selection(arm->edbo);
+ ED_armature_edit_validate_active(arm);
+ ED_armature_edit_sync_selection(arm->edbo);
WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, obedit);
diff --git a/source/blender/editors/armature/armature_naming.c b/source/blender/editors/armature/armature_naming.c
index 52e9e424a85..e8d45f72f89 100644
--- a/source/blender/editors/armature/armature_naming.c
+++ b/source/blender/editors/armature/armature_naming.c
@@ -74,11 +74,11 @@
static bool editbone_unique_check(void *arg, const char *name)
{
struct {ListBase *lb; void *bone; } *data = arg;
- EditBone *dupli = ED_armature_bone_find_name(data->lb, name);
+ EditBone *dupli = ED_armature_ebone_find_name(data->lb, name);
return dupli && dupli != data->bone;
}
-void unique_editbone_name(ListBase *edbo, char *name, EditBone *bone)
+void ED_armature_ebone_unique_name(ListBase *edbo, char *name, EditBone *bone)
{
struct {ListBase *lb; void *bone; } data;
data.lb = edbo;
@@ -153,10 +153,10 @@ void ED_armature_bone_rename(bArmature *arm, const char *oldnamep, const char *n
/* now check if we're in editmode, we need to find the unique name */
if (arm->edbo) {
- EditBone *eBone = ED_armature_bone_find_name(arm->edbo, oldname);
+ EditBone *eBone = ED_armature_ebone_find_name(arm->edbo, oldname);
if (eBone) {
- unique_editbone_name(arm->edbo, newname, NULL);
+ ED_armature_ebone_unique_name(arm->edbo, newname, NULL);
BLI_strncpy(eBone->name, newname, MAXBONENAME);
}
else {
diff --git a/source/blender/editors/armature/armature_relations.c b/source/blender/editors/armature/armature_relations.c
index de2611f7092..0dafbf51d74 100644
--- a/source/blender/editors/armature/armature_relations.c
+++ b/source/blender/editors/armature/armature_relations.c
@@ -312,10 +312,10 @@ int join_armature_exec(bContext *C, wmOperator *op)
/* Copy bones and posechannels from the object to the edit armature */
for (pchan = opose->chanbase.first; pchan; pchan = pchann) {
pchann = pchan->next;
- curbone = ED_armature_bone_find_name(curarm->edbo, pchan->name);
+ curbone = ED_armature_ebone_find_name(curarm->edbo, pchan->name);
/* Get new name */
- unique_editbone_name(arm->edbo, curbone->name, NULL);
+ ED_armature_ebone_unique_name(arm->edbo, curbone->name, NULL);
BLI_ghash_insert(afd.names_map, BLI_strdup(pchan->name), curbone->name);
/* Transform the bone */
@@ -528,7 +528,7 @@ static void separate_armature_bones(Object *ob, short sel)
/* go through pose-channels, checking if a bone should be removed */
for (pchan = ob->pose->chanbase.first; pchan; pchan = pchann) {
pchann = pchan->next;
- curbone = ED_armature_bone_find_name(arm->edbo, pchan->name);
+ curbone = ED_armature_ebone_find_name(arm->edbo, pchan->name);
/* check if bone needs to be removed */
if ( (sel && (curbone->flag & BONE_SELECTED)) ||
@@ -640,7 +640,7 @@ static int separate_armature_exec(bContext *C, wmOperator *op)
ED_armature_to_edit(obedit->data);
/* parents tips remain selected when connected children are removed. */
- ED_armature_deselect_all(obedit);
+ ED_armature_edit_deselect_all(obedit);
BKE_report(op->reports, RPT_INFO, "Separated bones");
@@ -760,7 +760,7 @@ static int armature_parent_set_exec(bContext *C, wmOperator *op)
* - if there's no mirrored copy of actbone (i.e. actbone = "parent.C" or "parent")
* then just use actbone. Useful when doing upper arm to spine.
*/
- actmirb = ED_armature_bone_get_mirrored(arm->edbo, actbone);
+ actmirb = ED_armature_ebone_get_mirrored(arm->edbo, actbone);
if (actmirb == NULL)
actmirb = actbone;
}
@@ -883,7 +883,7 @@ static int armature_parent_clear_exec(bContext *C, wmOperator *op)
}
CTX_DATA_END;
- ED_armature_sync_selection(arm->edbo);
+ ED_armature_edit_sync_selection(arm->edbo);
/* note, notifier might evolve */
WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, ob);
diff --git a/source/blender/editors/armature/armature_select.c b/source/blender/editors/armature/armature_select.c
index 397691a409b..587cafa6d48 100644
--- a/source/blender/editors/armature/armature_select.c
+++ b/source/blender/editors/armature/armature_select.c
@@ -64,7 +64,7 @@
/* **************** PoseMode & EditMode Selection Buffer Queries *************************** */
/* only for opengl selection indices */
-Bone *get_indexed_bone(Object *ob, int index)
+Bone *ED_armature_bone_find_index(Object *ob, int index)
{
bPoseChannel *pchan;
if (ob->pose == NULL) return NULL;
@@ -100,7 +100,7 @@ void *get_bone_from_selectbuffer(
if (obedit == NULL || base->object != obedit) {
/* no singular posemode, so check for correct object */
if (base->object->select_color == (hitresult & 0xFFFF)) {
- bone = get_indexed_bone(base->object, hitresult);
+ bone = ED_armature_bone_find_index(base->object, hitresult);
if (findunsel)
sel = (bone->flag & BONE_SELECTED);
@@ -247,7 +247,7 @@ static int armature_select_linked_invoke(bContext *C, wmOperator *op, const wmEv
bone = NULL;
}
- ED_armature_sync_selection(arm->edbo);
+ ED_armature_edit_sync_selection(arm->edbo);
WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, obedit);
@@ -294,8 +294,8 @@ static int selectbuffer_ret_hits_5(unsigned int *buffer, const int hits12, const
/* does bones and points */
/* note that BONE ROOT only gets drawn for root bones (or without IK) */
static EditBone *get_nearest_editbonepoint(
- const EvaluationContext *eval_ctx, ViewContext *vc, const int mval[2],
- ListBase *edbo, bool findunsel, bool use_cycle, int *r_selmask)
+ const EvaluationContext *eval_ctx, ViewContext *vc,
+ bool findunsel, bool use_cycle, int *r_selmask)
{
bArmature *arm = (bArmature *)vc->obedit->data;
EditBone *ebone_next_act = arm->act_edbone;
@@ -327,11 +327,11 @@ static EditBone *get_nearest_editbonepoint(
if (use_cycle) {
if (vc->v3d->drawtype > OB_WIRE) {
do_nearest = true;
- if (len_manhattan_v2v2_int(mval, last_mval) < 3) {
+ if (len_manhattan_v2v2_int(vc->mval, last_mval) < 3) {
do_nearest = false;
}
}
- copy_v2_v2_int(last_mval, mval);
+ copy_v2_v2_int(last_mval, vc->mval);
}
else {
if (vc->v3d->drawtype > OB_WIRE) {
@@ -346,7 +346,7 @@ static EditBone *get_nearest_editbonepoint(
/* we _must_ end cache before return, use 'goto cache_end' */
view3d_opengl_select_cache_begin();
- BLI_rcti_init_pt_radius(&rect, mval, 12);
+ BLI_rcti_init_pt_radius(&rect, vc->mval, 12);
hits12 = view3d_opengl_select(eval_ctx, vc, buffer, MAXPICKBUF, &rect, select_mode);
if (hits12 == 1) {
hits = selectbuffer_ret_hits_12(buffer, hits12);
@@ -356,7 +356,7 @@ static EditBone *get_nearest_editbonepoint(
int offs;
offs = 4 * hits12;
- BLI_rcti_init_pt_radius(&rect, mval, 5);
+ BLI_rcti_init_pt_radius(&rect, vc->mval, 5);
hits5 = view3d_opengl_select(eval_ctx, vc, buffer + offs, MAXPICKBUF - offs, &rect, select_mode);
if (hits5 == 1) {
@@ -384,7 +384,7 @@ cache_end:
if (!(hitresult & BONESEL_NOSEL)) {
int dep;
- ebone = BLI_findlink(edbo, hitresult & ~BONESEL_ANY);
+ ebone = BLI_findlink(arm->edbo, hitresult & ~BONESEL_ANY);
/* clicks on bone points get advantage */
if (hitresult & (BONESEL_ROOT | BONESEL_TIP)) {
@@ -428,7 +428,7 @@ cache_end:
if (!(besthitresult & BONESEL_NOSEL)) {
- ebone = BLI_findlink(edbo, besthitresult & ~BONESEL_ANY);
+ ebone = BLI_findlink(arm->edbo, besthitresult & ~BONESEL_ANY);
*r_selmask = 0;
if (besthitresult & BONESEL_ROOT)
@@ -444,7 +444,7 @@ cache_end:
return NULL;
}
-void ED_armature_deselect_all(Object *obedit)
+void ED_armature_edit_deselect_all(Object *obedit)
{
bArmature *arm = obedit->data;
EditBone *ebone;
@@ -454,7 +454,7 @@ void ED_armature_deselect_all(Object *obedit)
}
}
-void ED_armature_deselect_all_visible(Object *obedit)
+void ED_armature_edit_deselect_all_visible(Object *obedit)
{
bArmature *arm = obedit->data;
EditBone *ebone;
@@ -466,7 +466,7 @@ void ED_armature_deselect_all_visible(Object *obedit)
}
}
- ED_armature_sync_selection(arm->edbo);
+ ED_armature_edit_sync_selection(arm->edbo);
}
/* accounts for connected parents */
@@ -481,10 +481,9 @@ static int ebone_select_flag(EditBone *ebone)
}
/* context: editmode armature in view3d */
-bool ED_armature_select_pick(bContext *C, const int mval[2], bool extend, bool deselect, bool toggle)
+bool ED_armature_edit_select_pick(bContext *C, const int mval[2], bool extend, bool deselect, bool toggle)
{
Object *obedit = CTX_data_edit_object(C);
- bArmature *arm = obedit->data;
EvaluationContext eval_ctx;
ViewContext vc;
EditBone *nearBone = NULL;
@@ -492,16 +491,19 @@ bool ED_armature_select_pick(bContext *C, const int mval[2], bool extend, bool d
CTX_data_eval_ctx(C, &eval_ctx);
ED_view3d_viewcontext_init(C, &vc);
+ vc.mval[0] = mval[0];
+ vc.mval[1] = mval[1];
if (BIF_sk_selectStroke(C, mval, extend)) {
return true;
}
- nearBone = get_nearest_editbonepoint(&eval_ctx, &vc, mval, arm->edbo, true, true, &selmask);
+ nearBone = get_nearest_editbonepoint(&eval_ctx, &vc, true, true, &selmask);
if (nearBone) {
+ bArmature *arm = obedit->data;
if (!extend && !deselect && !toggle) {
- ED_armature_deselect_all(obedit);
+ ED_armature_edit_deselect_all(obedit);
}
/* by definition the non-root connected bones have no root point drawn,
@@ -572,7 +574,7 @@ bool ED_armature_select_pick(bContext *C, const int mval[2], bool extend, bool d
nearBone->flag |= selmask;
}
- ED_armature_sync_selection(arm->edbo);
+ ED_armature_edit_sync_selection(arm->edbo);
if (nearBone) {
/* then now check for active status */
@@ -716,7 +718,7 @@ static void armature_select_more_less(Object *ob, bool more)
EditBone *ebone;
/* XXX, eventually we shouldn't need this - campbell */
- ED_armature_sync_selection(arm->edbo);
+ ED_armature_edit_sync_selection(arm->edbo);
/* count bones & store selection state */
for (ebone = arm->edbo->first; ebone; ebone = ebone->next) {
@@ -746,7 +748,7 @@ static void armature_select_more_less(Object *ob, bool more)
ebone->temp.p = NULL;
}
- ED_armature_sync_selection(arm->edbo);
+ ED_armature_edit_sync_selection(arm->edbo);
}
static int armature_de_select_more_exec(bContext *C, wmOperator *UNUSED(op))
@@ -1151,7 +1153,7 @@ static int armature_select_hierarchy_exec(bContext *C, wmOperator *op)
return OPERATOR_CANCELLED;
}
- ED_armature_sync_selection(arm->edbo);
+ ED_armature_edit_sync_selection(arm->edbo);
WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, ob);
@@ -1207,7 +1209,7 @@ static int armature_select_mirror_exec(bContext *C, wmOperator *op)
EditBone *ebone_mirror;
int flag_new = extend ? EBONE_PREV_FLAG_GET(ebone) : 0;
- if ((ebone_mirror = ED_armature_bone_get_mirrored(arm->edbo, ebone)) &&
+ if ((ebone_mirror = ED_armature_ebone_get_mirrored(arm->edbo, ebone)) &&
(EBONE_VISIBLE(arm, ebone_mirror)))
{
const int flag_mirror = EBONE_PREV_FLAG_GET(ebone_mirror);
@@ -1231,7 +1233,7 @@ static int armature_select_mirror_exec(bContext *C, wmOperator *op)
arm->act_edbone = ebone_mirror_act;
}
- ED_armature_sync_selection(arm->edbo);
+ ED_armature_edit_sync_selection(arm->edbo);
WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, obedit);
@@ -1316,7 +1318,7 @@ static int armature_shortest_path_pick_invoke(bContext *C, wmOperator *op, const
else if (ED_armature_ebone_is_child_recursive(ebone_dst, ebone_src)) {
SWAP(EditBone *, ebone_src, ebone_dst);
}
- else if ((ebone_isect_parent = ED_armature_bone_find_shared_parent(ebone_isect_child, 2))) {
+ else if ((ebone_isect_parent = ED_armature_ebone_find_shared_parent(ebone_isect_child, 2))) {
/* pass */
}
else {
@@ -1351,7 +1353,7 @@ static int armature_shortest_path_pick_invoke(bContext *C, wmOperator *op, const
if (changed) {
arm->act_edbone = ebone_dst;
- ED_armature_sync_selection(arm->edbo);
+ ED_armature_edit_sync_selection(arm->edbo);
WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, obedit);
return OPERATOR_FINISHED;
diff --git a/source/blender/editors/armature/armature_skinning.c b/source/blender/editors/armature/armature_skinning.c
index 5c8e08a0d89..e25056a7a4a 100644
--- a/source/blender/editors/armature/armature_skinning.c
+++ b/source/blender/editors/armature/armature_skinning.c
@@ -431,7 +431,7 @@ static void add_verts_to_dgroups(
MEM_freeN(verts);
}
-void create_vgroups_from_armature(
+void ED_object_vgroup_calc_from_armature(
ReportList *reports, const EvaluationContext *eval_ctx, Scene *scene, Object *ob, Object *par,
const int mode, const bool mirror)
{
diff --git a/source/blender/editors/armature/armature_utils.c b/source/blender/editors/armature/armature_utils.c
index aa0aa0e03ff..c4580a370c9 100644
--- a/source/blender/editors/armature/armature_utils.c
+++ b/source/blender/editors/armature/armature_utils.c
@@ -54,7 +54,7 @@
/* Validation */
/* Sync selection to parent for connected children */
-void ED_armature_sync_selection(ListBase *edbo)
+void ED_armature_edit_sync_selection(ListBase *edbo)
{
EditBone *ebo;
@@ -76,7 +76,7 @@ void ED_armature_sync_selection(ListBase *edbo)
}
}
-void ED_armature_validate_active(struct bArmature *arm)
+void ED_armature_edit_validate_active(struct bArmature *arm)
{
EditBone *ebone = arm->act_edbone;
@@ -137,7 +137,7 @@ void bone_free(bArmature *arm, EditBone *bone)
/**
* \param clear_connected: When false caller is responsible for keeping the flag in a valid state.
*/
-void ED_armature_edit_bone_remove_ex(bArmature *arm, EditBone *exBone, bool clear_connected)
+void ED_armature_ebone_remove_ex(bArmature *arm, EditBone *exBone, bool clear_connected)
{
EditBone *curBone;
@@ -154,9 +154,9 @@ void ED_armature_edit_bone_remove_ex(bArmature *arm, EditBone *exBone, bool clea
bone_free(arm, exBone);
}
-void ED_armature_edit_bone_remove(bArmature *arm, EditBone *exBone)
+void ED_armature_ebone_remove(bArmature *arm, EditBone *exBone)
{
- ED_armature_edit_bone_remove_ex(arm, exBone, true);
+ ED_armature_ebone_remove_ex(arm, exBone, true);
}
bool ED_armature_ebone_is_child_recursive(EditBone *ebone_parent, EditBone *ebone_child)
@@ -175,7 +175,7 @@ bool ED_armature_ebone_is_child_recursive(EditBone *ebone_parent, EditBone *ebon
* \param ebone_child_tot Size of the ebone_child array
* \return The shared parent or NULL.
*/
-EditBone *ED_armature_bone_find_shared_parent(EditBone *ebone_child[], const unsigned int ebone_child_tot)
+EditBone *ED_armature_ebone_find_shared_parent(EditBone *ebone_child[], const unsigned int ebone_child_tot)
{
unsigned int i;
EditBone *ebone_iter;
@@ -255,7 +255,7 @@ void ED_armature_ebone_from_mat4(EditBone *ebone, float mat[4][4])
/**
* Return a pointer to the bone of the given name
*/
-EditBone *ED_armature_bone_find_name(const ListBase *edbo, const char *name)
+EditBone *ED_armature_ebone_find_name(const ListBase *edbo, const char *name)
{
return BLI_findstring(edbo, name, offsetof(EditBone, name));
}
@@ -267,7 +267,7 @@ EditBone *ED_armature_bone_find_name(const ListBase *edbo, const char *name)
/**
* \see #BKE_pose_channel_get_mirrored (pose-mode, matching function)
*/
-EditBone *ED_armature_bone_get_mirrored(const ListBase *edbo, EditBone *ebo)
+EditBone *ED_armature_ebone_get_mirrored(const ListBase *edbo, EditBone *ebo)
{
char name_flip[MAXBONENAME];
@@ -277,7 +277,7 @@ EditBone *ED_armature_bone_get_mirrored(const ListBase *edbo, EditBone *ebo)
BLI_string_flip_side_name(name_flip, ebo->name, false, sizeof(name_flip));
if (!STREQ(name_flip, ebo->name)) {
- return ED_armature_bone_find_name(edbo, name_flip);
+ return ED_armature_ebone_find_name(edbo, name_flip);
}
return NULL;
@@ -297,7 +297,7 @@ void armature_select_mirrored_ex(bArmature *arm, const int flag)
for (curBone = arm->edbo->first; curBone; curBone = curBone->next) {
if (arm->layer & curBone->layer) {
if (curBone->flag & flag) {
- ebone_mirr = ED_armature_bone_get_mirrored(arm->edbo, curBone);
+ ebone_mirr = ED_armature_ebone_get_mirrored(arm->edbo, curBone);
if (ebone_mirr)
ebone_mirr->flag |= (curBone->flag & flag);
}
@@ -326,7 +326,7 @@ void armature_tag_select_mirrored(bArmature *arm)
for (curBone = arm->edbo->first; curBone; curBone = curBone->next) {
if (arm->layer & curBone->layer) {
if (curBone->flag & (BONE_SELECTED | BONE_ROOTSEL | BONE_TIPSEL)) {
- EditBone *ebone_mirr = ED_armature_bone_get_mirrored(arm->edbo, curBone);
+ EditBone *ebone_mirr = ED_armature_ebone_get_mirrored(arm->edbo, curBone);
if (ebone_mirr && (ebone_mirr->flag & BONE_SELECTED) == 0) {
ebone_mirr->flag |= BONE_DONE;
}
@@ -336,7 +336,7 @@ void armature_tag_select_mirrored(bArmature *arm)
for (curBone = arm->edbo->first; curBone; curBone = curBone->next) {
if (curBone->flag & BONE_DONE) {
- EditBone *ebone_mirr = ED_armature_bone_get_mirrored(arm->edbo, curBone);
+ EditBone *ebone_mirr = ED_armature_ebone_get_mirrored(arm->edbo, curBone);
curBone->flag |= ebone_mirr->flag & (BONE_SELECTED | BONE_ROOTSEL | BONE_TIPSEL);
}
}
@@ -359,7 +359,7 @@ void armature_tag_unselect(bArmature *arm)
/* if editbone (partial) selected, copy data */
/* context; editmode armature, with mirror editing enabled */
-void transform_armature_mirror_update(Object *obedit)
+void ED_armature_edit_transform_mirror_update(Object *obedit)
{
bArmature *arm = obedit->data;
EditBone *ebo, *eboflip;
@@ -367,7 +367,7 @@ void transform_armature_mirror_update(Object *obedit)
for (ebo = arm->edbo->first; ebo; ebo = ebo->next) {
/* no layer check, correct mirror is more important */
if (ebo->flag & (BONE_TIPSEL | BONE_ROOTSEL)) {
- eboflip = ED_armature_bone_get_mirrored(arm->edbo, ebo);
+ eboflip = ED_armature_ebone_get_mirrored(arm->edbo, ebo);
if (eboflip) {
/* we assume X-axis flipping for now */
@@ -437,7 +437,7 @@ EditBone *make_boneList(ListBase *edbo, ListBase *bones, EditBone *parent, Bone
eBone = MEM_callocN(sizeof(EditBone), "make_editbone");
/* Copy relevant data from bone to eBone
- * Keep selection logic in sync with ED_armature_sync_selection.
+ * Keep selection logic in sync with ED_armature_edit_sync_selection.
*/
eBone->parent = parent;
BLI_strncpy(eBone->name, curBone->name, sizeof(eBone->name));
diff --git a/source/blender/editors/armature/editarmature_generate.c b/source/blender/editors/armature/editarmature_generate.c
index 4eb9e3ecc79..57843265496 100644
--- a/source/blender/editors/armature/editarmature_generate.c
+++ b/source/blender/editors/armature/editarmature_generate.c
@@ -39,7 +39,7 @@ void setBoneRollFromNormal(EditBone *bone, const float no[3], float UNUSED(invma
copy_v3_v3(normal, no);
mul_m3_v3(tmat, normal);
- bone->roll = ED_rollBoneToVector(bone, normal, false);
+ bone->roll = ED_armature_ebone_roll_to_vector(bone, normal, false);
}
}
@@ -252,7 +252,7 @@ EditBone *subdivideArcBy(ToolSettings *toolsettings, bArmature *arm, ListBase *U
IT_head(iter);
- parent = ED_armature_edit_bone_add(arm, "Bone");
+ parent = ED_armature_ebone_add(arm, "Bone");
copy_v3_v3(parent->head, iter->p);
if (iter->size > FLT_EPSILON) {
@@ -265,7 +265,7 @@ EditBone *subdivideArcBy(ToolSettings *toolsettings, bArmature *arm, ListBase *U
while (index != -1) {
IT_peek(iter, index);
- child = ED_armature_edit_bone_add(arm, "Bone");
+ child = ED_armature_ebone_add(arm, "Bone");
copy_v3_v3(child->head, parent->tail);
child->parent = parent;
child->flag |= BONE_CONNECTED;
diff --git a/source/blender/editors/armature/editarmature_retarget.c b/source/blender/editors/armature/editarmature_retarget.c
index 3dd41f25e09..bf6126658af 100644
--- a/source/blender/editors/armature/editarmature_retarget.c
+++ b/source/blender/editors/armature/editarmature_retarget.c
@@ -158,11 +158,11 @@ static float rollBoneByQuatAligned(EditBone *bone, float old_up_axis[3], float q
if (angle_normalized_v3v3(x_axis, new_up_axis) < angle_normalized_v3v3(z_axis, new_up_axis)) {
rotation_between_vecs_to_quat(qroll, new_up_axis, x_axis); /* set roll rotation quat */
- return ED_rollBoneToVector(bone, x_axis, false);
+ return ED_armature_ebone_roll_to_vector(bone, x_axis, false);
}
else {
rotation_between_vecs_to_quat(qroll, new_up_axis, z_axis); /* set roll rotation quat */
- return ED_rollBoneToVector(bone, z_axis, false);
+ return ED_armature_ebone_roll_to_vector(bone, z_axis, false);
}
}
@@ -207,7 +207,7 @@ static float rollBoneByQuatJoint(RigEdge *edge, RigEdge *previous, float qrot[4]
/* real qroll between normal and up_axis */
rotation_between_vecs_to_quat(qroll, new_up_axis, normal);
- return ED_rollBoneToVector(edge->bone, normal, false);
+ return ED_armature_ebone_roll_to_vector(edge->bone, normal, false);
}
}
@@ -218,7 +218,7 @@ float rollBoneByQuat(EditBone *bone, float old_up_axis[3], float qrot[4])
copy_v3_v3(new_up_axis, old_up_axis);
mul_qt_v3(qrot, new_up_axis);
- return ED_rollBoneToVector(bone, new_up_axis, false);
+ return ED_armature_ebone_roll_to_vector(bone, new_up_axis, false);
}
/************************************ DESTRUCTORS ******************************************************/
@@ -424,7 +424,7 @@ static void renameTemplateBone(char *name, char *template_name, ListBase *editbo
name[j] = '\0';
- unique_editbone_name(editbones, name, NULL);
+ ED_armature_ebone_unique_name(editbones, name, NULL);
}
static RigControl *cloneControl(RigGraph *rg, RigGraph *src_rg, RigControl *src_ctrl, GHash *ptr_hash, char *side_string, char *num_string)
@@ -1435,7 +1435,7 @@ static EditBone *add_editbonetolist(char *name, ListBase *list)
EditBone *bone = MEM_callocN(sizeof(EditBone), "eBone");
BLI_strncpy(bone->name, name, sizeof(bone->name));
- unique_editbone_name(list, bone->name, NULL);
+ ED_armature_ebone_unique_name(list, bone->name, NULL);
BLI_addtail(list, bone);
@@ -2626,7 +2626,7 @@ void BIF_retargetArc(bContext *C, ReebArc *earc, RigGraph *template_rigg)
}
RIG_freeRigGraph((BGraph *)rigg);
- ED_armature_validate_active(armedit);
+ ED_armature_edit_validate_active(armedit);
// XXX
// allqueue(REDRAWVIEW3D, 0);
diff --git a/source/blender/editors/armature/editarmature_sketch.c b/source/blender/editors/armature/editarmature_sketch.c
index 1f1468a8e41..26f11f8fd60 100644
--- a/source/blender/editors/armature/editarmature_sketch.c
+++ b/source/blender/editors/armature/editarmature_sketch.c
@@ -1358,7 +1358,7 @@ static void sk_convertStroke(bContext *C, SK_Stroke *stk)
}
if (bone == NULL) {
- bone = ED_armature_edit_bone_add(arm, "Bone");
+ bone = ED_armature_ebone_add(arm, "Bone");
copy_v3_v3(bone->head, head->p);
copy_v3_v3(bone->tail, pt->p);
diff --git a/source/blender/editors/armature/meshlaplacian.c b/source/blender/editors/armature/meshlaplacian.c
index 489940007e4..ea7a35a4b0e 100644
--- a/source/blender/editors/armature/meshlaplacian.c
+++ b/source/blender/editors/armature/meshlaplacian.c
@@ -1636,7 +1636,7 @@ static void harmonic_coordinates_bind(Scene *UNUSED(scene), MeshDeformModifierDa
free_bvhtree_from_mesh(&mdb->bvhdata);
}
-void mesh_deform_bind(
+void ED_mesh_deform_bind_callback(
Scene *scene, MeshDeformModifierData *mmd, DerivedMesh *cagedm,
float *vertexcos, int totvert, float cagemat[4][4])
{
diff --git a/source/blender/editors/armature/meshlaplacian.h b/source/blender/editors/armature/meshlaplacian.h
index 05ade4fc43e..9c4ceacbee6 100644
--- a/source/blender/editors/armature/meshlaplacian.h
+++ b/source/blender/editors/armature/meshlaplacian.h
@@ -68,7 +68,7 @@ void rigid_deform_end(int cancel);
/* Harmonic Coordinates */
-/* mesh_deform_bind(...) defined in ED_armature.h */
+/* ED_mesh_deform_bind_callback(...) defined in ED_armature.h */
#endif
diff --git a/source/blender/editors/armature/pose_select.c b/source/blender/editors/armature/pose_select.c
index a66cedd8d4f..1c23f71233d 100644
--- a/source/blender/editors/armature/pose_select.c
+++ b/source/blender/editors/armature/pose_select.c
@@ -133,7 +133,7 @@ void ED_pose_bone_select(Object *ob, bPoseChannel *pchan, bool select)
/* called from editview.c, for mode-less pose selection */
/* assumes scene obact and basact is still on old situation */
-bool ED_do_pose_selectbuffer(
+bool ED_armature_pose_select_pick_with_buffer(
ViewLayer *view_layer, Base *base, const unsigned int *buffer, short hits,
bool extend, bool deselect, bool toggle, bool do_nearest)
{
@@ -166,7 +166,7 @@ bool ED_do_pose_selectbuffer(
}
if (!extend && !deselect && !toggle) {
- ED_pose_de_selectall(ob, SEL_DESELECT, true);
+ ED_pose_deselect_all(ob, SEL_DESELECT, true);
nearBone->flag |= (BONE_SELECTED | BONE_TIPSEL | BONE_ROOTSEL);
arm->act_bone = nearBone;
}
@@ -220,7 +220,7 @@ bool ED_do_pose_selectbuffer(
/* 'select_mode' is usual SEL_SELECT/SEL_DESELECT/SEL_TOGGLE/SEL_INVERT.
* When true, 'ignore_visibility' makes this func also affect invisible bones (hidden or on hidden layers). */
-void ED_pose_de_selectall(Object *ob, int select_mode, const bool ignore_visibility)
+void ED_pose_deselect_all(Object *ob, int select_mode, const bool ignore_visibility)
{
bArmature *arm = ob->data;
bPoseChannel *pchan;
diff --git a/source/blender/editors/armature/pose_transform.c b/source/blender/editors/armature/pose_transform.c
index c49591be5d1..7fc40d00042 100644
--- a/source/blender/editors/armature/pose_transform.c
+++ b/source/blender/editors/armature/pose_transform.c
@@ -128,7 +128,7 @@ static int apply_armature_pose2bones_exec(bContext *C, wmOperator *op)
pose = ob->pose;
for (pchan = pose->chanbase.first; pchan; pchan = pchan->next) {
- curbone = ED_armature_bone_find_name(arm->edbo, pchan->name);
+ curbone = ED_armature_ebone_find_name(arm->edbo, pchan->name);
/* simply copy the head/tail values from pchan over to curbone */
copy_v3_v3(curbone->head, pchan->pose_head);
diff --git a/source/blender/editors/include/ED_armature.h b/source/blender/editors/include/ED_armature.h
index 0dcc4f32e43..186ca5313e5 100644
--- a/source/blender/editors/include/ED_armature.h
+++ b/source/blender/editors/include/ED_armature.h
@@ -139,29 +139,30 @@ void ED_armature_from_edit(struct bArmature *arm);
void ED_armature_to_edit(struct bArmature *arm);
void ED_armature_edit_free(struct bArmature *arm);
-void ED_armature_deselect_all(struct Object *obedit);
-void ED_armature_deselect_all_visible(struct Object *obedit);
+void ED_armature_edit_deselect_all(struct Object *obedit);
+void ED_armature_edit_deselect_all_visible(struct Object *obedit);
-bool ED_do_pose_selectbuffer(
+bool ED_armature_pose_select_pick_with_buffer(
struct ViewLayer *view_layer, struct Base *base, const unsigned int *buffer, short hits,
bool extend, bool deselect, bool toggle, bool do_nearest);
-bool ED_armature_select_pick(struct bContext *C, const int mval[2], bool extend, bool deselect, bool toggle);
+bool ED_armature_edit_select_pick(
+ struct bContext *C, const int mval[2], bool extend, bool deselect, bool toggle);
int join_armature_exec(struct bContext *C, struct wmOperator *op);
-struct Bone *get_indexed_bone(struct Object *ob, int index);
-float ED_rollBoneToVector(EditBone *bone, const float new_up_axis[3], const bool axis_only);
-EditBone *ED_armature_bone_find_name(const struct ListBase *edbo, const char *name);
-EditBone *ED_armature_bone_get_mirrored(const struct ListBase *edbo, EditBone *ebo);
-void ED_armature_sync_selection(struct ListBase *edbo);
-void ED_armature_validate_active(struct bArmature *arm);
+struct Bone *ED_armature_bone_find_index(struct Object *ob, int index);
+float ED_armature_ebone_roll_to_vector(const EditBone *bone, const float new_up_axis[3], const bool axis_only);
+EditBone *ED_armature_ebone_find_name(const struct ListBase *edbo, const char *name);
+EditBone *ED_armature_ebone_get_mirrored(const struct ListBase *edbo, EditBone *ebo);
+void ED_armature_edit_sync_selection(struct ListBase *edbo);
+void ED_armature_edit_validate_active(struct bArmature *arm);
-EditBone *ED_armature_edit_bone_add_primitive(struct Object *obedit_arm, float length, bool view_aligned);
-EditBone *ED_armature_edit_bone_add(struct bArmature *arm, const char *name);
+EditBone *ED_armature_ebone_add_primitive(struct Object *obedit_arm, float length, bool view_aligned);
+EditBone *ED_armature_ebone_add(struct bArmature *arm, const char *name);
-void ED_armature_edit_bone_remove_ex(struct bArmature *arm, EditBone *exBone, bool clear_connected);
-void ED_armature_edit_bone_remove(struct bArmature *arm, EditBone *exBone);
+void ED_armature_ebone_remove_ex(struct bArmature *arm, EditBone *exBone, bool clear_connected);
+void ED_armature_ebone_remove(struct bArmature *arm, EditBone *exBone);
bool ED_armature_ebone_is_child_recursive(EditBone *ebone_parent, EditBone *ebone_child);
-EditBone *ED_armature_bone_find_shared_parent(EditBone *ebone_child[], const unsigned int ebone_child_tot);
+EditBone *ED_armature_ebone_find_shared_parent(EditBone *ebone_child[], const unsigned int ebone_child_tot);
void ED_armature_ebone_to_mat3(EditBone *ebone, float mat[3][3]);
void ED_armature_ebone_to_mat4(EditBone *ebone, float mat[4][4]);
@@ -169,23 +170,23 @@ void ED_armature_ebone_to_mat4(EditBone *ebone, float mat[4][4]);
void ED_armature_ebone_from_mat3(EditBone *ebone, float mat[3][3]);
void ED_armature_ebone_from_mat4(EditBone *ebone, float mat[4][4]);
-void transform_armature_mirror_update(struct Object *obedit);
+void ED_armature_edit_transform_mirror_update(struct Object *obedit);
void ED_armature_origin_set(struct Object *ob, float cursor[3], int centermode, int around);
void ED_armature_transform_bones(struct bArmature *arm, float mat[4][4], const bool do_props);
-void ED_armature_apply_transform(struct Object *ob, float mat[4][4], const bool do_props);
+void ED_armature_transform_apply(struct Object *ob, float mat[4][4], const bool do_props);
void ED_armature_transform(struct bArmature *arm, float mat[4][4], const bool do_props);
#define ARM_GROUPS_NAME 1
#define ARM_GROUPS_ENVELOPE 2
#define ARM_GROUPS_AUTO 3
-void create_vgroups_from_armature(
+void ED_object_vgroup_calc_from_armature(
struct ReportList *reports, const struct EvaluationContext *eval_ctx, struct Scene *scene,
struct Object *ob, struct Object *par, const int mode, const bool mirror);
/* if bone is already in list, pass it as param to ignore it */
-void unique_editbone_name(struct ListBase *ebones, char *name, EditBone *bone);
+void ED_armature_ebone_unique_name(struct ListBase *ebones, char *name, EditBone *bone);
void ED_armature_bone_rename(struct bArmature *arm, const char *oldnamep, const char *newnamep);
void ED_armature_bones_flip_names(struct bArmature *arm, struct ListBase *bones_names, const bool do_strip_numbers);
@@ -209,7 +210,7 @@ bool ED_object_posemode_exit_ex(struct Main *bmain, struct Object *ob);
bool ED_object_posemode_exit(struct bContext *C, struct Object *ob);
bool ED_object_posemode_enter_ex(struct Main *bmain, struct Object *ob);
bool ED_object_posemode_enter(struct bContext *C, struct Object *ob);
-void ED_pose_de_selectall(struct Object *ob, int select_mode, const bool ignore_visibility);
+void ED_pose_deselect_all(struct Object *ob, int select_mode, const bool ignore_visibility);
void ED_pose_bone_select(struct Object *ob, struct bPoseChannel *pchan, bool select);
void ED_pose_recalculate_paths(struct bContext *C, struct Scene *scene, struct Object *ob);
struct Object *ED_pose_object_from_context(struct bContext *C);
@@ -235,11 +236,12 @@ void BDR_drawSketch(const struct bContext *vc);
int BDR_drawSketchNames(struct ViewContext *vc);
/* meshlaplacian.c */
-void mesh_deform_bind(struct Scene *scene,
- struct MeshDeformModifierData *mmd,
- struct DerivedMesh *cagedm,
- float *vertexcos, int totvert, float cagemat[4][4]);
-
+void ED_mesh_deform_bind_callback(
+ struct Scene *scene,
+ struct MeshDeformModifierData *mmd,
+ struct DerivedMesh *cagedm,
+ float *vertexcos, int totvert, float cagemat[4][4]);
+
#ifdef __cplusplus
}
#endif
diff --git a/source/blender/editors/interface/interface_intern.h b/source/blender/editors/interface/interface_intern.h
index 043dfc9fd99..bb9bfdd4429 100644
--- a/source/blender/editors/interface/interface_intern.h
+++ b/source/blender/editors/interface/interface_intern.h
@@ -721,6 +721,7 @@ enum {
ROUNDBOX_TRIA_SCROLL,
ROUNDBOX_TRIA_MENU,
ROUNDBOX_TRIA_CHECK,
+ ROUNDBOX_TRIA_HOLD_ACTION_ARROW,
ROUNDBOX_TRIA_MAX, /* don't use */
};
diff --git a/source/blender/editors/interface/interface_widgets.c b/source/blender/editors/interface/interface_widgets.c
index 5a210d01f27..d72e59beb91 100644
--- a/source/blender/editors/interface/interface_widgets.c
+++ b/source/blender/editors/interface/interface_widgets.c
@@ -221,8 +221,22 @@ static const uint g_shape_preset_hold_action_face[2][3] = {{2, 0, 1}, {3, 5, 4}}
**/
/* offset in triavec[] in shader per type */
-static const int tria_ofs[ROUNDBOX_TRIA_MAX] = {0, 0, 6, 22, 28};
-static const int tria_vcount[ROUNDBOX_TRIA_MAX] = {0, 3, 16, 3, 6};
+static const int tria_ofs[ROUNDBOX_TRIA_MAX] = {
+ [ROUNDBOX_TRIA_NONE] = 0,
+ [ROUNDBOX_TRIA_ARROWS] = 0,
+ [ROUNDBOX_TRIA_SCROLL] = 6,
+ [ROUNDBOX_TRIA_MENU] = 22,
+ [ROUNDBOX_TRIA_CHECK] = 28,
+ [ROUNDBOX_TRIA_HOLD_ACTION_ARROW] = 34,
+};
+static const int tria_vcount[ROUNDBOX_TRIA_MAX] = {
+ [ROUNDBOX_TRIA_NONE] = 0,
+ [ROUNDBOX_TRIA_ARROWS] = 3,
+ [ROUNDBOX_TRIA_SCROLL] = 16,
+ [ROUNDBOX_TRIA_MENU] = 3,
+ [ROUNDBOX_TRIA_CHECK] = 6,
+ [ROUNDBOX_TRIA_HOLD_ACTION_ARROW] = 3,
+};
static struct {
Gwn_Batch *roundbox_widget[ROUNDBOX_TRIA_MAX];
@@ -288,7 +302,7 @@ static uint32_t set_tria_vertex(
static void roundbox_batch_add_tria(Gwn_VertBufRaw *vflag_step, int tria, uint32_t last_data)
{
- const int tria_num = (tria == ROUNDBOX_TRIA_CHECK) ? 1 : 2;
+ const int tria_num = ELEM(tria, ROUNDBOX_TRIA_CHECK, ROUNDBOX_TRIA_HOLD_ACTION_ARROW) ? 1 : 2;
/* for each tria */
for (int t = 0; t < tria_num; ++t) {
for (int j = 0; j < WIDGET_AA_JITTER; j++) {
@@ -315,7 +329,7 @@ Gwn_Batch *ui_batch_roundbox_widget_get(int tria)
vcount += ((WIDGET_CURVE_RESOLU * 2) * 2) * WIDGET_AA_JITTER; /* emboss */
if (tria) {
vcount += (tria_vcount[tria] + 2) * WIDGET_AA_JITTER; /* tria1 */
- if (tria != ROUNDBOX_TRIA_CHECK) {
+ if (!ELEM(tria, ROUNDBOX_TRIA_CHECK, ROUNDBOX_TRIA_HOLD_ACTION_ARROW)) {
vcount += (tria_vcount[tria] + 2) * WIDGET_AA_JITTER; /* tria2 */
}
}
@@ -832,6 +846,12 @@ static void shape_preset_init_number_arrows(uiWidgetTrias *tria, const rcti *rec
static void shape_preset_init_hold_action(uiWidgetTrias *tria, const rcti *rect, float triasize, char where)
{
+ tria->type = ROUNDBOX_TRIA_HOLD_ACTION_ARROW;
+ /* With the current changes to use batches for widget drawing, the code
+ * below is doing almost nothing effectively. 'where' doesn't work either,
+ * shader is currently hardcoded to work for the button triangle pointing
+ * at the lower right. The same limitation applies to other trias as well.
+ * XXX Should be addressed. */
shape_preset_init_trias_ex(
tria, rect, triasize, where,
g_shape_preset_hold_action_vert, ARRAY_SIZE(g_shape_preset_hold_action_vert),
diff --git a/source/blender/editors/object/object_add.c b/source/blender/editors/object/object_add.c
index d3f6a42c3c1..d2c859565a3 100644
--- a/source/blender/editors/object/object_add.c
+++ b/source/blender/editors/object/object_add.c
@@ -850,7 +850,7 @@ static int object_armature_add_exec(bContext *C, wmOperator *op)
}
dia = RNA_float_get(op->ptr, "radius");
- ED_armature_edit_bone_add_primitive(obedit, dia, view_aligned);
+ ED_armature_ebone_add_primitive(obedit, dia, view_aligned);
/* userdef */
if (newob && !enter_editmode)
diff --git a/source/blender/editors/object/object_modifier.c b/source/blender/editors/object/object_modifier.c
index 04243660440..c79bd3bcb1d 100644
--- a/source/blender/editors/object/object_modifier.c
+++ b/source/blender/editors/object/object_modifier.c
@@ -1673,7 +1673,7 @@ static void skin_armature_bone_create(Object *skin_ob,
v = (e->v1 == parent_v ? e->v2 : e->v1);
- bone = ED_armature_edit_bone_add(arm, "Bone");
+ bone = ED_armature_ebone_add(arm, "Bone");
bone->parent = parent_bone;
bone->flag |= BONE_CONNECTED;
@@ -1746,7 +1746,7 @@ static Object *modifier_skin_armature_create(const EvaluationContext *eval_ctx,
* a fake root bone (have it going off in the Y direction
* (arbitrary) */
if (emap[v].count > 1) {
- bone = ED_armature_edit_bone_add(arm, "Bone");
+ bone = ED_armature_ebone_add(arm, "Bone");
copy_v3_v3(bone->head, me->mvert[v].co);
copy_v3_v3(bone->tail, me->mvert[v].co);
@@ -1953,7 +1953,7 @@ static int meshdeform_bind_exec(bContext *C, wmOperator *op)
int mode = mmd->modifier.mode;
/* force modifier to run, it will call binding routine */
- mmd->bindfunc = mesh_deform_bind;
+ mmd->bindfunc = ED_mesh_deform_bind_callback;
mmd->modifier.mode |= eModifierMode_Realtime;
if (ob->type == OB_MESH) {
diff --git a/source/blender/editors/object/object_relations.c b/source/blender/editors/object/object_relations.c
index 3443a268ef2..ba58c0d3d2a 100644
--- a/source/blender/editors/object/object_relations.c
+++ b/source/blender/editors/object/object_relations.c
@@ -785,14 +785,14 @@ bool ED_object_parent_set(ReportList *reports, const bContext *C, Scene *scene,
}
else if (pararm && (ob->type == OB_MESH) && (par->type == OB_ARMATURE)) {
if (partype == PAR_ARMATURE_NAME) {
- create_vgroups_from_armature(reports, &eval_ctx, scene, ob, par, ARM_GROUPS_NAME, false);
+ ED_object_vgroup_calc_from_armature(reports, &eval_ctx, scene, ob, par, ARM_GROUPS_NAME, false);
}
else if (partype == PAR_ARMATURE_ENVELOPE) {
- create_vgroups_from_armature(reports, &eval_ctx, scene, ob, par, ARM_GROUPS_ENVELOPE, xmirror);
+ ED_object_vgroup_calc_from_armature(reports, &eval_ctx, scene, ob, par, ARM_GROUPS_ENVELOPE, xmirror);
}
else if (partype == PAR_ARMATURE_AUTO) {
WM_cursor_wait(1);
- create_vgroups_from_armature(reports, &eval_ctx, scene, ob, par, ARM_GROUPS_AUTO, xmirror);
+ ED_object_vgroup_calc_from_armature(reports, &eval_ctx, scene, ob, par, ARM_GROUPS_AUTO, xmirror);
WM_cursor_wait(0);
}
/* get corrected inverse */
diff --git a/source/blender/editors/object/object_transform.c b/source/blender/editors/object/object_transform.c
index bb23f871a25..d0ebb0cd6fe 100644
--- a/source/blender/editors/object/object_transform.c
+++ b/source/blender/editors/object/object_transform.c
@@ -545,7 +545,7 @@ static int apply_objects_internal(
BKE_mesh_calc_normals(me);
}
else if (ob->type == OB_ARMATURE) {
- ED_armature_apply_transform(ob, mat, do_props);
+ ED_armature_transform_apply(ob, mat, do_props);
}
else if (ob->type == OB_LATTICE) {
Lattice *lt = ob->data;
diff --git a/source/blender/editors/screen/screen_context.c b/source/blender/editors/screen/screen_context.c
index 98a6670d10f..343e615f76b 100644
--- a/source/blender/editors/screen/screen_context.c
+++ b/source/blender/editors/screen/screen_context.c
@@ -220,7 +220,7 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult
* bones will be operated on twice.
*/
if (arm->flag & ARM_MIRROR_EDIT)
- flipbone = ED_armature_bone_get_mirrored(arm->edbo, ebone);
+ flipbone = ED_armature_ebone_get_mirrored(arm->edbo, ebone);
/* if we're filtering for editable too, use the check for that instead, as it has selection check too */
if (editable_bones) {
@@ -262,7 +262,7 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult
* bones will be operated on twice.
*/
if (arm->flag & ARM_MIRROR_EDIT)
- flipbone = ED_armature_bone_get_mirrored(arm->edbo, ebone);
+ flipbone = ED_armature_ebone_get_mirrored(arm->edbo, ebone);
/* if we're filtering for editable too, use the check for that instead, as it has selection check too */
if (selected_editable_bones) {
diff --git a/source/blender/editors/sculpt_paint/paint_vertex_weight_ops.c b/source/blender/editors/sculpt_paint/paint_vertex_weight_ops.c
index 3892b776440..a5b9a840c33 100644
--- a/source/blender/editors/sculpt_paint/paint_vertex_weight_ops.c
+++ b/source/blender/editors/sculpt_paint/paint_vertex_weight_ops.c
@@ -135,7 +135,7 @@ static int weight_from_bones_exec(bContext *C, wmOperator *op)
CTX_data_eval_ctx(C, &eval_ctx);
- create_vgroups_from_armature(op->reports, &eval_ctx, scene, ob, armob, type, (me->editflag & ME_EDIT_MIRROR_X));
+ ED_object_vgroup_calc_from_armature(op->reports, &eval_ctx, scene, ob, armob, type, (me->editflag & ME_EDIT_MIRROR_X));
DEG_id_tag_update(&me->id, 0);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, me);
diff --git a/source/blender/editors/space_outliner/outliner_select.c b/source/blender/editors/space_outliner/outliner_select.c
index 2f44420f3b7..9ddaf6d7642 100644
--- a/source/blender/editors/space_outliner/outliner_select.c
+++ b/source/blender/editors/space_outliner/outliner_select.c
@@ -575,7 +575,7 @@ static eOLDrawState tree_element_active_ebone(
if (set != OL_SETSEL_NONE) {
if (set == OL_SETSEL_NORMAL) {
if (!(ebone->flag & BONE_HIDDEN_A)) {
- ED_armature_deselect_all(obedit);
+ ED_armature_edit_deselect_all(obedit);
tree_element_active_ebone__sel(C, obedit, arm, ebone, true);
status = OL_DRAWSEL_NORMAL;
}
diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c
index be8e63dffe6..c38bcbcd645 100644
--- a/source/blender/editors/space_view3d/view3d_select.c
+++ b/source/blender/editors/space_view3d/view3d_select.c
@@ -657,14 +657,14 @@ static void do_lasso_select_armature(ViewContext *vc, const int mcords[][2], sho
ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d);
if (extend == false && select)
- ED_armature_deselect_all_visible(vc->obedit);
+ ED_armature_edit_deselect_all_visible(vc->obedit);
armature_foreachScreenBone(vc, do_lasso_select_armature__doSelectBone, &data, V3D_PROJ_TEST_CLIP_DEFAULT);
if (data.is_changed) {
bArmature *arm = vc->obedit->data;
- ED_armature_sync_selection(arm->edbo);
- ED_armature_validate_active(arm);
+ ED_armature_edit_sync_selection(arm->edbo);
+ ED_armature_edit_validate_active(arm);
WM_main_add_notifier(NC_OBJECT | ND_BONE_SELECT, vc->obedit);
}
}
@@ -1500,7 +1500,7 @@ static bool ed_object_select_pick(
}
}
}
- else if (ED_do_pose_selectbuffer(view_layer, basact, buffer, hits, extend, deselect, toggle, do_nearest)) {
+ else if (ED_armature_pose_select_pick_with_buffer(view_layer, basact, buffer, hits, extend, deselect, toggle, do_nearest)) {
/* then bone is found */
/* we make the armature selected:
@@ -1904,7 +1904,6 @@ static int do_armature_box_select(
const rcti *rect, bool select, bool extend)
{
bArmature *arm = vc->obedit->data;
- EditBone *ebone;
int a;
unsigned int buffer[MAXPICKBUF];
@@ -1913,27 +1912,27 @@ static int do_armature_box_select(
hits = view3d_opengl_select(eval_ctx, vc, buffer, MAXPICKBUF, rect, VIEW3D_SELECT_ALL);
/* clear flag we use to detect point was affected */
- for (ebone = arm->edbo->first; ebone; ebone = ebone->next)
+ for (EditBone *ebone = arm->edbo->first; ebone; ebone = ebone->next)
ebone->flag &= ~BONE_DONE;
if (extend == false && select)
- ED_armature_deselect_all_visible(vc->obedit);
+ ED_armature_edit_deselect_all_visible(vc->obedit);
/* first we only check points inside the border */
for (a = 0; a < hits; a++) {
int index = buffer[(4 * a) + 3];
if (index != -1) {
- ebone = BLI_findlink(arm->edbo, index & ~(BONESEL_ANY));
if ((index & 0xFFFF0000) == 0) {
continue;
}
+ EditBone *ebone = BLI_findlink(arm->edbo, index & ~(BONESEL_ANY));
if ((select == false) || ((ebone->flag & BONE_UNSELECTABLE) == 0)) {
if (index & BONESEL_TIP) {
ebone->flag |= BONE_DONE;
if (select) ebone->flag |= BONE_TIPSEL;
else ebone->flag &= ~BONE_TIPSEL;
}
-
+
if (index & BONESEL_ROOT) {
ebone->flag |= BONE_DONE;
if (select) ebone->flag |= BONE_ROOTSEL;
@@ -1942,34 +1941,37 @@ static int do_armature_box_select(
}
}
}
-
+
/* now we have to flush tag from parents... */
- for (ebone = arm->edbo->first; ebone; ebone = ebone->next) {
+ for (EditBone *ebone = arm->edbo->first; ebone; ebone = ebone->next) {
if (ebone->parent && (ebone->flag & BONE_CONNECTED)) {
- if (ebone->parent->flag & BONE_DONE)
+ if (ebone->parent->flag & BONE_DONE) {
ebone->flag |= BONE_DONE;
+ }
}
}
-
+
/* only select/deselect entire bones when no points where in the rect */
for (a = 0; a < hits; a++) {
int index = buffer[(4 * a) + 3];
if (index != -1) {
- ebone = BLI_findlink(arm->edbo, index & ~(BONESEL_ANY));
if (index & BONESEL_BONE) {
+ EditBone *ebone = BLI_findlink(arm->edbo, index & ~(BONESEL_ANY));
if ((select == false) || ((ebone->flag & BONE_UNSELECTABLE) == 0)) {
if (!(ebone->flag & BONE_DONE)) {
- if (select)
+ if (select) {
ebone->flag |= (BONE_ROOTSEL | BONE_TIPSEL | BONE_SELECTED);
- else
+ }
+ else {
ebone->flag &= ~(BONE_ROOTSEL | BONE_TIPSEL | BONE_SELECTED);
+ }
}
}
}
}
}
- ED_armature_sync_selection(arm->edbo);
+ ED_armature_edit_sync_selection(arm->edbo);
return hits > 0 ? OPERATOR_FINISHED : OPERATOR_CANCELLED;
}
@@ -2056,7 +2058,7 @@ static int do_object_pose_box_select(bContext *C, ViewContext *vc, rcti *rect, b
if (BASE_SELECTABLE(base)) {
while (base->object->select_color == (*col & 0xFFFF)) { /* we got an object */
if (*col & 0xFFFF0000) { /* we got a bone */
- bone = get_indexed_bone(base->object, *col & ~(BONESEL_ANY));
+ bone = ED_armature_bone_find_index(base->object, *col & ~(BONESEL_ANY));
if (bone) {
if (select) {
if ((bone->flag & BONE_UNSELECTABLE) == 0) {
@@ -2295,7 +2297,7 @@ static int view3d_select_exec(bContext *C, wmOperator *op)
if (obedit->type == OB_MESH)
retval = EDBM_select_pick(C, location, extend, deselect, toggle);
else if (obedit->type == OB_ARMATURE)
- retval = ED_armature_select_pick(C, location, extend, deselect, toggle);
+ retval = ED_armature_edit_select_pick(C, location, extend, deselect, toggle);
else if (obedit->type == OB_LATTICE)
retval = ED_lattice_select_pick(C, location, extend, deselect, toggle);
else if (ELEM(obedit->type, OB_CURVE, OB_SURF))
@@ -2736,8 +2738,8 @@ static void armature_circle_select(ViewContext *vc, const bool select, const int
armature_foreachScreenBone(vc, do_circle_select_armature__doSelectBone, &data, V3D_PROJ_TEST_CLIP_DEFAULT);
if (data.is_changed) {
- ED_armature_sync_selection(arm->edbo);
- ED_armature_validate_active(arm);
+ ED_armature_edit_sync_selection(arm->edbo);
+ ED_armature_edit_validate_active(arm);
WM_main_add_notifier(NC_OBJECT | ND_BONE_SELECT, vc->obedit);
}
}
diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c
index 2d7ff1eb523..fff124c8995 100644
--- a/source/blender/editors/transform/transform_conversions.c
+++ b/source/blender/editors/transform/transform_conversions.c
@@ -1186,7 +1186,7 @@ static void createTransArmatureVerts(TransInfo *t)
}
if (mirror && (oldtot < t->total)) {
- eboflip = ED_armature_bone_get_mirrored(arm->edbo, ebo);
+ eboflip = ED_armature_ebone_get_mirrored(arm->edbo, ebo);
if (eboflip)
total_mirrored++;
}
@@ -1356,7 +1356,7 @@ static void createTransArmatureVerts(TransInfo *t)
}
if (mirror && (td_old != td)) {
- eboflip = ED_armature_bone_get_mirrored(arm->edbo, ebo);
+ eboflip = ED_armature_ebone_get_mirrored(arm->edbo, ebo);
if (eboflip) {
bid[i].bone = eboflip;
bid[i].dist = eboflip->dist;
diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c
index 6a813eb2a55..08e8e8fe175 100644
--- a/source/blender/editors/transform/transform_generics.c
+++ b/source/blender/editors/transform/transform_generics.c
@@ -853,7 +853,7 @@ static void recalcData_objects(TransInfo *t)
mul_qt_v3(qrot, up_axis);
/* roll has a tendency to flip in certain orientations - [#34283], [#33974] */
- roll = ED_rollBoneToVector(ebo, up_axis, false);
+ roll = ED_armature_ebone_roll_to_vector(ebo, up_axis, false);
ebo->roll = angle_compat_rad(roll, td->ival);
}
}
@@ -862,7 +862,7 @@ static void recalcData_objects(TransInfo *t)
if (arm->flag & ARM_MIRROR_EDIT) {
if (t->state != TRANS_CANCEL)
- transform_armature_mirror_update(t->obedit);
+ ED_armature_edit_transform_mirror_update(t->obedit);
else
restoreBones(t);
}
diff --git a/source/blender/editors/undo/memfile_undo.c b/source/blender/editors/undo/memfile_undo.c
index f4ed96f98f3..511f4bc72f1 100644
--- a/source/blender/editors/undo/memfile_undo.c
+++ b/source/blender/editors/undo/memfile_undo.c
@@ -70,9 +70,10 @@ static bool memfile_undosys_step_encode(struct bContext *C, UndoStep *us_p)
/* Important we only use 'main' from the context (see: BKE_undosys_stack_init_from_main). */
struct Main *bmain = CTX_data_main(C);
+ UndoStack *ustack = ED_undo_stack_get();
/* can be NULL, use when set. */
- MemFileUndoStep *us_prev = (MemFileUndoStep *)BKE_undosys_step_same_type_prev(us_p);
+ MemFileUndoStep *us_prev = (MemFileUndoStep *)BKE_undosys_step_find_by_type(ustack, BKE_UNDOSYS_TYPE_MEMFILE);
us->data = BKE_memfile_undo_encode(bmain, us_prev ? us_prev->data : NULL);
us->step.data_size = us->data->undo_size;
diff --git a/source/blender/editors/util/ed_transverts.c b/source/blender/editors/util/ed_transverts.c
index 872810c5cf2..494ae769cf3 100644
--- a/source/blender/editors/util/ed_transverts.c
+++ b/source/blender/editors/util/ed_transverts.c
@@ -154,7 +154,7 @@ void ED_transverts_update_obedit(TransVertStore *tvs, Object *obedit)
}
}
if (arm->flag & ARM_MIRROR_EDIT)
- transform_armature_mirror_update(obedit);
+ ED_armature_edit_transform_mirror_update(obedit);
}
else if (obedit->type == OB_LATTICE) {
Lattice *lt = obedit->data;
diff --git a/source/blender/gpu/shaders/gpu_shader_2D_widget_base_vert.glsl b/source/blender/gpu/shaders/gpu_shader_2D_widget_base_vert.glsl
index 0c351a3bce4..107480580f9 100644
--- a/source/blender/gpu/shaders/gpu_shader_2D_widget_base_vert.glsl
+++ b/source/blender/gpu/shaders/gpu_shader_2D_widget_base_vert.glsl
@@ -47,11 +47,11 @@ const vec2 jit[9] = vec2[9](
/* We can reuse the CORNER_* bits for tria */
#define TRIA_VEC_RANGE BIT_RANGE(6)
-const vec2 triavec[34] = vec2[34](
- /* horizontal tria */
+const vec2 triavec[37] = vec2[37](
+ /* ROUNDBOX_TRIA_ARROWS */
vec2(-0.352077, 0.532607), vec2(-0.352077, -0.549313), vec2( 0.330000, -0.008353),
vec2( 0.352077, 0.532607), vec2( 0.352077, -0.549313), vec2(-0.330000, -0.008353),
- /* circle tria (triangle strip) */
+ /* ROUNDBOX_TRIA_SCROLL - circle tria (triangle strip) */
vec2(0.000000, 1.000000),
vec2(0.382684, 0.923879), vec2(-0.382683, 0.923880),
vec2(0.707107, 0.707107), vec2(-0.707107, 0.707107),
@@ -61,12 +61,19 @@ const vec2 triavec[34] = vec2[34](
vec2(0.707107, -0.707107), vec2(-0.707107, -0.707107),
vec2(0.382684, -0.923879), vec2(-0.382683, -0.923880),
vec2(0.000000, -1.000000),
- /* menu arrow */
+ /* ROUNDBOX_TRIA_MENU - menu arrows */
vec2(-0.33, 0.16), vec2(0.33, 0.16), vec2(0.0, 0.82),
vec2(0.0, -0.82), vec2(-0.33, -0.16), vec2(0.33, -0.16),
- /* check mark */
+ /* ROUNDBOX_TRIA_CHECK - check mark */
vec2(-0.578579, 0.253369), vec2(-0.392773, 0.412794), vec2(-0.004241, -0.328551),
- vec2(-0.003001, 0.034320), vec2(1.055313, 0.864744), vec2(0.866408, 1.026895)
+ vec2(-0.003001, 0.034320), vec2(1.055313, 0.864744), vec2(0.866408, 1.026895),
+ /* ROUNDBOX_TRIA_HOLD_ACTION_ARROW - hold action arrows */
+#define OY -0.2
+#define SC 0.35
+// vec2(-0.5 + SC, 1.0 + OY), vec2( 0.5, 1.0 + OY), vec2( 0.5, 0.0 + OY + SC),
+ vec2( 0.5 - SC, 1.0 + OY), vec2(-0.5, 1.0 + OY), vec2(-0.5, 0.0 + OY + SC)
+#undef OY
+#undef SC
);
uniform mat4 ModelViewProjectionMatrix;
@@ -183,4 +190,4 @@ void main()
v += jit[(vflag >> JIT_OFS) & JIT_RANGE];
gl_Position = ModelViewProjectionMatrix * vec4(v, 0.0, 1.0);
-} \ No newline at end of file
+}
diff --git a/source/blender/makesrna/intern/rna_armature.c b/source/blender/makesrna/intern/rna_armature.c
index bbcb583ab39..05074bc9f16 100644
--- a/source/blender/makesrna/intern/rna_armature.c
+++ b/source/blender/makesrna/intern/rna_armature.c
@@ -108,7 +108,7 @@ static EditBone *rna_Armature_edit_bone_new(bArmature *arm, ReportList *reports,
BKE_reportf(reports, RPT_ERROR, "Armature '%s' not in edit mode, cannot add an editbone", arm->id.name + 2);
return NULL;
}
- return ED_armature_edit_bone_add(arm, name);
+ return ED_armature_ebone_add(arm, name);
}
static void rna_Armature_edit_bone_remove(bArmature *arm, ReportList *reports, PointerRNA *ebone_ptr)
@@ -124,7 +124,7 @@ static void rna_Armature_edit_bone_remove(bArmature *arm, ReportList *reports, P
return;
}
- ED_armature_edit_bone_remove(arm, ebone);
+ ED_armature_ebone_remove(arm, ebone);
RNA_POINTER_INVALIDATE(ebone_ptr);
}
@@ -427,7 +427,7 @@ static void rna_Armature_editbone_transform_update(Main *bmain, Scene *scene, Po
copy_v3_v3(child->head, ebone->tail);
if (arm->flag & ARM_MIRROR_EDIT) {
- eboflip = ED_armature_bone_get_mirrored(arm->edbo, ebone);
+ eboflip = ED_armature_ebone_get_mirrored(arm->edbo, ebone);
if (eboflip) {
eboflip->roll = -ebone->roll;
diff --git a/source/blender/makesrna/intern/rna_armature_api.c b/source/blender/makesrna/intern/rna_armature_api.c
index 0616331bc05..222baf99afd 100644
--- a/source/blender/makesrna/intern/rna_armature_api.c
+++ b/source/blender/makesrna/intern/rna_armature_api.c
@@ -46,7 +46,7 @@
static void rna_EditBone_align_roll(EditBone *ebo, float no[3])
{
- ebo->roll = ED_rollBoneToVector(ebo, no, false);
+ ebo->roll = ED_armature_ebone_roll_to_vector(ebo, no, false);
}
static float rna_Bone_do_envelope(Bone *bone, float *vec)
diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c
index 3c600f6e367..1032acbae67 100644
--- a/source/blender/makesrna/intern/rna_scene.c
+++ b/source/blender/makesrna/intern/rna_scene.c
@@ -112,7 +112,7 @@ const EnumPropertyItem rna_enum_uv_sculpt_tool_items[] = {
const EnumPropertyItem rna_enum_snap_target_items[] = {
{SCE_SNAP_TARGET_CLOSEST, "CLOSEST", 0, "Closest", "Snap closest point onto target"},
- {SCE_SNAP_TARGET_CENTER, "CENTER", 0, "Center", "Snap center onto target"},
+ {SCE_SNAP_TARGET_CENTER, "CENTER", 0, "Center", "Snap transormation center onto target"},
{SCE_SNAP_TARGET_MEDIAN, "MEDIAN", 0, "Median", "Snap median onto target"},
{SCE_SNAP_TARGET_ACTIVE, "ACTIVE", 0, "Active", "Snap active onto target"},
{0, NULL, 0, NULL, NULL}
diff --git a/source/blender/python/generic/bgl.c b/source/blender/python/generic/bgl.c
index 827b69f5403..1e2837799e3 100644
--- a/source/blender/python/generic/bgl.c
+++ b/source/blender/python/generic/bgl.c
@@ -1295,11 +1295,20 @@ BGL_Wrap(UniformMatrix4x3fv, void, (GLint, GLsizei, GLboolean, GLflo
/* GL_VERSION_3_0 */
+BGL_Wrap(BindFramebuffer, void, (GLenum, GLuint))
+BGL_Wrap(BindRenderbuffer, void, (GLenum, GLuint))
BGL_Wrap(BindVertexArray, void, (GLuint))
+BGL_Wrap(CheckFramebufferStatus, GLenum, (GLenum))
+BGL_Wrap(DeleteFramebuffers, void, (GLsizei, GLuintP))
+BGL_Wrap(DeleteRenderbuffers, void, (GLsizei, GLuintP))
BGL_Wrap(DeleteVertexArrays, void, (GLsizei, GLuintP))
+BGL_Wrap(FramebufferRenderbuffer, void, (GLenum, GLenum, GLenum, GLuint))
+BGL_Wrap(GenFramebuffers, void, (GLsizei, GLuintP))
+BGL_Wrap(GenRenderbuffers, void, (GLsizei, GLuintP))
BGL_Wrap(GenVertexArrays, void, (GLsizei, GLuintP))
BGL_Wrap(GetStringi, GLstring, (GLenum, GLuint))
BGL_Wrap(IsVertexArray, GLboolean, (GLuint))
+BGL_Wrap(RenderbufferStorage, void, (GLenum, GLenum, GLsizei, GLsizei))
/* GL_VERSION_3_1 */
@@ -1626,11 +1635,20 @@ PyObject *BPyInit_bgl(void)
/* GL_VERSION_3_0 */
{
+ PY_MOD_ADD_METHOD(BindFramebuffer);
+ PY_MOD_ADD_METHOD(BindRenderbuffer);
PY_MOD_ADD_METHOD(BindVertexArray);
+ PY_MOD_ADD_METHOD(CheckFramebufferStatus);
+ PY_MOD_ADD_METHOD(DeleteFramebuffers);
+ PY_MOD_ADD_METHOD(DeleteRenderbuffers);
PY_MOD_ADD_METHOD(DeleteVertexArrays);
+ PY_MOD_ADD_METHOD(FramebufferRenderbuffer);
+ PY_MOD_ADD_METHOD(GenFramebuffers);
+ PY_MOD_ADD_METHOD(GenRenderbuffers);
PY_MOD_ADD_METHOD(GenVertexArrays);
PY_MOD_ADD_METHOD(GetStringi);
PY_MOD_ADD_METHOD(IsVertexArray);
+ PY_MOD_ADD_METHOD(RenderbufferStorage);
}
/* GL_VERSION_3_1 */
diff --git a/source/blenderplayer/bad_level_call_stubs/stubs.c b/source/blenderplayer/bad_level_call_stubs/stubs.c
index 96242c229d1..f953f1b89d8 100644
--- a/source/blenderplayer/bad_level_call_stubs/stubs.c
+++ b/source/blenderplayer/bad_level_call_stubs/stubs.c
@@ -428,7 +428,7 @@ struct wmTimer *WM_event_add_timer(struct wmWindowManager *wm, struct wmWindow *
void WM_event_remove_timer(struct wmWindowManager *wm, struct wmWindow *win, struct wmTimer *timer) RET_NONE
float WM_event_tablet_data(const struct wmEvent *event, int *pen_flip, float tilt[2]) RET_ZERO
bool WM_event_is_tablet(const struct wmEvent *event) RET_ZERO
-void ED_armature_edit_bone_remove(struct bArmature *arm, struct EditBone *exBone) RET_NONE
+void ED_armature_ebone_remove(struct bArmature *arm, struct EditBone *exBone) RET_NONE
void object_test_constraints(struct Object *owner) RET_NONE
void ED_armature_ebone_to_mat4(struct EditBone *ebone, float mat[4][4]) RET_NONE
void ED_armature_ebone_from_mat4(EditBone *ebone, float mat[4][4]) RET_NONE
@@ -447,8 +447,8 @@ bool UI_view2d_view_to_region_clip(struct View2D *v2d, float x, float y, int *re
void UI_view2d_view_to_region(struct View2D *v2d, float x, float y, int *regionx, int *region_y) RET_NONE
void UI_view2d_sync(struct bScreen *screen, struct ScrArea *sa, struct View2D *v2dcur, int flag) RET_NONE
-struct EditBone *ED_armature_bone_get_mirrored(const struct ListBase *edbo, EditBone *ebo) RET_NULL
-struct EditBone *ED_armature_edit_bone_add(struct bArmature *arm, const char *name) RET_NULL
+struct EditBone *ED_armature_ebone_get_mirrored(const struct ListBase *edbo, EditBone *ebo) RET_NULL
+struct EditBone *ED_armature_ebone_add(struct bArmature *arm, const char *name) RET_NULL
struct ListBase *get_active_constraints (struct Object *ob) RET_NULL
struct ListBase *get_constraint_lb(struct Object *ob, struct bConstraint *con, struct bPoseChannel **r_pchan) RET_NULL
@@ -604,7 +604,7 @@ float ED_vgroup_vert_weight(struct Object *ob, struct bDeformGroup *dg, int vert
int ED_mesh_mirror_topo_table(struct Object *ob, struct DerivedMesh *dm, char mode) RET_ZERO
int ED_mesh_mirror_spatial_table(struct Object *ob, struct BMEditMesh *em, struct DerivedMesh *dm, const float co[3], char mode) RET_ZERO
-float ED_rollBoneToVector(EditBone *bone, const float new_up_axis[3], const bool axis_only) RET_ZERO
+float ED_armature_ebone_roll_to_vector(const EditBone *bone, const float new_up_axis[3], const bool axis_only) RET_ZERO
void ED_space_image_get_size(struct SpaceImage *sima, int *width, int *height) RET_NONE
bool ED_space_image_check_show_maskedit(struct SpaceImage *sima, struct ViewLayer *view_layer) RET_ZERO