[Bf-blender-cvs] [2184ac8] master: Fix T41457: Viewport resolution divider does freestyle for every resolution

Sergey Sharybin noreply at git.blender.org
Tue Aug 19 15:39:28 CEST 2014


Commit: 2184ac8c9d878cbf507437a08cc824eed536540b
Author: Sergey Sharybin
Date:   Tue Aug 19 19:36:49 2014 +0600
Branches: master
https://developer.blender.org/rB2184ac8c9d878cbf507437a08cc824eed536540b

Fix T41457: Viewport resolution divider does freestyle for every resolution

Now freestyle would be rendered for the final resolution only, making it so
viewport navigation is really interactive.

===================================================================

M	source/blender/editors/render/render_internal.c
M	source/blender/render/extern/include/RE_pipeline.h
M	source/blender/render/intern/source/pipeline.c

===================================================================

diff --git a/source/blender/editors/render/render_internal.c b/source/blender/editors/render/render_internal.c
index 7eb3b5f..baf25a4 100644
--- a/source/blender/editors/render/render_internal.c
+++ b/source/blender/editors/render/render_internal.c
@@ -1032,6 +1032,7 @@ typedef struct RenderPreview {
 
 	int start_resolution_divider;
 	int resolution_divider;
+	bool has_freestyle;
 } RenderPreview;
 
 static int render_view3d_disprect(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D *rv3d, rcti *disprect)
@@ -1150,6 +1151,15 @@ static void render_update_resolution(Render *re, const RenderPreview *rp,
 	else {
 		RE_ChangeResolution(re, winx, winy, NULL);
 	}
+
+	if (rp->has_freestyle) {
+		if (rp->resolution_divider == 1) {
+			RE_ChangeModeFlag(re, R_EDGE_FRS, false);
+		}
+		else {
+			RE_ChangeModeFlag(re, R_EDGE_FRS, true);
+		}
+	}
 }
 
 static void render_view3d_startjob(void *customdata, short *stop, short *do_update, float *UNUSED(progress))
@@ -1163,7 +1173,7 @@ static void render_view3d_startjob(void *customdata, short *stop, short *do_upda
 	bool orth, restore = 0;
 	char name[32];
 	int update_flag;
-	bool use_border = false;
+	bool use_border;
 
 	update_flag = rp->engine->job_update_flag;
 	rp->engine->job_update_flag = 0;
@@ -1429,6 +1439,7 @@ static void render_view3d_do(RenderEngine *engine, const bContext *C)
 	rp->bmain = CTX_data_main(C);
 	rp->resolution_divider = divider;
 	rp->start_resolution_divider = divider;
+	rp->has_freestyle = scene->r.mode & R_EDGE_FRS;
 	copy_m4_m4(rp->viewmat, rp->rv3d->viewmat);
 	
 	/* clear info text */
diff --git a/source/blender/render/extern/include/RE_pipeline.h b/source/blender/render/extern/include/RE_pipeline.h
index 4ab0f5a..3b54de4 100644
--- a/source/blender/render/extern/include/RE_pipeline.h
+++ b/source/blender/render/extern/include/RE_pipeline.h
@@ -194,6 +194,7 @@ void RE_InitState(struct Render *re, struct Render *source, struct RenderData *r
                   struct SceneRenderLayer *srl,
                   int winx, int winy, rcti *disprect);
 void RE_ChangeResolution(struct Render *re, int winx, int winy, rcti *disprect);
+void RE_ChangeModeFlag(struct Render *re, int flag, bool clear);
 
 /* set up the viewplane/perspective matrix, three choices */
 struct Object *RE_GetCamera(struct Render *re); /* return camera override if set */
diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c
index aaaa53b..77059f1 100644
--- a/source/blender/render/intern/source/pipeline.c
+++ b/source/blender/render/intern/source/pipeline.c
@@ -736,6 +736,20 @@ void RE_ChangeResolution(Render *re, int winx, int winy, rcti *disprect)
 	}
 }
 
+/* TODO(sergey): This is a bit hackish, used to temporary disable freestyle when
+ * doing viewport render. Needs some better integration of BI viewport rendering
+ * into the pipeline.
+ */
+void RE_ChangeModeFlag(Render *re, int flag, bool clear)
+{
+	if (clear) {
+		re->r.mode &= ~flag;
+	}
+	else {
+		re->r.mode |= flag;
+	}
+}
+
 /* update some variables that can be animated, and otherwise wouldn't be due to
  * RenderData getting copied once at the start of animation render */
 void render_update_anim_renderdata(Render *re, RenderData *rd)




More information about the Bf-blender-cvs mailing list