Merge branch 'master' into blender2.8
This commit is contained in:
@@ -368,6 +368,10 @@ void BKE_library_foreach_ID_link(ID *id, LibraryIDLinkCallback callback, void *u
|
||||
CALLBACK_INVOKE(base->object, IDWALK_USER);
|
||||
}
|
||||
|
||||
for (TimeMarker *marker = scene->markers.first; marker; marker = marker->next) {
|
||||
CALLBACK_INVOKE(marker->camera, IDWALK_NOP);
|
||||
}
|
||||
|
||||
if (toolsett) {
|
||||
CALLBACK_INVOKE(toolsett->skgen_template, IDWALK_NOP);
|
||||
|
||||
@@ -776,6 +780,15 @@ void BKE_library_foreach_ID_link(ID *id, LibraryIDLinkCallback callback, void *u
|
||||
}
|
||||
break;
|
||||
}
|
||||
case ID_AC:
|
||||
{
|
||||
bAction *act = (bAction *) id;
|
||||
|
||||
for (TimeMarker *marker = act->markers.first; marker; marker = marker->next) {
|
||||
CALLBACK_INVOKE(marker->camera, IDWALK_NOP);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
/* Nothing needed for those... */
|
||||
case ID_IM:
|
||||
@@ -783,7 +796,6 @@ void BKE_library_foreach_ID_link(ID *id, LibraryIDLinkCallback callback, void *u
|
||||
case ID_TXT:
|
||||
case ID_SO:
|
||||
case ID_AR:
|
||||
case ID_AC:
|
||||
case ID_GD:
|
||||
case ID_WM:
|
||||
case ID_PAL:
|
||||
|
||||
@@ -3447,7 +3447,13 @@ static ImBuf *do_render_strip_uncached(
|
||||
state->scene_parents = &scene_parent;
|
||||
/* end check */
|
||||
|
||||
ibuf = do_render_strip_seqbase(context, state, seq, nr, use_preprocess);
|
||||
/* Use the Scene Seq's scene for the context when rendering the scene's sequences
|
||||
* (necessary for Multicam Selector among others).
|
||||
*/
|
||||
SeqRenderData local_context = *context;
|
||||
local_context.scene = seq->scene;
|
||||
|
||||
ibuf = do_render_strip_seqbase(&local_context, state, seq, nr, use_preprocess);
|
||||
|
||||
/* step back in the list */
|
||||
state->scene_parents = state->scene_parents->next;
|
||||
|
||||
@@ -2509,6 +2509,12 @@ static void lib_link_action(FileData *fd, Main *main)
|
||||
// >>> XXX deprecated - old animation system
|
||||
|
||||
lib_link_fcurves(fd, &act->id, &act->curves);
|
||||
|
||||
for (TimeMarker *marker = act->markers.first; marker; marker = marker->next) {
|
||||
if (marker->camera) {
|
||||
marker->camera = newlibadr(fd, act->id.lib, marker->camera);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5226,7 +5232,6 @@ static void lib_link_scene(FileData *fd, Main *main)
|
||||
Base *base, *next;
|
||||
Sequence *seq;
|
||||
SceneRenderLayer *srl;
|
||||
TimeMarker *marker;
|
||||
FreestyleModuleConfig *fmc;
|
||||
FreestyleLineSet *fls;
|
||||
|
||||
@@ -5325,15 +5330,11 @@ static void lib_link_scene(FileData *fd, Main *main)
|
||||
}
|
||||
SEQ_END
|
||||
|
||||
#ifdef DURIAN_CAMERA_SWITCH
|
||||
for (marker = sce->markers.first; marker; marker = marker->next) {
|
||||
for (TimeMarker *marker = sce->markers.first; marker; marker = marker->next) {
|
||||
if (marker->camera) {
|
||||
marker->camera = newlibadr(fd, sce->id.lib, marker->camera);
|
||||
}
|
||||
}
|
||||
#else
|
||||
(void)marker;
|
||||
#endif
|
||||
|
||||
BKE_sequencer_update_muting(sce->ed);
|
||||
BKE_sequencer_update_sound_bounds_all(sce);
|
||||
@@ -8461,6 +8462,12 @@ static void expand_action(FileData *fd, Main *mainvar, bAction *act)
|
||||
|
||||
/* F-Curves in Action */
|
||||
expand_fcurves(fd, mainvar, &act->curves);
|
||||
|
||||
for (TimeMarker *marker = act->markers.first; marker; marker = marker->next) {
|
||||
if (marker->camera) {
|
||||
expand_doit(fd, mainvar, marker->camera);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void expand_keyingsets(FileData *fd, Main *mainvar, ListBase *list)
|
||||
@@ -9035,17 +9042,11 @@ static void expand_scene(FileData *fd, Main *mainvar, Scene *sce)
|
||||
expand_doit(fd, mainvar, sce->rigidbody_world->constraints);
|
||||
}
|
||||
|
||||
#ifdef DURIAN_CAMERA_SWITCH
|
||||
{
|
||||
TimeMarker *marker;
|
||||
|
||||
for (marker = sce->markers.first; marker; marker = marker->next) {
|
||||
if (marker->camera) {
|
||||
expand_doit(fd, mainvar, marker->camera);
|
||||
}
|
||||
for (TimeMarker *marker = sce->markers.first; marker; marker = marker->next) {
|
||||
if (marker->camera) {
|
||||
expand_doit(fd, mainvar, marker->camera);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
expand_doit(fd, mainvar, sce->clip);
|
||||
}
|
||||
|
||||
@@ -370,10 +370,12 @@ void DepsgraphRelationBuilder::add_node_handle_relation(
|
||||
}
|
||||
else {
|
||||
if (!op_from) {
|
||||
/* XXX TODO handle as error or report if needed */
|
||||
fprintf(stderr, "add_node_handle_relation(%d, %s) - Could not find op_from (%s)\n",
|
||||
type, description, key_from.identifier().c_str());
|
||||
}
|
||||
if (!op_to) {
|
||||
/* XXX TODO handle as error or report if needed */
|
||||
fprintf(stderr, "add_node_handle_relation(%d, %s) - Could not find op_to (%s)\n",
|
||||
type, description, key_from.identifier().c_str());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -559,6 +559,9 @@ void fsmenu_read_system(struct FSMenu *fsmenu, int read_bookmarks)
|
||||
if (pathString == NULL || !CFStringGetCString(pathString, line, sizeof(line), kCFStringEncodingUTF8))
|
||||
continue;
|
||||
|
||||
/* Add end slash for consistency with other platforms */
|
||||
BLI_add_slash(line);
|
||||
|
||||
/* Exclude "all my files" as it makes no sense in blender fileselector */
|
||||
/* Exclude "airdrop" if wlan not active as it would show "" ) */
|
||||
if (!strstr(line, "myDocuments.cannedSearch") && (*line != '\0')) {
|
||||
|
||||
@@ -294,7 +294,7 @@ static void copy_vert_no(const BVHTreeFromMeshType *meshdata, const int index, f
|
||||
case SNAP_MESH:
|
||||
{
|
||||
BVHTreeFromMesh *data = meshdata->userdata;
|
||||
const MVert *vert = data->vert;
|
||||
const MVert *vert = data->vert + index;
|
||||
normal_short_to_float_v3(r_no, vert->no);
|
||||
break;
|
||||
}
|
||||
@@ -1302,6 +1302,7 @@ static bool snapDerivedMesh(
|
||||
}
|
||||
}
|
||||
}
|
||||
/* SCE_SNAP_MODE_VERTEX or SCE_SNAP_MODE_EDGE */
|
||||
else {
|
||||
const ARegion *ar = sctx->v3d_data.ar;
|
||||
|
||||
|
||||
@@ -779,7 +779,7 @@ static void shade_light_textures(GPUMaterial *mat, GPULamp *lamp, GPUNodeLink **
|
||||
for (int i = 0; i < MAX_MTEX; ++i) {
|
||||
MTex *mtex = lamp->la->mtex[i];
|
||||
|
||||
if (mtex && mtex->tex->type & TEX_IMAGE && mtex->tex->ima) {
|
||||
if (mtex && mtex->tex && (mtex->tex->type & TEX_IMAGE) && mtex->tex->ima) {
|
||||
mat->dynproperty |= DYN_LAMP_PERSMAT;
|
||||
|
||||
float one = 1.0f;
|
||||
|
||||
@@ -2705,7 +2705,7 @@ void node_geometry(
|
||||
|
||||
parametric = vec3(0.0);
|
||||
backfacing = (gl_FrontFacing) ? 0.0 : 1.0;
|
||||
pointiness = 0.0;
|
||||
pointiness = 0.5;
|
||||
}
|
||||
|
||||
void node_tex_coord(
|
||||
|
||||
@@ -188,7 +188,7 @@ static bool polygons_check_flip(
|
||||
}
|
||||
|
||||
static void normalEditModifier_do_radial(
|
||||
NormalEditModifierData *smd, Object *ob, DerivedMesh *dm,
|
||||
NormalEditModifierData *enmd, Object *ob, DerivedMesh *dm,
|
||||
short (*clnors)[2], float (*loopnors)[3], float (*polynors)[3],
|
||||
const short mix_mode, const float mix_factor, const float mix_limit,
|
||||
MDeformVert *dvert, const int defgrp_index, const bool use_invert_vgroup,
|
||||
@@ -203,7 +203,7 @@ static void normalEditModifier_do_radial(
|
||||
|
||||
BLI_bitmap *done_verts = BLI_BITMAP_NEW((size_t)num_verts, __func__);
|
||||
|
||||
generate_vert_coordinates(dm, ob, smd->target, smd->offset, num_verts, cos, size);
|
||||
generate_vert_coordinates(dm, ob, enmd->target, enmd->offset, num_verts, cos, size);
|
||||
|
||||
/**
|
||||
* size gives us our spheroid coefficients ``(A, B, C)``.
|
||||
@@ -287,14 +287,14 @@ static void normalEditModifier_do_radial(
|
||||
}
|
||||
|
||||
static void normalEditModifier_do_directional(
|
||||
NormalEditModifierData *smd, Object *ob, DerivedMesh *dm,
|
||||
NormalEditModifierData *enmd, Object *ob, DerivedMesh *dm,
|
||||
short (*clnors)[2], float (*loopnors)[3], float (*polynors)[3],
|
||||
const short mix_mode, const float mix_factor, const float mix_limit,
|
||||
MDeformVert *dvert, const int defgrp_index, const bool use_invert_vgroup,
|
||||
MVert *mvert, const int num_verts, MEdge *medge, const int num_edges,
|
||||
MLoop *mloop, const int num_loops, MPoly *mpoly, const int num_polys)
|
||||
{
|
||||
const bool use_parallel_normals = (smd->flag & MOD_NORMALEDIT_USE_DIRECTION_PARALLEL) != 0;
|
||||
const bool use_parallel_normals = (enmd->flag & MOD_NORMALEDIT_USE_DIRECTION_PARALLEL) != 0;
|
||||
|
||||
float (*cos)[3] = MEM_mallocN(sizeof(*cos) * num_verts, __func__);
|
||||
float (*nos)[3] = MEM_mallocN(sizeof(*nos) * num_loops, __func__);
|
||||
@@ -309,14 +309,14 @@ static void normalEditModifier_do_directional(
|
||||
float mat[4][4];
|
||||
|
||||
invert_m4_m4(mat, ob->obmat);
|
||||
mul_m4_m4m4(mat, mat, smd->target->obmat);
|
||||
mul_m4_m4m4(mat, mat, enmd->target->obmat);
|
||||
copy_v3_v3(target_co, mat[3]);
|
||||
}
|
||||
|
||||
if (use_parallel_normals) {
|
||||
float no[3];
|
||||
|
||||
sub_v3_v3v3(no, target_co, smd->offset);
|
||||
sub_v3_v3v3(no, target_co, enmd->offset);
|
||||
normalize_v3(no);
|
||||
|
||||
for (i = num_loops; i--; ) {
|
||||
@@ -362,19 +362,19 @@ static void normalEditModifier_do_directional(
|
||||
MEM_freeN(nos);
|
||||
}
|
||||
|
||||
static bool is_valid_target(NormalEditModifierData *smd)
|
||||
static bool is_valid_target(NormalEditModifierData *enmd)
|
||||
{
|
||||
if (smd->mode == MOD_NORMALEDIT_MODE_RADIAL) {
|
||||
if (enmd->mode == MOD_NORMALEDIT_MODE_RADIAL) {
|
||||
return true;
|
||||
}
|
||||
else if ((smd->mode == MOD_NORMALEDIT_MODE_DIRECTIONAL) && smd->target) {
|
||||
else if ((enmd->mode == MOD_NORMALEDIT_MODE_DIRECTIONAL) && enmd->target) {
|
||||
return true;
|
||||
}
|
||||
modifier_setError((ModifierData *)smd, "Invalid target settings");
|
||||
modifier_setError((ModifierData *)enmd, "Invalid target settings");
|
||||
return false;
|
||||
}
|
||||
|
||||
static DerivedMesh *normalEditModifier_do(NormalEditModifierData *smd, Object *ob, DerivedMesh *dm)
|
||||
static DerivedMesh *normalEditModifier_do(NormalEditModifierData *enmd, Object *ob, DerivedMesh *dm)
|
||||
{
|
||||
Mesh *me = ob->data;
|
||||
|
||||
@@ -387,11 +387,11 @@ static DerivedMesh *normalEditModifier_do(NormalEditModifierData *smd, Object *o
|
||||
MLoop *mloop;
|
||||
MPoly *mpoly;
|
||||
|
||||
const bool use_invert_vgroup = ((smd->flag & MOD_NORMALEDIT_INVERT_VGROUP) != 0);
|
||||
const bool use_current_clnors = !((smd->mix_mode == MOD_NORMALEDIT_MIX_COPY) &&
|
||||
(smd->mix_factor == 1.0f) &&
|
||||
(smd->defgrp_name[0] == '\0') &&
|
||||
(smd->mix_limit == (float)M_PI));
|
||||
const bool use_invert_vgroup = ((enmd->flag & MOD_NORMALEDIT_INVERT_VGROUP) != 0);
|
||||
const bool use_current_clnors = !((enmd->mix_mode == MOD_NORMALEDIT_MIX_COPY) &&
|
||||
(enmd->mix_factor == 1.0f) &&
|
||||
(enmd->defgrp_name[0] == '\0') &&
|
||||
(enmd->mix_limit == (float)M_PI));
|
||||
|
||||
int defgrp_index;
|
||||
MDeformVert *dvert;
|
||||
@@ -403,12 +403,12 @@ static DerivedMesh *normalEditModifier_do(NormalEditModifierData *smd, Object *o
|
||||
bool free_polynors = false;
|
||||
|
||||
/* Do not run that modifier at all if autosmooth is disabled! */
|
||||
if (!is_valid_target(smd) || !num_loops) {
|
||||
if (!is_valid_target(enmd) || !num_loops) {
|
||||
return dm;
|
||||
}
|
||||
|
||||
if (!(me->flag & ME_AUTOSMOOTH)) {
|
||||
modifier_setError((ModifierData *)smd, "Enable 'Auto Smooth' option in mesh settings");
|
||||
modifier_setError((ModifierData *)enmd, "Enable 'Auto Smooth' option in mesh settings");
|
||||
return dm;
|
||||
}
|
||||
|
||||
@@ -441,18 +441,18 @@ static DerivedMesh *normalEditModifier_do(NormalEditModifierData *smd, Object *o
|
||||
free_polynors = true;
|
||||
}
|
||||
|
||||
modifier_get_vgroup(ob, dm, smd->defgrp_name, &dvert, &defgrp_index);
|
||||
modifier_get_vgroup(ob, dm, enmd->defgrp_name, &dvert, &defgrp_index);
|
||||
|
||||
if (smd->mode == MOD_NORMALEDIT_MODE_RADIAL) {
|
||||
if (enmd->mode == MOD_NORMALEDIT_MODE_RADIAL) {
|
||||
normalEditModifier_do_radial(
|
||||
smd, ob, dm, clnors, loopnors, polynors,
|
||||
smd->mix_mode, smd->mix_factor, smd->mix_limit, dvert, defgrp_index, use_invert_vgroup,
|
||||
enmd, ob, dm, clnors, loopnors, polynors,
|
||||
enmd->mix_mode, enmd->mix_factor, enmd->mix_limit, dvert, defgrp_index, use_invert_vgroup,
|
||||
mvert, num_verts, medge, num_edges, mloop, num_loops, mpoly, num_polys);
|
||||
}
|
||||
else if (smd->mode == MOD_NORMALEDIT_MODE_DIRECTIONAL) {
|
||||
else if (enmd->mode == MOD_NORMALEDIT_MODE_DIRECTIONAL) {
|
||||
normalEditModifier_do_directional(
|
||||
smd, ob, dm, clnors, loopnors, polynors,
|
||||
smd->mix_mode, smd->mix_factor, smd->mix_limit, dvert, defgrp_index, use_invert_vgroup,
|
||||
enmd, ob, dm, clnors, loopnors, polynors,
|
||||
enmd->mix_mode, enmd->mix_factor, enmd->mix_limit, dvert, defgrp_index, use_invert_vgroup,
|
||||
mvert, num_verts, medge, num_edges, mloop, num_loops, mpoly, num_polys);
|
||||
}
|
||||
|
||||
@@ -465,13 +465,13 @@ static DerivedMesh *normalEditModifier_do(NormalEditModifierData *smd, Object *o
|
||||
|
||||
static void initData(ModifierData *md)
|
||||
{
|
||||
NormalEditModifierData *smd = (NormalEditModifierData *)md;
|
||||
NormalEditModifierData *enmd = (NormalEditModifierData *)md;
|
||||
|
||||
smd->mode = MOD_NORMALEDIT_MODE_RADIAL;
|
||||
enmd->mode = MOD_NORMALEDIT_MODE_RADIAL;
|
||||
|
||||
smd->mix_mode = MOD_NORMALEDIT_MIX_COPY;
|
||||
smd->mix_factor = 1.0f;
|
||||
smd->mix_limit = M_PI;
|
||||
enmd->mix_mode = MOD_NORMALEDIT_MIX_COPY;
|
||||
enmd->mix_factor = 1.0f;
|
||||
enmd->mix_limit = M_PI;
|
||||
}
|
||||
|
||||
static void copyData(ModifierData *md, ModifierData *target)
|
||||
@@ -481,11 +481,11 @@ static void copyData(ModifierData *md, ModifierData *target)
|
||||
|
||||
static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md)
|
||||
{
|
||||
NormalEditModifierData *smd = (NormalEditModifierData *)md;
|
||||
NormalEditModifierData *enmd = (NormalEditModifierData *)md;
|
||||
CustomDataMask dataMask = CD_CUSTOMLOOPNORMAL;
|
||||
|
||||
/* Ask for vertexgroups if we need them. */
|
||||
if (smd->defgrp_name[0]) {
|
||||
if (enmd->defgrp_name[0]) {
|
||||
dataMask |= (CD_MASK_MDEFORMVERT);
|
||||
}
|
||||
|
||||
@@ -499,16 +499,16 @@ static bool dependsOnNormals(ModifierData *UNUSED(md))
|
||||
|
||||
static void foreachObjectLink(ModifierData *md, Object *ob, ObjectWalkFunc walk, void *userData)
|
||||
{
|
||||
NormalEditModifierData *smd = (NormalEditModifierData *) md;
|
||||
NormalEditModifierData *enmd = (NormalEditModifierData *) md;
|
||||
|
||||
walk(userData, ob, &smd->target, IDWALK_NOP);
|
||||
walk(userData, ob, &enmd->target, IDWALK_NOP);
|
||||
}
|
||||
|
||||
static bool isDisabled(ModifierData *md, int UNUSED(useRenderParams))
|
||||
{
|
||||
NormalEditModifierData *smd = (NormalEditModifierData *)md;
|
||||
NormalEditModifierData *enmd = (NormalEditModifierData *)md;
|
||||
|
||||
return !is_valid_target(smd);
|
||||
return !is_valid_target(enmd);
|
||||
}
|
||||
|
||||
static void updateDepgraph(ModifierData *md, DagForest *forest,
|
||||
@@ -516,10 +516,10 @@ static void updateDepgraph(ModifierData *md, DagForest *forest,
|
||||
struct Scene *UNUSED(scene),
|
||||
Object *UNUSED(ob), DagNode *obNode)
|
||||
{
|
||||
NormalEditModifierData *smd = (NormalEditModifierData *) md;
|
||||
NormalEditModifierData *enmd = (NormalEditModifierData *) md;
|
||||
|
||||
if (smd->target) {
|
||||
DagNode *Node = dag_get_node(forest, smd->target);
|
||||
if (enmd->target) {
|
||||
DagNode *Node = dag_get_node(forest, enmd->target);
|
||||
|
||||
dag_add_relation(forest, Node, obNode, DAG_RL_OB_DATA, "NormalEdit Modifier");
|
||||
}
|
||||
@@ -531,9 +531,9 @@ static void updateDepsgraph(ModifierData *md,
|
||||
Object *UNUSED(ob),
|
||||
struct DepsNodeHandle *node)
|
||||
{
|
||||
NormalEditModifierData *smd = (NormalEditModifierData *) md;
|
||||
if (smd->target) {
|
||||
DEG_add_object_relation(node, smd->target, DEG_OB_COMP_GEOMETRY, "NormalEdit Modifier");
|
||||
NormalEditModifierData *enmd = (NormalEditModifierData *) md;
|
||||
if (enmd->target) {
|
||||
DEG_add_object_relation(node, enmd->target, DEG_OB_COMP_TRANSFORM, "NormalEdit Modifier");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user