From f691ee06275652419e822d5a269c63cfa169a837 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Mon, 4 Mar 2013 12:40:24 +0000 Subject: Fix #34501: Painting on image editor with texture brush causes memory leaks in render module Issue was caused by svn rev54721 where donequeue wasn't fully handled in cases rendering was canceled, which lead to some render results unfreed. --- source/blender/render/intern/source/pipeline.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'source/blender/render') diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c index 8c394b00730..05baa667f9b 100644 --- a/source/blender/render/intern/source/pipeline.c +++ b/source/blender/render/intern/source/pipeline.c @@ -967,7 +967,20 @@ static void threaded_tile_processor(Render *re) if ((g_break=re->test_break(re->tbh))) break; } - + + if (g_break) { + /* review the done queue and handle all the render parts, + * so no unfreed render result are lurking around + */ + BLI_thread_queue_nowait(donequeue); + while ((pa = BLI_thread_queue_pop(donequeue))) { + if (pa->result) { + render_result_free_list(&pa->fullresult, pa->result); + pa->result = NULL; + } + } + } + BLI_thread_queue_free(donequeue); BLI_thread_queue_free(workqueue); -- cgit v1.2.3 From 42ca1c8dcd8d148124b9d5fcf262887cac9909c1 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Mon, 4 Mar 2013 13:18:14 +0000 Subject: Fix for image transparency backwards compatibility. Now the texture datablock has a Use Alpha option again. This makes the case where you enabled Premultiply on the image and disabled Use Alpha on the texture work again. That's mostly useful when you have a straight alpha image file which has no useful RGB colors in zero alpha regions (e.g. renders). Then sometimes you don't want to use the alpha for the texture stack mixing, but you still want to multiply it into the RGB channels to avoid a blocky transition into zero alpha regions. This also removes the version patch that copied image datablocks because it's not reliable and might be causing bug #34434. This does mean we are no longer backwards compatible for cases where two different texture datablocks with Use Alpha enabled and disabled where using the same image. --- source/blender/render/intern/source/imagetexture.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'source/blender/render') diff --git a/source/blender/render/intern/source/imagetexture.c b/source/blender/render/intern/source/imagetexture.c index 12286fc9999..60f554675ee 100644 --- a/source/blender/render/intern/source/imagetexture.c +++ b/source/blender/render/intern/source/imagetexture.c @@ -224,7 +224,7 @@ int imagewrap(Tex *tex, Image *ima, ImBuf *ibuf, const float texvec[3], TexResul } /* keep this before interpolation [#29761] */ - if (tex->ima && (tex->ima->flag & IMA_IGNORE_ALPHA) == 0) { + if ((tex->imaflag & TEX_USEALPHA) && tex->ima && (tex->ima->flag & IMA_IGNORE_ALPHA) == 0) { if ((tex->imaflag & TEX_CALCALPHA) == 0) { texres->talpha = TRUE; } @@ -1098,7 +1098,7 @@ static int imagewraposa_aniso(Tex *tex, Image *ima, ImBuf *ibuf, const float tex /* mipmap test */ image_mipmap_test(tex, ibuf); - if (tex->ima && (tex->ima->flag & IMA_IGNORE_ALPHA) == 0) { + if ((tex->imaflag & TEX_USEALPHA) && tex->ima && (tex->ima->flag & IMA_IGNORE_ALPHA) == 0) { if ((tex->imaflag & TEX_CALCALPHA) == 0) texres->talpha = 1; } @@ -1514,7 +1514,7 @@ int imagewraposa(Tex *tex, Image *ima, ImBuf *ibuf, const float texvec[3], const /* mipmap test */ image_mipmap_test(tex, ibuf); - if (tex->ima && (tex->ima->flag & IMA_IGNORE_ALPHA) == 0) { + if ((tex->imaflag & TEX_USEALPHA) && tex->ima && (tex->ima->flag & IMA_IGNORE_ALPHA) == 0) { if ((tex->imaflag & TEX_CALCALPHA) == 0) { texres->talpha = TRUE; } -- cgit v1.2.3 From f44b54d2a7866033025bd4e99992a72e3a27c428 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 5 Mar 2013 03:17:46 +0000 Subject: patch [#34103] from Lawrence D'Oliveiro (ldo) More use of bool type, necessitating adding inclusion of BLI_utildefines.h, or moving it up in the inclusion order if it was already included, in various places - storage.c: make some variables only used in bli_builddir local to that - storage.c: BLI_file_descriptor_size should allow 0 as a valid file descriptor - path_util.c: make pointers to non-reentrant storage returned from folder routines const, necessitating making variables holding these returned pointers const elsewhere as well - path_util.c: BLI_string_to_utf8 closes iconv context in case of conversion error - blf_lang.c: fill_locales routine now has its own "languages" local variable to construct paths (was stealing internal storage belonging to BLI_get_folder before) --- source/blender/render/intern/source/render_result.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source/blender/render') diff --git a/source/blender/render/intern/source/render_result.c b/source/blender/render/intern/source/render_result.c index c779b01afaa..ec926c3b649 100644 --- a/source/blender/render/intern/source/render_result.c +++ b/source/blender/render/intern/source/render_result.c @@ -35,13 +35,13 @@ #include "MEM_guardedalloc.h" +#include "BLI_utildefines.h" #include "BLI_fileops.h" #include "BLI_listbase.h" #include "BLI_path_util.h" #include "BLI_rect.h" #include "BLI_string.h" #include "BLI_threads.h" -#include "BLI_utildefines.h" #include "BKE_image.h" #include "BKE_global.h" -- cgit v1.2.3 From e39f05e5faa63027026e0ec4cd8c085113d01596 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 5 Mar 2013 03:53:22 +0000 Subject: patch [#34103] fileops_1.patch from Lawrence D'Oliveiro (ldo) Add comments and use of bool type in fileops.c --- source/blender/render/intern/source/pipeline.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'source/blender/render') diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c index 05baa667f9b..0efc967621d 100644 --- a/source/blender/render/intern/source/pipeline.c +++ b/source/blender/render/intern/source/pipeline.c @@ -2012,7 +2012,7 @@ int RE_is_rendering_allowed(Scene *scene, Object *camera_override, ReportList *r render_result_exr_file_path(scene, "", 0, str); - if (BLI_file_is_writable(str) == 0) { + if (!BLI_file_is_writable(str)) { BKE_report(reports, RPT_ERROR, "Cannot save render buffers, check the temp default path"); return 0; } @@ -2442,7 +2442,7 @@ void RE_BlenderAnim(Render *re, Main *bmain, Scene *scene, Object *camera_overri /* remove touched file */ if (BKE_imtype_is_movie(scene->r.im_format.imtype) == 0) { if (scene->r.mode & R_TOUCH && BLI_exists(name) && BLI_file_size(name) == 0) { - BLI_delete(name, 0, 0); + BLI_delete(name, false, false); } } -- cgit v1.2.3 From 384948908afd5567d6c730a8045a368e8c08e436 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 5 Mar 2013 06:26:10 +0000 Subject: patch [#34103] path_util_split_dirstring.patch, path_util_split_dirstring_2.patch, path_util_split_dirstring_3.patch from Lawrence D'Oliveiro (ldo) Get rid of BLI_splitdirstring, replace with calls to BLI_split_dirfile, BLI_split_dir_part and BLI_split_file_part as appropriate. --- source/blender/render/intern/source/render_result.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) (limited to 'source/blender/render') diff --git a/source/blender/render/intern/source/render_result.c b/source/blender/render/intern/source/render_result.c index ec926c3b649..ab0f16c8c2a 100644 --- a/source/blender/render/intern/source/render_result.c +++ b/source/blender/render/intern/source/render_result.c @@ -983,11 +983,9 @@ void render_result_exr_file_merge(RenderResult *rr, RenderResult *rrpart) /* path to temporary exr file */ void render_result_exr_file_path(Scene *scene, const char *layname, int sample, char *filepath) { - char di[FILE_MAX], name[FILE_MAXFILE + MAX_ID_NAME + MAX_ID_NAME + 100], fi[FILE_MAXFILE]; - - BLI_strncpy(di, G.main->name, FILE_MAX); - BLI_splitdirstring(di, fi); + char name[FILE_MAXFILE + MAX_ID_NAME + MAX_ID_NAME + 100], fi[FILE_MAXFILE]; + BLI_split_file_part(G.main->name, fi, sizeof(fi)); if (sample == 0) BLI_snprintf(name, sizeof(name), "%s_%s_%s.exr", fi, scene->id.name + 2, layname); else -- cgit v1.2.3 From f2bb536994baecb442942306d959666cad66bf61 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 5 Mar 2013 14:47:49 +0000 Subject: code cleanup: also change BKE_blender.h BLENDER_VERSION_CHAR to 'a' so as not to confuse things. --- source/blender/render/intern/source/bake.c | 2 +- source/blender/render/intern/source/convertblender.c | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) (limited to 'source/blender/render') diff --git a/source/blender/render/intern/source/bake.c b/source/blender/render/intern/source/bake.c index 7c5d6038e0a..c20b0c6da16 100644 --- a/source/blender/render/intern/source/bake.c +++ b/source/blender/render/intern/source/bake.c @@ -622,7 +622,7 @@ static int get_next_bake_face(BakeShade *bs) continue; if (*origindex >= me->totpoly) { /* Small hack for Array modifier, which gives false - original indices - z0r */ + * original indices - z0r */ continue; } #if 0 diff --git a/source/blender/render/intern/source/convertblender.c b/source/blender/render/intern/source/convertblender.c index 00a4da2e9c4..9f37c3a8ff2 100644 --- a/source/blender/render/intern/source/convertblender.c +++ b/source/blender/render/intern/source/convertblender.c @@ -3484,9 +3484,9 @@ static void init_render_mesh(Render *re, ObjectRen *obr, int timeoffset) if (need_origindex) { /* Find original index of mpoly for this tessface. Options: - - Modified mesh; two-step look up from tessface -> modified mpoly -> original mpoly - - OR Tesselated mesh; look up from tessface -> mpoly - - OR Failsafe; tessface == mpoly. Could probably assert(false) in this case? */ + * - Modified mesh; two-step look up from tessface -> modified mpoly -> original mpoly + * - OR Tesselated mesh; look up from tessface -> mpoly + * - OR Failsafe; tessface == mpoly. Could probably assert(false) in this case? */ int *origindex; origindex = RE_vlakren_get_origindex(obr, vlr, 1); if (index_mf_to_mpoly && index_mp_to_orig) -- cgit v1.2.3 From 53b7bc8f1f7126600f431e63398a7678e643c8ae Mon Sep 17 00:00:00 2001 From: Antony Riakiotakis Date: Wed, 6 Mar 2013 20:55:04 +0000 Subject: Change !BLI_ghashIterator_isDone to BLI_ghashIterator_notDone. It is always used in that context so we can at least avoid reverting it twice :p. --- source/blender/render/intern/source/sss.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source/blender/render') diff --git a/source/blender/render/intern/source/sss.c b/source/blender/render/intern/source/sss.c index 6d0e15ea46e..b6ff547c93e 100644 --- a/source/blender/render/intern/source/sss.c +++ b/source/blender/render/intern/source/sss.c @@ -1016,7 +1016,7 @@ void free_sss(Render *re) if (re->sss_hash) { GHashIterator *it= BLI_ghashIterator_new(re->sss_hash); - while (!BLI_ghashIterator_isDone(it)) { + while (BLI_ghashIterator_notDone(it)) { sss_free_tree(BLI_ghashIterator_getValue(it)); BLI_ghashIterator_step(it); } -- cgit v1.2.3 From c36f20a7d2c3486f34ba73680881189c75cc3e7d Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 8 Mar 2013 04:00:06 +0000 Subject: style cleanup --- source/blender/render/intern/source/imagetexture.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'source/blender/render') diff --git a/source/blender/render/intern/source/imagetexture.c b/source/blender/render/intern/source/imagetexture.c index 60f554675ee..98162630878 100644 --- a/source/blender/render/intern/source/imagetexture.c +++ b/source/blender/render/intern/source/imagetexture.c @@ -829,7 +829,7 @@ static float EWA_WTS[EWA_MAXIDX + 1] = { #endif //static int ISNAN(float x) { return (x != x); } -static void radangle2imp(float a2, float b2, float th, float* A, float* B, float* C, float* F) +static void radangle2imp(float a2, float b2, float th, float *A, float *B, float *C, float *F) { float ct2 = cosf(th); const float st2 = 1.0f - ct2 * ct2; /* <- sin(th)^2 */ @@ -841,7 +841,7 @@ static void radangle2imp(float a2, float b2, float th, float* A, float* B, float } /* all tests here are done to make sure possible overflows are hopefully minimized */ -static void imp2radangle(float A, float B, float C, float F, float* a, float* b, float* th, float* ecc) +static void imp2radangle(float A, float B, float C, float F, float *a, float *b, float *th, float *ecc) { if (F <= 1e-5f) { /* use arbitrary major radius, zero minor, infinite eccentricity */ *a = sqrtf(A > C ? A : C); -- cgit v1.2.3 From 6fd187e4df1133b273ee2e5c1bbb3b8a9f31e73e Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 8 Mar 2013 06:32:00 +0000 Subject: code cleanup: 0 --> NULL --- source/blender/render/intern/raytrace/rayobject.cpp | 2 +- source/blender/render/intern/raytrace/rayobject_rtbuild.cpp | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) (limited to 'source/blender/render') diff --git a/source/blender/render/intern/raytrace/rayobject.cpp b/source/blender/render/intern/raytrace/rayobject.cpp index b31aff82777..9e639501fdd 100644 --- a/source/blender/render/intern/raytrace/rayobject.cpp +++ b/source/blender/render/intern/raytrace/rayobject.cpp @@ -87,7 +87,7 @@ MALWAYS_INLINE void rayface_from_vlak(RayFace *rayface, ObjectInstanceRen *obi, RayObject *RE_rayface_from_vlak(RayFace *rayface, ObjectInstanceRen *obi, VlakRen *vlr) { - return rayface_from_coords(rayface, obi, vlr, vlr->v1->co, vlr->v2->co, vlr->v3->co, vlr->v4 ? vlr->v4->co : 0); + return rayface_from_coords(rayface, obi, vlr, vlr->v1->co, vlr->v2->co, vlr->v3->co, vlr->v4 ? vlr->v4->co : NULL); } RayObject *RE_rayface_from_coords(RayFace *rayface, void *ob, void *face, float *v1, float *v2, float *v3, float *v4) diff --git a/source/blender/render/intern/raytrace/rayobject_rtbuild.cpp b/source/blender/render/intern/raytrace/rayobject_rtbuild.cpp index 4195b103811..1d67a8c4f44 100644 --- a/source/blender/render/intern/raytrace/rayobject_rtbuild.cpp +++ b/source/blender/render/intern/raytrace/rayobject_rtbuild.cpp @@ -50,15 +50,15 @@ static bool selected_node(RTBuilder::Object *node) static void rtbuild_init(RTBuilder *b) { b->split_axis = -1; - b->primitives.begin = 0; - b->primitives.end = 0; + b->primitives.begin = NULL; + b->primitives.end = NULL; b->primitives.maxsize = 0; for (int i = 0; i < RTBUILD_MAX_CHILDS; i++) b->child_offset[i] = 0; for (int i = 0; i < 3; i++) - b->sorted_begin[i] = b->sorted_end[i] = 0; + b->sorted_begin[i] = b->sorted_end[i] = NULL; INIT_MINMAX(b->bb, b->bb + 3); } @@ -178,8 +178,8 @@ RTBuilder *rtbuild_get_child(RTBuilder *b, int child, RTBuilder *tmp) tmp->sorted_end[i] = b->sorted_begin[i] + b->child_offset[child + 1]; } else { - tmp->sorted_begin[i] = 0; - tmp->sorted_end[i] = 0; + tmp->sorted_begin[i] = NULL; + tmp->sorted_end[i] = NULL; } return tmp; -- cgit v1.2.3 From ddddb7bab173b040342ef99270ee71ae076d45e8 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 9 Mar 2013 03:46:30 +0000 Subject: code cleanup: favor braces when blocks have mixed brace use. --- source/blender/render/intern/source/imagetexture.c | 26 ++++++++++++++++------ 1 file changed, 19 insertions(+), 7 deletions(-) (limited to 'source/blender/render') diff --git a/source/blender/render/intern/source/imagetexture.c b/source/blender/render/intern/source/imagetexture.c index 98162630878..756fb098882 100644 --- a/source/blender/render/intern/source/imagetexture.c +++ b/source/blender/render/intern/source/imagetexture.c @@ -274,14 +274,18 @@ int imagewrap(Tex *tex, Image *ima, ImBuf *ibuf, const float texvec[3], TexResul ibuf_get_color(col, ibuf, x+1, y); val2= (col[0]+col[1]+col[2]); } - else val2= val1; + else { + val2= val1; + } if (yy-1) { float col[4]; ibuf_get_color(col, ibuf, x, y+1); - val3= (col[0]+col[1]+col[2]); + val3 = (col[0]+col[1]+col[2]); + } + else { + val3 = val1; } - else val3= val1; /* do not mix up x and y here! */ texres->nor[0]= (val1-val2); @@ -289,13 +293,19 @@ int imagewrap(Tex *tex, Image *ima, ImBuf *ibuf, const float texvec[3], TexResul } } - if (texres->talpha) texres->tin= texres->ta; + if (texres->talpha) { + texres->tin = texres->ta; + } else if (tex->imaflag & TEX_CALCALPHA) { texres->ta = texres->tin = max_fff(texres->tr, texres->tg, texres->tb); } - else texres->ta= texres->tin= 1.0; + else { + texres->ta = texres->tin = 1.0; + } - if (tex->flag & TEX_NEGALPHA) texres->ta= 1.0f-texres->ta; + if (tex->flag & TEX_NEGALPHA) { + texres->ta = 1.0f - texres->ta; + } /* de-premul, this is being premulled in shade_input_do_shade() */ if (texres->ta!=1.0f && texres->ta>1e-4f) { @@ -1838,7 +1848,9 @@ int imagewraposa(Tex *tex, Image *ima, ImBuf *ibuf, const float texvec[3], const if (tex->imaflag & TEX_CALCALPHA) { texres->ta = texres->tin = texres->ta * max_fff(texres->tr, texres->tg, texres->tb); } - else texres->tin= texres->ta; + else { + texres->tin = texres->ta; + } if (tex->flag & TEX_NEGALPHA) texres->ta= 1.0f-texres->ta; -- cgit v1.2.3 From 874b692e80181a7212c77e1d9c83b6e0b36be967 Mon Sep 17 00:00:00 2001 From: Bastien Montagne Date: Sun, 10 Mar 2013 16:55:01 +0000 Subject: More UI message i18n fixes and improvements... Rendering messages are now translatable. --- source/blender/render/CMakeLists.txt | 4 ++++ source/blender/render/SConscript | 3 +++ .../blender/render/intern/source/convertblender.c | 14 ++++++++------ source/blender/render/intern/source/envmap.c | 4 +++- source/blender/render/intern/source/occlusion.c | 4 +++- source/blender/render/intern/source/pipeline.c | 15 +++++++++------ source/blender/render/intern/source/pointdensity.c | 6 ++++-- source/blender/render/intern/source/rayshade.c | 10 ++++++---- source/blender/render/intern/source/sss.c | 4 +++- .../blender/render/intern/source/volume_precache.c | 22 +++++++++++++--------- source/blender/render/intern/source/voxeldata.c | 4 +++- 11 files changed, 59 insertions(+), 31 deletions(-) (limited to 'source/blender/render') diff --git a/source/blender/render/CMakeLists.txt b/source/blender/render/CMakeLists.txt index 59debbdc41b..106a2e0f511 100644 --- a/source/blender/render/CMakeLists.txt +++ b/source/blender/render/CMakeLists.txt @@ -158,6 +158,10 @@ if(WITH_GAMEENGINE) add_definitions(-DWITH_GAMEENGINE) endif() +if(WITH_INTERNATIONAL) + add_definitions(-DWITH_INTERNATIONAL) +endif() + if(APPLE) # SSE math is enabled by default on x86_64 if(CMAKE_OSX_ARCHITECTURES MATCHES "i386") diff --git a/source/blender/render/SConscript b/source/blender/render/SConscript index 992dd8c8262..a142f87a05a 100644 --- a/source/blender/render/SConscript +++ b/source/blender/render/SConscript @@ -86,6 +86,9 @@ if env['WITH_BF_OPENEXR']: if env['WITH_BF_GAMEENGINE']: defs.append('WITH_GAMEENGINE') +if env['WITH_BF_INTERNATIONAL']: + defs.append('WITH_INTERNATIONAL') + if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross', 'win64-vc', 'win64-mingw'): incs += ' ' + env['BF_PTHREADS_INC'] diff --git a/source/blender/render/intern/source/convertblender.c b/source/blender/render/intern/source/convertblender.c index 9f37c3a8ff2..5b3471b571c 100644 --- a/source/blender/render/intern/source/convertblender.c +++ b/source/blender/render/intern/source/convertblender.c @@ -43,6 +43,8 @@ #include "BLI_ghash.h" #include "BLI_linklist.h" +#include "BLF_translation.h" + #include "DNA_armature_types.h" #include "DNA_camera_types.h" #include "DNA_material_types.h" @@ -5119,7 +5121,7 @@ void RE_Database_FromScene(Render *re, Main *bmain, Scene *scene, unsigned int l tothalo= re->tothalo; if (!re->test_break(re->tbh)) { if (re->wrld.mode & WO_STARS) { - re->i.infostr= "Creating Starfield"; + re->i.infostr = IFACE_("Creating Starfield"); re->stats_draw(re->sdh, &re->i); RE_make_stars(re, NULL, NULL, NULL, NULL); } @@ -5128,7 +5130,7 @@ void RE_Database_FromScene(Render *re, Main *bmain, Scene *scene, unsigned int l init_camera_inside_volumes(re); - re->i.infostr= "Creating Shadowbuffers"; + re->i.infostr = IFACE_("Creating Shadowbuffers"); re->stats_draw(re->sdh, &re->i); /* SHADOW BUFFER */ @@ -5178,7 +5180,7 @@ void RE_Database_FromScene(Render *re, Main *bmain, Scene *scene, unsigned int l else re->i.convertdone = TRUE; - re->i.infostr= NULL; + re->i.infostr = NULL; re->stats_draw(re->sdh, &re->i); } @@ -5591,7 +5593,7 @@ void RE_Database_FromScene_Vectors(Render *re, Main *bmain, Scene *sce, unsigned ListBase strandsurface; int step; - re->i.infostr= "Calculating previous frame vectors"; + re->i.infostr = IFACE_("Calculating previous frame vectors"); re->r.mode |= R_SPEED; speedvector_project(re, NULL, NULL, NULL); /* initializes projection code */ @@ -5610,7 +5612,7 @@ void RE_Database_FromScene_Vectors(Render *re, Main *bmain, Scene *sce, unsigned if (!re->test_break(re->tbh)) { /* creates entire dbase */ - re->i.infostr= "Calculating next frame vectors"; + re->i.infostr = IFACE_("Calculating next frame vectors"); database_fromscene_vectors(re, sce, lay, +1); } @@ -5696,7 +5698,7 @@ void RE_Database_FromScene_Vectors(Render *re, Main *bmain, Scene *sce, unsigned } } - re->i.infostr= NULL; + re->i.infostr = NULL; re->stats_draw(re->sdh, &re->i); } diff --git a/source/blender/render/intern/source/envmap.c b/source/blender/render/intern/source/envmap.c index 9adae6f49ba..c5872c52e0f 100644 --- a/source/blender/render/intern/source/envmap.c +++ b/source/blender/render/intern/source/envmap.c @@ -38,6 +38,8 @@ #include "BLI_threads.h" #include "BLI_utildefines.h" +#include "BLF_translation.h" + #include "IMB_imbuf_types.h" #include "IMB_imbuf.h" /* for rectcpy */ @@ -512,7 +514,7 @@ void make_envmaps(Render *re) trace = (re->r.mode & R_RAYTRACE); re->r.mode &= ~R_RAYTRACE; - re->i.infostr = "Creating Environment maps"; + re->i.infostr = IFACE_("Creating Environment maps"); re->stats_draw(re->sdh, &re->i); /* 5 = hardcoded max recursion level */ diff --git a/source/blender/render/intern/source/occlusion.c b/source/blender/render/intern/source/occlusion.c index 1c594ef7db2..50f9d6caff6 100644 --- a/source/blender/render/intern/source/occlusion.c +++ b/source/blender/render/intern/source/occlusion.c @@ -44,6 +44,8 @@ #include "BLI_threads.h" #include "BLI_utildefines.h" +#include "BLF_translation.h" + #include "BKE_global.h" #include "BKE_scene.h" @@ -1257,7 +1259,7 @@ void make_occ_tree(Render *re) /* ugly, needed for occ_face */ R = *re; - re->i.infostr = "Occlusion preprocessing"; + re->i.infostr = IFACE_("Occlusion preprocessing"); re->stats_draw(re->sdh, &re->i); re->occlusiontree = tree = occ_tree_build(re); diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c index 0efc967621d..6cf9b8a0bbc 100644 --- a/source/blender/render/intern/source/pipeline.c +++ b/source/blender/render/intern/source/pipeline.c @@ -55,6 +55,8 @@ #include "BLI_rand.h" #include "BLI_callbacks.h" +#include "BLF_translation.h" + #include "BKE_animsys.h" /* <------ should this be here?, needed for sequencer update */ #include "BKE_camera.h" #include "BKE_global.h" @@ -155,22 +157,23 @@ static void stats_background(void *UNUSED(arg), RenderStats *rs) mmap_used_memory = (mmap_in_use) / (1024.0 * 1024.0); megs_peak_memory = (peak_memory) / (1024.0 * 1024.0); - fprintf(stdout, "Fra:%d Mem:%.2fM (%.2fM, peak %.2fM) ", rs->cfra, + fprintf(stdout, IFACE_("Fra:%d Mem:%.2fM (%.2fM, Peak %.2fM) "), rs->cfra, megs_used_memory, mmap_used_memory, megs_peak_memory); if (rs->curfield) - fprintf(stdout, "Field %d ", rs->curfield); + fprintf(stdout, IFACE_("Field %d "), rs->curfield); if (rs->curblur) - fprintf(stdout, "Blur %d ", rs->curblur); + fprintf(stdout, IFACE_("Blur %d "), rs->curblur); if (rs->infostr) { fprintf(stdout, "| %s", rs->infostr); } else { if (rs->tothalo) - fprintf(stdout, "Sce: %s Ve:%d Fa:%d Ha:%d La:%d", rs->scene_name, rs->totvert, rs->totface, rs->tothalo, rs->totlamp); + fprintf(stdout, IFACE_("Sce: %s Ve:%d Fa:%d Ha:%d La:%d"), + rs->scene_name, rs->totvert, rs->totface, rs->tothalo, rs->totlamp); else - fprintf(stdout, "Sce: %s Ve:%d Fa:%d La:%d", rs->scene_name, rs->totvert, rs->totface, rs->totlamp); + fprintf(stdout, IFACE_("Sce: %s Ve:%d Fa:%d La:%d"), rs->scene_name, rs->totvert, rs->totface, rs->totlamp); } BLI_callback_exec(G.main, NULL, BLI_CB_EVT_RENDER_STATS); @@ -821,7 +824,7 @@ static void print_part_stats(Render *re, RenderPart *pa) { char str[64]; - BLI_snprintf(str, sizeof(str), "%s, Part %d-%d", re->scene->id.name + 2, pa->nr, re->i.totpart); + BLI_snprintf(str, sizeof(str), IFACE_("%s, Part %d-%d"), re->scene->id.name + 2, pa->nr, re->i.totpart); re->i.infostr = str; re->stats_draw(re->sdh, &re->i); re->i.infostr = NULL; diff --git a/source/blender/render/intern/source/pointdensity.c b/source/blender/render/intern/source/pointdensity.c index 3ca4015ff7b..d740780ec30 100644 --- a/source/blender/render/intern/source/pointdensity.c +++ b/source/blender/render/intern/source/pointdensity.c @@ -40,6 +40,8 @@ #include "BLI_kdopbvh.h" #include "BLI_utildefines.h" +#include "BLF_translation.h" + #include "BKE_DerivedMesh.h" #include "BKE_global.h" #include "BKE_lattice.h" @@ -299,7 +301,7 @@ void make_pointdensities(Render *re) if (re->scene->r.scemode & R_PREVIEWBUTS) return; - re->i.infostr= "Caching Point Densities"; + re->i.infostr = IFACE_("Caching Point Densities"); re->stats_draw(re->sdh, &re->i); for (tex= re->main->tex.first; tex; tex= tex->id.next) { @@ -308,7 +310,7 @@ void make_pointdensities(Render *re) } } - re->i.infostr= NULL; + re->i.infostr = NULL; re->stats_draw(re->sdh, &re->i); } diff --git a/source/blender/render/intern/source/rayshade.c b/source/blender/render/intern/source/rayshade.c index fe23f31c6d7..88c0719fa59 100644 --- a/source/blender/render/intern/source/rayshade.c +++ b/source/blender/render/intern/source/rayshade.c @@ -47,6 +47,8 @@ #include "BLI_rand.h" #include "BLI_utildefines.h" +#include "BLF_translation.h" + #include "BKE_global.h" #include "BKE_node.h" @@ -400,7 +402,7 @@ static void makeraytree_single(Render *re) } if (!test_break(re)) { - re->i.infostr= "Raytree.. building"; + re->i.infostr = IFACE_("Raytree.. building"); re->stats_draw(re->sdh, &re->i); RE_rayobject_done(raytree); @@ -412,7 +414,7 @@ void makeraytree(Render *re) float min[3], max[3], sub[3]; int i; - re->i.infostr= "Raytree.. preparing"; + re->i.infostr = IFACE_("Raytree.. preparing"); re->stats_draw(re->sdh, &re->i); /* disable options not yet supported by octree, @@ -425,7 +427,7 @@ void makeraytree(Render *re) if (test_break(re)) { freeraytree(re); - re->i.infostr= "Raytree building canceled"; + re->i.infostr = IFACE_("Raytree building canceled"); re->stats_draw(re->sdh, &re->i); } else { @@ -446,7 +448,7 @@ void makeraytree(Render *re) re->maxdist = len_v3(sub); - re->i.infostr= "Raytree finished"; + re->i.infostr = IFACE_("Raytree finished"); re->stats_draw(re->sdh, &re->i); } diff --git a/source/blender/render/intern/source/sss.c b/source/blender/render/intern/source/sss.c index b6ff547c93e..9d6391ccb59 100644 --- a/source/blender/render/intern/source/sss.c +++ b/source/blender/render/intern/source/sss.c @@ -55,6 +55,8 @@ #include "BLI_ghash.h" #include "BLI_memarena.h" +#include "BLF_translation.h" + #include "PIL_time.h" #include "DNA_material_types.h" @@ -994,7 +996,7 @@ void make_sss_tree(Render *re) re->sss_hash= BLI_ghash_ptr_new("make_sss_tree gh"); - re->i.infostr= "SSS preprocessing"; + re->i.infostr = IFACE_("SSS preprocessing"); re->stats_draw(re->sdh, &re->i); for (mat= re->main->mat.first; mat; mat= mat->id.next) diff --git a/source/blender/render/intern/source/volume_precache.c b/source/blender/render/intern/source/volume_precache.c index a9db197ed48..028217b8609 100644 --- a/source/blender/render/intern/source/volume_precache.c +++ b/source/blender/render/intern/source/volume_precache.c @@ -43,6 +43,8 @@ #include "BLI_voxel.h" #include "BLI_utildefines.h" +#include "BLF_translation.h" + #include "PIL_time.h" #include "RE_shader_ext.h" @@ -400,10 +402,11 @@ static void multiple_scattering_diffusion(Render *re, VolumePrecache *vp, Materi /* Displays progress every second */ if (time-lasttime>1.0) { char str[64]; - BLI_snprintf(str, sizeof(str), "Simulating multiple scattering: %d%%", (int)(100.0f * (c / total))); - re->i.infostr= str; + BLI_snprintf(str, sizeof(str), IFACE_("Simulating multiple scattering: %d%%"), + (int)(100.0f * (c / total))); + re->i.infostr = str; re->stats_draw(re->sdh, &re->i); - re->i.infostr= NULL; + re->i.infostr = NULL; lasttime= time; } } @@ -742,11 +745,12 @@ static void vol_precache_objectinstance_threads(Render *re, ObjectInstanceRen *o time= PIL_check_seconds_timer(); if (time-lasttime>1.0) { char str[64]; - BLI_snprintf(str, sizeof(str), "Precaching volume: %d%%", (int)(100.0f * ((float)counter / (float)totparts))); - re->i.infostr= str; + BLI_snprintf(str, sizeof(str), IFACE_("Precaching volume: %d%%"), + (int)(100.0f * ((float)counter / (float)totparts))); + re->i.infostr = str; re->stats_draw(re->sdh, &re->i); - re->i.infostr= NULL; - lasttime= time; + re->i.infostr = NULL; + lasttime = time; } } @@ -784,7 +788,7 @@ void volume_precache(Render *re) ObjectInstanceRen *obi; VolumeOb *vo; - re->i.infostr= "Volume preprocessing"; + re->i.infostr = IFACE_("Volume preprocessing"); re->stats_draw(re->sdh, &re->i); for (vo= re->volumes.first; vo; vo= vo->next) { @@ -803,7 +807,7 @@ void volume_precache(Render *re) } } - re->i.infostr= NULL; + re->i.infostr = NULL; re->stats_draw(re->sdh, &re->i); } diff --git a/source/blender/render/intern/source/voxeldata.c b/source/blender/render/intern/source/voxeldata.c index 92099060bf5..993752617d3 100644 --- a/source/blender/render/intern/source/voxeldata.c +++ b/source/blender/render/intern/source/voxeldata.c @@ -41,6 +41,8 @@ #include "BLI_voxel.h" #include "BLI_utildefines.h" +#include "BLF_translation.h" + #include "IMB_imbuf.h" #include "IMB_imbuf_types.h" @@ -400,7 +402,7 @@ void make_voxeldata(struct Render *re) { Tex *tex; - re->i.infostr = "Loading voxel datasets"; + re->i.infostr = IFACE_("Loading voxel datasets"); re->stats_draw(re->sdh, &re->i); /* XXX: should be doing only textures used in this render */ -- cgit v1.2.3 From 385650974a3f38cfcebdcbfb71bac24b021e850d Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Wed, 13 Mar 2013 17:30:31 +0000 Subject: Fix for build error with previous commit, seems the order of #includes matters here. --- source/blender/render/intern/source/voxeldata.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'source/blender/render') diff --git a/source/blender/render/intern/source/voxeldata.c b/source/blender/render/intern/source/voxeldata.c index 993752617d3..9990ad7e900 100644 --- a/source/blender/render/intern/source/voxeldata.c +++ b/source/blender/render/intern/source/voxeldata.c @@ -34,6 +34,10 @@ #include #include +#ifdef WIN32 +#include "BLI_winstuff.h" +#endif + #include "MEM_guardedalloc.h" #include "BLI_math.h" -- cgit v1.2.3 From 9d896f8f84c69de009b70a31167d4b5327aac8d2 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Thu, 14 Mar 2013 07:38:37 +0000 Subject: Border rendering now works for all scenes used in compositor, before this only active scene would be rendered with border. When do_render_fields_blur_3d() is finished, it'll modify render's display rect so it'll correspond bordered render result placed on black backgrund. Actual border is stored nowhere, which makes it only way to re-calculate disprect for all other renders used in compo based on source. Not so big deal actually. Also needed to modify Cycles a bit, because before this patch it used border settings from scene being rendered. Now made it so render data is passing to external engines. Using a property inside RenderEngine structure for this. Not best ever design for passing render data, but this would prevent API breakage. So now external engines could access engine.render to access active rendering settings. Reviewed by Brecht, thanks! --- source/blender/render/extern/include/RE_engine.h | 3 ++ .../blender/render/intern/source/external_engine.c | 5 +++ source/blender/render/intern/source/pipeline.c | 38 +++++++++++++++++++--- 3 files changed, 42 insertions(+), 4 deletions(-) (limited to 'source/blender/render') diff --git a/source/blender/render/extern/include/RE_engine.h b/source/blender/render/extern/include/RE_engine.h index b687acae1f7..5df860750fc 100644 --- a/source/blender/render/extern/include/RE_engine.h +++ b/source/blender/render/extern/include/RE_engine.h @@ -33,12 +33,14 @@ #define __RE_ENGINE_H__ #include "DNA_listBase.h" +#include "DNA_scene_types.h" #include "RNA_types.h" struct bNode; struct bNodeTree; struct Object; struct Render; +struct RenderData; struct RenderEngine; struct RenderEngineType; struct RenderLayer; @@ -134,6 +136,7 @@ void RE_engines_exit(void); RenderEngineType *RE_engines_find(const char *idname); void RE_engine_get_current_tiles(struct Render *re, int *total_tiles_r, rcti **tiles_r); +struct RenderData *RE_engine_get_render_data(struct Render *re); #endif /* __RE_ENGINE_H__ */ diff --git a/source/blender/render/intern/source/external_engine.c b/source/blender/render/intern/source/external_engine.c index 22a49bcbbc3..4a48b6cc5f4 100644 --- a/source/blender/render/intern/source/external_engine.c +++ b/source/blender/render/intern/source/external_engine.c @@ -385,6 +385,11 @@ void RE_engine_get_current_tiles(Render *re, int *total_tiles_r, rcti **tiles_r) *tiles_r = tiles; } +RenderData *RE_engine_get_render_data(Render *re) +{ + return &re->r; +} + /* Render */ int RE_engine_render(Render *re, int do_all) diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c index 6cf9b8a0bbc..3c4eb814d79 100644 --- a/source/blender/render/intern/source/pipeline.c +++ b/source/blender/render/intern/source/pipeline.c @@ -456,13 +456,43 @@ void RE_InitState(Render *re, Render *source, RenderData *rd, SceneRenderLayer * re->i.starttime = PIL_check_seconds_timer(); re->r = *rd; /* hardcopy */ - + + if (source) { + /* reuse border flags from source renderer */ + re->r.mode &= ~(R_BORDER | R_CROP); + re->r.mode |= source->r.mode & (R_BORDER | R_CROP); + + /* dimensions shall be shared between all renderers */ + re->r.xsch = source->r.xsch; + re->r.ysch = source->r.ysch; + re->r.size = source->r.size; + } + re->winx = winx; re->winy = winy; - if (disprect) { + if (source && (source->r.mode & R_BORDER)) { + /* eeh, doesn't seem original bordered disprect is storing anywhere + * after insertion on black happening in do_render_fields_blur_3d(), + * so for now simply re-calculate disprect using border from source + * renderer (sergey) + */ + + re->disprect.xmin = source->r.border.xmin * winx; + re->disprect.xmax = source->r.border.xmax * winx; + + re->disprect.ymin = source->r.border.ymin * winy; + re->disprect.ymax = source->r.border.ymax * winy; + + re->rectx = BLI_rcti_size_x(&re->disprect); + re->recty = BLI_rcti_size_y(&re->disprect); + + /* copy border itself, since it could be used by external engines */ + re->r.border = source->r.border; + } + else if (disprect) { re->disprect = *disprect; - re->rectx = BLI_rcti_size_x(disprect); - re->recty = BLI_rcti_size_y(disprect); + re->rectx = BLI_rcti_size_x(&re->disprect); + re->recty = BLI_rcti_size_y(&re->disprect); } else { re->disprect.xmin = re->disprect.ymin = 0; -- cgit v1.2.3