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
path: root/source
diff options
context:
space:
mode:
authorTamito Kajiyama <rd6t-kjym@asahi-net.or.jp>2010-03-02 00:51:14 +0300
committerTamito Kajiyama <rd6t-kjym@asahi-net.or.jp>2010-03-02 00:51:14 +0300
commit6a681bca4531d31acac0080a18fd2d7aa283d900 (patch)
tree9358c8bf4a36586cdf7181e4f3e21bbe1704090f /source
parentb21a994076e12804efe49dc35fb698a81f5a33a3 (diff)
Made an attempt for fixing an instability issue regarding animation
rendering. RE_BlenderFrame() and RE_BlenderAnim() are Blender's internal top-level rendering API functions for a single frame and a series of frames, respectively. These functions rely on global variables to keep render pipeline states. Freestyle's stroke rendering was also using RE_BlenderFrame to render a temporary scene of stroke meshes. These nested calls of the top-level rendering API functions were causing broken render pipeline states and eventually led to a crash. This commit is intended to fix the issue, by introducing an rendering API function RE_RenderFreestyleStrokes specifically used for stroke rendering in Freestyle. The new function does not do anything with regard to the global variables in the rendering API implementation.
Diffstat (limited to 'source')
-rw-r--r--source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp2
-rw-r--r--source/blender/render/extern/include/RE_pipeline.h1
-rw-r--r--source/blender/render/intern/source/pipeline.c10
3 files changed, 12 insertions, 1 deletions
diff --git a/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp b/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp
index 30577287b72..f6798384f0a 100644
--- a/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp
+++ b/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp
@@ -341,6 +341,6 @@ Render* BlenderStrokeRenderer::RenderScene( Render *re ) {
Render *freestyle_render = RE_NewRender(freestyle_scene->id.name, RE_SLOT_DEFAULT);
- RE_BlenderFrame( freestyle_render, freestyle_scene, NULL, 1);
+ RE_RenderFreestyleStrokes(freestyle_render, freestyle_scene);
return freestyle_render;
}
diff --git a/source/blender/render/extern/include/RE_pipeline.h b/source/blender/render/extern/include/RE_pipeline.h
index f9c4e9690a1..0218f7458cb 100644
--- a/source/blender/render/extern/include/RE_pipeline.h
+++ b/source/blender/render/extern/include/RE_pipeline.h
@@ -216,6 +216,7 @@ void RE_TileProcessor(struct Render *re, int firsttile, int threaded);
/* only RE_NewRender() needed, main Blender render calls */
void RE_BlenderFrame(struct Render *re, struct Scene *scene, struct SceneRenderLayer *srl, int frame);
void RE_BlenderAnim(struct Render *re, struct Scene *scene, int sfra, int efra, int tfra, struct ReportList *reports);
+void RE_RenderFreestyleStrokes(struct Render *re, struct Scene *scene);
void RE_ReadRenderResult(struct Scene *scene, struct Scene *scenode);
void RE_WriteRenderResult(RenderResult *rr, char *filename, int compress);
diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c
index a5b3b1dd18c..6e63e023793 100644
--- a/source/blender/render/intern/source/pipeline.c
+++ b/source/blender/render/intern/source/pipeline.c
@@ -2839,6 +2839,16 @@ void RE_BlenderFrame(Render *re, Scene *scene, SceneRenderLayer *srl, int frame)
RenderGlobal.renderingslot= RenderGlobal.viewslot;
}
+void RE_RenderFreestyleStrokes(Render *re, Scene *scene)
+{
+ re->result_ok= 0;
+ scene->r.cfra= 1;
+ if(render_initialize_from_scene(re, scene, NULL, 0, 0)) {
+ do_render_all_options(re);
+ }
+ re->result_ok= 1;
+}
+
static int do_write_image_or_movie(Render *re, Scene *scene, bMovieHandle *mh, ReportList *reports)
{
char name[FILE_MAX];