From 2bc5c18714256cddf3a1ab9ab4dee2d2c0f9685d Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Wed, 13 May 2020 17:11:22 +0200 Subject: Fix wrong Volume object step size tooltip --- source/blender/makesrna/intern/rna_volume.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source/blender') diff --git a/source/blender/makesrna/intern/rna_volume.c b/source/blender/makesrna/intern/rna_volume.c index 25b5395b35c..b03d6082cea 100644 --- a/source/blender/makesrna/intern/rna_volume.c +++ b/source/blender/makesrna/intern/rna_volume.c @@ -441,7 +441,7 @@ static void rna_def_volume_render(BlenderRNA *brna) RNA_def_property_ui_range(prop, 0.0, 100.0, 1, 3); RNA_def_property_ui_text(prop, "Step Size", - "Distance between volume samples. Higher values render more detail at " + "Distance between volume samples. Lower values render more detail at " "the cost of performance. If set to zero, the step size is " "automatically determined based on voxel size"); RNA_def_property_update(prop, 0, "rna_Volume_update_display"); -- cgit v1.2.3 From 16cc424bc53f22d4158fb2ed109b14943f340d7b Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Wed, 13 May 2020 20:12:25 +0200 Subject: Fix T75365: memory leak when writing PNG fails due to lack of disk space --- source/blender/imbuf/intern/png.c | 54 ++++++++++++++++++++------------------- 1 file changed, 28 insertions(+), 26 deletions(-) (limited to 'source/blender') diff --git a/source/blender/imbuf/intern/png.c b/source/blender/imbuf/intern/png.c index d6d185ef59b..9e600f363c5 100644 --- a/source/blender/imbuf/intern/png.c +++ b/source/blender/imbuf/intern/png.c @@ -177,12 +177,6 @@ int imb_savepng(struct ImBuf *ibuf, const char *name, int flags) return 0; } - if (setjmp(png_jmpbuf(png_ptr))) { - png_destroy_write_struct(&png_ptr, &info_ptr); - printf("imb_savepng: Cannot setjmp for file: '%s'\n", name); - return 0; - } - /* copy image data */ num_bytes = ((size_t)ibuf->x) * ibuf->y * bytesperpixel; if (is_16bit) { @@ -191,15 +185,39 @@ int imb_savepng(struct ImBuf *ibuf, const char *name, int flags) else { pixels = MEM_mallocN(num_bytes * sizeof(unsigned char), "png 8bit pixels"); } - if (pixels == NULL && pixels16 == NULL) { - png_destroy_write_struct(&png_ptr, &info_ptr); printf( - "imb_savepng: Cannot allocate pixels array of %dx%d, %d bytes per pixel for file: '%s'\n", + "imb_savepng: Cannot allocate pixels array of %dx%d, %d bytes per pixel for file: " + "'%s'\n", ibuf->x, ibuf->y, bytesperpixel, name); + } + + /* allocate memory for an array of row-pointers */ + row_pointers = (png_bytepp)MEM_mallocN(ibuf->y * sizeof(png_bytep), "row_pointers"); + if (row_pointers == NULL) { + printf("imb_savepng: Cannot allocate row-pointers array for file '%s'\n", name); + } + + if ((pixels == NULL && pixels16 == NULL) || (row_pointers == NULL) || + setjmp(png_jmpbuf(png_ptr))) { + /* On error jump here, and free any resources. */ + png_destroy_write_struct(&png_ptr, &info_ptr); + if (pixels) { + MEM_freeN(pixels); + } + if (pixels16) { + MEM_freeN(pixels16); + } + if (row_pointers) { + MEM_freeN(row_pointers); + } + if (fp) { + fflush(fp); + fclose(fp); + } return 0; } @@ -457,23 +475,6 @@ int imb_savepng(struct ImBuf *ibuf, const char *name, int flags) png_set_swap(png_ptr); #endif - /* allocate memory for an array of row-pointers */ - row_pointers = (png_bytepp)MEM_mallocN(ibuf->y * sizeof(png_bytep), "row_pointers"); - if (row_pointers == NULL) { - printf("imb_savepng: Cannot allocate row-pointers array for file '%s'\n", name); - png_destroy_write_struct(&png_ptr, &info_ptr); - if (pixels) { - MEM_freeN(pixels); - } - if (pixels16) { - MEM_freeN(pixels16); - } - if (fp) { - fclose(fp); - } - return 0; - } - /* set the individual row-pointers to point at the correct offsets */ if (is_16bit) { for (i = 0; i < ibuf->y; i++) { @@ -576,6 +577,7 @@ ImBuf *imb_loadpng(const unsigned char *mem, size_t size, int flags, char colors png_set_read_fn(png_ptr, (void *)&ps, ReadData); if (setjmp(png_jmpbuf(png_ptr))) { + /* On error jump here, and free any resources. */ png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL); if (pixels) { MEM_freeN(pixels); -- cgit v1.2.3 From fd025b0b7a46c5e56f348b73cf989c6bbddec707 Mon Sep 17 00:00:00 2001 From: Antonio Vazquez Date: Wed, 13 May 2020 17:07:32 +0200 Subject: GPencil: Add new X-Ray option for Canvas Grid In some situations is good to have a grid visible anot beeing occulde by meshes. By default is OFF. Differential Revision: https://developer.blender.org/D7721 --- source/blender/draw/engines/overlay/overlay_gpencil.c | 5 ++++- source/blender/makesdna/DNA_view3d_types.h | 1 + source/blender/makesrna/intern/rna_space.c | 5 +++++ 3 files changed, 10 insertions(+), 1 deletion(-) (limited to 'source/blender') diff --git a/source/blender/draw/engines/overlay/overlay_gpencil.c b/source/blender/draw/engines/overlay/overlay_gpencil.c index b79d5753686..1397ef7b4b2 100644 --- a/source/blender/draw/engines/overlay/overlay_gpencil.c +++ b/source/blender/draw/engines/overlay/overlay_gpencil.c @@ -204,6 +204,7 @@ void OVERLAY_gpencil_cache_init(OVERLAY_Data *vedata) const bool show_grid = (v3d->gp_flag & V3D_GP_SHOW_GRID) != 0 && ((ts->gpencil_v3d_align & (GP_PROJECT_DEPTH_VIEW | GP_PROJECT_DEPTH_STROKE)) == 0); + const bool grid_xray = (v3d->gp_flag & V3D_GP_SHOW_GRID_XRAY); if (show_grid && show_overlays) { const char *grid_unit = NULL; @@ -256,7 +257,9 @@ void OVERLAY_gpencil_cache_init(OVERLAY_Data *vedata) const int gridlines = (gpd->grid.lines <= 0) ? 1 : gpd->grid.lines; int line_ct = gridlines * 4 + 2; - DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_LESS_EQUAL | DRW_STATE_BLEND_ALPHA; + DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_BLEND_ALPHA; + state |= (grid_xray) ? DRW_STATE_DEPTH_ALWAYS : DRW_STATE_DEPTH_LESS_EQUAL; + DRW_PASS_CREATE(psl->gpencil_canvas_ps, state); sh = OVERLAY_shader_gpencil_canvas(); diff --git a/source/blender/makesdna/DNA_view3d_types.h b/source/blender/makesdna/DNA_view3d_types.h index 21def800e4a..11c3c1c4d1b 100644 --- a/source/blender/makesdna/DNA_view3d_types.h +++ b/source/blender/makesdna/DNA_view3d_types.h @@ -450,6 +450,7 @@ enum { #define V3D_GP_FADE_NOACTIVE_GPENCIL (1 << 6) /* Fade other GPencil objects */ #define V3D_GP_SHOW_STROKE_DIRECTION (1 << 7) /* Show Strokes Directions */ #define V3D_GP_SHOW_MATERIAL_NAME (1 << 8) /* Show Material names */ +#define V3D_GP_SHOW_GRID_XRAY (1 << 9) /* Show Canvas Grid on Top */ /** #View3DShading.flag */ enum { diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c index d4d35e07c2a..326dd88dc59 100644 --- a/source/blender/makesrna/intern/rna_space.c +++ b/source/blender/makesrna/intern/rna_space.c @@ -3852,6 +3852,11 @@ static void rna_def_space_view3d_overlay(BlenderRNA *brna) prop, "Fade Grease Pencil Objects", "Fade Grease Pencil Objects, except the active one"); RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_GPencil_update"); + prop = RNA_def_property(srna, "use_gpencil_canvas_xray", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "gp_flag", V3D_GP_SHOW_GRID_XRAY); + RNA_def_property_ui_text(prop, "Canvas X-Ray", "Put Canvas grid on top of any other object"); + RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_GPencil_update"); + prop = RNA_def_property(srna, "use_gpencil_show_directions", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "gp_flag", V3D_GP_SHOW_STROKE_DIRECTION); RNA_def_property_ui_text(prop, -- cgit v1.2.3 From 7b688a6b04bc2033694f4742f06eef28ab023715 Mon Sep 17 00:00:00 2001 From: Antonio Vazquez Date: Wed, 13 May 2020 22:43:41 +0200 Subject: GPencil: Change tooltip --- source/blender/makesrna/intern/rna_space.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source/blender') diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c index 326dd88dc59..db82419b3b3 100644 --- a/source/blender/makesrna/intern/rna_space.c +++ b/source/blender/makesrna/intern/rna_space.c @@ -3854,7 +3854,7 @@ static void rna_def_space_view3d_overlay(BlenderRNA *brna) prop = RNA_def_property(srna, "use_gpencil_canvas_xray", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "gp_flag", V3D_GP_SHOW_GRID_XRAY); - RNA_def_property_ui_text(prop, "Canvas X-Ray", "Put Canvas grid on top of any other object"); + RNA_def_property_ui_text(prop, "Canvas X-Ray", "Show Canvas grid in front"); RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_GPencil_update"); prop = RNA_def_property(srna, "use_gpencil_show_directions", PROP_BOOLEAN, PROP_NONE); -- cgit v1.2.3 From 5ee71320c699283f623da96705a0631cb2e0aec1 Mon Sep 17 00:00:00 2001 From: Antonio Vazquez Date: Wed, 13 May 2020 22:43:41 +0200 Subject: Revert "GPencil: Change tooltip" This reverts commit 7b688a6b04bc2033694f4742f06eef28ab023715. --- source/blender/makesrna/intern/rna_space.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source/blender') diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c index db82419b3b3..326dd88dc59 100644 --- a/source/blender/makesrna/intern/rna_space.c +++ b/source/blender/makesrna/intern/rna_space.c @@ -3854,7 +3854,7 @@ static void rna_def_space_view3d_overlay(BlenderRNA *brna) prop = RNA_def_property(srna, "use_gpencil_canvas_xray", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "gp_flag", V3D_GP_SHOW_GRID_XRAY); - RNA_def_property_ui_text(prop, "Canvas X-Ray", "Show Canvas grid in front"); + RNA_def_property_ui_text(prop, "Canvas X-Ray", "Put Canvas grid on top of any other object"); RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_GPencil_update"); prop = RNA_def_property(srna, "use_gpencil_show_directions", PROP_BOOLEAN, PROP_NONE); -- cgit v1.2.3 From 71298a1da9718871b3ac063f814d10e6df98d406 Mon Sep 17 00:00:00 2001 From: Antonio Vazquez Date: Wed, 13 May 2020 17:07:32 +0200 Subject: Revert "GPencil: Add new X-Ray option for Canvas Grid" This reverts commit fd025b0b7a46c5e56f348b73cf989c6bbddec707. --- source/blender/draw/engines/overlay/overlay_gpencil.c | 5 +---- source/blender/makesdna/DNA_view3d_types.h | 1 - source/blender/makesrna/intern/rna_space.c | 5 ----- 3 files changed, 1 insertion(+), 10 deletions(-) (limited to 'source/blender') diff --git a/source/blender/draw/engines/overlay/overlay_gpencil.c b/source/blender/draw/engines/overlay/overlay_gpencil.c index 1397ef7b4b2..b79d5753686 100644 --- a/source/blender/draw/engines/overlay/overlay_gpencil.c +++ b/source/blender/draw/engines/overlay/overlay_gpencil.c @@ -204,7 +204,6 @@ void OVERLAY_gpencil_cache_init(OVERLAY_Data *vedata) const bool show_grid = (v3d->gp_flag & V3D_GP_SHOW_GRID) != 0 && ((ts->gpencil_v3d_align & (GP_PROJECT_DEPTH_VIEW | GP_PROJECT_DEPTH_STROKE)) == 0); - const bool grid_xray = (v3d->gp_flag & V3D_GP_SHOW_GRID_XRAY); if (show_grid && show_overlays) { const char *grid_unit = NULL; @@ -257,9 +256,7 @@ void OVERLAY_gpencil_cache_init(OVERLAY_Data *vedata) const int gridlines = (gpd->grid.lines <= 0) ? 1 : gpd->grid.lines; int line_ct = gridlines * 4 + 2; - DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_BLEND_ALPHA; - state |= (grid_xray) ? DRW_STATE_DEPTH_ALWAYS : DRW_STATE_DEPTH_LESS_EQUAL; - + DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_LESS_EQUAL | DRW_STATE_BLEND_ALPHA; DRW_PASS_CREATE(psl->gpencil_canvas_ps, state); sh = OVERLAY_shader_gpencil_canvas(); diff --git a/source/blender/makesdna/DNA_view3d_types.h b/source/blender/makesdna/DNA_view3d_types.h index 11c3c1c4d1b..21def800e4a 100644 --- a/source/blender/makesdna/DNA_view3d_types.h +++ b/source/blender/makesdna/DNA_view3d_types.h @@ -450,7 +450,6 @@ enum { #define V3D_GP_FADE_NOACTIVE_GPENCIL (1 << 6) /* Fade other GPencil objects */ #define V3D_GP_SHOW_STROKE_DIRECTION (1 << 7) /* Show Strokes Directions */ #define V3D_GP_SHOW_MATERIAL_NAME (1 << 8) /* Show Material names */ -#define V3D_GP_SHOW_GRID_XRAY (1 << 9) /* Show Canvas Grid on Top */ /** #View3DShading.flag */ enum { diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c index 326dd88dc59..d4d35e07c2a 100644 --- a/source/blender/makesrna/intern/rna_space.c +++ b/source/blender/makesrna/intern/rna_space.c @@ -3852,11 +3852,6 @@ static void rna_def_space_view3d_overlay(BlenderRNA *brna) prop, "Fade Grease Pencil Objects", "Fade Grease Pencil Objects, except the active one"); RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_GPencil_update"); - prop = RNA_def_property(srna, "use_gpencil_canvas_xray", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "gp_flag", V3D_GP_SHOW_GRID_XRAY); - RNA_def_property_ui_text(prop, "Canvas X-Ray", "Put Canvas grid on top of any other object"); - RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_GPencil_update"); - prop = RNA_def_property(srna, "use_gpencil_show_directions", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "gp_flag", V3D_GP_SHOW_STROKE_DIRECTION); RNA_def_property_ui_text(prop, -- cgit v1.2.3 From bd18ffe1f8afb187386354561e10ee4ff0df3303 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Thu, 14 May 2020 01:30:09 +0200 Subject: Fix T76388: Freestyle not respecting Show Emitter settings --- .../blender/freestyle/intern/blender_interface/BlenderFileLoader.cpp | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'source/blender') diff --git a/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.cpp b/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.cpp index f49a664096a..7bceb036846 100644 --- a/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.cpp +++ b/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.cpp @@ -85,6 +85,7 @@ NodeGroup *BlenderFileLoader::Load() #endif int id = 0; + const eEvaluationMode eval_mode = DEG_get_mode(_depsgraph); DEG_OBJECT_ITER_BEGIN (_depsgraph, ob, @@ -99,6 +100,10 @@ NodeGroup *BlenderFileLoader::Load() continue; } + if (!(BKE_object_visibility(ob, eval_mode) & OB_VISIBLE_SELF)) { + continue; + } + Mesh *mesh = BKE_object_to_mesh(NULL, ob, false); if (mesh) { -- cgit v1.2.3 From e2eb47191dc30d010eb4420f486b45824af811be Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Thu, 14 May 2020 02:13:40 +0200 Subject: Fix T75715: crash rendering animation with persistent images --- source/blender/render/intern/source/external_engine.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'source/blender') diff --git a/source/blender/render/intern/source/external_engine.c b/source/blender/render/intern/source/external_engine.c index ffd483a8b62..4770e98bd20 100644 --- a/source/blender/render/intern/source/external_engine.c +++ b/source/blender/render/intern/source/external_engine.c @@ -605,9 +605,11 @@ bool RE_bake_engine(Render *re, engine->resolution_x = re->winx; engine->resolution_y = re->winy; + BLI_rw_mutex_lock(&re->partsmutex, THREAD_LOCK_WRITE); RE_parts_init(re); engine->tile_x = re->r.tilex; engine->tile_y = re->r.tiley; + BLI_rw_mutex_unlock(&re->partsmutex); if (type->bake) { engine->depsgraph = depsgraph; -- cgit v1.2.3 From 88841559de55ee833b04ae2d1812e1be60edca86 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Thu, 14 May 2020 02:38:02 +0200 Subject: Fix T66005: crash deleting render slot while rendering to it --- source/blender/blenkernel/intern/image.c | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'source/blender') diff --git a/source/blender/blenkernel/intern/image.c b/source/blender/blenkernel/intern/image.c index ee1bd5afa61..906d76dfed8 100644 --- a/source/blender/blenkernel/intern/image.c +++ b/source/blender/blenkernel/intern/image.c @@ -5726,6 +5726,13 @@ RenderSlot *BKE_image_add_renderslot(Image *ima, const char *name) bool BKE_image_remove_renderslot(Image *ima, ImageUser *iuser, int index) { + if (index == ima->last_render_slot) { + /* Don't remove render slot while rendering to it. */ + if (G.is_rendering) { + return false; + } + } + int num_slots = BLI_listbase_count(&ima->renderslots); if (index >= num_slots || num_slots == 1) { return false; -- cgit v1.2.3 From 2c61b7f3541064e57a11a8347efd08ce85a5907e Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Thu, 14 May 2020 02:43:17 +0200 Subject: Fix T75071: rendering fails when all render layers disabled, but using compositor --- source/blender/render/intern/source/pipeline.c | 56 +++++++++++++------------- 1 file changed, 28 insertions(+), 28 deletions(-) (limited to 'source/blender') diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c index f7901ebb7d0..7114efbe604 100644 --- a/source/blender/render/intern/source/pipeline.c +++ b/source/blender/render/intern/source/pipeline.c @@ -1819,42 +1819,42 @@ bool RE_is_rendering_allowed(Scene *scene, } } - if (scemode & R_DOCOMP) { - if (scene->use_nodes) { - if (!scene->nodetree) { - BKE_report(reports, RPT_ERROR, "No node tree in scene"); - return 0; - } + if (RE_seq_render_active(scene, &scene->r)) { + /* Sequencer */ + if (scene->r.mode & R_BORDER) { + BKE_report(reports, RPT_ERROR, "Border rendering is not supported by sequencer"); + return false; + } + } + else if ((scemode & R_DOCOMP) && scene->use_nodes) { + /* Compositor */ + if (!scene->nodetree) { + BKE_report(reports, RPT_ERROR, "No node tree in scene"); + return 0; + } - if (!check_composite_output(scene)) { - BKE_report(reports, RPT_ERROR, "No render output node in scene"); - return 0; - } + if (!check_composite_output(scene)) { + BKE_report(reports, RPT_ERROR, "No render output node in scene"); + return 0; + } - if (scemode & R_FULL_SAMPLE) { - if (composite_needs_render(scene, 0) == 0) { - BKE_report(reports, RPT_ERROR, "Full sample AA not supported without 3D rendering"); - return 0; - } + if (scemode & R_FULL_SAMPLE) { + if (composite_needs_render(scene, 0) == 0) { + BKE_report(reports, RPT_ERROR, "Full sample AA not supported without 3D rendering"); + return 0; } } } - - /* check valid camera, without camera render is OK (compo, seq) */ - if (!check_valid_camera(scene, camera_override, reports)) { - return 0; - } - - if (RE_seq_render_active(scene, &scene->r)) { - if (scene->r.mode & R_BORDER) { - BKE_report(reports, RPT_ERROR, "Border rendering is not supported by sequencer"); - return false; + else { + /* Regular Render */ + if (!render_scene_has_layers_to_render(scene, single_layer)) { + BKE_report(reports, RPT_ERROR, "All render layers are disabled"); + return 0; } } - /* layer flag tests */ - if (!render_scene_has_layers_to_render(scene, single_layer)) { - BKE_report(reports, RPT_ERROR, "All render layers are disabled"); + /* check valid camera, without camera render is OK (compo, seq) */ + if (!check_valid_camera(scene, camera_override, reports)) { return 0; } -- cgit v1.2.3