[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