[Bf-blender-cvs] [e5777ec] particles_refactor: Started implementing individual paged layers.

Lukas Tönne noreply at git.blender.org
Tue Apr 22 12:05:15 CEST 2014


Commit: e5777ec04461c945930ccc2e5213456631b61eed
Author: Lukas Tönne
Date:   Thu May 30 11:00:03 2013 +0200
https://developer.blender.org/rBe5777ec04461c945930ccc2e5213456631b61eed

Started implementing individual paged layers.

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

M	source/blender/blenlib/BLI_pagedbuffer.h
M	source/blender/blenlib/intern/pagedbuffer.c
M	source/blender/blenloader/intern/readfile.c
M	source/blender/blenloader/intern/writefile.c
M	source/blender/makesdna/DNA_pagedbuffer_types.h

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

diff --git a/source/blender/blenlib/BLI_pagedbuffer.h b/source/blender/blenlib/BLI_pagedbuffer.h
index 1f688db..621e018 100644
--- a/source/blender/blenlib/BLI_pagedbuffer.h
+++ b/source/blender/blenlib/BLI_pagedbuffer.h
@@ -37,12 +37,11 @@
 #include "DNA_pagedbuffer_types.h"
 
 
-struct bPagedBuffer;
-struct bPagedBufferLayerInfo;
-struct bPagedBufferIterator;
-struct bPagedBufferPage;
 
 
+
+
+#if 0
 /* Buffer Management */
 
 void BLI_pbuf_init(struct bPagedBuffer *pbuf, int page_size);
@@ -168,5 +167,6 @@ void BLI_pbuf_cache_merge(struct bPagedBuffer *pbuf, int start, bPagedBufferComp
 
 PBUF_DEF_LAYER_TYPE(float)
 PBUF_DEF_LAYER_TYPE(int)
+#endif
 
 #endif
diff --git a/source/blender/blenlib/intern/pagedbuffer.c b/source/blender/blenlib/intern/pagedbuffer.c
index 0335017..356a6a5 100644
--- a/source/blender/blenlib/intern/pagedbuffer.c
+++ b/source/blender/blenlib/intern/pagedbuffer.c
@@ -34,7 +34,72 @@
 #include "BLI_string.h"
 #include "BLI_utildefines.h"
 
+#define PBUF_ALIGN_STRICT
 
+#define div_ceil(a, b) \
+	(1 + ((a) - 1) / (b))
+
+static int pbuf_layer_page_size_from_bytes(size_t page_bytes, size_t elem_bytes)
+{
+	div_t page_size = div(page_bytes, elem_size);
+	#ifdef PBUF_ALIGN_STRICT
+	BLI_assert(page_size.rem == 0);
+	#endif
+	return page_size.quot;
+}
+
+static bPagedBufferLayer *pbuf_layer_new(int totelem, size_t page_bytes, size_t elem_bytes)
+{
+	bPagedBufferLayer *layer = MEM_callocN(sizeof(bPagedBufferLayer), "paged buffer layer");
+	int p;
+	
+	layer->page_size = pbuf_layer_page_size_from_bytes(page_bytes, elem_bytes);
+	layer->totpages = div_ceil(totelem, layer->page_size);
+	layer->pages = MEM_callocN(sizeof(void *) * layer->totpages, "paged buffer page array");
+	for (p = 0; p < layer->totpages; ++p)
+		layer->pages[p] = MEM_mallocN(elem_bytes * layer->page_size, "paged buffer page");
+	
+	return layer;
+}
+
+static void pbuf_layer_free(bPagedBufferLayer *layer)
+{
+}
+
+static bPagedBufferLayer *pbuf_layer_copy(bPagedBufferLayer *layer)
+{
+}
+
+void BLI_pbuf_init(bPagedBuffer *pbuf)
+{
+	pbuf->layers = NULL;
+	pbuf->totlayers = 0;
+	pbuf->totelem = 0;
+}
+
+void BLI_pbuf_free(bPagedBuffer *pbuf)
+{
+	int l;
+	for (l = 0; l < pbuf->totlayers; ++l)
+		pbuf_layer_free(&pbuf->layers[l]);
+	pbuf->layers = NULL;
+	pbuf->totlayers = 0;
+	pbuf->totelem = 0;
+}
+
+void BLI_pbuf_copy(bPagedBuffer *to, bPagedBuffer *from)
+{
+	int l;
+	to->layers = MEM_dupallocN(from->layers);
+	for (l = 0; l < from->totlayers; ++l) {
+		to->layers[l] = pbuf_layer_copy(from->layers[l]);
+	}
+	to->totlayers = from->totlayers;
+	to->totelem = from->totelem;
+}
+
+
+#if 0
 /************************************************/
 /*				Buffer Management				*/
 /************************************************/
@@ -938,3 +1003,4 @@ bPagedBufferIterator BLI_pbuf_binary_search_element(bPagedBuffer *pbuf, bPagedBu
 	pit.valid = false;
 	return pit;
 }
+#endif
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index fb95894..c3903d6 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -4244,6 +4244,7 @@ static void direct_link_latt(FileData *fd, Lattice *lt)
 
 static void direct_link_pagedbuffer(FileData *fd, bPagedBuffer *pbuf)
 {
+#if 0
 	bPagedBufferPage *page;
 	bPagedBufferLayerInfo *layer;
 	int p, k;
@@ -4261,6 +4262,7 @@ static void direct_link_pagedbuffer(FileData *fd, bPagedBuffer *pbuf)
 				page->layers[k] = newdataadr(fd, page->layers[k]);
 		}
 	}
+#endif
 }
 
 
diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c
index 5d42305..8b70640 100644
--- a/source/blender/blenloader/intern/writefile.c
+++ b/source/blender/blenloader/intern/writefile.c
@@ -1360,6 +1360,7 @@ static void write_defgroups(WriteData *wd, ListBase *defbase)
 
 static void write_pagedbuffer(WriteData *wd, bPagedBuffer *pbuf)
 {
+#if 0
 	bPagedBufferLayerInfo *layer;
 	bPagedBufferPage *page;
 	int p;
@@ -1379,6 +1380,7 @@ static void write_pagedbuffer(WriteData *wd, bPagedBuffer *pbuf)
 				writedata(wd, DATA, pbuf->page_size * layer->stride, page->layers[layer->layer]);
 		}
 	}
+#endif
 }
 
 static void write_modifiers(WriteData *wd, ListBase *modbase)
diff --git a/source/blender/makesdna/DNA_pagedbuffer_types.h b/source/blender/makesdna/DNA_pagedbuffer_types.h
index d9ef233..767b0f4 100644
--- a/source/blender/makesdna/DNA_pagedbuffer_types.h
+++ b/source/blender/makesdna/DNA_pagedbuffer_types.h
@@ -33,33 +33,21 @@
 
 #include "DNA_listBase.h"
 
-
-typedef struct bPagedBufferLayerInfo {
-	struct bPagedBufferLayerInfo *next, *prev;
-	struct bPagedBufferLayerInfo *new_layer;	/* temporary pointer after copy */
-	
-	char name[32];
-	
-	int layer;							/* layer index */
-	int stride;							/* size in bytes of a single element */
-	
-	/* default value when creating new elements */
-	void *default_value;
-} bPagedBufferLayerInfo;
-
 typedef struct bPagedBufferPage {
-	void **layers;				/* layer data */
+	void *data;				/* layer data */
 } bPagedBufferPage;
 
-typedef struct bPagedBuffer {
+typedef struct bPagedBufferLayer {
 	struct bPagedBufferPage *pages;		/* page list */
-	ListBase layers;					/* layer info list */
 	int page_size;						/* elements per page */
 	int totpages;						/* number of allocated pages */
-	int totlayers;						/* number of data layers */
-	int totelem;						/* number of added elements */
 	int totalloc;						/* actually allocated elements (dead pages not counted) */
-	int pad;
+} bPagedBufferLayer;
+
+typedef struct bPagedBuffer {
+	struct bPagedBufferLayer *layers;	/* layer list */
+	int totlayers;						/* number of layers */
+	int totelem;						/* number of elements in the buffer */
 } bPagedBuffer;
 
 #endif




More information about the Bf-blender-cvs mailing list