[Bf-blender-cvs] [073ef79840b] greasepencil-object: Fix T51936: Show draw strokes since first stroke
Antonio Vazquez
noreply at git.blender.org
Fri Jun 30 15:34:48 CEST 2017
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]);
More information about the Bf-blender-cvs
mailing list