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:
Diffstat (limited to 'source/blender/render')
-rw-r--r--source/blender/render/intern/include/render_types.h3
-rw-r--r--source/blender/render/intern/source/convertblender.c9
-rw-r--r--source/blender/render/intern/source/pipeline.c47
-rw-r--r--source/blender/render/intern/source/rendercore.c32
4 files changed, 47 insertions, 44 deletions
diff --git a/source/blender/render/intern/include/render_types.h b/source/blender/render/intern/include/render_types.h
index 1768b052b54..5ea1a8ee98c 100644
--- a/source/blender/render/intern/include/render_types.h
+++ b/source/blender/render/intern/include/render_types.h
@@ -198,6 +198,9 @@ struct Render
ListBase *sss_points;
struct Material *sss_mat;
+ /* Freestyle */
+ struct Render* freestyle_render;
+
ListBase customdata_names;
struct Object *excludeob;
diff --git a/source/blender/render/intern/source/convertblender.c b/source/blender/render/intern/source/convertblender.c
index 1a387ad7466..9bf74d4d012 100644
--- a/source/blender/render/intern/source/convertblender.c
+++ b/source/blender/render/intern/source/convertblender.c
@@ -4427,6 +4427,8 @@ void RE_Database_Free(Render *re)
free_occ(re);
free_strand_surface(re);
+ if( re->freestyle_render ) RE_FreeRender(re->freestyle_render);
+
re->totvlak=re->totvert=re->totstrand=re->totlamp=re->tothalo= 0;
re->i.convertdone= 0;
@@ -4874,6 +4876,13 @@ void RE_Database_FromScene(Render *re, Scene *scene, int use_camera_view)
if((re->r.mode & R_SSS) && !re->test_break())
if(re->r.renderer==R_INTERN)
make_sss_tree(re);
+
+ /* Freestyle */
+ if((re->r.mode & R_EDGE_FRS ) && !re->test_break())
+ if(re->r.renderer==R_INTERN) {
+ FRS_prepare(re);
+ FRS_render_Blender(re);
+ }
}
if(re->test_break())
diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c
index ebaef19062e..673bea87d6c 100644
--- a/source/blender/render/intern/source/pipeline.c
+++ b/source/blender/render/intern/source/pipeline.c
@@ -1630,18 +1630,12 @@ static void do_render_3d(Render *re)
else
RE_Database_FromScene(re, re->scene, 1);
- /* Freestyle */
- if( re->r.mode & R_EDGE_FRS ) {
- FRS_prepare(re);
- }
-
threaded_tile_processor(re);
/* do left-over 3d post effects (flares) */
if(re->flag & R_HALO)
if(!re->test_break())
add_halo_flare(re);
-
/* free all render verts etc */
RE_Database_Free(re);
@@ -2198,36 +2192,6 @@ static void do_render_composite_fields_blur_3d(Render *re)
re->display_draw(re->result, NULL);
}
-static void freestyleRender(Render *re)
-{
- // init render result
- RE_FreeRenderResult(re->result);
- re->result = new_render_result(re, &re->disprect, 0, RR_USEMEM);
-
- // set camera
- RE_SetCamera(re, re->scene->camera);
-
- // set up render database
- if(render_scene_needs_vector(re))
- RE_Database_FromScene_Vectors(re, re->scene);
- else
- RE_Database_FromScene(re, re->scene, 1);
-
- // used to reobtain ogl context after RE_Database_FromScene call
- re->display_clear(re->result);
-
- // Freestyle initialization
- FRS_prepare(re);
-
- // run Freestyle
- re->i.starttime = PIL_check_seconds_timer();
- FRS_render_GL(re);
- re->i.lastframetime = PIL_check_seconds_timer()- re->i.starttime;
- re->stats_draw(&re->i);
-
- RE_Database_Free(re);
-}
-
#ifndef DISABLE_YAFRAY
/* yafray: main yafray render/export call */
static void yafrayRender(Render *re)
@@ -2269,7 +2233,7 @@ static void yafrayRender(Render *re)
re->rectx= re->winx;
re->recty= re->winy;
- rres= new_render_result(re, &re->disprect, 0, RR_USEMEM);
+ rres = new_render_result(re, &re->disprect, 0, RR_USEMEM);
merge_render_result(rres, re->result);
RE_FreeRenderResult(re->result);
@@ -2322,15 +2286,10 @@ static void do_render_all_options(Render *re)
#ifndef DISABLE_YAFRAY
if(re->r.renderer==R_YAFRAY)
yafrayRender(re);
- else if(re->r.renderer==R_FREESTYLE)
- freestyleRender(re);
else
do_render_composite_fields_blur_3d(re);
#else
- if(re->r.renderer==R_FREESTYLE)
- freestyleRender(re);
- else
- do_render_composite_fields_blur_3d(re);
+ do_render_composite_fields_blur_3d(re);
#endif
}
@@ -2449,7 +2408,7 @@ static int is_rendering_allowed(Render *re)
}
/* renderer */
- if(!ELEM3(re->r.renderer, R_INTERN, R_YAFRAY, R_FREESTYLE)) {
+ if(!ELEM(re->r.renderer, R_INTERN, R_YAFRAY)) {
re->error("Unknown render engine set");
return 0;
}
diff --git a/source/blender/render/intern/source/rendercore.c b/source/blender/render/intern/source/rendercore.c
index 1eb42bca569..7b810c142d6 100644
--- a/source/blender/render/intern/source/rendercore.c
+++ b/source/blender/render/intern/source/rendercore.c
@@ -901,6 +901,30 @@ static void addps(ListBase *lb, intptr_t *rd, int obi, int facenr, int z, int ma
ps->shadfac= 0;
}
+
+
+static void freestyle_enhance_add(RenderPart *pa, float *rectf)
+{
+ int x, y;
+ float* freestyle;
+
+ RenderLayer* rl= render_get_active_layer( R.freestyle_render, R.freestyle_render->result );
+ if( rl->rectf == NULL)
+ return;
+
+
+ for( x = pa->disprect.xmin + pa->crop; x < pa->disprect.xmax - pa->crop; x++) {
+ for( y = pa->disprect.ymin + pa->crop; y < pa->disprect.ymax - pa->crop; y++) {
+
+ freestyle = rl->rectf + 4 * (R.recty * x + y);
+ if( freestyle[3] > 0.0)
+ addAlphaOverFloat(rectf, freestyle);
+ rectf += 4;
+
+ }
+ }
+}
+
static void edge_enhance_add(RenderPart *pa, float *rectf, float *arect)
{
float addcol[4];
@@ -1219,6 +1243,10 @@ void zbufshadeDA_tile(RenderPart *pa)
if(R.r.mode & R_EDGE)
edge_enhance_add(pa, rl->rectf, edgerect);
+ if(rl->layflag & SCE_LAY_FRS)
+ if(R.r.mode & R_EDGE_FRS)
+ freestyle_enhance_add(pa, rl->rectf);
+
if(rl->passflag & SCE_PASS_VECTOR)
reset_sky_speed(pa, rl);
@@ -1383,6 +1411,10 @@ void zbufshade_tile(RenderPart *pa)
edge_enhance_add(pa, rl->rectf, edgerect);
}
+ if(rl->layflag & SCE_LAY_FRS)
+ if(R.r.mode & R_EDGE_FRS)
+ freestyle_enhance_add(pa, rl->rectf);
+
if(rl->passflag & SCE_PASS_VECTOR)
reset_sky_speed(pa, rl);