[Bf-blender-cvs] [d7c3a09aacc] greasepencil-object: Fix render error when previous result is NULL
Antonio Vazquez
noreply at git.blender.org
Sat Feb 10 13:12:46 CET 2018
Commit: d7c3a09aacc1ab72296b3385c96876e7c2d2cad9
Author: Antonio Vazquez
Date: Sat Feb 10 13:12:28 2018 +0100
Branches: greasepencil-object
https://developer.blender.org/rBd7c3a09aacc1ab72296b3385c96876e7c2d2cad9
Fix render error when previous result is NULL
===================================================================
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 29433bbb034..13b68539c6d 100644
--- a/source/blender/draw/engines/gpencil/gpencil_engine.c
+++ b/source/blender/draw/engines/gpencil/gpencil_engine.c
@@ -1059,8 +1059,13 @@ static void GPENCIL_render_to_image(void *vedata, struct RenderEngine *engine, s
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);
+ 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)) {
+ rect_color_src = MEM_dupallocN(rp_color_src->rect);
+ 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();
@@ -1099,45 +1104,47 @@ 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 *gp_rgba = &rect_color_gp[i * 4];
- float *gp_depth = &rect_depth_gp[i];
- float *src_rgba = &rect_color_src[i * 4];
- float *src_depth = &rect_depth_src[i];
- /* check transparency */
- if (gp_rgba[3] > 0.0f) {
- /* grease pencil is on back of source render */
- if (gp_depth[0] >= src_depth[0]) {
- /* interpolate source color on top of grease pencil */
- interp_v3_v3v3(gp_rgba, gp_rgba, src_rgba, src_rgba[3]);
- /* copy source z-depth */
- gp_depth[0] = src_depth[0];
+ 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);
+ float *rect_color_gp = rp_color_gp->rect;
+ float *rect_depth_gp = rp_depth_gp->rect;
+
+ for (int i = 0; i < imgsize; i++) {
+ float *gp_rgba = &rect_color_gp[i * 4];
+ float *gp_depth = &rect_depth_gp[i];
+ float *src_rgba = &rect_color_src[i * 4];
+ float *src_depth = &rect_depth_src[i];
+ /* check transparency */
+ if (gp_rgba[3] > 0.0f) {
+ /* grease pencil is on back of source render */
+ if (gp_depth[0] >= src_depth[0]) {
+ /* interpolate source color on top of grease pencil */
+ interp_v3_v3v3(gp_rgba, gp_rgba, src_rgba, src_rgba[3]);
+ /* copy source z-depth */
+ gp_depth[0] = src_depth[0];
+ }
+ else {
+ if (src_rgba[3] > 0.0f) {
+ float tmp[4];
+ copy_v4_v4(tmp, gp_rgba);
+ copy_v4_v4(gp_rgba, src_rgba);
+ /* interpolate background with grease pencil */
+ interp_v3_v3v3(gp_rgba, gp_rgba, tmp, tmp[3]);
+ }
+ }
}
else {
- if (src_rgba[3] > 0.0f) {
- float tmp[4];
- copy_v4_v4(tmp, gp_rgba);
- copy_v4_v4(gp_rgba, src_rgba);
- /* interpolate background with grease pencil */
- interp_v3_v3v3(gp_rgba, gp_rgba, tmp, tmp[3]);
- }
+ copy_v4_v4(gp_rgba, src_rgba);
+ gp_depth[0] = src_depth[0];
}
}
- else {
- copy_v4_v4(gp_rgba, src_rgba);
- gp_depth[0] = src_depth[0];
- }
- }
- /* free memory */
- MEM_SAFE_FREE(rect_color_src);
- MEM_SAFE_FREE(rect_depth_src);
+ /* 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);
More information about the Bf-blender-cvs
mailing list