[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [28390] branches/render25: Render Branch: Image Tile Cache
Brecht Van Lommel
brecht at blender.org
Fri Apr 23 20:04:16 CEST 2010
Revision: 28390
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=28390
Author: blendix
Date: 2010-04-23 20:04:16 +0200 (Fri, 23 Apr 2010)
Log Message:
-----------
Render Branch: Image Tile Cache
* Loading of tiles from .tx files, so that large images which
are only partially in view consume less memory.
* Caching of tiles with a memory limit. This is currently disabled
by default, the memory limit can be set in the user preferences.
More detailed notes here:
http://wiki.blender.org/index.php/Dev:2.5/Source/Imaging/ImageTileCache
This should basically be functional now for rendering durian, though
some things should be added still for ease of use:
* Auto-generating .tx files.
* Automatic memory limit, how can you find a reasonable value?
* Included non-tiled images in cache (or perhaps just autogen)?
* Image thumbnails don't use this system yet.
Modified Paths:
--------------
branches/render25/release/scripts/ui/space_userpref.py
branches/render25/source/blender/blenkernel/intern/image.c
branches/render25/source/blender/blenkernel/intern/texture.c
branches/render25/source/blender/blenlib/BLI_storage.h
branches/render25/source/blender/blenlib/intern/storage.c
branches/render25/source/blender/blenloader/intern/readfile.c
branches/render25/source/blender/blenloader/intern/writefile.c
branches/render25/source/blender/editors/interface/interface_draw.c
branches/render25/source/blender/editors/interface/interface_icons.c
branches/render25/source/blender/editors/space_file/filelist.c
branches/render25/source/blender/imbuf/IMB_imbuf.h
branches/render25/source/blender/imbuf/IMB_imbuf_types.h
branches/render25/source/blender/imbuf/intern/IMB_filetype.h
branches/render25/source/blender/imbuf/intern/IMB_filter.h
branches/render25/source/blender/imbuf/intern/allocimbuf.c
branches/render25/source/blender/imbuf/intern/anim.c
branches/render25/source/blender/imbuf/intern/dynlibtiff.c
branches/render25/source/blender/imbuf/intern/dynlibtiff.h
branches/render25/source/blender/imbuf/intern/filetype.c
branches/render25/source/blender/imbuf/intern/filter.c
branches/render25/source/blender/imbuf/intern/module.c
branches/render25/source/blender/imbuf/intern/readimage.c
branches/render25/source/blender/imbuf/intern/tiff.c
branches/render25/source/blender/makesdna/DNA_image_types.h
branches/render25/source/blender/makesdna/DNA_userdef_types.h
branches/render25/source/blender/makesrna/intern/rna_userdef.c
branches/render25/source/blender/render/intern/include/envmap.h
branches/render25/source/blender/render/intern/include/part.h
branches/render25/source/blender/render/intern/include/texture.h
branches/render25/source/blender/render/intern/source/pipeline.c
branches/render25/source/blender/render/intern/source/texture.c
branches/render25/source/blender/render/intern/source/texture_envmap.c
branches/render25/source/blender/render/intern/source/texture_image.c
branches/render25/source/blender/render/intern/source/texture_stack.c
Added Paths:
-----------
branches/render25/source/blender/imbuf/intern/cache.c
Modified: branches/render25/release/scripts/ui/space_userpref.py
===================================================================
--- branches/render25/release/scripts/ui/space_userpref.py 2010-04-23 18:03:06 UTC (rev 28389)
+++ branches/render25/release/scripts/ui/space_userpref.py 2010-04-23 18:04:16 UTC (rev 28390)
@@ -432,6 +432,8 @@
col.prop(system, "prefetch_frames")
col.prop(system, "memory_cache_limit")
+ col.label(text="Image Tiles:")
+ col.prop(system, "image_tile_memory_limit", text="Memory Limit")
# 3. Column
column = split.column()
Modified: branches/render25/source/blender/blenkernel/intern/image.c
===================================================================
--- branches/render25/source/blender/blenkernel/intern/image.c 2010-04-23 18:03:06 UTC (rev 28389)
+++ branches/render25/source/blender/blenkernel/intern/image.c 2010-04-23 18:04:16 UTC (rev 28390)
@@ -1553,8 +1553,8 @@
BLI_path_abs(name, G.sce);
flag= IB_rect|IB_multilayer;
- if(iuser && iuser->flag & IMA_USECACHE)
- flag |= IB_usecache;
+ if(iuser && iuser->flag & IMA_TILECACHE)
+ flag |= IB_tilecache;
if(ima->flag & IMA_DO_PREMUL)
flag |= IB_premul;
@@ -1705,12 +1705,12 @@
/* is there a PackedFile with this image ? */
if (ima->packedfile) {
- ibuf = IMB_ibImageFromMemory((int *) ima->packedfile->data, ima->packedfile->size, IB_rect|IB_multilayer);
+ ibuf = IMB_ibImageFromMemory((unsigned char*)ima->packedfile->data, ima->packedfile->size, IB_rect|IB_multilayer);
}
else {
flag= IB_rect|IB_multilayer|IB_metadata;
- if(iuser && iuser->flag & IMA_USECACHE)
- flag |= IB_usecache;
+ if(iuser && iuser->flag & IMA_TILECACHE)
+ flag |= IB_tilecache;
if(ima->flag & IMA_DO_PREMUL)
flag |= IB_premul;
@@ -2084,12 +2084,24 @@
BLI_unlock_thread(LOCK_IMAGE);
}
+ else {
+ /* fallback from tiles to rect if no tiles requested, we keep
+ tiles in memory because they may be in use by render thread */
+ if(ibuf->tiles && !(iuser && (iuser->flag & IMA_TILECACHE))) {
+ BLI_lock_thread(LOCK_IMAGE);
+ IMB_tiles_to_rect(ibuf);
+ BLI_unlock_thread(LOCK_IMAGE);
+ }
+ }
- /* XXX temp code until tiles are used for cache, forces
- full image rect to be loaded into memory */
- if((!iuser || !(iuser->flag & IMA_USECACHE)) && ibuf && (ibuf->flags & IB_usecache)) {
- IMB_getmipmaplevel(ibuf, 0);
- ibuf->flags &= ~IB_usecache;
+ /* create mipmap levels if requested */
+ if(ibuf) {
+ if(!ibuf->mipmap[0] && (iuser && (iuser->flag & IMA_MIPMAP))) {
+ BLI_lock_thread(LOCK_IMAGE);
+ if(ibuf->mipmap[0] == NULL)
+ IMB_makemipmap(ibuf, iuser->flag & IMA_GAUSS_MIP);
+ BLI_unlock_thread(LOCK_IMAGE);
+ }
}
/* we assuming that if it is not rendering, it's also not multithreaded
Modified: branches/render25/source/blender/blenkernel/intern/texture.c
===================================================================
--- branches/render25/source/blender/blenkernel/intern/texture.c 2010-04-23 18:03:06 UTC (rev 28389)
+++ branches/render25/source/blender/blenkernel/intern/texture.c 2010-04-23 18:04:16 UTC (rev 28390)
@@ -505,7 +505,7 @@
tex->iuser.fie_ima= 2;
tex->iuser.ok= 1;
tex->iuser.frames= 100;
- tex->iuser.flag |= IMA_USECACHE;
+ tex->iuser.flag |= IMA_TILECACHE;
tex->preview = NULL;
}
Modified: branches/render25/source/blender/blenlib/BLI_storage.h
===================================================================
--- branches/render25/source/blender/blenlib/BLI_storage.h 2010-04-23 18:03:06 UTC (rev 28389)
+++ branches/render25/source/blender/blenlib/BLI_storage.h 2010-04-23 18:04:16 UTC (rev 28390)
@@ -76,8 +76,8 @@
*/
void BLI_free_file_lines(struct LinkNode *lines);
- /* Compare which of two files was last modified */
-int BLI_file_newer(const char *file1, const char *file2);
+ /* Compare if one was last modified before the other */
+int BLI_file_older(const char *file1, const char *file2);
#endif /* BLI_STORAGE_H */
Modified: branches/render25/source/blender/blenlib/intern/storage.c
===================================================================
--- branches/render25/source/blender/blenlib/intern/storage.c 2010-04-23 18:03:06 UTC (rev 28389)
+++ branches/render25/source/blender/blenlib/intern/storage.c 2010-04-23 18:04:16 UTC (rev 28390)
@@ -501,13 +501,13 @@
BLI_linklist_free(lines, (void(*)(void*)) MEM_freeN);
}
-int BLI_file_newer(const char *file1, const char *file2)
+int BLI_file_older(const char *file1, const char *file2)
{
struct stat st1, st2;
if(stat(file1, &st1)) return 0;
if(stat(file2, &st2)) return 0;
- return (st1.st_mtime > st2.st_mtime);
+ return (st1.st_mtime < st2.st_mtime);
}
Modified: branches/render25/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/render25/source/blender/blenloader/intern/readfile.c 2010-04-23 18:03:06 UTC (rev 28389)
+++ branches/render25/source/blender/blenloader/intern/readfile.c 2010-04-23 18:04:16 UTC (rev 28390)
@@ -6529,7 +6529,7 @@
Tex *tex;
for(tex= main->tex.first; tex; tex=tex->id.next)
- tex->iuser.flag |= IMA_USECACHE;
+ tex->iuser.flag |= IMA_TILECACHE;
}
static void do_version_sss_scale_250(FileData *fd, Library *lib, Main *main)
Modified: branches/render25/source/blender/blenloader/intern/writefile.c
===================================================================
--- branches/render25/source/blender/blenloader/intern/writefile.c 2010-04-23 18:03:06 UTC (rev 28389)
+++ branches/render25/source/blender/blenloader/intern/writefile.c 2010-04-23 18:04:16 UTC (rev 28390)
@@ -1233,6 +1233,8 @@
writedata(wd, DATA, sizeof(float)*mmd->totvert*mmd->totcagevert,
mmd->bindweights);
+ writestruct(wd, DATA, "MDefInfluence", mmd->totinfluence, mmd->bindinfluences);
+ writedata(wd, DATA, sizeof(int)*(mmd->totvert+1), mmd->bindoffsets);
writedata(wd, DATA, sizeof(float)*3*mmd->totcagevert,
mmd->bindcagecos);
writestruct(wd, DATA, "MDefCell", size*size*size, mmd->dyngrid);
Modified: branches/render25/source/blender/editors/interface/interface_draw.c
===================================================================
--- branches/render25/source/blender/editors/interface/interface_draw.c 2010-04-23 18:03:06 UTC (rev 28389)
+++ branches/render25/source/blender/editors/interface/interface_draw.c 2010-04-23 18:04:16 UTC (rev 28390)
@@ -469,7 +469,7 @@
//int w, h;
/* hardcoded to splash, loading and freeing every draw, eek! */
- ibuf= IMB_ibImageFromMemory((int *)datatoc_splash_png, datatoc_splash_png_size, IB_rect);
+ ibuf= IMB_ibImageFromMemory((unsigned char*)datatoc_splash_png, datatoc_splash_png_size, IB_rect);
if (!ibuf) return;
Modified: branches/render25/source/blender/editors/interface/interface_icons.c
===================================================================
--- branches/render25/source/blender/editors/interface/interface_icons.c 2010-04-23 18:03:06 UTC (rev 28389)
+++ branches/render25/source/blender/editors/interface/interface_icons.c 2010-04-23 18:04:16 UTC (rev 28390)
@@ -480,7 +480,7 @@
}
}
if(bbuf==NULL)
- bbuf = IMB_ibImageFromMemory((int *)datatoc_blenderbuttons, datatoc_blenderbuttons_size, IB_rect);
+ bbuf = IMB_ibImageFromMemory((unsigned char*)datatoc_blenderbuttons, datatoc_blenderbuttons_size, IB_rect);
if(bbuf) {
/* free existing texture if any */
Modified: branches/render25/source/blender/editors/space_file/filelist.c
===================================================================
--- branches/render25/source/blender/editors/space_file/filelist.c 2010-04-23 18:03:06 UTC (rev 28389)
+++ branches/render25/source/blender/editors/space_file/filelist.c 2010-04-23 18:04:16 UTC (rev 28390)
@@ -375,7 +375,7 @@
short x, y, k;
ImBuf *bbuf;
ImBuf *ibuf;
- bbuf = IMB_ibImageFromMemory((int *)datatoc_prvicons, datatoc_prvicons_size, IB_rect);
+ bbuf = IMB_ibImageFromMemory((unsigned char*)datatoc_prvicons, datatoc_prvicons_size, IB_rect);
if (bbuf) {
for (y=0; y<SPECIAL_IMG_ROWS; y++) {
for (x=0; x<SPECIAL_IMG_COLS; x++) {
Modified: branches/render25/source/blender/imbuf/IMB_imbuf.h
===================================================================
--- branches/render25/source/blender/imbuf/IMB_imbuf.h 2010-04-23 18:03:06 UTC (rev 28389)
+++ branches/render25/source/blender/imbuf/IMB_imbuf.h 2010-04-23 18:04:16 UTC (rev 28390)
@@ -93,7 +93,7 @@
*
* @attention Defined in readimage.c
*/
-struct ImBuf *IMB_ibImageFromMemory(int *mem, int size, int flags);
+struct ImBuf *IMB_ibImageFromMemory(unsigned char *mem, int size, int flags);
/**
*
@@ -111,7 +111,7 @@
*
* @attention Defined in allocimbuf.c
*/
-void IMB_freeImBuf(struct ImBuf * ibuf);
+void IMB_freeImBuf(struct ImBuf *ibuf);
/**
*
@@ -130,18 +130,18 @@
* @attention Defined in allocimbuf.c
*/
-void IMB_refImBuf(struct ImBuf * ibuf);
+void IMB_refImBuf(struct ImBuf *ibuf);
/**
*
* @attention Defined in allocimbuf.c
*/
-void IMB_cache_limiter_insert(struct ImBuf * i);
-void IMB_cache_limiter_unmanage(struct ImBuf * i);
-void IMB_cache_limiter_touch(struct ImBuf * i);
-void IMB_cache_limiter_ref(struct ImBuf * i);
-void IMB_cache_limiter_unref(struct ImBuf * i);
-int IMB_cache_limiter_get_refcount(struct ImBuf * i);
+void IMB_cache_limiter_insert(struct ImBuf *i);
+void IMB_cache_limiter_unmanage(struct ImBuf *i);
+void IMB_cache_limiter_touch(struct ImBuf *i);
+void IMB_cache_limiter_ref(struct ImBuf *i);
+void IMB_cache_limiter_unref(struct ImBuf *i);
+int IMB_cache_limiter_get_refcount(struct ImBuf *i);
void IMB_free_cache_limiter(void);
@@ -155,8 +155,8 @@
*
* @attention Defined in allocimbuf.c
*/
-short addzbufImBuf(struct ImBuf * ibuf);
-short addzbuffloatImBuf(struct ImBuf * ibuf);
+short addzbufImBuf(struct ImBuf *ibuf);
+short addzbuffloatImBuf(struct ImBuf *ibuf);
/**
*
@@ -199,8 +199,8 @@
*
* @attention Defined in anim.c
*/
-struct anim * IMB_open_anim(const char * name, int ib_flags);
-void IMB_close_anim(struct anim * anim);
+struct anim *IMB_open_anim(const char *name, int ib_flags);
+void IMB_close_anim(struct anim *anim);
/**
*
@@ -208,34 +208,34 @@
*/
int ismovie(char *name);
-void IMB_anim_set_preseek(struct anim * anim, int preseek);
-int IMB_anim_get_preseek(struct anim * anim);
+void IMB_anim_set_preseek(struct anim *anim, int preseek);
+int IMB_anim_get_preseek(struct anim *anim);
/**
*
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list