[Bf-blender-cvs] [23f5f28a157] greasepencil-object: Adapt grease pencil render code after last merge

Antonio Vazquez noreply at git.blender.org
Tue Feb 20 17:02:29 CET 2018


Commit: 23f5f28a157c2948fe1b5e9ee26a3aa06669f003
Author: Antonio Vazquez
Date:   Tue Feb 20 17:01:49 2018 +0100
Branches: greasepencil-object
https://developer.blender.org/rB23f5f28a157c2948fe1b5e9ee26a3aa06669f003

Adapt grease pencil render code after last merge

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

M	source/blender/draw/engines/gpencil/gpencil_engine.c
M	source/blender/draw/intern/DRW_render.h
M	source/blender/draw/intern/draw_manager.c

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

diff --git a/source/blender/draw/engines/gpencil/gpencil_engine.c b/source/blender/draw/engines/gpencil/gpencil_engine.c
index 6c5f1861769..0c14c0228cb 100644
--- a/source/blender/draw/engines/gpencil/gpencil_engine.c
+++ b/source/blender/draw/engines/gpencil/gpencil_engine.c
@@ -1070,15 +1070,16 @@ static void GPENCIL_render_result_combined(RenderResult *rr, const char *viewnam
 }
 
 /* render grease pencil to image */
-static void GPENCIL_render_to_image(void *vedata, struct RenderEngine *engine, struct Depsgraph *depsgraph)
+static void GPENCIL_render_to_image(void *vedata, RenderEngine *engine, struct RenderResult *render_result, struct RenderLayer *render_layer)
 {
 	const char *viewname = RE_GetActiveRenderView(engine->re);
-	
+	const DRWContextState *draw_ctx = DRW_context_state_get();
+	RenderResult *rr = render_result;
+	int imgsize = rr->rectx * rr->recty;
+
 	/* save previous render data */
-	RenderResult *rr_src = RE_engine_get_result(engine);
-	RenderLayer *rl_src = rr_src->layers.first;
-	RenderPass *rp_color_src = RE_pass_find_by_name(rl_src, RE_PASSNAME_COMBINED, viewname);
-	RenderPass *rp_depth_src = RE_pass_find_by_name(rl_src, RE_PASSNAME_Z, viewname);
+	RenderPass *rp_color_src = RE_pass_find_by_name(render_layer, RE_PASSNAME_COMBINED, viewname);
+	RenderPass *rp_depth_src = RE_pass_find_by_name(render_layer, RE_PASSNAME_Z, viewname);
 	float *rect_color_src = NULL;
 	float *rect_depth_src = NULL;
 	if ((rp_color_src) && (rp_depth_src) && (rp_color_src->rect) && (rp_depth_src->rect)) {
@@ -1090,13 +1091,8 @@ static void GPENCIL_render_to_image(void *vedata, struct RenderEngine *engine, s
 		printf("Warning: To render grease pencil, enable Combined and Z passes.\n");
 	}
 
-	int imgsize = rr_src->rectx * rr_src->recty;
-
-	const float *render_size = DRW_viewport_size_get();
-	RenderResult *rr = RE_engine_begin_result(engine, 0, 0, (int)render_size[0], (int)render_size[1], NULL, viewname);
-
 	GPENCIL_engine_init(vedata);
-	GPENCIL_render_init(vedata, engine, depsgraph);
+	GPENCIL_render_init(vedata, engine, draw_ctx->depsgraph);
 
 	GPENCIL_FramebufferList *fbl = ((GPENCIL_Data *)vedata)->fbl;
 	if (fbl->main) {
@@ -1109,7 +1105,7 @@ static void GPENCIL_render_to_image(void *vedata, struct RenderEngine *engine, s
 	}
 
 	/* loop all objects and draw */
-	DRW_render_object_iter(vedata, engine, depsgraph, GPENCIL_render_cache);
+	DRW_render_object_iter(vedata, engine, draw_ctx->depsgraph, GPENCIL_render_cache);
 
 	GPENCIL_cache_finish(vedata);
 	GPENCIL_draw_scene(vedata);
@@ -1125,13 +1121,10 @@ static void GPENCIL_render_to_image(void *vedata, struct RenderEngine *engine, s
 		DRW_framebuffer_texture_detach(e_data.render_color_tx);
 	}
 
-	RE_engine_end_result(engine, rr, false, false, false);
-
 	/* merge previous render image with new GP image */ 
 	if (rect_color_src) {
-		rl_src = rr_src->layers.first;
-		RenderPass *rp_color_gp = RE_pass_find_by_name(rl_src, RE_PASSNAME_COMBINED, viewname);
-		RenderPass *rp_depth_gp = RE_pass_find_by_name(rl_src, RE_PASSNAME_Z, viewname);
+		RenderPass *rp_color_gp = RE_pass_find_by_name(render_layer, RE_PASSNAME_COMBINED, viewname);
+		RenderPass *rp_depth_gp = RE_pass_find_by_name(render_layer, RE_PASSNAME_Z, viewname);
 		float *rect_color_gp = rp_color_gp->rect;
 		float *rect_depth_gp = rp_depth_gp->rect;
 
diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h
index d820bbbf638..68fa7b8a7be 100644
--- a/source/blender/draw/intern/DRW_render.h
+++ b/source/blender/draw/intern/DRW_render.h
@@ -412,7 +412,7 @@ struct DefaultTextureList     *DRW_viewport_texture_list_get(void);
 void DRW_viewport_request_redraw(void);
 
 void DRW_render_to_image(struct RenderEngine *re, struct Depsgraph *depsgraph);
-void DRW_render_gpencil_to_image(struct RenderEngine *re, struct Depsgraph *depsgraph);
+void DRW_render_gpencil_to_image(struct RenderEngine *engine, struct RenderResult *render_result, struct RenderLayer *render_layer);
 void DRW_render_object_iter(
 	void *vedata, struct RenderEngine *engine, struct Depsgraph *graph,
 	void (*callback)(void *vedata, struct Object *ob, struct RenderEngine *engine, struct Depsgraph *graph));
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
index ed1dc2eef29..1ed501ff872 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -3651,18 +3651,19 @@ static bool DRW_render_check_object_type(struct Depsgraph *depsgraph, short obty
 	return false;
 }
 
-void DRW_render_gpencil_to_image(RenderEngine *re, struct Depsgraph *depsgraph)
+void DRW_render_gpencil_to_image(RenderEngine *engine, struct RenderResult *render_result, struct RenderLayer *render_layer)
 {
+	const DRWContextState *draw_ctx = DRW_context_state_get();
+
 	if (draw_engine_gpencil_type.render_to_image) {
-		if (DRW_render_check_object_type(depsgraph, OB_GPENCIL)) {
+		if (DRW_render_check_object_type(draw_ctx->depsgraph, OB_GPENCIL)) {
 			ViewportEngineData *gpdata = DRW_viewport_engine_data_ensure(&draw_engine_gpencil_type);
-			draw_engine_gpencil_type.render_to_image(gpdata, re, depsgraph);
+			draw_engine_gpencil_type.render_to_image(gpdata, engine, render_result, render_layer);
 		}
 	}
-
 }
 
-void DRW_render_to_image(RenderEngine *re, struct Depsgraph *depsgraph)
+void DRW_render_to_image(RenderEngine *engine, struct Depsgraph *depsgraph)
 {
 	Scene *scene = DEG_get_evaluated_scene(depsgraph);
 	RenderEngineType *engine_type = engine->type;
@@ -3718,13 +3719,15 @@ void DRW_render_to_image(RenderEngine *re, struct Depsgraph *depsgraph)
 			DST.draw_ctx.depsgraph = BKE_scene_get_depsgraph(scene, view_layer, true);
 
 			engine_type->draw_engine->render_to_image(data, engine, render_result, render_layer);
+
+			/* grease pencil: render result is merged in the previous render result. */
+			DRW_render_gpencil_to_image(engine, render_result, render_layer);
+
 			DST.buffer_finish_called = false;
 		}
 	}
 
 	RE_engine_end_result(engine, render_result, false, false, false);
-	/* grease pencil: render result is merged in the previous render result. */
-	DRW_render_gpencil_to_image(re, depsgraph);
 
 	DST.buffer_finish_called = false;



More information about the Bf-blender-cvs mailing list