[Bf-blender-cvs] [deb760896b1] hair_object: Runtime struct for non-serialized hair data, similar to Mesh runtime.

Lukas Tönne noreply at git.blender.org
Sat Nov 10 15:45:01 CET 2018


Commit: deb760896b162ff98146986442638696eaa0f8ed
Author: Lukas Tönne
Date:   Sat Nov 10 14:44:20 2018 +0000
Branches: hair_object
https://developer.blender.org/rBdeb760896b162ff98146986442638696eaa0f8ed

Runtime struct for non-serialized hair data, similar to Mesh runtime.

===================================================================

A	source/blender/blenkernel/BKE_hair_runtime.h
M	source/blender/blenkernel/CMakeLists.txt
M	source/blender/blenkernel/intern/hair.c
M	source/blender/blenkernel/intern/hair_draw.c
A	source/blender/blenkernel/intern/hair_runtime.c
M	source/blender/blenloader/intern/readfile.c
M	source/blender/draw/intern/draw_cache_impl_hair.c
M	source/blender/makesdna/DNA_hair_types.h

===================================================================

diff --git a/source/blender/blenkernel/BKE_hair_runtime.h b/source/blender/blenkernel/BKE_hair_runtime.h
new file mode 100644
index 00000000000..bf421386ba2
--- /dev/null
+++ b/source/blender/blenkernel/BKE_hair_runtime.h
@@ -0,0 +1,41 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) Blender Foundation
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): Lukas Toenne
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#ifndef __BKE_HAIR_RUNTIME_H__
+#define __BKE_HAIR_RUNTIME_H__
+
+/** \file blender/blenkernel/BKE_hair_runtime.h
+ *  \ingroup bke
+ */
+
+#include "BLI_utildefines.h"
+
+struct HairSystem;
+
+void BKE_hair_runtime_reset(struct HairSystem *hsys);
+
+#endif
diff --git a/source/blender/blenkernel/CMakeLists.txt b/source/blender/blenkernel/CMakeLists.txt
index 9f3533b9f35..604d5efeb47 100644
--- a/source/blender/blenkernel/CMakeLists.txt
+++ b/source/blender/blenkernel/CMakeLists.txt
@@ -121,6 +121,7 @@ set(SRC
 	intern/gpencil_modifier.c
 	intern/hair.c
 	intern/hair_draw.c
+	intern/hair_runtime.c
 	intern/icons.c
 	intern/icons_rasterize.c
 	intern/idcode.c
@@ -278,6 +279,7 @@ set(SRC
 	BKE_gpencil_modifier.h
 	BKE_hair.h
 	BKE_hair_iterators.h
+	BKE_hair_runtime.h
 	BKE_icons.h
 	BKE_idcode.h
 	BKE_idprop.h
diff --git a/source/blender/blenkernel/intern/hair.c b/source/blender/blenkernel/intern/hair.c
index 3cec48ca403..c5e184076c4 100644
--- a/source/blender/blenkernel/intern/hair.c
+++ b/source/blender/blenkernel/intern/hair.c
@@ -52,6 +52,7 @@
 #include "BKE_global.h"
 #include "BKE_hair.h"
 #include "BKE_hair_iterators.h"
+#include "BKE_hair_runtime.h"
 #include "BKE_library.h"
 #include "BKE_main.h"
 #include "BKE_mesh.h"
@@ -181,7 +182,7 @@ void BKE_hair_copy_data(Main *UNUSED(bmain), HairSystem *hsys_dst, const HairSys
 		hsys_dst->draw_settings = BKE_hair_draw_settings_copy(hsys_src->draw_settings);
 	}
 
-	hsys_dst->draw_batch_cache = NULL;
+	BKE_hair_runtime_reset(hsys_dst);
 }
 
 HairSystem *BKE_hair_copy(Main *bmain, const HairSystem *hsys)
diff --git a/source/blender/blenkernel/intern/hair_draw.c b/source/blender/blenkernel/intern/hair_draw.c
index b62ce6888b1..b215a4fd92f 100644
--- a/source/blender/blenkernel/intern/hair_draw.c
+++ b/source/blender/blenkernel/intern/hair_draw.c
@@ -77,14 +77,14 @@ void (*BKE_hair_batch_cache_free_cb)(HairSystem* hsys) = NULL;
 
 void BKE_hair_batch_cache_dirty(HairSystem* hsys, int mode)
 {
-	if (hsys->draw_batch_cache) {
+	if (hsys->runtime.draw_batch_cache) {
 		BKE_hair_batch_cache_dirty_cb(hsys, mode);
 	}
 }
 
 void BKE_hair_batch_cache_free(HairSystem* hsys)
 {
-	if (hsys->draw_batch_cache) {
+	if (hsys->runtime.draw_batch_cache) {
 		BKE_hair_batch_cache_free_cb(hsys);
 	}
 }
diff --git a/source/blender/blenkernel/intern/hair_runtime.c b/source/blender/blenkernel/intern/hair_runtime.c
new file mode 100644
index 00000000000..384c16bce15
--- /dev/null
+++ b/source/blender/blenkernel/intern/hair_runtime.c
@@ -0,0 +1,58 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) Blender Foundation
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): Lukas Toenne
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/blenkernel/intern/hair_runtime.c
+ *  \ingroup bke
+ */
+
+#include <limits.h>
+#include <string.h>
+
+#include "MEM_guardedalloc.h"
+
+#include "DNA_mesh_types.h"
+#include "DNA_hair_types.h"
+#include "DNA_meshdata_types.h"
+#include "DNA_object_types.h"
+
+#include "BKE_animsys.h"
+#include "BKE_customdata.h"
+#include "BKE_global.h"
+#include "BKE_hair.h"
+#include "BKE_hair_iterators.h"
+#include "BKE_hair_runtime.h"
+#include "BKE_mesh_sample.h"
+#include "BKE_object.h"
+
+#include "DEG_depsgraph_query.h"
+
+void BKE_hair_runtime_reset(HairSystem *hsys)
+{
+	HairSystem_Runtime *runtime = &hsys->runtime;
+
+	runtime->draw_batch_cache = NULL;
+}
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 3f397a6d10b..16eb2213375 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -135,6 +135,7 @@
 #include "BKE_global.h" // for G
 #include "BKE_gpencil.h"
 #include "BKE_gpencil_modifier.h"
+#include "BKE_hair_runtime.h"
 #include "BKE_layer.h"
 #include "BKE_library.h" // for which_libbase
 #include "BKE_library_idmap.h"
@@ -8430,7 +8431,7 @@ static void direct_link_hair(FileData *fd, HairSystem* hsys)
 
 	hsys->bb = NULL;
 	hsys->edithair = NULL;
-	hsys->draw_batch_cache = NULL;
+	BKE_hair_runtime_reset(hsys);
 }
 
 /* ************** GENERAL & MAIN ******************** */
diff --git a/source/blender/draw/intern/draw_cache_impl_hair.c b/source/blender/draw/intern/draw_cache_impl_hair.c
index a6a3e5e971b..f7493df584c 100644
--- a/source/blender/draw/intern/draw_cache_impl_hair.c
+++ b/source/blender/draw/intern/draw_cache_impl_hair.c
@@ -79,7 +79,7 @@ static void hair_batch_cache_clear(HairSystem *hsys);
 
 static bool hair_batch_cache_valid(HairSystem *hsys)
 {
-	HairBatchCache *cache = hsys->draw_batch_cache;
+	HairBatchCache *cache = hsys->runtime.draw_batch_cache;
 
 	if (cache == NULL) {
 		return false;
@@ -98,10 +98,10 @@ static bool hair_batch_cache_valid(HairSystem *hsys)
 
 static void hair_batch_cache_init(HairSystem *hsys)
 {
-	HairBatchCache *cache = hsys->draw_batch_cache;
+	HairBatchCache *cache = hsys->runtime.draw_batch_cache;
 	
 	if (!cache) {
-		cache = hsys->draw_batch_cache = MEM_callocN(sizeof(*cache), __func__);
+		cache = hsys->runtime.draw_batch_cache = MEM_callocN(sizeof(*cache), __func__);
 	}
 	else {
 		memset(cache, 0, sizeof(*cache));
@@ -117,12 +117,12 @@ static HairBatchCache *hair_batch_cache_get(HairSystem *hsys)
 		hair_batch_cache_clear(hsys);
 		hair_batch_cache_init(hsys);
 	}
-	return hsys->draw_batch_cache;
+	return hsys->runtime.draw_batch_cache;
 }
 
 void DRW_hair_batch_cache_dirty(HairSystem *hsys, int mode)
 {
-	HairBatchCache *cache = hsys->draw_batch_cache;
+	HairBatchCache *cache = hsys->runtime.draw_batch_cache;
 	if (cache == NULL) {
 		return;
 	}
@@ -140,7 +140,7 @@ void DRW_hair_batch_cache_dirty(HairSystem *hsys, int mode)
 
 static void hair_batch_cache_clear(HairSystem *hsys)
 {
-	HairBatchCache *cache = hsys->draw_batch_cache;
+	HairBatchCache *cache = hsys->runtime.draw_batch_cache;
 	if (cache) {
 		particle_batch_cache_clear_hair(&cache->hair);
 		particle_batch_cache_clear_hair(&cache->edit_hair);
@@ -153,7 +153,7 @@ static void hair_batch_cache_clear(HairSystem *hsys)
 void DRW_hair_batch_cache_free(HairSystem *hsys)
 {
 	hair_batch_cache_clear(hsys);
-	MEM_SAFE_FREE(hsys->draw_batch_cache);
+	MEM_SAFE_FREE(hsys->runtime.draw_batch_cache);
 }
 
 static void hair_batch_cache_ensure_count(
diff --git a/source/blender/makesdna/DNA_hair_types.h b/source/blender/makesdna/DNA_hair_types.h
index d5472f019f3..013f87a3dc4 100644
--- a/source/blender/makesdna/DNA_hair_types.h
+++ b/source/blender/makesdna/DNA_hair_types.h
@@ -101,6 +101,14 @@ typedef struct EditHair {
 	HairCurveData curve_data;
 } EditHair;
 
+/* not saved in file! */
+typedef struct HairSystem_Runtime {
+	// struct EditHair *edithair;
+	void *draw_batch_cache;     /* Data buffers for drawing */
+
+	// int64_t cd_dirty_follicles;
+} HairSystem_Runtime;
+
 typedef struct HairSystem {
 	ID id;                      /* Hair data is a datablock */
 	struct AnimData *adt;       /* Animation data - for animating settings */
@@ -125,8 +133,7 @@ typedef struct HairSystem {
 
 	struct HairDrawSettings *draw_settings;
 
-	/* Data buffers for drawing */
-	void *draw_batch_cache;
+	HairSystem_Runtime runtime;
 } HairSystem;
 
 // typedef enum eHairSystemFlag



More information about the Bf-blender-cvs mailing list