Commit: 5e5496e6ea940b82088165106968fbdfae2df6a4
Author: Charlie Jolly
Date:   Mon Jan 14 22:39:01 2019 +0000
Branches: greasepencil-object
https://developer.blender.org/rB5e5496e6ea940b82088165106968fbdfae2df6a4

GP: Fill: Fix crasher when unable to create GPUOffScreen

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

M       source/blender/editors/gpencil/gpencil_fill.c

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

diff --git a/source/blender/editors/gpencil/gpencil_fill.c 
b/source/blender/editors/gpencil/gpencil_fill.c
index e4ce6a4d469..23211009b36 100644
--- a/source/blender/editors/gpencil/gpencil_fill.c
+++ b/source/blender/editors/gpencil/gpencil_fill.c
@@ -284,13 +284,13 @@ static void gp_draw_datablock(tGPDfill *tgpf, const float 
ink[4])
 }
 
 /* draw strokes in offscreen buffer */
-static void gp_render_offscreen(tGPDfill *tgpf)
+static bool gp_render_offscreen(tGPDfill *tgpf)
 {
        bool is_ortho = false;
        float winmat[4][4];
 
        if (!tgpf->gpd) {
-               return;
+               return false;
        }
        
        /* set temporary new size */
@@ -318,6 +318,11 @@ static void gp_render_offscreen(tGPDfill *tgpf)
 
        char err_out[256] = "unknown";
        GPUOffScreen *offscreen = GPU_offscreen_create(tgpf->sizex, 
tgpf->sizey, 0, true, false, err_out);
+       if (offscreen == NULL) {
+               printf("GPencil - Fill - Unable to create fill buffer\n"); 
+               return false;
+       }
+
        GPU_offscreen_bind(offscreen, true);
        uint flag = IB_rect | IB_rectfloat;
        ImBuf *ibuf = IMB_allocImBuf(tgpf->sizex, tgpf->sizey, 32, flag);
@@ -374,6 +379,8 @@ static void gp_render_offscreen(tGPDfill *tgpf)
        /* switch back to window-system-provided framebuffer */
        GPU_offscreen_unbind(offscreen, true);
        GPU_offscreen_free(offscreen);
+
+       return true;
 }
 
 /* return pixel data (rgba) at index */
@@ -1233,25 +1240,27 @@ static int gpencil_fill_modal(bContext *C, wmOperator 
*op, const wmEvent *event)
                                                tgpf->center[1] = 
event->mval[1];
 
                                                /* render screen to temp image 
*/
-                                               gp_render_offscreen(tgpf);
+                                               if ( gp_render_offscreen(tgpf) 
) {
+
+                                                       /* apply boundary fill 
*/
+                                                       
gpencil_boundaryfill_area(tgpf);
 
-                                               /* apply boundary fill */
-                                               gpencil_boundaryfill_area(tgpf);
+                                                       /* clean borders to 
avoid infinite loops */
+                                                       
gpencil_clean_borders(tgpf);
 
-                                               /* clean borders to avoid 
infinite loops */
-                                               gpencil_clean_borders(tgpf);
+                                                       /* analyze outline */
+                                                       
gpencil_get_outline_points(tgpf);
 
-                                               /* analyze outline */
-                                               
gpencil_get_outline_points(tgpf);
+                                                       /* create array of 
points from stack */
+                                                       
gpencil_points_from_stack(tgpf);
 
-                                               /* create array of points from 
stack */
-                                               gpencil_points_from_stack(tgpf);
+                                                       /* create z-depth array 
for reproject */
+                                                       
gpencil_get_depth_array(tgpf);
 
-                                               /* create z-depth array for 
reproject */
-                                               gpencil_get_depth_array(tgpf);
+                                                       /* create stroke and 
reproject */
+                                                       
gpencil_stroke_from_buffer(tgpf);
 
-                                               /* create stroke and reproject 
*/
-                                               
gpencil_stroke_from_buffer(tgpf);
+                                               }
 
                                                /* restore size */
                                                tgpf->ar->winx = 
(short)tgpf->bwinx;

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to