diff options
20 files changed, 42 insertions, 38 deletions
diff --git a/extern/gflags/README.blender b/extern/gflags/README.blender index c57f5ce53ca..be68c310997 100644 --- a/extern/gflags/README.blender +++ b/extern/gflags/README.blender @@ -14,6 +14,9 @@ Local modifications: * Disabeld HAVE_FNMATCH_H * Forced disabled GFLAGS_IS_A_DLL +- gflags_declare.h was modified + * Forced disabled GFLAGS_IS_A_DLL + - Applied some modifications from fork https://github.com/Nazg-Gul/gflags.git (see https://github.com/gflags/gflags/pull/129) diff --git a/extern/gflags/src/gflags/gflags_declare.h b/extern/gflags/src/gflags/gflags_declare.h index 98747f3cda1..3b187bd4153 100644 --- a/extern/gflags/src/gflags/gflags_declare.h +++ b/extern/gflags/src/gflags/gflags_declare.h @@ -51,7 +51,7 @@ // Must be overwritten when this header file is used with the optionally also // built static library instead; set by CMake's INTERFACE_COMPILE_DEFINITIONS. #ifndef GFLAGS_IS_A_DLL -# define GFLAGS_IS_A_DLL 1 +# define GFLAGS_IS_A_DLL 0 #endif // We always want to import the symbols of the gflags library. diff --git a/intern/cycles/render/background.cpp b/intern/cycles/render/background.cpp index b32cc55903d..6553ca735e4 100644 --- a/intern/cycles/render/background.cpp +++ b/intern/cycles/render/background.cpp @@ -64,14 +64,7 @@ void Background::device_update(Device *device, DeviceScene *dscene, Scene *scene device_free(device, dscene); - Shader *bg_shader = shader; - - if (use_shader) { - if (!bg_shader) - bg_shader = scene->default_background; - } - else - bg_shader = scene->default_empty; + Shader *bg_shader = get_shader(scene); /* set shader index and transparent option */ KernelBackground *kbackground = &dscene->data.background; @@ -134,4 +127,9 @@ void Background::tag_update(Scene *scene) need_update = true; } +Shader *Background::get_shader(const Scene *scene) +{ + return (use_shader) ? ((shader) ? shader : scene->default_background) : scene->default_empty; +} + CCL_NAMESPACE_END diff --git a/intern/cycles/render/background.h b/intern/cycles/render/background.h index 020db7bf6aa..fb27430f9a3 100644 --- a/intern/cycles/render/background.h +++ b/intern/cycles/render/background.h @@ -55,6 +55,8 @@ class Background : public Node { bool modified(const Background &background); void tag_update(Scene *scene); + + Shader *get_shader(const Scene *scene); }; CCL_NAMESPACE_END diff --git a/intern/cycles/render/light.cpp b/intern/cycles/render/light.cpp index 06304205dc9..664217d6f26 100644 --- a/intern/cycles/render/light.cpp +++ b/intern/cycles/render/light.cpp @@ -219,8 +219,7 @@ void LightManager::disable_ineffective_light(Scene *scene) * - If unsupported on a device * - If we don't need it (no HDRs etc.) */ - Shader *shader = (scene->background->shader) ? scene->background->shader : - scene->default_background; + Shader *shader = scene->background->get_shader(scene); const bool disable_mis = !(has_portal || shader->has_surface_spatial_varying); VLOG_IF(1, disable_mis) << "Background MIS has been disabled.\n"; foreach (Light *light, scene->lights) { @@ -569,8 +568,7 @@ void LightManager::device_update_background(Device *device, int2 res = make_int2(background_light->map_resolution, background_light->map_resolution / 2); /* If the resolution isn't set manually, try to find an environment texture. */ if (res.x == 0) { - Shader *shader = (scene->background->shader) ? scene->background->shader : - scene->default_background; + Shader *shader = scene->background->get_shader(scene); foreach (ShaderNode *node, shader->graph->nodes) { if (node->type == EnvironmentTextureNode::node_type) { EnvironmentTextureNode *env = (EnvironmentTextureNode *)node; diff --git a/intern/cycles/render/osl.cpp b/intern/cycles/render/osl.cpp index 91f02e42071..1f0a243e6c1 100644 --- a/intern/cycles/render/osl.cpp +++ b/intern/cycles/render/osl.cpp @@ -16,6 +16,7 @@ #include "device/device.h" +#include "render/background.h" #include "render/colorspace.h" #include "render/graph.h" #include "render/light.h" @@ -106,6 +107,7 @@ void OSLShaderManager::device_update(Device *device, /* create shaders */ OSLGlobals *og = (OSLGlobals *)device->osl_memory(); + Shader *background_shader = scene->background->get_shader(scene); foreach (Shader *shader, scene->shaders) { assert(shader->graph); @@ -119,7 +121,7 @@ void OSLShaderManager::device_update(Device *device, thread_scoped_lock lock(ss_mutex); OSLCompiler compiler(this, services, ss, scene); - compiler.background = (shader == scene->default_background); + compiler.background = (shader == background_shader); compiler.compile(og, shader); if (shader->use_mis && shader->has_surface_emission) @@ -131,7 +133,7 @@ void OSLShaderManager::device_update(Device *device, og->ts = ts; og->services = services; - int background_id = scene->shader_manager->get_shader_id(scene->default_background); + int background_id = scene->shader_manager->get_shader_id(background_shader); og->background_state = og->surface_state[background_id & SHADER_MASK]; og->use = true; diff --git a/intern/cycles/render/shader.cpp b/intern/cycles/render/shader.cpp index 3b73fa4139f..da04ef63295 100644 --- a/intern/cycles/render/shader.cpp +++ b/intern/cycles/render/shader.cpp @@ -317,7 +317,7 @@ void Shader::tag_update(Scene *scene) * has use_mis set to false. We are quite close to release now, so * better to be safe. */ - if (this == scene->default_background && scene->light_manager->has_background_light(scene)) { + if (this == scene->background->get_shader(scene) && scene->light_manager->has_background_light(scene)) { scene->light_manager->need_update = true; } diff --git a/intern/cycles/render/svm.cpp b/intern/cycles/render/svm.cpp index f42a2ea818d..7c33f6c04ae 100644 --- a/intern/cycles/render/svm.cpp +++ b/intern/cycles/render/svm.cpp @@ -15,6 +15,8 @@ */ #include "device/device.h" + +#include "render/background.h" #include "render/graph.h" #include "render/light.h" #include "render/mesh.h" @@ -58,7 +60,7 @@ void SVMShaderManager::device_update_shader(Scene *scene, SVMCompiler::Summary summary; SVMCompiler compiler(scene); - compiler.background = (shader == scene->default_background); + compiler.background = (shader == scene->background->get_shader(scene)); compiler.compile(shader, *svm_nodes, 0, &summary); VLOG(2) << "Compilation summary:\n" diff --git a/intern/mantaflow/intern/strings/smoke_script.h b/intern/mantaflow/intern/strings/smoke_script.h index d8c81ebf66a..e77074f35cb 100644 --- a/intern/mantaflow/intern/strings/smoke_script.h +++ b/intern/mantaflow/intern/strings/smoke_script.h @@ -573,7 +573,7 @@ def smoke_save_noise_$ID$(path, framenr, file_format, resumable):\n\ if resumable:\n\ fluid_file_export_s$ID$(dict=smoke_noise_dict_resume_s$ID$, framenr=framenr, file_format=file_format, path=path)\n\ else:\n\ - fluid_cache_multiprocessing_start_$ID$(function=fluid_file_export_s$ID$, framenr=framenr, format_data=file_format, path_data=path, dict=smoke_noise_final_dict_s$ID$, do_join=False)\n\ + fluid_cache_multiprocessing_start_$ID$(function=fluid_file_export_s$ID$, framenr=framenr, format_data=file_format, path_data=path, dict=smoke_noise_dict_final_s$ID$, do_join=False)\n\ if resumable:\n\ fluid_cache_multiprocessing_start_$ID$(function=fluid_file_export_s$ID$, framenr=framenr, format_data=file_format, path_data=path, dict=smoke_noise_dict_resume_s$ID$, do_join=False)\n"; diff --git a/source/blender/blenkernel/BKE_library.h b/source/blender/blenkernel/BKE_library.h index 21dd5aaaf8f..c41cd50eba5 100644 --- a/source/blender/blenkernel/BKE_library.h +++ b/source/blender/blenkernel/BKE_library.h @@ -184,7 +184,6 @@ void id_us_plus(struct ID *id); void id_us_min(struct ID *id); void id_fake_user_set(struct ID *id); void id_fake_user_clear(struct ID *id); -int BKE_id_num_real_users(const struct ID *id); void BKE_id_clear_newpoin(struct ID *id); void BKE_id_make_local_generic(struct Main *bmain, diff --git a/source/blender/blenkernel/intern/fluid.c b/source/blender/blenkernel/intern/fluid.c index 106f1216d2a..8acc2df4aea 100644 --- a/source/blender/blenkernel/intern/fluid.c +++ b/source/blender/blenkernel/intern/fluid.c @@ -3826,7 +3826,8 @@ struct Mesh *BKE_fluid_modifier_do( FluidDomainSettings *mds = mmd->domain; /* Always update viewport in cache replay mode. */ - if (mds->cache_type == FLUID_DOMAIN_CACHE_REPLAY) { + if (mds->cache_type == FLUID_DOMAIN_CACHE_REPLAY || + mds->flags & FLUID_DOMAIN_USE_ADAPTIVE_DOMAIN) { needs_viewport_update = true; } /* In other cache modes, only update the viewport when no bake is going on. */ diff --git a/source/blender/blenkernel/intern/library.c b/source/blender/blenkernel/intern/library.c index dabf44be42e..e051dc946cb 100644 --- a/source/blender/blenkernel/intern/library.c +++ b/source/blender/blenkernel/intern/library.c @@ -294,11 +294,6 @@ void id_fake_user_clear(ID *id) } } -int BKE_id_num_real_users(const ID *id) -{ - return (id->flag & LIB_FAKEUSER) ? id->us - 1 : id->us; -} - void BKE_id_clear_newpoin(ID *id) { if (id->newid) { diff --git a/source/blender/collada/MeshImporter.cpp b/source/blender/collada/MeshImporter.cpp index 94791df7b6f..e02a7a014f1 100644 --- a/source/blender/collada/MeshImporter.cpp +++ b/source/blender/collada/MeshImporter.cpp @@ -1014,12 +1014,12 @@ void MeshImporter::optimize_material_assignements() ++it) { Object *ob = (*it); Mesh *me = (Mesh *)ob->data; - if (BKE_id_num_real_users(&me->id) == 1) { + if (ID_REAL_USERS(&me->id) == 1) { bc_copy_materials_to_data(ob, me); bc_remove_materials_from_object(ob, me); bc_remove_mark(ob); } - else if (BKE_id_num_real_users(&me->id) > 1) { + else if (ID_REAL_USERS(&me->id) > 1) { bool can_move = true; std::vector<Object *> mesh_users = get_all_users_of(me); if (mesh_users.size() > 1) { diff --git a/source/blender/draw/engines/eevee/eevee_lightcache.c b/source/blender/draw/engines/eevee/eevee_lightcache.c index aa904036463..e8e5614e4d4 100644 --- a/source/blender/draw/engines/eevee/eevee_lightcache.c +++ b/source/blender/draw/engines/eevee/eevee_lightcache.c @@ -768,6 +768,7 @@ static void eevee_lightbake_cache_create(EEVEE_Data *vedata, EEVEE_LightBake *lb EEVEE_materials_cache_finish(sldata, vedata); EEVEE_lights_cache_finish(sldata, vedata); EEVEE_lightprobes_cache_finish(sldata, vedata); + EEVEE_shadows_update(sldata, vedata); /* Disable volumetrics when baking. */ stl->effects->enabled_effects &= ~EFFECT_VOLUMETRIC; diff --git a/source/blender/draw/engines/eevee/shaders/lit_surface_frag.glsl b/source/blender/draw/engines/eevee/shaders/lit_surface_frag.glsl index 978ce149be4..8c2619650b9 100644 --- a/source/blender/draw/engines/eevee/shaders/lit_surface_frag.glsl +++ b/source/blender/draw/engines/eevee/shaders/lit_surface_frag.glsl @@ -177,7 +177,8 @@ void CLOSURE_NAME(vec3 N out_refr = vec3(0.0); #endif -#ifdef SHADOW_SHADER +#if defined(SHADOW_SHADER) || defined(WORLD_BACKGROUND) + /* This makes shader resources become unused and avoid issues with samplers. (see T59747) */ return; #else diff --git a/source/blender/draw/engines/overlay/overlay_extra.c b/source/blender/draw/engines/overlay/overlay_extra.c index 5350468d26c..c5dc6860ac2 100644 --- a/source/blender/draw/engines/overlay/overlay_extra.c +++ b/source/blender/draw/engines/overlay/overlay_extra.c @@ -29,7 +29,6 @@ #include "BKE_constraint.h" #include "BKE_curve.h" #include "BKE_global.h" -#include "BKE_library.h" #include "BKE_mball.h" #include "BKE_mesh.h" #include "BKE_movieclip.h" @@ -1019,6 +1018,11 @@ static void camera_stereoscopy_extra(OVERLAY_ExtraCallBuffers *cb, const bool is_stereo3d_plane = (v3d->stereo3d_flag & V3D_S3D_DISPPLANE) != 0; const bool is_stereo3d_volume = (v3d->stereo3d_flag & V3D_S3D_DISPVOLUME) != 0; + if (!is_stereo3d_cameras) { + /* Draw single camera. */ + DRW_buffer_add_entry_struct(cb->camera_frame, instdata); + } + for (int eye = 0; eye < 2; eye++) { ob = BKE_camera_multiview_render(scene, ob, viewnames[eye]); BKE_camera_multiview_model_matrix(&scene->r, ob, viewnames[eye], stereodata.mat); @@ -1501,7 +1505,7 @@ static void OVERLAY_object_center(OVERLAY_ExtraCallBuffers *cb, OVERLAY_PrivateData *pd, ViewLayer *view_layer) { - const bool is_library = BKE_id_num_real_users(&ob->id) > 1 || ID_IS_LINKED(ob); + const bool is_library = ID_REAL_USERS(&ob->id) > 1 || ID_IS_LINKED(ob); if (ob == OBACT(view_layer)) { DRW_buffer_add_entry(cb->center_active, ob->obmat[3]); diff --git a/source/blender/editors/object/object_add.c b/source/blender/editors/object/object_add.c index 64c4abd1446..5c1c6d27ec6 100644 --- a/source/blender/editors/object/object_add.c +++ b/source/blender/editors/object/object_add.c @@ -2325,7 +2325,7 @@ static int convert_exec(bContext *C, wmOperator *op) if (!keep_original) { /* other users */ - if (BKE_id_num_real_users(&cu->id) > 1) { + if (ID_REAL_USERS(&cu->id) > 1) { for (ob1 = bmain->objects.first; ob1; ob1 = ob1->id.next) { if (ob1->data == ob->data) { ob1->type = OB_CURVE; diff --git a/source/blender/editors/sculpt_paint/sculpt.c b/source/blender/editors/sculpt_paint/sculpt.c index c3056fff8c5..7e3b0e378ba 100644 --- a/source/blender/editors/sculpt_paint/sculpt.c +++ b/source/blender/editors/sculpt_paint/sculpt.c @@ -7562,8 +7562,7 @@ static void sculpt_flush_update_done(const bContext *C, Object *ob, SculptUpdate RegionView3D *rv3d = CTX_wm_region_view3d(C); SculptSession *ss = ob->sculpt; Mesh *mesh = ob->data; - bool need_tag = (BKE_id_num_real_users(&mesh->id) > - 1); /* Always needed for linked duplicates. */ + bool need_tag = (ID_REAL_USERS(&mesh->id) > 1); /* Always needed for linked duplicates. */ if (rv3d) { rv3d->rflag &= ~RV3D_PAINTING; diff --git a/source/blender/editors/sculpt_paint/sculpt_undo.c b/source/blender/editors/sculpt_paint/sculpt_undo.c index a069b231150..366eeae219c 100644 --- a/source/blender/editors/sculpt_paint/sculpt_undo.c +++ b/source/blender/editors/sculpt_paint/sculpt_undo.c @@ -46,7 +46,6 @@ #include "BKE_multires.h" #include "BKE_paint.h" #include "BKE_key.h" -#include "BKE_library.h" #include "BKE_mesh.h" #include "BKE_scene.h" #include "BKE_subsurf.h" @@ -633,7 +632,7 @@ static void sculpt_undo_restore_list(bContext *C, Depsgraph *depsgraph, ListBase } } - tag_update |= BKE_id_num_real_users(ob->data) > 1 || !BKE_sculptsession_use_pbvh_draw(ob, v3d); + tag_update |= ID_REAL_USERS(ob->data) > 1 || !BKE_sculptsession_use_pbvh_draw(ob, v3d); if (ss->shapekey_active || ss->deform_modifiers_active) { Mesh *mesh = ob->data; diff --git a/source/blender/editors/space_file/fsmenu.c b/source/blender/editors/space_file/fsmenu.c index f9506da39a8..fc03453a5cc 100644 --- a/source/blender/editors/space_file/fsmenu.c +++ b/source/blender/editors/space_file/fsmenu.c @@ -616,12 +616,12 @@ void fsmenu_read_system(struct FSMenu *fsmenu, int read_bookmarks) 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')) { + /* Add end slash for consistency with other platforms */ + BLI_add_slash(line); + fsmenu_insert_entry( fsmenu, FS_CATEGORY_SYSTEM_BOOKMARKS, line, NULL, ICON_FILE_FOLDER, FS_INSERT_LAST); } |