Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTamito Kajiyama <rd6t-kjym@asahi-net.or.jp>2012-11-14 06:01:02 +0400
committerTamito Kajiyama <rd6t-kjym@asahi-net.or.jp>2012-11-14 06:01:02 +0400
commit6cee7bb2b77bc7b577a3067c30dc56e22b4752ce (patch)
treeab504ed0ffa59eb68ed1b57f2208dd949cf40fda /source/blender/render
parent872af481831650f2399c85df2ed059d58c5210be (diff)
parentde5d0d649da9b73de96cbee9015b838e3c0389c1 (diff)
Merged changes in the trunk up to revision 52191.
Conflicts resolved: source/blender/makesdna/DNA_scene_types.h
Diffstat (limited to 'source/blender/render')
-rw-r--r--source/blender/render/extern/include/RE_engine.h1
-rw-r--r--source/blender/render/intern/raytrace/rayobject_internal.h2
-rw-r--r--source/blender/render/intern/raytrace/rayobject_octree.cpp2
-rw-r--r--source/blender/render/intern/raytrace/rayobject_rtbuild.cpp2
-rw-r--r--source/blender/render/intern/source/external_engine.c24
-rw-r--r--source/blender/render/intern/source/pipeline.c5
-rw-r--r--source/blender/render/intern/source/sunsky.c4
7 files changed, 27 insertions, 13 deletions
diff --git a/source/blender/render/extern/include/RE_engine.h b/source/blender/render/extern/include/RE_engine.h
index 1331c287d7c..d2ffc3a0e26 100644
--- a/source/blender/render/extern/include/RE_engine.h
+++ b/source/blender/render/extern/include/RE_engine.h
@@ -60,6 +60,7 @@ struct Scene;
#define RE_ENGINE_PREVIEW 2
#define RE_ENGINE_DO_DRAW 4
#define RE_ENGINE_DO_UPDATE 8
+#define RE_ENGINE_RENDERING 16
extern ListBase R_engines;
diff --git a/source/blender/render/intern/raytrace/rayobject_internal.h b/source/blender/render/intern/raytrace/rayobject_internal.h
index 92ac39909a8..aa8ab8c3da4 100644
--- a/source/blender/render/intern/raytrace/rayobject_internal.h
+++ b/source/blender/render/intern/raytrace/rayobject_internal.h
@@ -92,7 +92,7 @@ int RE_rayobjectcontrol_test_break(RayObjectControl *c);
* eg.: on render code)
*
* 0 means it's reserved and has it own meaning inside each ray acceleration structure
- * (this way each structure can use the allign offset to determine if a node represents a
+ * (this way each structure can use the align offset to determine if a node represents a
* RayObject primitive, which can be used to save memory)
*/
diff --git a/source/blender/render/intern/raytrace/rayobject_octree.cpp b/source/blender/render/intern/raytrace/rayobject_octree.cpp
index 77e9dc9d8fd..afb8fe6c3b5 100644
--- a/source/blender/render/intern/raytrace/rayobject_octree.cpp
+++ b/source/blender/render/intern/raytrace/rayobject_octree.cpp
@@ -1026,7 +1026,7 @@ static int RE_rayobject_octree_intersect(RayObject *tree, Isect *is)
labdao = ddalabda;
- /* traversing ocree nodes need careful detection of smallest values, with proper
+ /* traversing octree nodes need careful detection of smallest values, with proper
* exceptions for equal labdas */
eqval = (labdax == labday);
if (labday == labdaz) eqval += 2;
diff --git a/source/blender/render/intern/raytrace/rayobject_rtbuild.cpp b/source/blender/render/intern/raytrace/rayobject_rtbuild.cpp
index bae65c492f4..4195b103811 100644
--- a/source/blender/render/intern/raytrace/rayobject_rtbuild.cpp
+++ b/source/blender/render/intern/raytrace/rayobject_rtbuild.cpp
@@ -435,7 +435,7 @@ int rtbuild_heuristic_object_split(RTBuilder *b, int nchilds)
/*
* Helper code
* PARTITION code / used on mean-split
- * basicly this a std::nth_element (like on C++ STL algorithm)
+ * basically this a std::nth_element (like on C++ STL algorithm)
*/
#if 0
static void split_leafs(RTBuilder *b, int *nth, int partitions, int split_axis)
diff --git a/source/blender/render/intern/source/external_engine.c b/source/blender/render/intern/source/external_engine.c
index 8bdb805ada2..9053bc84bbc 100644
--- a/source/blender/render/intern/source/external_engine.c
+++ b/source/blender/render/intern/source/external_engine.c
@@ -316,6 +316,7 @@ int RE_engine_render(Render *re, int do_all)
{
RenderEngineType *type = RE_engines_find(re->r.engine);
RenderEngine *engine;
+ int persistent_data = re->r.mode & R_PERSISTENT_DATA;
/* verify if we can render */
if (!type->render)
@@ -349,11 +350,17 @@ int RE_engine_render(Render *re, int do_all)
re->i.totface = re->i.totvert = re->i.totstrand = re->i.totlamp = re->i.tothalo = 0;
/* render */
- if (!re->engine)
- re->engine = RE_engine_create(type);
-
engine = re->engine;
+ if (!engine) {
+ engine = RE_engine_create(type);
+
+ if (persistent_data)
+ re->engine = engine;
+ }
+
+ engine->flag |= RE_ENGINE_RENDERING;
+
/* TODO: actually link to a parent which shouldn't happen */
engine->re = re;
@@ -382,8 +389,13 @@ int RE_engine_render(Render *re, int do_all)
if (type->render)
type->render(engine, re->scene);
- if (!(re->r.mode & R_PERSISTENT_DATA)) {
- RE_engine_free(re->engine);
+ engine->tile_x = 0;
+ engine->tile_y = 0;
+ engine->flag &= ~RE_ENGINE_RENDERING;
+
+ /* re->engine becomes zero if user changed active render engine during render */
+ if (!persistent_data || !re->engine) {
+ RE_engine_free(engine);
re->engine = NULL;
}
@@ -393,8 +405,6 @@ int RE_engine_render(Render *re, int do_all)
BLI_rw_mutex_unlock(&re->resultmutex);
}
- engine->tile_x = 0;
- engine->tile_y = 0;
freeparts(re);
render_result_free_list(&engine->fullresult, engine->fullresult.first);
diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c
index aab7f442249..23065e5bd84 100644
--- a/source/blender/render/intern/source/pipeline.c
+++ b/source/blender/render/intern/source/pipeline.c
@@ -435,7 +435,10 @@ void RE_FreePersistentData(void)
/* render engines can be kept around for quick re-render, this clears all */
for (re = RenderGlobal.renderlist.first; re; re = re->next) {
if (re->engine) {
- RE_engine_free(re->engine);
+ /* if engine is currently rendering, just tag it to be freed when render is finished */
+ if (!(re->engine->flag & RE_ENGINE_RENDERING))
+ RE_engine_free(re->engine);
+
re->engine = NULL;
}
}
diff --git a/source/blender/render/intern/source/sunsky.c b/source/blender/render/intern/source/sunsky.c
index e4a42fcd675..e812b99287c 100644
--- a/source/blender/render/intern/source/sunsky.c
+++ b/source/blender/render/intern/source/sunsky.c
@@ -118,8 +118,8 @@ static void DirectionToThetaPhi(float *toSun, float *theta, float *phi)
/**
* PerezFunction:
- * compute perez function value based on input paramters
- * */
+ * compute perez function value based on input parameters
+ */
static float PerezFunction(struct SunSky *sunsky, const float *lam, float theta, float gamma, float lvz)
{
float den, num;