From f6afd1b73c99b5141212b55f911bc2ddca2d6afc Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Tue, 16 May 2017 09:30:29 +0200 Subject: Make imbuf's OIIO bindings to compile with latest OIIO from git --- source/blender/imbuf/intern/oiio/openimageio_api.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source/blender') diff --git a/source/blender/imbuf/intern/oiio/openimageio_api.cpp b/source/blender/imbuf/intern/oiio/openimageio_api.cpp index 11bf45418d6..224cf6347d2 100644 --- a/source/blender/imbuf/intern/oiio/openimageio_api.cpp +++ b/source/blender/imbuf/intern/oiio/openimageio_api.cpp @@ -213,7 +213,7 @@ struct ImBuf *imb_load_photoshop(const char *filename, int flags, char colorspac in = ImageInput::create(filename); if (!in) { std::cerr << __func__ << ": ImageInput::create() failed:" << std::endl - << OpenImageIO::geterror() << std::endl; + << OIIO_NAMESPACE::geterror() << std::endl; return NULL; } -- cgit v1.2.3 From 06ac6ded66fbbbce6d316ff44880897661b8e276 Mon Sep 17 00:00:00 2001 From: Olly Funkster <> Date: Tue, 16 May 2017 09:44:20 +0200 Subject: Fix byte-to-float conversion when using scene strips in sequencer with identical color spaces Fix T50882: VSE: Blend Modes on Scenes do not layer properly Fix T51002: Scene strip with Alpha over not working as expected The byte-to-float conversion was being skipped if the color spaces of the sequence and the scene are the same, which is the default, resulting in any non-float strips becoming invisible. Reviewers: sergey Differential Revision: https://developer.blender.org/D2635 --- source/blender/imbuf/intern/colormanagement.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'source/blender') diff --git a/source/blender/imbuf/intern/colormanagement.c b/source/blender/imbuf/intern/colormanagement.c index fc382f02b2c..cdb8f2c6fa2 100644 --- a/source/blender/imbuf/intern/colormanagement.c +++ b/source/blender/imbuf/intern/colormanagement.c @@ -1759,9 +1759,14 @@ void IMB_colormanagement_transform_from_byte_threaded(float *float_buffer, unsig return; } if (STREQ(from_colorspace, to_colorspace)) { - /* If source and destination color spaces are identical, skip - * threading overhead and simply do nothing + /* Because this function always takes a byte buffer and returns a float buffer, it must + * always do byte-to-float conversion of some kind. To avoid threading overhead + * IMB_buffer_float_from_byte is used when color spaces are identical. See T51002. */ + IMB_buffer_float_from_byte(float_buffer, byte_buffer, + IB_PROFILE_SRGB, IB_PROFILE_SRGB, + true, + width, height, width, width); return; } cm_processor = IMB_colormanagement_colorspace_processor_new(from_colorspace, to_colorspace); -- cgit v1.2.3 From f89c6e739a0625029251117e19b58427d1299202 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Tue, 16 May 2017 10:52:20 +0200 Subject: Fix memory leak in environment Found when was looking into T49864. The issue is caused here by render_copy_renderdata() doing a copy of views with BLI_duplicatelist() so we can not just zero the pointers out. Similar thing is happening for layers as well. --- source/blender/render/intern/source/envmap.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'source/blender') diff --git a/source/blender/render/intern/source/envmap.c b/source/blender/render/intern/source/envmap.c index cfdc285223c..b100c4f66bc 100644 --- a/source/blender/render/intern/source/envmap.c +++ b/source/blender/render/intern/source/envmap.c @@ -142,8 +142,8 @@ static Render *envmap_render_copy(Render *re, EnvMap *env) /* set up renderdata */ render_copy_renderdata(&envre->r, &re->r); envre->r.mode &= ~(R_BORDER | R_PANORAMA | R_ORTHO | R_MBLUR); - BLI_listbase_clear(&envre->r.layers); - BLI_listbase_clear(&envre->r.views); + BLI_freelistN(&envre->r.layers); + BLI_freelistN(&envre->r.views); envre->r.filtertype = 0; envre->r.tilex = envre->r.xsch / 2; envre->r.tiley = envre->r.ysch / 2; -- cgit v1.2.3 From a70a7f9db368deefeb6d07e1c4e6c84f1ebad59a Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Tue, 16 May 2017 12:40:04 +0200 Subject: Fix T49864: EnvMap baking crashes 2.78 if 'Full Sample' checked in AA --- source/blender/imbuf/intern/openexr/openexr_api.cpp | 8 +++++--- source/blender/render/intern/source/envmap.c | 10 +++++++++- 2 files changed, 14 insertions(+), 4 deletions(-) (limited to 'source/blender') diff --git a/source/blender/imbuf/intern/openexr/openexr_api.cpp b/source/blender/imbuf/intern/openexr/openexr_api.cpp index 89e796fb7ee..29332a5c899 100644 --- a/source/blender/imbuf/intern/openexr/openexr_api.cpp +++ b/source/blender/imbuf/intern/openexr/openexr_api.cpp @@ -1026,15 +1026,16 @@ void IMB_exr_set_channel(void *handle, const char *layname, const char *passname ExrChannel *echan; char name[EXR_TOT_MAXNAME + 1]; - if (layname) { + if (layname && layname[0] != '\0') { char lay[EXR_LAY_MAXNAME + 1], pass[EXR_PASS_MAXNAME + 1]; BLI_strncpy(lay, layname, EXR_LAY_MAXNAME); BLI_strncpy(pass, passname, EXR_PASS_MAXNAME); BLI_snprintf(name, sizeof(name), "%s.%s", lay, pass); } - else + else { BLI_strncpy(name, passname, EXR_TOT_MAXNAME - 1); + } echan = (ExrChannel *)BLI_findstring(&data->channels, name, offsetof(ExrChannel, name)); @@ -1043,8 +1044,9 @@ void IMB_exr_set_channel(void *handle, const char *layname, const char *passname echan->ystride = ystride; echan->rect = rect; } - else + else { printf("IMB_exr_set_channel error %s\n", name); + } } float *IMB_exr_channel_rect(void *handle, const char *layname, const char *passname, const char *viewname) diff --git a/source/blender/render/intern/source/envmap.c b/source/blender/render/intern/source/envmap.c index b100c4f66bc..156b4215992 100644 --- a/source/blender/render/intern/source/envmap.c +++ b/source/blender/render/intern/source/envmap.c @@ -61,6 +61,7 @@ #include "renderpipeline.h" #include "texture.h" #include "zbuf.h" +#include "render_result.h" /* ------------------------------------------------------------------------- */ @@ -493,11 +494,18 @@ static void render_envmap(Render *re, EnvMap *env) env_rotate_scene(envre, tmat, 0); if (re->test_break(re->tbh) == 0) { - RenderLayer *rl = envre->result->layers.first; int y; float *alpha; float *rect; + if (envre->result->do_exr_tile) { + BLI_rw_mutex_lock(&envre->resultmutex, THREAD_LOCK_WRITE); + render_result_exr_file_end(envre); + BLI_rw_mutex_unlock(&envre->resultmutex); + } + + RenderLayer *rl = envre->result->layers.first; + /* envmap is rendered independently of multiview */ rect = RE_RenderLayerGetPass(rl, RE_PASSNAME_COMBINED, ""); ibuf = IMB_allocImBuf(envre->rectx, envre->recty, 24, IB_rect | IB_rectfloat); -- cgit v1.2.3 From 8be9d68dd42d6831675356bfa0e1bf9274680df3 Mon Sep 17 00:00:00 2001 From: Howard Trickey Date: Tue, 16 May 2017 07:19:01 -0400 Subject: Fix T49467: Crash due to assert failure in bevel. The mesh interpolation code had an edge case where one of two adjacent edges to a vertex has 0 length. This caused an assert failure indexing the vertex mesh for splash Blenderman.blend. --- source/blender/bmesh/tools/bmesh_bevel.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'source/blender') diff --git a/source/blender/bmesh/tools/bmesh_bevel.c b/source/blender/bmesh/tools/bmesh_bevel.c index 05169a2a976..a05c12a2730 100644 --- a/source/blender/bmesh/tools/bmesh_bevel.c +++ b/source/blender/bmesh/tools/bmesh_bevel.c @@ -2295,7 +2295,7 @@ static int interp_range(const float *frac, int n, const float f, float *r_rest) /* Interpolate given vmesh to make one with target nseg border vertices on the profiles */ static VMesh *interp_vmesh(BevelParams *bp, VMesh *vm0, int nseg) { - int n, ns0, nseg2, odd, i, j, k, j0, k0, k0prev; + int n, ns0, nseg2, odd, i, j, k, j0, k0, k0prev, j0inc, k0inc; float *prev_frac, *frac, *new_frac, *prev_new_frac; float f, restj, restk, restkprev; float quad[4][3], co[3], center[3]; @@ -2339,10 +2339,12 @@ static VMesh *interp_vmesh(BevelParams *bp, VMesh *vm0, int nseg) copy_v3_v3(co, mesh_vert_canon(vm0, i, j0, k0)->co); } else { + j0inc = (restj < BEVEL_EPSILON || j0 == ns0) ? 0 : 1; + k0inc = (restk < BEVEL_EPSILON || k0 == ns0) ? 0 : 1; copy_v3_v3(quad[0], mesh_vert_canon(vm0, i, j0, k0)->co); - copy_v3_v3(quad[1], mesh_vert_canon(vm0, i, j0, k0 + 1)->co); - copy_v3_v3(quad[2], mesh_vert_canon(vm0, i, j0 + 1, k0 + 1)->co); - copy_v3_v3(quad[3], mesh_vert_canon(vm0, i, j0 + 1, k0)->co); + copy_v3_v3(quad[1], mesh_vert_canon(vm0, i, j0, k0 + k0inc)->co); + copy_v3_v3(quad[2], mesh_vert_canon(vm0, i, j0 + j0inc, k0 + k0inc)->co); + copy_v3_v3(quad[3], mesh_vert_canon(vm0, i, j0 + j0inc, k0)->co); interp_bilinear_quad_v3(quad, restk, restj, co); } copy_v3_v3(mesh_vert(vm1, i, j, k)->co, co); -- cgit v1.2.3 From 26b232318930739a73d88afc9aaca7992301f03a Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Tue, 16 May 2017 15:34:43 +0200 Subject: Fix memory leak when saving OpenEXR files It is not a good idea to: 1. Duplicate metadata to self 2. Ignore the fact that something might have had metadata already. Also moved metadata copy to a preparation function, so it is never lost. --- source/blender/editors/space_image/image_ops.c | 1 - source/blender/imbuf/intern/colormanagement.c | 4 ++++ source/blender/imbuf/intern/metadata.c | 2 ++ 3 files changed, 6 insertions(+), 1 deletion(-) (limited to 'source/blender') diff --git a/source/blender/editors/space_image/image_ops.c b/source/blender/editors/space_image/image_ops.c index d00ebed5bcc..c2cfca295a4 100644 --- a/source/blender/editors/space_image/image_ops.c +++ b/source/blender/editors/space_image/image_ops.c @@ -1890,7 +1890,6 @@ static bool save_image_doit(bContext *C, SpaceImage *sima, wmOperator *op, SaveI } else { colormanaged_ibuf = IMB_colormanagement_imbuf_for_write(ibuf, save_as_render, true, &imf->view_settings, &imf->display_settings, imf); - IMB_metadata_copy(colormanaged_ibuf, ibuf); ok = BKE_imbuf_write_as(colormanaged_ibuf, simopts->filepath, imf, save_copy); save_imbuf_post(ibuf, colormanaged_ibuf); } diff --git a/source/blender/imbuf/intern/colormanagement.c b/source/blender/imbuf/intern/colormanagement.c index cdb8f2c6fa2..a4d5da9993a 100644 --- a/source/blender/imbuf/intern/colormanagement.c +++ b/source/blender/imbuf/intern/colormanagement.c @@ -2065,6 +2065,10 @@ ImBuf *IMB_colormanagement_imbuf_for_write(ImBuf *ibuf, bool save_as_render, boo } } + if (colormanaged_ibuf != ibuf) { + IMB_metadata_copy(colormanaged_ibuf, ibuf); + } + return colormanaged_ibuf; } diff --git a/source/blender/imbuf/intern/metadata.c b/source/blender/imbuf/intern/metadata.c index 134bbe88f15..d48aec0ba4c 100644 --- a/source/blender/imbuf/intern/metadata.c +++ b/source/blender/imbuf/intern/metadata.c @@ -81,7 +81,9 @@ bool IMB_metadata_get_field(struct ImBuf *img, const char *key, char *field, con void IMB_metadata_copy(struct ImBuf *dimb, struct ImBuf *simb) { + BLI_assert(dimb != simb); if (simb->metadata) { + IDP_FreeProperty(dimb->metadata); dimb->metadata = IDP_CopyProperty(simb->metadata); } } -- cgit v1.2.3 From d59721c2c311b18845a89fa30a9291a02f36d099 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Tue, 16 May 2017 16:34:49 +0200 Subject: Fix T50673: OpenEXR multilayer image truncated on save The issue is in OpenEXR itself. See the report fomr some more details. --- source/blender/blenloader/intern/versioning_270.c | 8 ++++++++ source/blender/makesrna/intern/rna_scene.c | 3 ++- 2 files changed, 10 insertions(+), 1 deletion(-) (limited to 'source/blender') diff --git a/source/blender/blenloader/intern/versioning_270.c b/source/blender/blenloader/intern/versioning_270.c index c187766b586..d3260db1477 100644 --- a/source/blender/blenloader/intern/versioning_270.c +++ b/source/blender/blenloader/intern/versioning_270.c @@ -1634,6 +1634,14 @@ void blo_do_versions_270(FileData *fd, Library *UNUSED(lib), Main *main) } } FOREACH_NODETREE_END } + + { + for (Scene *scene = main->scene.first; scene; scene = scene->id.next) { + if (scene->r.im_format.exr_codec == R_IMF_EXR_CODEC_DWAB) { + scene->r.im_format.exr_codec = R_IMF_EXR_CODEC_DWAA; + } + } + } } void do_versions_after_linking_270(Main *main) diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c index 9130bdc6f7b..333833a79eb 100644 --- a/source/blender/makesrna/intern/rna_scene.c +++ b/source/blender/makesrna/intern/rna_scene.c @@ -88,7 +88,8 @@ EnumPropertyItem rna_enum_exr_codec_items[] = { {R_IMF_EXR_CODEC_B44, "B44", 0, "B44 (lossy)", ""}, {R_IMF_EXR_CODEC_B44A, "B44A", 0, "B44A (lossy)", ""}, {R_IMF_EXR_CODEC_DWAA, "DWAA", 0, "DWAA (lossy)", ""}, - {R_IMF_EXR_CODEC_DWAB, "DWAB", 0, "DWAB (lossy)", ""}, + /* NOTE: Commented out for until new OpenEXR is released, see T50673. */ + /* {R_IMF_EXR_CODEC_DWAB, "DWAB", 0, "DWAB (lossy)", ""}, */ {0, NULL, 0, NULL, NULL} }; #endif -- cgit v1.2.3 From 0a6c57d3d2e6c9540e6bd298089e6fc8e2c5f2b0 Mon Sep 17 00:00:00 2001 From: Mai Lavelle Date: Tue, 16 May 2017 16:29:27 -0400 Subject: Fix crash from freeing of NULL pointer --- source/blender/imbuf/intern/metadata.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source/blender') diff --git a/source/blender/imbuf/intern/metadata.c b/source/blender/imbuf/intern/metadata.c index d48aec0ba4c..da39967a4fe 100644 --- a/source/blender/imbuf/intern/metadata.c +++ b/source/blender/imbuf/intern/metadata.c @@ -83,7 +83,7 @@ void IMB_metadata_copy(struct ImBuf *dimb, struct ImBuf *simb) { BLI_assert(dimb != simb); if (simb->metadata) { - IDP_FreeProperty(dimb->metadata); + IMB_metadata_free(dimb); dimb->metadata = IDP_CopyProperty(simb->metadata); } } -- cgit v1.2.3 From 24676b535af5fe3feede0cb42838f8eb7b00e92c Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Wed, 17 May 2017 10:20:34 +0200 Subject: Fix T49981: When camera is on inactive layer, it does not evaluate constraints Second round of fix, was broken by 843be91. --- source/blender/depsgraph/intern/depsgraph_tag.cc | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'source/blender') diff --git a/source/blender/depsgraph/intern/depsgraph_tag.cc b/source/blender/depsgraph/intern/depsgraph_tag.cc index cfc9005a1e3..e74972a688b 100644 --- a/source/blender/depsgraph/intern/depsgraph_tag.cc +++ b/source/blender/depsgraph/intern/depsgraph_tag.cc @@ -356,6 +356,10 @@ void DEG_graph_on_visible_update(Main *bmain, Scene *scene) Object *object = base->object; DEG::IDDepsNode *id_node = graph->find_id_node(&object->id); id_node->layers |= base->lay; + if (object == scene->camera) { + /* Camera should always be updated, it used directly by viewport. */ + id_node->layers |= (unsigned int)(-1); + } } DEG::deg_graph_build_flush_layers(graph); LINKLIST_FOREACH (Base *, base, &scene->base) { -- cgit v1.2.3 From f674bc90e2447a34c5170d23e1a5bccd3dba1a71 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 17 May 2017 20:08:20 +1000 Subject: BMesh: remove duplicate argument for wireframe op --- source/blender/bmesh/intern/bmesh_opdefines.c | 1 - 1 file changed, 1 deletion(-) (limited to 'source/blender') diff --git a/source/blender/bmesh/intern/bmesh_opdefines.c b/source/blender/bmesh/intern/bmesh_opdefines.c index 6b388a75436..d2f0fc1721c 100644 --- a/source/blender/bmesh/intern/bmesh_opdefines.c +++ b/source/blender/bmesh/intern/bmesh_opdefines.c @@ -1912,7 +1912,6 @@ static BMOpDefine bmo_wireframe_def = { {"use_even_offset", BMO_OP_SLOT_BOOL}, {"use_crease", BMO_OP_SLOT_BOOL}, {"crease_weight", BMO_OP_SLOT_FLT}, - {"thickness", BMO_OP_SLOT_FLT}, {"use_relative_offset", BMO_OP_SLOT_BOOL}, {"material_offset", BMO_OP_SLOT_INT}, {{'\0'}}, -- cgit v1.2.3 From 47f8459ead00929eb3862aa66eb9c04b805d4a3f Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Wed, 17 May 2017 14:50:32 +0200 Subject: Fix T51388: Mask moves when zoom is changed in the movie clip editor Incorrect matrix space for stabilization. --- source/blender/editors/mask/mask_draw.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'source/blender') diff --git a/source/blender/editors/mask/mask_draw.c b/source/blender/editors/mask/mask_draw.c index 2b4f94a37ef..be7eb2bf9ed 100644 --- a/source/blender/editors/mask/mask_draw.c +++ b/source/blender/editors/mask/mask_draw.c @@ -834,13 +834,12 @@ void ED_mask_draw_region(Mask *mask, ARegion *ar, /* apply transformation so mask editing tools will assume drawing from the origin in normalized space */ glPushMatrix(); - + glTranslatef(x + xofs, y + yofs, 0); + glScalef(zoomx, zoomy, 0); if (stabmat) { glMultMatrixf(stabmat); } - - glTranslatef(x + xofs, y + yofs, 0); - glScalef(maxdim * zoomx, maxdim * zoomy, 0); + glScalef(maxdim, maxdim, 0); if (do_draw_cb) { ED_region_draw_cb_draw(C, ar, REGION_DRAW_PRE_VIEW); -- cgit v1.2.3 From 102394a323bd3d6cfe5166380f6ab74c8c693024 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 18 May 2017 10:41:54 +1000 Subject: Fix T51538: Weight-paint circle select w/ clipping --- source/blender/editors/space_view3d/view3d_iterators.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source/blender') diff --git a/source/blender/editors/space_view3d/view3d_iterators.c b/source/blender/editors/space_view3d/view3d_iterators.c index ce4b7f7deeb..ef7b01f7a21 100644 --- a/source/blender/editors/space_view3d/view3d_iterators.c +++ b/source/blender/editors/space_view3d/view3d_iterators.c @@ -119,7 +119,7 @@ void meshobject_foreachScreenVert( data.clip_flag = clip_flag; if (clip_flag & V3D_PROJ_TEST_CLIP_BB) { - ED_view3d_clipping_local(vc->rv3d, vc->obedit->obmat); /* for local clipping lookups */ + ED_view3d_clipping_local(vc->rv3d, vc->obact->obmat); } dm->foreachMappedVert(dm, meshobject_foreachScreenVert__mapFunc, &data, DM_FOREACH_NOP); -- cgit v1.2.3 From 208462e424d319b3590d0b09cacf0b3807239972 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 18 May 2017 21:06:45 +1000 Subject: Fix T51539: BMesh boolean crash In some cases the vertex visit queue would exceed its max length, visiting the same vertex multiple times. --- source/blender/bmesh/intern/bmesh_polygon_edgenet.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'source/blender') diff --git a/source/blender/bmesh/intern/bmesh_polygon_edgenet.c b/source/blender/bmesh/intern/bmesh_polygon_edgenet.c index 0cd38f24165..64233151b04 100644 --- a/source/blender/bmesh/intern/bmesh_polygon_edgenet.c +++ b/source/blender/bmesh/intern/bmesh_polygon_edgenet.c @@ -512,13 +512,21 @@ bool BM_face_split_edgenet( } while ((l_iter = l_iter->next) != l_first); #endif + /* Note: 'VERT_VISIT' is often not needed at all, + * however in rare cases verts are added multiple times to the queue, + * that on it's own is harmless but in _very_ rare cases, + * the queue will overflow its maximum size, + * so we better be strict about this! see: T51539 */ for (i = 0; i < edge_net_len; i++) { BM_ELEM_API_FLAG_ENABLE(edge_net[i], EDGE_NET); + BM_ELEM_API_FLAG_DISABLE(edge_net[i]->v1, VERT_VISIT); + BM_ELEM_API_FLAG_DISABLE(edge_net[i]->v2, VERT_VISIT); } l_iter = l_first = BM_FACE_FIRST_LOOP(f); do { BM_ELEM_API_FLAG_ENABLE(l_iter->e, EDGE_NET); + BM_ELEM_API_FLAG_DISABLE(l_iter->v, VERT_VISIT); } while ((l_iter = l_iter->next) != l_first); float face_normal_matrix[3][3]; @@ -527,8 +535,10 @@ bool BM_face_split_edgenet( /* any vert can be used to begin with */ STACK_PUSH(vert_queue, l_first->v); + BM_ELEM_API_FLAG_ENABLE(l_first->v, VERT_VISIT); while ((v = STACK_POP(vert_queue))) { + BM_ELEM_API_FLAG_DISABLE(v, VERT_VISIT); if (bm_face_split_edgenet_find_loop( v, f->no, face_normal_matrix, edge_order, edge_order_len, face_verts, &face_verts_len)) @@ -558,8 +568,12 @@ bool BM_face_split_edgenet( * (verts between boundary and manifold edges) */ l_iter = l_first = BM_FACE_FIRST_LOOP(f_new); do { - if (bm_face_split_edgenet_find_loop_pair_exists(l_iter->v)) { + /* Avoid adding to queue multiple times (not common but happens). */ + if (BM_ELEM_API_FLAG_TEST(l_iter->v, VERT_VISIT) && + bm_face_split_edgenet_find_loop_pair_exists(l_iter->v)) + { STACK_PUSH(vert_queue, l_iter->v); + BM_ELEM_API_FLAG_ENABLE(l_iter->v, VERT_VISIT); } } while ((l_iter = l_iter->next) != l_first); } -- cgit v1.2.3 From 32c9d2322ccbf1bcfbe8a320d1e334d5e5d63d7b Mon Sep 17 00:00:00 2001 From: Pascal Schoen Date: Thu, 18 May 2017 13:15:32 +0200 Subject: Fix T51408: Cycles - Principled BSDF Shader - Transparency is not working as expected Renamed the "Transparency" input of the Principled BSDF to "Transmission" and "Refraction Roughness" to "Transmission Roughness". --- source/blender/gpu/shaders/gpu_shader_material.glsl | 2 +- source/blender/nodes/shader/nodes/node_shader_bsdf_principled.c | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) (limited to 'source/blender') diff --git a/source/blender/gpu/shaders/gpu_shader_material.glsl b/source/blender/gpu/shaders/gpu_shader_material.glsl index 42561d7baaf..5c52b7fd153 100644 --- a/source/blender/gpu/shaders/gpu_shader_material.glsl +++ b/source/blender/gpu/shaders/gpu_shader_material.glsl @@ -2621,7 +2621,7 @@ void node_bsdf_toon(vec4 color, float size, float tsmooth, vec3 N, out vec4 resu void node_bsdf_principled(vec4 base_color, float subsurface, vec3 subsurface_radius, vec4 subsurface_color, float metallic, float specular, float specular_tint, float roughness, float anisotropic, float anisotropic_rotation, float sheen, float sheen_tint, float clearcoat, - float clearcoat_gloss, float ior, float transparency, float refraction_roughness, vec3 N, vec3 CN, vec3 T, vec3 I, out vec4 result) + float clearcoat_gloss, float ior, float transmission, float transmission_roughness, vec3 N, vec3 CN, vec3 T, vec3 I, out vec4 result) { /* ambient light */ // TODO: set ambient light to an appropriate value diff --git a/source/blender/nodes/shader/nodes/node_shader_bsdf_principled.c b/source/blender/nodes/shader/nodes/node_shader_bsdf_principled.c index 8b0bfa36324..44288db182a 100644 --- a/source/blender/nodes/shader/nodes/node_shader_bsdf_principled.c +++ b/source/blender/nodes/shader/nodes/node_shader_bsdf_principled.c @@ -45,8 +45,8 @@ static bNodeSocketTemplate sh_node_bsdf_principled_in[] = { { SOCK_FLOAT, 1, N_("Clearcoat"), 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, PROP_FACTOR}, { SOCK_FLOAT, 1, N_("Clearcoat Gloss"), 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, PROP_FACTOR}, { SOCK_FLOAT, 1, N_("IOR"), 1.45f, 0.0f, 0.0f, 0.0f, 0.0f, 1000.0f}, - { SOCK_FLOAT, 1, N_("Transparency"), 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, PROP_FACTOR}, - { SOCK_FLOAT, 1, N_("Refraction Roughness"), 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, PROP_FACTOR}, + { SOCK_FLOAT, 1, N_("Transmission"), 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, PROP_FACTOR}, + { SOCK_FLOAT, 1, N_("Transmission Roughness"),0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, PROP_FACTOR}, { SOCK_VECTOR, 1, N_("Normal"), 0.0f, 0.0f, 0.0f, 1.0f, -1.0f, 1.0f, PROP_NONE, SOCK_HIDE_VALUE}, { SOCK_VECTOR, 1, N_("Clearcoat Normal"), 0.0f, 0.0f, 0.0f, 1.0f, -1.0f, 1.0f, PROP_NONE, SOCK_HIDE_VALUE}, { SOCK_VECTOR, 1, N_("Tangent"), 0.0f, 0.0f, 0.0f, 1.0f, -1.0f, 1.0f, PROP_NONE, SOCK_HIDE_VALUE}, @@ -86,7 +86,7 @@ static void node_shader_update_principled(bNodeTree *UNUSED(ntree), bNode *node) int distribution = node->custom1; for (sock = node->inputs.first; sock; sock = sock->next) { - if (STREQ(sock->name, "Refraction Roughness")) { + if (STREQ(sock->name, "Transmission Roughness")) { if (distribution == SHD_GLOSSY_GGX) sock->flag &= ~SOCK_UNAVAIL; else -- cgit v1.2.3 From 1247f609d49c4766619e6d82f7e1cd7935b78afe Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 18 May 2017 21:48:52 +1000 Subject: Correct last commit VERT_VISIT was used in a nested function. --- source/blender/bmesh/intern/bmesh_polygon_edgenet.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) (limited to 'source/blender') diff --git a/source/blender/bmesh/intern/bmesh_polygon_edgenet.c b/source/blender/bmesh/intern/bmesh_polygon_edgenet.c index 64233151b04..e515f9af63f 100644 --- a/source/blender/bmesh/intern/bmesh_polygon_edgenet.c +++ b/source/blender/bmesh/intern/bmesh_polygon_edgenet.c @@ -62,6 +62,7 @@ #define EDGE_NET _FLAG_WALK /* tag verts we've visit */ #define VERT_VISIT _FLAG_WALK +#define VERT_IN_QUEUE _FLAG_WALK_ALT struct VertOrder { float angle; @@ -512,7 +513,7 @@ bool BM_face_split_edgenet( } while ((l_iter = l_iter->next) != l_first); #endif - /* Note: 'VERT_VISIT' is often not needed at all, + /* Note: 'VERT_IN_QUEUE' is often not needed at all, * however in rare cases verts are added multiple times to the queue, * that on it's own is harmless but in _very_ rare cases, * the queue will overflow its maximum size, @@ -520,13 +521,13 @@ bool BM_face_split_edgenet( for (i = 0; i < edge_net_len; i++) { BM_ELEM_API_FLAG_ENABLE(edge_net[i], EDGE_NET); - BM_ELEM_API_FLAG_DISABLE(edge_net[i]->v1, VERT_VISIT); - BM_ELEM_API_FLAG_DISABLE(edge_net[i]->v2, VERT_VISIT); + BM_ELEM_API_FLAG_DISABLE(edge_net[i]->v1, VERT_IN_QUEUE); + BM_ELEM_API_FLAG_DISABLE(edge_net[i]->v2, VERT_IN_QUEUE); } l_iter = l_first = BM_FACE_FIRST_LOOP(f); do { BM_ELEM_API_FLAG_ENABLE(l_iter->e, EDGE_NET); - BM_ELEM_API_FLAG_DISABLE(l_iter->v, VERT_VISIT); + BM_ELEM_API_FLAG_DISABLE(l_iter->v, VERT_IN_QUEUE); } while ((l_iter = l_iter->next) != l_first); float face_normal_matrix[3][3]; @@ -535,10 +536,10 @@ bool BM_face_split_edgenet( /* any vert can be used to begin with */ STACK_PUSH(vert_queue, l_first->v); - BM_ELEM_API_FLAG_ENABLE(l_first->v, VERT_VISIT); + BM_ELEM_API_FLAG_ENABLE(l_first->v, VERT_IN_QUEUE); while ((v = STACK_POP(vert_queue))) { - BM_ELEM_API_FLAG_DISABLE(v, VERT_VISIT); + BM_ELEM_API_FLAG_DISABLE(v, VERT_IN_QUEUE); if (bm_face_split_edgenet_find_loop( v, f->no, face_normal_matrix, edge_order, edge_order_len, face_verts, &face_verts_len)) @@ -569,11 +570,11 @@ bool BM_face_split_edgenet( l_iter = l_first = BM_FACE_FIRST_LOOP(f_new); do { /* Avoid adding to queue multiple times (not common but happens). */ - if (BM_ELEM_API_FLAG_TEST(l_iter->v, VERT_VISIT) && + if (!BM_ELEM_API_FLAG_TEST(l_iter->v, VERT_IN_QUEUE) && bm_face_split_edgenet_find_loop_pair_exists(l_iter->v)) { STACK_PUSH(vert_queue, l_iter->v); - BM_ELEM_API_FLAG_ENABLE(l_iter->v, VERT_VISIT); + BM_ELEM_API_FLAG_ENABLE(l_iter->v, VERT_IN_QUEUE); } } while ((l_iter = l_iter->next) != l_first); } -- cgit v1.2.3