diff options
-rw-r--r-- | release/scripts/startup/bl_ui/space_userpref.py | 7 | ||||
-rw-r--r-- | source/blender/blenloader/intern/versioning_userdef.c | 4 | ||||
-rw-r--r-- | source/blender/draw/intern/draw_cache_impl_mesh.c | 11 | ||||
-rw-r--r-- | source/blender/draw/intern/draw_manager.c | 11 | ||||
-rw-r--r-- | source/blender/makesdna/DNA_userdef_types.h | 4 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_userdef.c | 17 |
6 files changed, 42 insertions, 12 deletions
diff --git a/release/scripts/startup/bl_ui/space_userpref.py b/release/scripts/startup/bl_ui/space_userpref.py index 1ee154b4879..7cfcbfe133e 100644 --- a/release/scripts/startup/bl_ui/space_userpref.py +++ b/release/scripts/startup/bl_ui/space_userpref.py @@ -685,6 +685,13 @@ class USERPREF_PT_system_memory(PreferencePanel, Panel): flow.prop(system, "texture_time_out", text="Texture Time Out") flow.prop(system, "texture_collection_rate", text="Garbage Collection Rate") + layout.separator() + + flow = layout.grid_flow(row_major=False, columns=0, even_columns=True, even_rows=False, align=False) + + flow.prop(system, "vbo_time_out", text="Vbo Time Out") + flow.prop(system, "vbo_collection_rate", text="Garbage Collection Rate") + class USERPREF_MT_interface_theme_presets(Menu): bl_label = "Presets" diff --git a/source/blender/blenloader/intern/versioning_userdef.c b/source/blender/blenloader/intern/versioning_userdef.c index bf88eddc145..65a19ca80c1 100644 --- a/source/blender/blenloader/intern/versioning_userdef.c +++ b/source/blender/blenloader/intern/versioning_userdef.c @@ -496,6 +496,10 @@ void BLO_version_defaults_userpref_blend(Main *bmain, UserDef *userdef) */ { /* (keep this block even if it becomes empty). */ + if (userdef->vbotimeout == 0) { + userdef->vbocollectrate = 60; + userdef->vbotimeout = 120; + } } if (userdef->pixelsize == 0.0f) diff --git a/source/blender/draw/intern/draw_cache_impl_mesh.c b/source/blender/draw/intern/draw_cache_impl_mesh.c index 41de51fde96..a433135e8b9 100644 --- a/source/blender/draw/intern/draw_cache_impl_mesh.c +++ b/source/blender/draw/intern/draw_cache_impl_mesh.c @@ -2004,6 +2004,8 @@ typedef struct MeshBatchCache { DRW_MeshCDMask cd_used, cd_needed, cd_used_over_time; + int lastmatch; + /* XXX, only keep for as long as sculpt mode uses shaded drawing. */ bool is_sculpt_points_tag; @@ -4727,16 +4729,21 @@ static void mesh_create_uvedit_buffers(MeshRenderData *rdata, /* Thread safety need to be assured by caller. Don't call this during drawing. * Note: For now this only free the shading batches / vbo if any cd layers is * not needed anymore. */ -void DRW_mesh_batch_cache_free_old(Mesh *me, int UNUSED(ctime)) +void DRW_mesh_batch_cache_free_old(Mesh *me, int ctime) { MeshBatchCache *cache = me->runtime.batch_cache; if (cache == NULL) return; - if (mesh_cd_layers_type_equal(cache->cd_used_over_time, cache->cd_used) == false) { + if (mesh_cd_layers_type_equal(cache->cd_used_over_time, cache->cd_used)) { + cache->lastmatch = ctime; + } + + if (ctime - cache->lastmatch > U.vbotimeout) { mesh_batch_cache_discard_shaded_tri(cache); } + mesh_cd_layers_type_clear(&cache->cd_used_over_time); } diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c index 394cb6a144f..6c3bc7eb021 100644 --- a/source/blender/draw/intern/draw_manager.c +++ b/source/blender/draw/intern/draw_manager.c @@ -967,11 +967,9 @@ static void drw_drawdata_unlink_dupli(ID *id) /** \} */ /* -------------------------------------------------------------------- */ -/** \name Rendering (DRW_engines) +/** \name Garbage Collection * \{ */ -#define DRW_BATCH_COLLECTION_RATE 60 /* in sec */ - void DRW_cache_free_old_batches(Main *bmain) { Scene *scene; @@ -979,7 +977,7 @@ void DRW_cache_free_old_batches(Main *bmain) static int lasttime = 0; int ctime = (int)PIL_check_seconds_timer(); - if (ctime % DRW_BATCH_COLLECTION_RATE || ctime == lasttime) + if (U.vbotimeout == 0 || (ctime - lasttime) < U.vbocollectrate || ctime == lasttime) return; lasttime = ctime; @@ -2496,10 +2494,7 @@ void DRW_draw_depth_loop_gpencil(struct Depsgraph *depsgraph, /** * Clears the Depth Buffer and draws only the specified object. */ -void DRW_draw_depth_object(ARegion *ar, - View3D *v3d, - GPUViewport *viewport, - Object *object) +void DRW_draw_depth_object(ARegion *ar, View3D *v3d, GPUViewport *viewport, Object *object) { RegionView3D *rv3d = ar->regiondata; diff --git a/source/blender/makesdna/DNA_userdef_types.h b/source/blender/makesdna/DNA_userdef_types.h index 57d685b527c..c831c14eeaf 100644 --- a/source/blender/makesdna/DNA_userdef_types.h +++ b/source/blender/makesdna/DNA_userdef_types.h @@ -643,9 +643,9 @@ typedef struct UserDef { char _pad3[4]; short gizmo_flag, gizmo_size; short edit_studio_light; - char _pad6[4]; + char _pad6[2]; + short vbotimeout, vbocollectrate; short textimeout, texcollectrate; - char _pad14[2]; int memcachelimit; int prefetchframes; /** Control the rotation step of the view when PAD2, PAD4, PAD6&PAD8 is use. */ diff --git a/source/blender/makesrna/intern/rna_userdef.c b/source/blender/makesrna/intern/rna_userdef.c index 5a017e96fa7..d81ae82fbc5 100644 --- a/source/blender/makesrna/intern/rna_userdef.c +++ b/source/blender/makesrna/intern/rna_userdef.c @@ -4766,6 +4766,23 @@ static void rna_def_userdef_system(BlenderRNA *brna) "Texture Collection Rate", "Number of seconds between each run of the GL texture garbage collector"); + prop = RNA_def_property(srna, "vbo_time_out", PROP_INT, PROP_NONE); + RNA_def_property_int_sdna(prop, NULL, "vbotimeout"); + RNA_def_property_range(prop, 0, 3600); + RNA_def_property_ui_text( + prop, + "VBO Time Out", + "Time since last access of a GL Vertex buffer object in seconds after which it is freed " + "(set to 0 to keep vbo allocated)"); + + prop = RNA_def_property(srna, "vbo_collection_rate", PROP_INT, PROP_NONE); + RNA_def_property_int_sdna(prop, NULL, "vbocollectrate"); + RNA_def_property_range(prop, 1, 3600); + RNA_def_property_ui_text( + prop, + "VBO Collection Rate", + "Number of seconds between each run of the GL Vertex buffer object garbage collector"); + /* Select */ prop = RNA_def_property(srna, "use_select_pick_depth", PROP_BOOLEAN, PROP_NONE); |