[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [56827] trunk/blender/source/blender: Fixes for blender internal viewport render:

Brecht Van Lommel brechtvanlommel at pandora.be
Wed May 15 19:09:46 CEST 2013


Revision: 56827
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=56827
Author:   blendix
Date:     2013-05-15 17:09:45 +0000 (Wed, 15 May 2013)
Log Message:
-----------
Fixes for blender internal viewport render:

* Particles did not render at viewport resolution like meshes.
* Properties editor preview render of hair was crashing, solution is to have
  two separate flags for this preview render and viewport preview render.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/render/render_internal.c
    trunk/blender/source/blender/editors/render/render_preview.c
    trunk/blender/source/blender/makesdna/DNA_scene_types.h
    trunk/blender/source/blender/render/intern/source/convertblender.c
    trunk/blender/source/blender/render/intern/source/external_engine.c
    trunk/blender/source/blender/render/intern/source/pipeline.c
    trunk/blender/source/blender/render/intern/source/pointdensity.c
    trunk/blender/source/blender/render/intern/source/rendercore.c
    trunk/blender/source/blender/render/intern/source/shadeoutput.c
    trunk/blender/source/blender/render/intern/source/sss.c

Modified: trunk/blender/source/blender/editors/render/render_internal.c
===================================================================
--- trunk/blender/source/blender/editors/render/render_internal.c	2013-05-15 17:06:56 UTC (rev 56826)
+++ trunk/blender/source/blender/editors/render/render_internal.c	2013-05-15 17:09:45 UTC (rev 56827)
@@ -853,7 +853,7 @@
 		rdata = rp->scene->r;
 		rdata.mode &= ~(R_OSA | R_MBLUR | R_BORDER | R_PANORAMA);
 		rdata.scemode &= ~(R_DOSEQ | R_DOCOMP | R_FREE_IMAGE);
-		rdata.scemode |= R_PREVIEWBUTS;
+		rdata.scemode |= R_VIEWPORT_PREVIEW;
 		
 		/* we do use layers, but only active */
 		rdata.scemode |= R_SINGLE_LAYER;

Modified: trunk/blender/source/blender/editors/render/render_preview.c
===================================================================
--- trunk/blender/source/blender/editors/render/render_preview.c	2013-05-15 17:06:56 UTC (rev 56826)
+++ trunk/blender/source/blender/editors/render/render_preview.c	2013-05-15 17:09:45 UTC (rev 56827)
@@ -273,7 +273,7 @@
 	if (sce) {
 		
 		/* this flag tells render to not execute depsgraph or ipos etc */
-		sce->r.scemode |= R_PREVIEWBUTS;
+		sce->r.scemode |= R_BUTS_PREVIEW;
 		/* set world always back, is used now */
 		sce->world = pr_main->world.first;
 		/* now: exposure copy */

Modified: trunk/blender/source/blender/makesdna/DNA_scene_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_scene_types.h	2013-05-15 17:06:56 UTC (rev 56826)
+++ trunk/blender/source/blender/makesdna/DNA_scene_types.h	2013-05-15 17:09:45 UTC (rev 56827)
@@ -1300,7 +1300,7 @@
 #define R_BG_RENDER			0x0002
 		/* passepartout is camera option now, keep this for backward compatibility */
 #define R_PASSEPARTOUT		0x0004
-#define R_PREVIEWBUTS		0x0008
+#define R_BUTS_PREVIEW		0x0008
 #define R_EXTENSION			0x0010
 #define R_MATNODE_PREVIEW	0x0020
 #define R_DOCOMP			0x0040
@@ -1316,6 +1316,7 @@
 /* #define R_DEPRECATED		0x10000 */
 /* #define R_RECURS_PROTECTION	0x20000 */
 #define R_TEXNODE_PREVIEW	0x40000
+#define R_VIEWPORT_PREVIEW	0x80000
 
 /* r->stamp */
 #define R_STAMP_TIME 	0x0001

Modified: trunk/blender/source/blender/render/intern/source/convertblender.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/convertblender.c	2013-05-15 17:06:56 UTC (rev 56826)
+++ trunk/blender/source/blender/render/intern/source/convertblender.c	2013-05-15 17:09:45 UTC (rev 56827)
@@ -1539,7 +1539,7 @@
 	float random, simplify[2], pa_co[3];
 	const float cfra= BKE_scene_frame_get(re->scene);
 	int i, a, k, max_k=0, totpart, do_simplify = FALSE, do_surfacecache = FALSE, use_duplimat = FALSE;
-	int totchild=0;
+	int totchild=0, step_nbr;
 	int seed, path_nbr=0, orco1=0, num;
 	int totface;
 	char **uv_name=0;
@@ -1581,9 +1581,13 @@
 	if (part->type==PART_HAIR && !psys->childcache)
 		totchild= 0;
 
-	if (G.is_rendering == FALSE) {  /* preview render */
+	if (re->r.scemode & R_VIEWPORT_PREVIEW) { /* preview render */
 		totchild = (int)((float)totchild * (float)part->disp / 100.0f);
+		step_nbr = part->draw_step;
 	}
+	else {
+		step_nbr = part->ren_step;
+	}
 
 	psys->flag |= PSYS_DRAWING;
 
@@ -1668,7 +1672,7 @@
 
 /* 2.6 setup strand rendering */
 	if (part->ren_as == PART_DRAW_PATH && psys->pathcache) {
-		path_nbr=(int)pow(2.0, (double) part->ren_step);
+		path_nbr=(int)pow(2.0, (double) step_nbr);
 
 		if (path_nbr) {
 			if (!ELEM(ma->material_type, MA_TYPE_HALO, MA_TYPE_WIRE)) {
@@ -3379,8 +3383,8 @@
 	mask |= CD_MASK_ORIGINDEX | CD_MASK_FREESTYLE_EDGE | CD_MASK_FREESTYLE_FACE;
 #endif
 
-	if (re->r.scemode & R_PREVIEWBUTS)
-		dm = mesh_get_derived_final(re->scene, ob, mask);
+	if (re->r.scemode & R_VIEWPORT_PREVIEW)
+		dm= mesh_create_derived_view(re->scene, ob, mask);
 	else
 		dm= mesh_create_derived_render(re->scene, ob, mask);
 	if (dm==NULL) return;	/* in case duplicated object fails? */
@@ -4113,7 +4117,7 @@
 	Material *ma;
 	
 	/* not for preview render */
-	if (re->scene->r.scemode & R_PREVIEWBUTS)
+	if (re->scene->r.scemode & (R_BUTS_PREVIEW|R_VIEWPORT_PREVIEW))
 		return;
 	
 	for (group= re->main->group.first; group; group=group->id.next)
@@ -4689,8 +4693,8 @@
 			/* the emitter mesh wasn't rendered so the modifier stack wasn't
 			 * evaluated with render settings */
 			DerivedMesh *dm;
-			if (re->r.scemode & R_PREVIEWBUTS)
-				dm = mesh_get_derived_final(re->scene, ob, CD_MASK_BAREMESH|CD_MASK_MTFACE|CD_MASK_MCOL);
+			if (re->r.scemode & R_VIEWPORT_PREVIEW)
+				dm = mesh_create_derived_view(re->scene, ob, CD_MASK_BAREMESH|CD_MASK_MTFACE|CD_MASK_MCOL);
 			else
 				dm = mesh_create_derived_render(re->scene, ob,	CD_MASK_BAREMESH|CD_MASK_MTFACE|CD_MASK_MCOL);
 			dm->release(dm);
@@ -4735,7 +4739,8 @@
 		show_emitter= 0;
 		for (psys=ob->particlesystem.first; psys; psys=psys->next) {
 			show_emitter += psys->part->draw & PART_DRAW_EMITTER;
-			psys_render_set(ob, psys, re->viewmat, re->winmat, re->winx, re->winy, timeoffset);
+			if (!(re->r.scemode & R_VIEWPORT_PREVIEW))
+				psys_render_set(ob, psys, re->viewmat, re->winmat, re->winx, re->winy, timeoffset);
 		}
 
 		/* if no psys has "show emitter" selected don't render emitter */
@@ -4779,7 +4784,8 @@
 			if (dob)
 				psys->flag |= PSYS_USE_IMAT;
 			init_render_object_data(re, obr, timeoffset);
-			psys_render_restore(ob, psys);
+			if (!(re->r.scemode & R_VIEWPORT_PREVIEW))
+				psys_render_restore(ob, psys);
 			psys->flag &= ~PSYS_USE_IMAT;
 
 			/* only add instance for objects that have not been used for dupli */
@@ -4831,7 +4837,7 @@
 	
 	/* statistics for debugging render memory usage */
 	if ((G.debug & G_DEBUG) && (G.is_rendering)) {
-		if ((re->r.scemode & R_PREVIEWBUTS)==0) {
+		if ((re->r.scemode & (R_BUTS_PREVIEW|R_VIEWPORT_PREVIEW))==0) {
 			BKE_image_print_memlist();
 			MEM_printmemlist_stats();
 		}
@@ -4893,7 +4899,7 @@
 
 	if (re->scene)
 		if (re->scene->r.scemode & R_FREE_IMAGE)
-			if ((re->r.scemode & R_PREVIEWBUTS)==0)
+			if ((re->r.scemode & (R_BUTS_PREVIEW|R_VIEWPORT_PREVIEW))==0)
 				BKE_image_free_all_textures();
 
 	if (re->memArena) {
@@ -4961,6 +4967,9 @@
 	ParticleSystem *psys;
 	DerivedMesh *dm;
 
+	if (re->r.scemode & R_VIEWPORT_PREVIEW)
+		return;
+
 	if (level >= MAX_DUPLI_RECUR)
 		return;
 	
@@ -4978,10 +4987,7 @@
 			/* this is to make sure we get render level duplis in groups:
 			 * the derivedmesh must be created before init_render_mesh,
 			 * since object_duplilist does dupliparticles before that */
-			if (re->r.scemode & R_PREVIEWBUTS)
-				dm = mesh_get_derived_final(re->scene, ob, CD_MASK_BAREMESH|CD_MASK_MTFACE|CD_MASK_MCOL);
-			else
-				dm = mesh_create_derived_render(re->scene, ob, CD_MASK_BAREMESH|CD_MASK_MTFACE|CD_MASK_MCOL);
+			dm = mesh_create_derived_render(re->scene, ob, CD_MASK_BAREMESH|CD_MASK_MTFACE|CD_MASK_MCOL);
 			dm->release(dm);
 
 			for (psys=ob->particlesystem.first; psys; psys=psys->next)
@@ -5245,7 +5251,7 @@
 		lay &= 0xFF000000;
 	
 	/* applies changes fully */
-	if ((re->r.scemode & (R_NO_FRAME_UPDATE|R_PREVIEWBUTS))==0)
+	if ((re->r.scemode & (R_NO_FRAME_UPDATE|R_BUTS_PREVIEW|R_VIEWPORT_PREVIEW))==0)
 		BKE_scene_update_for_newframe(re->main, re->scene, lay);
 	
 	/* if no camera, viewmat should have been set! */

Modified: trunk/blender/source/blender/render/intern/source/external_engine.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/external_engine.c	2013-05-15 17:06:56 UTC (rev 56826)
+++ trunk/blender/source/blender/render/intern/source/external_engine.c	2013-05-15 17:09:45 UTC (rev 56827)
@@ -258,7 +258,7 @@
 
 		if (re->result->do_exr_tile)
 			render_result_exr_file_merge(re->result, result);
-		else if (!(re->test_break(re->tbh) && (re->r.scemode & R_PREVIEWBUTS)))
+		else if (!(re->test_break(re->tbh) && (re->r.scemode & R_BUTS_PREVIEW)))
 			render_result_merge(re->result, result);
 
 		/* draw */
@@ -401,7 +401,7 @@
 	/* verify if we can render */
 	if (!type->render)
 		return 0;
-	if ((re->r.scemode & R_PREVIEWBUTS) && !(type->flag & RE_USE_PREVIEW))
+	if ((re->r.scemode & R_BUTS_PREVIEW) && !(type->flag & RE_USE_PREVIEW))
 		return 0;
 	if (do_all && !(type->flag & RE_USE_POSTPROCESS))
 		return 0;
@@ -410,7 +410,7 @@
 
 	/* create render result */
 	BLI_rw_mutex_lock(&re->resultmutex, THREAD_LOCK_WRITE);
-	if (re->result == NULL || !(re->r.scemode & R_PREVIEWBUTS)) {
+	if (re->result == NULL || !(re->r.scemode & R_BUTS_PREVIEW)) {
 		int savebuffers;
 
 		if (re->result)
@@ -444,14 +444,14 @@
 
 	if (re->flag & R_ANIMATION)
 		engine->flag |= RE_ENGINE_ANIMATION;
-	if (re->r.scemode & R_PREVIEWBUTS)
+	if (re->r.scemode & R_BUTS_PREVIEW)
 		engine->flag |= RE_ENGINE_PREVIEW;
 	engine->camera_override = re->camera_override;
 
 	engine->resolution_x = re->winx;
 	engine->resolution_y = re->winy;
 
-	if ((re->r.scemode & (R_NO_FRAME_UPDATE | R_PREVIEWBUTS)) == 0)
+	if ((re->r.scemode & (R_NO_FRAME_UPDATE | R_BUTS_PREVIEW)) == 0)
 		BKE_scene_update_for_newframe(re->main, re->scene, re->lay);
 
 	RE_parts_init(re, FALSE);

Modified: trunk/blender/source/blender/render/intern/source/pipeline.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/pipeline.c	2013-05-15 17:06:56 UTC (rev 56826)
+++ trunk/blender/source/blender/render/intern/source/pipeline.c	2013-05-15 17:09:45 UTC (rev 56827)
@@ -580,7 +580,7 @@
 	/* if preview render, we try to keep old result */
 	BLI_rw_mutex_lock(&re->resultmutex, THREAD_LOCK_WRITE);
 
-	if (re->r.scemode & R_PREVIEWBUTS) {
+	if (re->r.scemode & (R_BUTS_PREVIEW|R_VIEWPORT_PREVIEW)) {
 		if (had_freestyle || (re->r.mode & R_EDGE_FRS)) {
 			/* freestyle manipulates render layers so always have to free */
 			render_result_free(re->result);
@@ -729,7 +729,7 @@
 {
 	/* don't show preprocess for previewrender sss */
 	if (re->sss_points)
-		return !(re->r.scemode & R_PREVIEWBUTS);
+		return !(re->r.scemode & (R_BUTS_PREVIEW|R_VIEWPORT_PREVIEW));
 	else
 		return 1;
 }
@@ -766,7 +766,7 @@
 		}
 		else if (render_display_draw_enabled(&R)) {
 			/* on break, don't merge in result for preview renders, looks nicer */
-			if (R.test_break(R.tbh) && (R.r.scemode & R_PREVIEWBUTS)) {
+			if (R.test_break(R.tbh) && (R.r.scemode & (R_BUTS_PREVIEW|R_VIEWPORT_PREVIEW))) {
 				/* pass */
 			}
 			else {
@@ -947,7 +947,7 @@
 	BLI_rw_mutex_lock(&re->resultmutex, THREAD_LOCK_WRITE);

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list