[Bf-blender-cvs] [03235ea6723] greasepencil-object: GP drawing: Try to init the eval_ctx from draw_ctx, if C isn't provided
Joshua Leung
noreply at git.blender.org
Tue Nov 7 08:54:14 CET 2017
Commit: 03235ea672317749d822fd142d0650db7a20530d
Author: Joshua Leung
Date: Sun Nov 5 01:54:16 2017 +1300
Branches: greasepencil-object
https://developer.blender.org/rB03235ea672317749d822fd142d0650db7a20530d
GP drawing: Try to init the eval_ctx from draw_ctx, if C isn't provided
===================================================================
M source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
===================================================================
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 4493f830a71..a47565316e2 100644
--- a/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
+++ b/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
@@ -165,6 +165,7 @@ static void gpencil_batch_cache_check_free_slots(Object *ob, bGPdata *UNUSED(gpd
gpencil_batch_cache_resize(cache, cache->cache_size);
}
}
+
/* cache init */
static void gpencil_batch_cache_init(Object *ob, int cfra)
{
@@ -197,7 +198,7 @@ static void gpencil_batch_cache_init(Object *ob, int cfra)
cache->cache_frame = cfra;
}
-/* clear cache */
+/* clear cache */
static void gpencil_batch_cache_clear(GpencilBatchCache *cache, bGPdata *gpd)
{
if (!cache) {
@@ -249,7 +250,7 @@ static GpencilBatchCache *gpencil_batch_cache_get(Object *ob, int cfra)
return gpencil_batch_get_element(ob);
}
- /* create shading group for filling */
+/* create shading group for filling */
static DRWShadingGroup *DRW_gpencil_shgroup_fill_create(GPENCIL_e_data *e_data, GPENCIL_Data *vedata, DRWPass *pass,
GPUShader *shader, bGPdata *gpd, PaletteColor *palcolor, int id)
{
@@ -655,6 +656,22 @@ static void gpencil_draw_onion_strokes(GpencilBatchCache *cache, GPENCIL_e_data
}
}
+
+/* Construct eval_ctx from draw_ctx state
+ * Note: This function copies CTX_data_eval_ctx() / DEG_evaluation_context_init_from_scene()
+ */
+static void gpencil_init_evalctx_from_drawctx(const DRWContextState *draw_ctx, EvaluationContext *eval_ctx)
+{
+ Scene *scene = draw_ctx->scene;
+ if (scene) {
+ eval_ctx->depsgraph = scene->depsgraph_legacy;
+ eval_ctx->ctime = BKE_scene_frame_get(scene);
+ }
+
+ eval_ctx->scene_layer = draw_ctx->scene_layer;
+ eval_ctx->engine = draw_ctx->engine;
+}
+
/* main function to draw strokes */
static void gpencil_draw_strokes(GpencilBatchCache *cache, GPENCIL_e_data *e_data, void *vedata, ToolSettings *ts, Object *ob,
bGPdata *gpd, bGPDlayer *gpl, bGPDframe *src_gpf, bGPDframe *derived_gpf,
@@ -670,16 +687,19 @@ static void gpencil_draw_strokes(GpencilBatchCache *cache, GPENCIL_e_data *e_dat
bool playing = (bool)stl->storage->playing;
/* Get evaluation context */
+ /* NOTE: We must check if C is valid, otherwise we get crashes when trying to save files
+ * (i.e. the thumbnail offscreen rendering fails)
+ */
const DRWContextState *draw_ctx = DRW_context_state_get();
const bContext *C = draw_ctx->evil_C;
EvaluationContext eval_ctx = {0};
if (C) {
- /* NOTE: We must check if C is valid, otherwise we get crashes when trying to save files
- * (i.e. the thumbnail offscreen rendering fails)
- */
CTX_data_eval_ctx(C, &eval_ctx);
}
+ else {
+ gpencil_init_evalctx_from_drawctx(draw_ctx, &eval_ctx);
+ }
/* get parent matrix and save as static data */
ED_gpencil_parent_location(ob, gpd, gpl, viewmatrix);
More information about the Bf-blender-cvs
mailing list