Commit: ee6a257cabd29c76cd1445ff406908a259256585
Author: Antonio Vazquez
Date:   Fri Feb 9 20:05:26 2018 +0100
Branches: greasepencil-object
https://developer.blender.org/rBee6a257cabd29c76cd1445ff406908a259256585

WIP: Render mixing GP and Eevee or Cycles

Still there are problems with AA, but now it's possible to get a composed 
result with Cycle/Eevee and Grease Pencil.

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

M       source/blender/draw/engines/gpencil/gpencil_engine.c

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

diff --git a/source/blender/draw/engines/gpencil/gpencil_engine.c 
b/source/blender/draw/engines/gpencil/gpencil_engine.c
index 5b036922b3c..3ce4868afe7 100644
--- a/source/blender/draw/engines/gpencil/gpencil_engine.c
+++ b/source/blender/draw/engines/gpencil/gpencil_engine.c
@@ -1021,7 +1021,7 @@ static void GPENCIL_render_result_z(RenderResult *rr, 
const char *viewname,       GPEN
                GPENCIL_render_update_vecs(vedata);
 
                /* Convert ogl depth [0..1] to view Z [near..far] */
-               for (int i = 0; i < rr->rectx * rr->recty; ++i) {
+               for (int i = 0; i < rr->rectx * rr->recty; i++) {
                        if (rp->rect[i] == 1.0f) {
                                rp->rect[i] = 1e10f; /* Background */
                        }
@@ -1053,6 +1053,16 @@ static void GPENCIL_render_result_combined(RenderResult 
*rr, const char *viewnam
 static void GPENCIL_render_to_image(void *vedata, struct RenderEngine *engine, 
struct Depsgraph *depsgraph)
 {
        const char *viewname = RE_GetActiveRenderView(engine->re);
+       
+       /* 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);
+       float *rect_color_src = MEM_dupallocN(rp_color_src->rect);
+       float *rect_depth_src = MEM_dupallocN(rp_depth_src->rect);
+       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);
 
@@ -1087,6 +1097,37 @@ static void GPENCIL_render_to_image(void *vedata, struct 
RenderEngine *engine, s
        }
 
        RE_engine_end_result(engine, rr, false, false, false);
+
+       /* merge previous render image with new GP image */ 
+       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);
+       float *rect_color_gp = rp_color_gp->rect;
+       float *rect_depth_gp = rp_depth_gp->rect;
+
+       for (int i = 0; i < imgsize; i++) {
+               float *frgba = &rect_color_gp[i * 4];
+               float *srgba = &rect_color_src[i * 4];
+               float *gp_depth = &rect_depth_gp[i];
+               float *sdepth = &rect_depth_src[i];
+               /* check transparency */
+               if (frgba[3] > 0.0f) {
+                       if (gp_depth[0] > sdepth[0]){
+                               /* copy source color */
+                               copy_v4_v4(frgba, srgba);
+                               /* copy source z-depth */
+                               gp_depth[0] = sdepth[0];
+                       }
+               }
+               else {
+                       /* transparent grease pencil, so copy source render 
data */
+                       copy_v4_v4(frgba, srgba);
+               }
+       }
+
+       /* free memory */
+       MEM_SAFE_FREE(rect_color_src);
+       MEM_SAFE_FREE(rect_depth_src);
 }
 
 static const DrawEngineDataSize GPENCIL_data_size = 
DRW_VIEWPORT_DATA_SIZE(GPENCIL_Data);

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to