Commit: 073ef79840b5898ef0efc59c3815ac6e2faae405
Author: Antonio Vazquez
Date:   Fri Jun 30 15:34:34 2017 +0200
Branches: greasepencil-object
https://developer.blender.org/rB073ef79840b5898ef0efc59c3815ac6e2faae405

Fix T51936: Show draw strokes since first stroke

The drawing stroke must not be related to cache drawing because only one stroke 
is done at time.

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

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

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

diff --git a/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c 
b/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
index c79bbc7418d..3905e0724b9 100644
--- a/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
+++ b/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
@@ -200,9 +200,6 @@ void gpencil_batch_cache_clear(bGPdata *gpd)
                MEM_SAFE_FREE(cache->batch_fill);
                MEM_SAFE_FREE(cache->batch_edit);
        }
-
-       BATCH_DISCARD_ALL_SAFE(cache->batch_buffer_stroke);
-       BATCH_DISCARD_ALL_SAFE(cache->batch_buffer_fill);
 }
 
 /* get cache */
@@ -505,7 +502,7 @@ static void gpencil_draw_strokes(GpencilBatchCache *cache, 
GPENCIL_e_data *e_dat
 }
 
  /* draw stroke in drawing buffer */
-static void gpencil_draw_buffer_strokes(GpencilBatchCache *cache, void 
*vedata, ToolSettings *ts, bGPdata *gpd)
+void DRW_gpencil_populate_buffer_strokes(void *vedata, ToolSettings *ts, 
bGPdata *gpd)
 {
        GPENCIL_StorageList *stl = ((GPENCIL_Data *)vedata)->stl;
        bGPDbrush *brush = BKE_gpencil_brush_getactive(ts);
@@ -522,21 +519,21 @@ static void gpencil_draw_buffer_strokes(GpencilBatchCache 
*cache, void *vedata,
                        */
                        short lthick = brush->thickness;
                        if (gpd->sbuffer_size == 1) {
-                               cache->batch_buffer_stroke = 
DRW_gpencil_get_buffer_point_geom(gpd, lthick);
-                               
DRW_shgroup_call_add(stl->g_data->shgrps_point_volumetric, 
cache->batch_buffer_stroke, stl->storage->unit_matrix);
+                               stl->g_data->batch_buffer_stroke = 
DRW_gpencil_get_buffer_point_geom(gpd, lthick);
+                               
DRW_shgroup_call_add(stl->g_data->shgrps_point_volumetric, 
stl->g_data->batch_buffer_stroke, stl->storage->unit_matrix);
                        }
                        else {
                                /* use unit matrix because the buffer is in 
screen space and does not need conversion */
-                               cache->batch_buffer_stroke = 
DRW_gpencil_get_buffer_stroke_geom(gpd, stl->storage->unit_matrix, lthick);
-                               
DRW_shgroup_call_add(stl->g_data->shgrps_drawing_stroke, 
cache->batch_buffer_stroke, stl->storage->unit_matrix);
+                               stl->g_data->batch_buffer_stroke = 
DRW_gpencil_get_buffer_stroke_geom(gpd, stl->storage->unit_matrix, lthick);
+                               
DRW_shgroup_call_add(stl->g_data->shgrps_drawing_stroke, 
stl->g_data->batch_buffer_stroke, stl->storage->unit_matrix);
 
                                if ((gpd->sbuffer_size >= 3) && (gpd->sfill[3] 
> GPENCIL_ALPHA_OPACITY_THRESH)) {
                                        /* if not solid, fill is simulated with 
solid color */
                                        if (gpd->bfill_style > 0) {
                                                gpd->sfill[3] = 0.5f;
                                        }
-                                       cache->batch_buffer_fill = 
DRW_gpencil_get_buffer_fill_geom(gpd->sbuffer, gpd->sbuffer_size, gpd->sfill);
-                                       
DRW_shgroup_call_add(stl->g_data->shgrps_drawing_fill, 
cache->batch_buffer_fill, stl->storage->unit_matrix);
+                                       stl->g_data->batch_buffer_fill = 
DRW_gpencil_get_buffer_fill_geom(gpd->sbuffer, gpd->sbuffer_size, gpd->sfill);
+                                       
DRW_shgroup_call_add(stl->g_data->shgrps_drawing_fill, 
stl->g_data->batch_buffer_fill, stl->storage->unit_matrix);
                                }
                        }
                }
@@ -644,8 +641,6 @@ void DRW_gpencil_populate_datablock(GPENCIL_e_data *e_data, 
void *vedata, Scene
                /* draw normal strokes */
                gpencil_draw_strokes(cache, e_data, vedata, ts, ob, gpd, gpl, 
gpf, gpl->opacity, gpl->tintcolor, false, false);
        }
-       /* draw current painting strokes */
-       gpencil_draw_buffer_strokes(cache, vedata, ts, gpd);
        cache->is_dirty = false;
 }
 
diff --git a/source/blender/draw/engines/gpencil/gpencil_engine.c 
b/source/blender/draw/engines/gpencil/gpencil_engine.c
index 1e3a8df2379..80817da3a02 100644
--- a/source/blender/draw/engines/gpencil/gpencil_engine.c
+++ b/source/blender/draw/engines/gpencil/gpencil_engine.c
@@ -173,6 +173,9 @@ static void GPENCIL_cache_init(void *vedata)
 static void GPENCIL_cache_populate(void *vedata, Object *ob)
 {
        GPENCIL_StorageList *stl = ((GPENCIL_Data *)vedata)->stl;
+       const DRWContextState *draw_ctx = DRW_context_state_get();
+       Scene *scene = draw_ctx->scene;
+       ToolSettings *ts = scene->toolsettings;
 
        /* object datablock (this is not draw now) */
        if (ob->type == OB_GPENCIL && ob->gpd) {
@@ -183,6 +186,9 @@ static void GPENCIL_cache_populate(void *vedata, Object *ob)
                stl->g_data->gp_object_cache = 
gpencil_object_cache_allocate(stl->g_data->gp_object_cache, 
&stl->g_data->gp_cache_size, &stl->g_data->gp_cache_used);
                /* add for drawing later */
                gpencil_object_cache_add(stl->g_data->gp_object_cache, ob, 
&stl->g_data->gp_cache_used);
+               
+               /* draw current painting strokes */
+               DRW_gpencil_populate_buffer_strokes(vedata, ts, ob->gpd);
        }
 }
 
@@ -298,9 +304,6 @@ static void GPENCIL_draw_scene(void *vedata)
                /* edit points */
                DRW_draw_pass(psl->edit_pass);
 
-               /* current drawing buffer */
-               DRW_draw_pass(psl->drawing_pass);
-
                /* detach temp textures */
                DRW_framebuffer_texture_detach(e_data.temp_fbcolor_depth_tx);
                DRW_framebuffer_texture_detach(e_data.temp_fbcolor_color_tx);
@@ -310,6 +313,9 @@ static void GPENCIL_draw_scene(void *vedata)
        }
        /* free memory */
        MEM_SAFE_FREE(stl->g_data->gp_object_cache);
+
+       /* current drawing buffer */
+       DRW_draw_pass(psl->drawing_pass);
 }
 
 static const DrawEngineDataSize GPENCIL_data_size = 
DRW_VIEWPORT_DATA_SIZE(GPENCIL_Data);
diff --git a/source/blender/draw/engines/gpencil/gpencil_engine.h 
b/source/blender/draw/engines/gpencil/gpencil_engine.h
index 26f281e4f37..2fec8d9e87c 100644
--- a/source/blender/draw/engines/gpencil/gpencil_engine.h
+++ b/source/blender/draw/engines/gpencil/gpencil_engine.h
@@ -100,6 +100,10 @@ typedef struct g_data {
        struct DRWShadingGroup *shgrps_drawing_stroke;
        struct DRWShadingGroup *shgrps_drawing_fill;
 
+       /* for buffer only one batch is nedeed because the drawing is only of 
one stroke */
+       Gwn_Batch *batch_buffer_stroke;
+       Gwn_Batch *batch_buffer_fill;
+
        int gp_cache_used;
        int gp_cache_size;
        struct tGPencilObjectCache *gp_object_cache;
@@ -130,10 +134,6 @@ typedef struct GpencilBatchCache {
        Gwn_Batch **batch_fill;
        Gwn_Batch **batch_edit;
 
-       /* for buffer only one batch is nedeed because the drawing is only of 
one stroke */
-       Gwn_Batch *batch_buffer_stroke;
-       Gwn_Batch *batch_buffer_fill;
-
        /* settings to determine if cache is invalid */
        bool is_dirty;
        bool is_editmode;
@@ -150,6 +150,7 @@ struct DRWShadingGroup 
*DRW_gpencil_shgroup_edit_volumetric_create(struct DRWPas
 struct DRWShadingGroup *DRW_gpencil_shgroup_drawing_fill_create(struct DRWPass 
*pass, struct GPUShader *shader);
 
 void DRW_gpencil_populate_datablock(struct GPENCIL_e_data *e_data, void 
*vedata, struct Scene *scene, struct Object *ob, struct ToolSettings *ts, 
struct bGPdata *gpd);
+void DRW_gpencil_populate_buffer_strokes(void *vedata, struct ToolSettings 
*ts, struct bGPdata *gpd);
 
 struct Gwn_Batch *DRW_gpencil_get_point_geom(struct bGPDspoint *pt, short 
thickness, const float ink[4]);
 struct Gwn_Batch *DRW_gpencil_get_stroke_geom(struct bGPDframe *gpf, struct 
bGPDstroke *gps, short thickness, const float ink[4]);

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

Reply via email to