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:
authorCampbell Barton <ideasman42@gmail.com>2011-12-20 05:33:14 +0400
committerCampbell Barton <ideasman42@gmail.com>2011-12-20 05:33:14 +0400
commitefb4eff35312afb372e2a46aa598d12a74ff4a52 (patch)
treeb039276297f2deea8bff39e606c9bf89b0dbc590 /source
parent2457d4f5abd65095ae48be937ed43d026d47124a (diff)
parent71ce197bbb09af00980f6efc4891dc2a7ffda36b (diff)
svn merge ^/trunk/blender -r42722:42742
Diffstat (limited to 'source')
-rw-r--r--source/blender/blenkernel/BKE_node.h2
-rw-r--r--source/blender/blenkernel/BKE_texture.h2
-rw-r--r--source/blender/blenkernel/intern/DerivedMesh.c103
-rw-r--r--source/blender/blenkernel/intern/node.c47
-rw-r--r--source/blender/blenkernel/intern/texture.c4
-rw-r--r--source/blender/blenloader/intern/readfile.c57
-rw-r--r--source/blender/editors/space_node/node_buttons.c3
-rw-r--r--source/blender/editors/space_node/node_draw.c12
-rw-r--r--source/blender/editors/space_text/text_ops.c1
-rw-r--r--source/blender/makesdna/DNA_world_types.h1
-rw-r--r--source/blender/makesrna/intern/rna_world.c1
-rw-r--r--source/blender/modifiers/intern/MOD_weightvgedit.c54
-rw-r--r--source/blender/modifiers/intern/MOD_weightvgmix.c56
-rw-r--r--source/blender/modifiers/intern/MOD_weightvgproximity.c72
-rw-r--r--source/blender/nodes/shader/node_shader_util.c2
-rw-r--r--source/blender/render/intern/source/render_texture.c6
-rw-r--r--source/creator/CMakeLists.txt1
17 files changed, 176 insertions, 248 deletions
diff --git a/source/blender/blenkernel/BKE_node.h b/source/blender/blenkernel/BKE_node.h
index 378e5872791..6234308048b 100644
--- a/source/blender/blenkernel/BKE_node.h
+++ b/source/blender/blenkernel/BKE_node.h
@@ -305,8 +305,6 @@ void ntreeSwitchID(struct bNodeTree *ntree, struct ID *sce_from, struct ID *sc
void ntreeMakeLocal(struct bNodeTree *ntree);
int ntreeHasType(struct bNodeTree *ntree, int type);
-void ntreeSocketUseFlags(struct bNodeTree *ntree);
-
void ntreeUpdateTree(struct bNodeTree *ntree);
/* XXX Currently each tree update call does call to ntreeVerifyNodes too.
* Some day this should be replaced by a decent depsgraph automatism!
diff --git a/source/blender/blenkernel/BKE_texture.h b/source/blender/blenkernel/BKE_texture.h
index 52fa52a5899..7f321abf48e 100644
--- a/source/blender/blenkernel/BKE_texture.h
+++ b/source/blender/blenkernel/BKE_texture.h
@@ -67,7 +67,7 @@ void free_plugin_tex(struct PluginTex *pit);
void init_colorband(struct ColorBand *coba, int rangetype);
struct ColorBand *add_colorband(int rangetype);
-int do_colorband(struct ColorBand *coba, float in, float out[4]);
+int do_colorband(const struct ColorBand *coba, float in, float out[4]);
void colorband_table_RGBA(struct ColorBand *coba, float **array, int *size);
int vergcband(const void *a1, const void *a2);
struct CBData *colorband_element_add(struct ColorBand *coba, float position);
diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c
index 98465dafecb..e47c197cfa0 100644
--- a/source/blender/blenkernel/intern/DerivedMesh.c
+++ b/source/blender/blenkernel/intern/DerivedMesh.c
@@ -883,7 +883,7 @@ enum {
CALC_WP_AUTO_NORMALIZE= (1<<1)
};
-void weightpaint_color(unsigned char r_col[4], ColorBand *coba, const float input)
+static void weightpaint_color(unsigned char r_col[4], ColorBand *coba, const float input)
{
float colf[4];
@@ -910,10 +910,10 @@ static void calc_weightpaint_vert_color(
if ((selected > 1) && (draw_flag & CALC_WP_MULTIPAINT)) {
int was_a_nonzero= FALSE;
- int i;
+ unsigned int i;
MDeformWeight *dw= dv->dw;
- for (i = dv->totweight; i > 0; i--, dw++) {
+ for (i = dv->totweight; i != 0; i--, dw++) {
/* in multipaint, get the average if auto normalize is inactive
* get the sum if it is active */
if (dw->def_nr < defbase_tot) {
@@ -958,70 +958,81 @@ void vDM_ColorBand_store(ColorBand *coba)
stored_cb= coba;
}
-static void add_weight_mcol_dm(Object *ob, DerivedMesh *dm, int const draw_flag)
+/* return an array of vertex weight colors */
+static unsigned char *calc_weightpaint_vert_array(Object *ob, int const draw_flag, ColorBand *coba)
{
Mesh *me = ob->data;
- MFace *mf = dm->getTessFaceArray(dm);
- MLoop *mloop = dm->getLoopArray(dm), *ml;
- MPoly *mp = dm->getPolyArray(dm);
- ColorBand *coba= stored_cb; /* warning, not a local var */
- unsigned char *wtcol;
- unsigned char(*wlcol)[4] = NULL;
- BLI_array_declare(wlcol);
- int i, j, totface=dm->getNumTessFaces(dm), totloop;
- int *origIndex = dm->getVertDataArray(dm, CD_ORIGINDEX);
-
- int defbase_tot = BLI_countlist(&ob->defbase);
- const int defbase_act = ob->actdef-1;
- char *dg_flags = MEM_mallocN(defbase_tot * sizeof(char), __func__);
- int selected = get_selected_defgroups(ob, dg_flags, defbase_tot);
-
- wtcol = MEM_callocN (sizeof (unsigned char) * totface*4*4, "weightmap");
+ unsigned char *wtcol_v = MEM_callocN (sizeof(unsigned char) * me->totvert * 4, "weightmap_v");
if (me->dvert) {
- MDeformVert *dvert= me->dvert;
- /*first add colors to the tesselation faces*/
- memset(wtcol, 0x55, sizeof (unsigned char) * totface*4*4);
- for (i=0; i<totface; i++, mf++) {
- /*origindex being NULL means we're operating on original mesh data*/
- unsigned int fidx= mf->v4 ? 3:2;
- do {
- calc_weightpaint_vert_color(&wtcol[(i*4 + fidx)*4],
- &dvert[*(&mf->v1 + fidx)], coba,
- defbase_tot, defbase_act,
- dg_flags, selected, draw_flag);
- } while (fidx--);
+ unsigned char *wc = wtcol_v;
+ MDeformVert *dv= me->dvert;
+ unsigned int i;
+
+ /* varisbles for multipaint */
+ const int defbase_tot = BLI_countlist(&ob->defbase);
+ const int defbase_act = ob->actdef-1;
+ char *dg_flags = MEM_mallocN(defbase_tot * sizeof(char), __func__);
+ const int selected = get_selected_defgroups(ob, dg_flags, defbase_tot);
+ /* const int unselected = defbase_tot - selected; */ /* UNUSED */
+
+ for (i = me->totvert; i != 0; i--, wc += 4, dv++) {
+ calc_weightpaint_vert_color(wc, dv, coba, defbase_tot, defbase_act, dg_flags, selected, draw_flag);
}
+
+ MEM_freeN(dg_flags);
}
else {
- /* no weights, fill in zero */
int col_i;
weightpaint_color((unsigned char *)&col_i, coba, 0.0f);
- fill_vn_i((int *)wtcol, totface*4, col_i);
+ fill_vn_i((int *)wtcol_v, me->totvert, col_i);
+ }
+
+ return wtcol_v;
+}
+
+static void add_weight_mcol_dm(Object *ob, DerivedMesh *dm, int const draw_flag)
+{
+ ColorBand *coba= stored_cb; /* warning, not a local var */
+ unsigned char *wtcol_v = calc_weightpaint_vert_array(ob, draw_flag, coba);
+ unsigned char *wtcol_f;
+ unsigned char(*wtcol_l)[4] = NULL;
+ BLI_array_declare(wtcol_l);
+ MFace *mf = dm->getTessFaceArray(dm);
+ MLoop *mloop = dm->getLoopArray(dm), *ml;
+ MPoly *mp = dm->getPolyArray(dm);
+ int i, j, totface=dm->getNumTessFaces(dm), totloop;
+ int *origIndex = dm->getVertDataArray(dm, CD_ORIGINDEX);
+
+ wtcol_f = MEM_mallocN(sizeof (unsigned char) * totface*4*4, "weightmap_f");
+
+ /*first add colors to the tesselation faces*/
+ for (i=0; i<totface; i++, mf++) {
+ /*origindex being NULL means we're operating on original mesh data*/
+ unsigned int fidx= mf->v4 ? 3:2;
+ do {
+ copy_v4_v4_char((char *)&wtcol_f[(4 * i + fidx) * 4],
+ (char *)&wtcol_v[4 * (*(&mf->v1 + fidx))]);
+ } while (fidx--);
}
-
- CustomData_add_layer(&dm->faceData, CD_WEIGHT_MCOL, CD_ASSIGN, wtcol, totface);
+
+ CustomData_add_layer(&dm->faceData, CD_WEIGHT_MCOL, CD_ASSIGN, wtcol_f, totface);
/*now add to loops, so the data can be passed through the modifier stack*/
totloop = 0;
for (i=0; i<dm->numPolyData; i++, mp++) {
- MDeformVert *dvert= me->dvert;
-
ml = mloop + mp->loopstart;
for (j=0; j<mp->totloop; j++, ml++, totloop++) {
- BLI_array_growone(wlcol);
-
- calc_weightpaint_vert_color((unsigned char *)&wlcol[totloop],
- &dvert[origIndex ? origIndex[ml->v] : ml->v], coba,
- defbase_tot, defbase_act,
- dg_flags, selected, draw_flag);
+ BLI_array_growone(wtcol_l);
+ copy_v4_v4_char((char *)&wtcol_l[totloop],
+ (char *)&wtcol_v[4 * (origIndex ? origIndex[ml->v] : ml->v)]);
}
}
- MEM_freeN(dg_flags);
+ MEM_freeN(wtcol_v);
- CustomData_add_layer(&dm->loopData, CD_WEIGHT_MLOOPCOL, CD_ASSIGN, wlcol, totloop);
+ CustomData_add_layer(&dm->loopData, CD_WEIGHT_MLOOPCOL, CD_ASSIGN, wtcol_l, totloop);
}
diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c
index cc49e8465b9..ce1dd429794 100644
--- a/source/blender/blenkernel/intern/node.c
+++ b/source/blender/blenkernel/intern/node.c
@@ -1325,32 +1325,6 @@ void nodeSetActive(bNodeTree *ntree, bNode *node)
node->flag |= NODE_ACTIVE_TEXTURE;
}
-/* use flags are not persistent yet, groups might need different tagging, so we do it each time
- when we need to get this info */
-void ntreeSocketUseFlags(bNodeTree *ntree)
-{
- bNode *node;
- bNodeSocket *sock;
- bNodeLink *link;
-
- /* clear flags */
- for(node= ntree->nodes.first; node; node= node->next) {
- for(sock= node->inputs.first; sock; sock= sock->next)
- sock->flag &= ~SOCK_IN_USE;
- for(sock= node->outputs.first; sock; sock= sock->next)
- sock->flag &= ~SOCK_IN_USE;
- }
-
- /* tag all thats in use */
- for(link= ntree->links.first; link; link= link->next) {
-
- if(link->fromsock) // FIXME, see below
- link->fromsock->flag |= SOCK_IN_USE;
- if(link->tosock) // FIXME This can be NULL, when dragging a new link in the UI, should probably copy the node tree for preview render - campbell
- link->tosock->flag |= SOCK_IN_USE;
- }
-}
-
/* ************** dependency stuff *********** */
/* node is guaranteed to be not checked before */
@@ -1425,16 +1399,27 @@ static void ntree_update_link_pointers(bNodeTree *ntree)
/* first clear data */
for(node= ntree->nodes.first; node; node= node->next) {
- for(sock= node->inputs.first; sock; sock= sock->next)
+ for(sock= node->inputs.first; sock; sock= sock->next) {
sock->link= NULL;
+ sock->flag &= ~SOCK_IN_USE;
+ }
+ for(sock= node->outputs.first; sock; sock= sock->next) {
+ sock->flag &= ~SOCK_IN_USE;
+ }
+ }
+ for(sock= ntree->inputs.first; sock; sock= sock->next) {
+ sock->flag &= ~SOCK_IN_USE;
}
- /* clear socket links */
- for(sock= ntree->outputs.first; sock; sock= sock->next)
+ for(sock= ntree->outputs.first; sock; sock= sock->next) {
sock->link= NULL;
+ sock->flag &= ~SOCK_IN_USE;
+ }
for(link= ntree->links.first; link; link= link->next) {
- if (link->tosock)
- link->tosock->link= link;
+ link->tosock->link= link;
+
+ link->fromsock->flag |= SOCK_IN_USE;
+ link->tosock->flag |= SOCK_IN_USE;
}
}
diff --git a/source/blender/blenkernel/intern/texture.c b/source/blender/blenkernel/intern/texture.c
index 93404dc25fb..7051376a1f4 100644
--- a/source/blender/blenkernel/intern/texture.c
+++ b/source/blender/blenkernel/intern/texture.c
@@ -349,9 +349,9 @@ ColorBand *add_colorband(int rangetype)
/* ------------------------------------------------------------------------- */
-int do_colorband(ColorBand *coba, float in, float out[4])
+int do_colorband(const ColorBand *coba, float in, float out[4])
{
- CBData *cbd1, *cbd2, *cbd0, *cbd3;
+ const CBData *cbd1, *cbd2, *cbd0, *cbd3;
float fac, mfac, t[4];
int a;
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 14decca5202..99c3ec0c134 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -7520,6 +7520,30 @@ void do_versions_image_settings_2_60(Scene *sce)
}
+/* socket use flags were only temporary before */
+static void do_versions_nodetree_socket_use_flags_2_62(bNodeTree *ntree)
+{
+ bNode *node;
+ bNodeSocket *sock;
+ bNodeLink *link;
+
+ for (node=ntree->nodes.first; node; node=node->next) {
+ for (sock=node->inputs.first; sock; sock=sock->next)
+ sock->flag &= ~SOCK_IN_USE;
+ for (sock=node->outputs.first; sock; sock=sock->next)
+ sock->flag &= ~SOCK_IN_USE;
+ }
+ for (sock=ntree->inputs.first; sock; sock=sock->next)
+ sock->flag &= ~SOCK_IN_USE;
+ for (sock=ntree->outputs.first; sock; sock=sock->next)
+ sock->flag &= ~SOCK_IN_USE;
+
+ for (link=ntree->links.first; link; link=link->next) {
+ link->fromsock->flag |= SOCK_IN_USE;
+ link->tosock->flag |= SOCK_IN_USE;
+ }
+}
+
static void do_versions(FileData *fd, Library *lib, Main *main)
{
/* WATCH IT!!!: pointers from libdata have not been converted */
@@ -12749,7 +12773,38 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
/* put compatibility code here until next subversion bump */
{
- /* nothing! */
+ {
+ /* update use flags for node sockets (was only temporary before) */
+ Scene *sce;
+ Material *mat;
+ Tex *tex;
+ Lamp *lamp;
+ World *world;
+ bNodeTree *ntree;
+
+ for (sce=main->scene.first; sce; sce=sce->id.next)
+ if (sce->nodetree)
+ do_versions_nodetree_socket_use_flags_2_62(sce->nodetree);
+
+ for (mat=main->mat.first; mat; mat=mat->id.next)
+ if (mat->nodetree)
+ do_versions_nodetree_socket_use_flags_2_62(mat->nodetree);
+
+ for (tex=main->tex.first; tex; tex=tex->id.next)
+ if (tex->nodetree)
+ do_versions_nodetree_socket_use_flags_2_62(tex->nodetree);
+
+ for (lamp=main->lamp.first; lamp; lamp=lamp->id.next)
+ if (lamp->nodetree)
+ do_versions_nodetree_socket_use_flags_2_62(lamp->nodetree);
+
+ for (world=main->world.first; world; world=world->id.next)
+ if (world->nodetree)
+ do_versions_nodetree_socket_use_flags_2_62(world->nodetree);
+
+ for (ntree=main->nodetree.first; ntree; ntree=ntree->id.next)
+ do_versions_nodetree_socket_use_flags_2_62(ntree);
+ }
}
/* WATCH IT!!!: pointers from libdata have not been converted yet here! */
diff --git a/source/blender/editors/space_node/node_buttons.c b/source/blender/editors/space_node/node_buttons.c
index 15e5719be37..1b5f2417384 100644
--- a/source/blender/editors/space_node/node_buttons.c
+++ b/source/blender/editors/space_node/node_buttons.c
@@ -115,6 +115,9 @@ static void active_node_panel(const bContext *C, Panel *pa)
uiItemS(layout);
uiItemR(layout, &ptr, "name", 0, NULL, ICON_NODE);
uiItemS(layout);
+
+ uiItemO(layout, NULL, 0, "NODE_OT_hide_socket_toggle");
+ uiItemS(layout);
/* draw this node's settings */
if (node->typeinfo && node->typeinfo->uifuncbut)
diff --git a/source/blender/editors/space_node/node_draw.c b/source/blender/editors/space_node/node_draw.c
index 08e073494bb..7b692f55965 100644
--- a/source/blender/editors/space_node/node_draw.c
+++ b/source/blender/editors/space_node/node_draw.c
@@ -351,10 +351,10 @@ static void node_update_hidden(bNode *node)
/* calculate minimal radius */
for(nsock= node->inputs.first; nsock; nsock= nsock->next)
- if(!(nsock->flag & (SOCK_HIDDEN|SOCK_UNAVAIL)))
+ if(!(nsock->flag & (SOCK_HIDDEN|SOCK_UNAVAIL)) && (nsock->flag & SOCK_IN_USE))
totin++;
for(nsock= node->outputs.first; nsock; nsock= nsock->next)
- if(!(nsock->flag & (SOCK_HIDDEN|SOCK_UNAVAIL)))
+ if(!(nsock->flag & (SOCK_HIDDEN|SOCK_UNAVAIL)) && (nsock->flag & SOCK_IN_USE))
totout++;
tot= MAX2(totin, totout);
@@ -371,7 +371,7 @@ static void node_update_hidden(bNode *node)
rad=drad= (float)M_PI/(1.0f + (float)totout);
for(nsock= node->outputs.first; nsock; nsock= nsock->next) {
- if(!(nsock->flag & (SOCK_HIDDEN|SOCK_UNAVAIL))) {
+ if(!(nsock->flag & (SOCK_HIDDEN|SOCK_UNAVAIL)) && (nsock->flag & SOCK_IN_USE)) {
nsock->locx= node->totr.xmax - hiddenrad + (float)sin(rad)*hiddenrad;
nsock->locy= node->totr.ymin + hiddenrad + (float)cos(rad)*hiddenrad;
rad+= drad;
@@ -382,7 +382,7 @@ static void node_update_hidden(bNode *node)
rad=drad= - (float)M_PI/(1.0f + (float)totin);
for(nsock= node->inputs.first; nsock; nsock= nsock->next) {
- if(!(nsock->flag & (SOCK_HIDDEN|SOCK_UNAVAIL))) {
+ if(!(nsock->flag & (SOCK_HIDDEN|SOCK_UNAVAIL)) && (nsock->flag & SOCK_IN_USE)) {
nsock->locx= node->totr.xmin + hiddenrad + (float)sin(rad)*hiddenrad;
nsock->locy= node->totr.ymin + hiddenrad + (float)cos(rad)*hiddenrad;
rad+= drad;
@@ -854,12 +854,12 @@ static void node_draw_hidden(const bContext *C, ARegion *ar, SpaceNode *snode, b
/* sockets */
for(sock= node->inputs.first; sock; sock= sock->next) {
- if(!(sock->flag & (SOCK_HIDDEN|SOCK_UNAVAIL)))
+ if(!(sock->flag & (SOCK_HIDDEN|SOCK_UNAVAIL)) && (sock->flag & SOCK_IN_USE))
node_socket_circle_draw(snode->nodetree, sock, socket_size);
}
for(sock= node->outputs.first; sock; sock= sock->next) {
- if(!(sock->flag & (SOCK_HIDDEN|SOCK_UNAVAIL)))
+ if(!(sock->flag & (SOCK_HIDDEN|SOCK_UNAVAIL)) && (sock->flag & SOCK_IN_USE))
node_socket_circle_draw(snode->nodetree, sock, socket_size);
}
diff --git a/source/blender/editors/space_text/text_ops.c b/source/blender/editors/space_text/text_ops.c
index 16ee32d10a2..566659e0391 100644
--- a/source/blender/editors/space_text/text_ops.c
+++ b/source/blender/editors/space_text/text_ops.c
@@ -195,7 +195,6 @@ void TEXT_OT_new(wmOperatorType *ot)
ot->description= "Create a new text data block";
/* api callbacks */
- ot->invoke= WM_operator_confirm;
ot->exec= text_new_exec;
ot->poll= text_new_poll;
diff --git a/source/blender/makesdna/DNA_world_types.h b/source/blender/makesdna/DNA_world_types.h
index 1e8a4574120..149393b6723 100644
--- a/source/blender/makesdna/DNA_world_types.h
+++ b/source/blender/makesdna/DNA_world_types.h
@@ -181,6 +181,7 @@ typedef struct World {
#define TEXCO_ANGMAP 64
#define TEXCO_H_SPHEREMAP 256
#define TEXCO_H_TUBEMAP 1024
+#define TEXCO_EQUIRECTMAP 2048
/* mapto */
#define WOMAP_BLEND 1
diff --git a/source/blender/makesrna/intern/rna_world.c b/source/blender/makesrna/intern/rna_world.c
index 840498249ea..087716adbe3 100644
--- a/source/blender/makesrna/intern/rna_world.c
+++ b/source/blender/makesrna/intern/rna_world.c
@@ -143,6 +143,7 @@ static void rna_def_world_mtex(BlenderRNA *brna)
{TEXCO_GLOB, "GLOBAL", 0, "Global", "Use global coordinates for the texture coordinates (interior mist)"},
{TEXCO_ANGMAP, "ANGMAP", 0, "AngMap", "Use 360 degree angular coordinates, e.g. for spherical light probes"},
{TEXCO_H_SPHEREMAP, "SPHERE", 0, "Sphere", "For 360 degree panorama sky, spherical mapped, only top half"},
+ {TEXCO_EQUIRECTMAP, "EQUIRECT", 0, "Equirectangular", "For 360 degree panorama sky, equirectangular mapping"},
{TEXCO_H_TUBEMAP, "TUBE", 0, "Tube", "For 360 degree panorama sky, cylindrical mapped, only top half"},
{TEXCO_OBJECT, "OBJECT", 0, "Object", "Use linked object's coordinates for texture coordinates"},
{0, NULL, 0, NULL, NULL}};
diff --git a/source/blender/modifiers/intern/MOD_weightvgedit.c b/source/blender/modifiers/intern/MOD_weightvgedit.c
index a4c0f0ffa70..95862f5f002 100644
--- a/source/blender/modifiers/intern/MOD_weightvgedit.c
+++ b/source/blender/modifiers/intern/MOD_weightvgedit.c
@@ -177,10 +177,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *der
int UNUSED(useRenderParams), int UNUSED(isFinalCalc))
{
WeightVGEditModifierData *wmd = (WeightVGEditModifierData*) md;
- DerivedMesh *dm = derivedData, *ret = NULL;
-#if 0
- Mesh *ob_m = NULL;
-#endif
+ DerivedMesh *dm = derivedData;
MDeformVert *dvert = NULL;
MDeformWeight **dw = NULL;
float *org_w; /* Array original weights. */
@@ -188,7 +185,6 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *der
int numVerts;
int defgrp_idx;
int i;
- char rel_ret = 0; /* Boolean, whether we have to release ret dm or not, when not using it! */
/* Flags. */
int do_add = (wmd->edit_flags & MOD_WVG_EDIT_ADD2VG) != 0;
int do_rem = (wmd->edit_flags & MOD_WVG_EDIT_REMFVG) != 0;
@@ -207,49 +203,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *der
if (defgrp_idx < 0)
return dm;
- /* XXX All this to avoid copying dm when not needed... However, it nearly doubles compute
- * time! See scene 5 of the WeighVG test file...
- */
-#if 0
- /* Get actual dverts (ie vertex group data). */
- dvert = dm->getVertDataArray(dm, CD_MDEFORMVERT);
- /* If no dverts, return unmodified data... */
- if (dvert == NULL)
- return dm;
-
- /* Get org mesh, only to test whether affected cdata layer has already been copied
- * somewhere up in the modifiers stack.
- */
- ob_m = get_mesh(ob);
- if (ob_m == NULL)
- return dm;
-
- /* Create a copy of our dmesh, only if our affected cdata layer is the same as org mesh. */
- if (dvert == CustomData_get_layer(&ob_m->vdata, CD_MDEFORMVERT)) {
- /* XXX Seems to create problems with weightpaint mode???
- * I'm missing something here, I guess...
- */
-// DM_set_only_copy(dm, CD_MASK_MDEFORMVERT); /* Only copy defgroup layer. */
- ret = CDDM_copy(dm);
- dvert = ret->getVertDataArray(ret, CD_MDEFORMVERT);
- if (dvert == NULL) {
- ret->release(ret);
- return dm;
- }
- rel_ret = 1;
- }
- else
- ret = dm;
-#else
- ret = CDDM_copy(dm, 0);
- rel_ret = 1;
- dvert = ret->getVertDataArray(ret, CD_MDEFORMVERT);
- if (dvert == NULL) {
- if (rel_ret)
- ret->release(ret);
- return dm;
- }
-#endif
+ dvert = CustomData_duplicate_referenced_layer(&dm->vertData, CD_MDEFORMVERT, numVerts);
/* Get org weights, assuming 0.0 for vertices not in given vgroup. */
org_w = MEM_mallocN(sizeof(float) * numVerts, "WeightVGEdit Modifier, org_w");
@@ -271,7 +225,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *der
}
/* Do masking. */
- weightvg_do_mask(numVerts, NULL, org_w, new_w, ob, ret, wmd->mask_constant,
+ weightvg_do_mask(numVerts, NULL, org_w, new_w, ob, dm, wmd->mask_constant,
wmd->mask_defgrp_name, wmd->mask_texture, wmd->mask_tex_use_channel,
wmd->mask_tex_mapping, wmd->mask_tex_map_obj, wmd->mask_tex_uvlayer_name);
@@ -285,7 +239,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *der
MEM_freeN(dw);
/* Return the vgroup-modified mesh. */
- return ret;
+ return dm;
}
static DerivedMesh *applyModifierEM(ModifierData *md, Object *ob,
diff --git a/source/blender/modifiers/intern/MOD_weightvgmix.c b/source/blender/modifiers/intern/MOD_weightvgmix.c
index 43f503a7624..34e73adb4b4 100644
--- a/source/blender/modifiers/intern/MOD_weightvgmix.c
+++ b/source/blender/modifiers/intern/MOD_weightvgmix.c
@@ -219,10 +219,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *der
int UNUSED(useRenderParams), int UNUSED(isFinalCalc))
{
WeightVGMixModifierData *wmd = (WeightVGMixModifierData*) md;
- DerivedMesh *dm = derivedData, *ret = NULL;
-#if 0
- Mesh *ob_m = NULL;
-#endif
+ DerivedMesh *dm = derivedData;
MDeformVert *dvert = NULL;
MDeformWeight **dw1, **tdw1, **dw2, **tdw2;
int numVerts;
@@ -232,7 +229,6 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *der
int *tidx, *indices = NULL;
int numIdx = 0;
int i;
- char rel_ret = 0; /* Boolean, whether we have to release ret dm or not, when not using it! */
/* Get number of verts. */
numVerts = dm->getNumVerts(dm);
@@ -254,49 +250,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *der
return dm;
}
- /* XXX All this to avoid copying dm when not needed... However, it nearly doubles compute
- * time! See scene 5 of the WeighVG test file...
- */
-#if 0
- /* Get actual dverts (ie vertex group data). */
- dvert = dm->getVertDataArray(dm, CD_MDEFORMVERT);
- /* If no dverts, return unmodified data... */
- if (dvert == NULL)
- return dm;
-
- /* Get org mesh, only to test whether affected cdata layer has already been copied
- * somewhere up in the modifiers stack.
- */
- ob_m = get_mesh(ob);
- if (ob_m == NULL)
- return dm;
-
- /* Create a copy of our dmesh, only if our affected cdata layer is the same as org mesh. */
- if (dvert == CustomData_get_layer(&ob_m->vdata, CD_MDEFORMVERT)) {
- /* XXX Seems to create problems with weightpaint mode???
- * I'm missing something here, I guess...
- */
-// DM_set_only_copy(dm, CD_MASK_MDEFORMVERT); /* Only copy defgroup layer. */
- ret = CDDM_copy(dm);
- dvert = ret->getVertDataArray(ret, CD_MDEFORMVERT);
- if (dvert == NULL) {
- ret->release(ret);
- return dm;
- }
- rel_ret = 1;
- }
- else
- ret = dm;
-#else
- ret = CDDM_copy(dm, 0);
- rel_ret = 1;
- dvert = ret->getVertDataArray(ret, CD_MDEFORMVERT);
- if (dvert == NULL) {
- if (rel_ret)
- ret->release(ret);
- return dm;
- }
-#endif
+ dvert = CustomData_duplicate_referenced_layer(&dm->vertData, CD_MDEFORMVERT, numVerts);
/* Find out which vertices to work on. */
tidx = MEM_mallocN(sizeof(int) * numVerts, "WeightVGMix Modifier, tidx");
@@ -364,8 +318,6 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *der
MEM_freeN(tdw1);
MEM_freeN(tdw2);
MEM_freeN(tidx);
- if (rel_ret)
- ret->release(ret);
return dm;
}
if (numIdx != -1) {
@@ -400,7 +352,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *der
}
/* Do masking. */
- weightvg_do_mask(numIdx, indices, org_w, new_w, ob, ret, wmd->mask_constant,
+ weightvg_do_mask(numIdx, indices, org_w, new_w, ob, dm, wmd->mask_constant,
wmd->mask_defgrp_name, wmd->mask_texture, wmd->mask_tex_use_channel,
wmd->mask_tex_mapping, wmd->mask_tex_map_obj, wmd->mask_tex_uvlayer_name);
@@ -419,7 +371,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *der
MEM_freeN(indices);
/* Return the vgroup-modified mesh. */
- return ret;
+ return dm;
}
static DerivedMesh *applyModifierEM(ModifierData *md, Object *ob,
diff --git a/source/blender/modifiers/intern/MOD_weightvgproximity.c b/source/blender/modifiers/intern/MOD_weightvgproximity.c
index db561eb59a6..2a8b639f2cf 100644
--- a/source/blender/modifiers/intern/MOD_weightvgproximity.c
+++ b/source/blender/modifiers/intern/MOD_weightvgproximity.c
@@ -28,11 +28,17 @@
* \ingroup modifiers
*/
+#define DO_PROFILE 0
+
#include "BLI_editVert.h"
#include "BLI_math.h"
#include "BLI_string.h"
#include "BLI_utildefines.h"
+#if DO_PROFILE
+ #include "PIL_time.h"
+#endif
+
#include "DNA_mesh_types.h"
#include "DNA_meshdata_types.h"
#include "DNA_modifier_types.h"
@@ -334,10 +340,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *der
int UNUSED(useRenderParams), int UNUSED(isFinalCalc))
{
WeightVGProximityModifierData *wmd = (WeightVGProximityModifierData*) md;
- DerivedMesh *dm = derivedData, *ret = NULL;
-#if 0
- Mesh *ob_m = NULL;
-#endif
+ DerivedMesh *dm = derivedData;
MDeformVert *dvert = NULL;
MDeformWeight **dw, **tdw;
int numVerts;
@@ -350,7 +353,10 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *der
int *tidx, *indices = NULL;
int numIdx = 0;
int i;
- char rel_ret = 0; /* Boolean, whether we have to release ret dm or not, when not using it! */
+
+#if DO_PROFILE
+ TIMEIT_START(perf)
+#endif
/* Get number of verts. */
numVerts = dm->getNumVerts(dm);
@@ -371,49 +377,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *der
if (defgrp_idx < 0)
return dm;
- /* XXX All this to avoid copying dm when not needed... However, it nearly doubles compute
- * time! See scene 5 of the WeighVG test file...
- */
-#if 0
- /* Get actual dverts (ie vertex group data). */
- dvert = dm->getVertDataArray(dm, CD_MDEFORMVERT);
- /* If no dverts, return unmodified data... */
- if (dvert == NULL)
- return dm;
-
- /* Get org mesh, only to test whether affected cdata layer has already been copied
- * somewhere up in the modifiers stack.
- */
- ob_m = get_mesh(ob);
- if (ob_m == NULL)
- return dm;
-
- /* Create a copy of our dmesh, only if our affected cdata layer is the same as org mesh. */
- if (dvert == CustomData_get_layer(&ob_m->vdata, CD_MDEFORMVERT)) {
- /* XXX Seems to create problems with weightpaint mode???
- * I'm missing something here, I guess...
- */
-// DM_set_only_copy(dm, CD_MASK_MDEFORMVERT); /* Only copy defgroup layer. */
- ret = CDDM_copy(dm);
- dvert = ret->getVertDataArray(ret, CD_MDEFORMVERT);
- if (dvert == NULL) {
- ret->release(ret);
- return dm;
- }
- rel_ret = 1;
- }
- else
- ret = dm;
-#else
- ret = CDDM_copy(dm, 0);
- rel_ret = 1;
- dvert = ret->getVertDataArray(ret, CD_MDEFORMVERT);
- if (dvert == NULL) {
- if (rel_ret)
- ret->release(ret);
- return dm;
- }
-#endif
+ dvert = CustomData_duplicate_referenced_layer(&dm->vertData, CD_MDEFORMVERT, numVerts);
/* Find out which vertices to work on (all vertices in vgroup), and get their relevant weight.
*/
@@ -433,8 +397,6 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *der
MEM_freeN(tidx);
MEM_freeN(tw);
MEM_freeN(tdw);
- if (rel_ret)
- ret->release(ret);
return dm;
}
indices = MEM_mallocN(sizeof(int) * numIdx, "WeightVGProximity Modifier, indices");
@@ -455,7 +417,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *der
*/
float (*tv_cos)[3] = MEM_mallocN(sizeof(float[3]) * numVerts, "WeightVGProximity Modifier, tv_cos");
v_cos = MEM_mallocN(sizeof(float[3]) * numIdx, "WeightVGProximity Modifier, v_cos");
- ret->getVertCos(ret, tv_cos);
+ dm->getVertCos(dm, tv_cos);
for (i = 0; i < numIdx; i++)
copy_v3_v3(v_cos[i], tv_cos[indices[i]]);
MEM_freeN(tv_cos);
@@ -524,7 +486,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *der
do_map(new_w, numIdx, wmd->min_dist, wmd->max_dist, wmd->falloff_type);
/* Do masking. */
- weightvg_do_mask(numIdx, indices, org_w, new_w, ob, ret, wmd->mask_constant,
+ weightvg_do_mask(numIdx, indices, org_w, new_w, ob, dm, wmd->mask_constant,
wmd->mask_defgrp_name, wmd->mask_texture, wmd->mask_tex_use_channel,
wmd->mask_tex_mapping, wmd->mask_tex_map_obj, wmd->mask_tex_uvlayer_name);
@@ -538,8 +500,12 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *der
MEM_freeN(indices);
MEM_freeN(v_cos);
+#if DO_PROFILE
+ TIMEIT_END(perf)
+#endif
+
/* Return the vgroup-modified mesh. */
- return ret;
+ return dm;
}
static DerivedMesh *applyModifierEM(ModifierData *md, Object *ob,
diff --git a/source/blender/nodes/shader/node_shader_util.c b/source/blender/nodes/shader/node_shader_util.c
index 87585c35e6a..8b8afc3d846 100644
--- a/source/blender/nodes/shader/node_shader_util.c
+++ b/source/blender/nodes/shader/node_shader_util.c
@@ -134,8 +134,6 @@ void ntreeShaderGetTexcoMode(bNodeTree *ntree, int r_mode, short *texco, int *mo
bNodeSocket *sock;
int a;
- ntreeSocketUseFlags(ntree);
-
for(node= ntree->nodes.first; node; node= node->next) {
if(node->type==SH_NODE_TEXTURE) {
if((r_mode & R_OSA) && node->id) {
diff --git a/source/blender/render/intern/source/render_texture.c b/source/blender/render/intern/source/render_texture.c
index 7c6efc9a138..849e0ef428a 100644
--- a/source/blender/render/intern/source/render_texture.c
+++ b/source/blender/render/intern/source/render_texture.c
@@ -3083,6 +3083,12 @@ void do_sky_tex(const float rco[3], float lo[3], const float dxyview[2], float h
continue;
}
break;
+ case TEXCO_EQUIRECTMAP:
+ tempvec[0]= atan2f(lo[0], lo[2]) / (float)M_PI;
+ tempvec[1]= 1.0f - 2.0f*saacos(lo[1]) / (float)M_PI;
+ tempvec[2]= 0.0f;
+ co= tempvec;
+ break;
case TEXCO_OBJECT:
if(mtex->object) {
copy_v3_v3(tempvec, lo);
diff --git a/source/creator/CMakeLists.txt b/source/creator/CMakeLists.txt
index c190c27abb3..9ef86b3cac5 100644
--- a/source/creator/CMakeLists.txt
+++ b/source/creator/CMakeLists.txt
@@ -491,7 +491,6 @@ elseif(WIN32)
else()
install(
FILES
- ${LIBDIR}/png/lib/libpng.dll
${LIBDIR}/zlib/lib/zlib.dll
DESTINATION ${TARGETDIR}
)