[Bf-blender-cvs] [bbd71c879e2] greasepencil-object: Fix modifier enable/disable on render mode
Antonio Vazquez
noreply at git.blender.org
Sat Jan 20 16:51:39 CET 2018
Commit: bbd71c879e298edc2c13327235a6f5b4532663cb
Author: Antonio Vazquez
Date: Sat Jan 20 16:51:31 2018 +0100
Branches: greasepencil-object
https://developer.blender.org/rBbbd71c879e298edc2c13327235a6f5b4532663cb
Fix modifier enable/disable on render mode
The old test to verify if the modifier was enabled in render mode used G_RENDER_OGL flag, but for new draw manager, there is a function for that: DRW_state_is_image_render()
Also fixed the problem the cache was not set as dirty before render, so the flags were not updated to draw the correct image.
===================================================================
M source/blender/blenkernel/BKE_gpencil.h
M source/blender/blenkernel/intern/gpencil_modifier.c
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
M source/blender/draw/engines/gpencil/gpencil_vfx.c
===================================================================
diff --git a/source/blender/blenkernel/BKE_gpencil.h b/source/blender/blenkernel/BKE_gpencil.h
index 92f983595bd..1118664aefa 100644
--- a/source/blender/blenkernel/BKE_gpencil.h
+++ b/source/blender/blenkernel/BKE_gpencil.h
@@ -197,10 +197,10 @@ bool BKE_gpencil_has_geometry_modifiers(struct Object *ob);
void BKE_gpencil_stroke_modifiers(
struct EvaluationContext *eval_ctx, struct Object *ob,
- struct bGPDlayer *gpl, struct bGPDframe *gpf, struct bGPDstroke *gps);
+ struct bGPDlayer *gpl, struct bGPDframe *gpf, struct bGPDstroke *gps, bool is_render);
void BKE_gpencil_geometry_modifiers(
struct EvaluationContext *eval_ctx, struct Object *ob,
- struct bGPDlayer *gpl, struct bGPDframe *gpf);
+ struct bGPDlayer *gpl, struct bGPDframe *gpf, bool is_render);
void BKE_gpencil_array_modifier_instance_tfm(struct GpencilArrayModifierData *mmd, const int elem_idx[3], float r_mat[4][4]);
diff --git a/source/blender/blenkernel/intern/gpencil_modifier.c b/source/blender/blenkernel/intern/gpencil_modifier.c
index 2ddad9bd540..0d5b8a9981c 100644
--- a/source/blender/blenkernel/intern/gpencil_modifier.c
+++ b/source/blender/blenkernel/intern/gpencil_modifier.c
@@ -353,15 +353,15 @@ bool BKE_gpencil_has_geometry_modifiers(Object *ob)
}
/* apply stroke modifiers */
-void BKE_gpencil_stroke_modifiers(EvaluationContext *eval_ctx, Object *ob, bGPDlayer *gpl, bGPDframe *UNUSED(gpf), bGPDstroke *gps)
+void BKE_gpencil_stroke_modifiers(EvaluationContext *eval_ctx, Object *ob, bGPDlayer *gpl, bGPDframe *UNUSED(gpf), bGPDstroke *gps, bool is_render)
{
ModifierData *md;
bGPdata *gpd = ob->data;
bool is_edit = GPENCIL_ANY_EDIT_MODE(gpd);
for (md = ob->modifiers.first; md; md = md->next) {
- if (((md->mode & eModifierMode_Realtime) && ((G.f & G_RENDER_OGL) == 0)) ||
- ((md->mode & eModifierMode_Render) && (G.f & G_RENDER_OGL)))
+ if (((md->mode & eModifierMode_Realtime) && (is_render == false)) ||
+ ((md->mode & eModifierMode_Render) && (is_render == true)))
{
const ModifierTypeInfo *mti = modifierType_getInfo(md->type);
@@ -377,7 +377,7 @@ void BKE_gpencil_stroke_modifiers(EvaluationContext *eval_ctx, Object *ob, bGPDl
}
/* apply stroke geometry modifiers */
-void BKE_gpencil_geometry_modifiers(EvaluationContext *eval_ctx, Object *ob, bGPDlayer *gpl, bGPDframe *gpf)
+void BKE_gpencil_geometry_modifiers(EvaluationContext *eval_ctx, Object *ob, bGPDlayer *gpl, bGPDframe *gpf, bool is_render)
{
ModifierData *md;
bGPdata *gpd = ob->data;
@@ -385,8 +385,8 @@ void BKE_gpencil_geometry_modifiers(EvaluationContext *eval_ctx, Object *ob, bGP
int id = 0;
for (md = ob->modifiers.first; md; md = md->next) {
- if (((md->mode & eModifierMode_Realtime) && ((G.f & G_RENDER_OGL) == 0)) ||
- ((md->mode & eModifierMode_Render) && (G.f & G_RENDER_OGL)))
+ if (((md->mode & eModifierMode_Realtime) && (is_render == false)) ||
+ ((md->mode & eModifierMode_Render) && (is_render == true)))
{
const ModifierTypeInfo *mti = modifierType_getInfo(md->type);
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 31c05de7778..33a7ddcf2b5 100644
--- a/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
+++ b/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
@@ -714,7 +714,7 @@ static void gpencil_draw_strokes(GpencilBatchCache *cache, GPENCIL_e_data *e_dat
if ((cache->is_dirty) && (ob->modifiers.first) && (!is_multiedit)) {
if (!GP_SIMPLIFY_MODIF(ts, playing)) {
if (BKE_gpencil_has_geometry_modifiers(ob)) {
- BKE_gpencil_geometry_modifiers(&eval_ctx, ob, gpl, derived_gpf);
+ BKE_gpencil_geometry_modifiers(&eval_ctx, ob, gpl, derived_gpf, stl->storage->is_render);
}
}
}
@@ -785,7 +785,7 @@ static void gpencil_draw_strokes(GpencilBatchCache *cache, GPENCIL_e_data *e_dat
/* apply modifiers (only modify geometry, but not create ) */
if ((cache->is_dirty) && (ob->modifiers.first) && (!is_multiedit)) {
if (!GP_SIMPLIFY_MODIF(ts, playing)) {
- BKE_gpencil_stroke_modifiers(&eval_ctx, ob, gpl, derived_gpf, gps);
+ BKE_gpencil_stroke_modifiers(&eval_ctx, ob, gpl, derived_gpf, gps, stl->storage->is_render);
}
}
/* fill */
@@ -1298,8 +1298,8 @@ void gpencil_array_modifiers(GPENCIL_StorageList *stl, Object *ob)
}
for (ModifierData *md = ob->modifiers.first; md; md = md->next) {
- if (((md->mode & eModifierMode_Realtime) && ((G.f & G_RENDER_OGL) == 0)) ||
- ((md->mode & eModifierMode_Render) && (G.f & G_RENDER_OGL)))
+ if (((md->mode & eModifierMode_Realtime) && (stl->storage->is_render == false)) ||
+ ((md->mode & eModifierMode_Render) && (stl->storage->is_render == true)))
{
if (md->type == eModifierType_GpencilArray) {
GpencilArrayModifierData *mmd = (GpencilArrayModifierData *)md;
diff --git a/source/blender/draw/engines/gpencil/gpencil_engine.c b/source/blender/draw/engines/gpencil/gpencil_engine.c
index 4c34ef8e242..9e088ebf87c 100644
--- a/source/blender/draw/engines/gpencil/gpencil_engine.c
+++ b/source/blender/draw/engines/gpencil/gpencil_engine.c
@@ -284,6 +284,8 @@ static void GPENCIL_cache_init(void *vedata)
if (draw_ctx->evil_C) {
stl->storage->playing = ED_screen_animation_playing(CTX_wm_manager(draw_ctx->evil_C)) != NULL ? 1 : 0;
}
+ /* save render state */
+ stl->storage->is_render = DRW_state_is_image_render();
/* detect if painting session */
bGPdata *obact_gpd = NULL;
if ((obact) && (obact->type == OB_GPENCIL) && (obact->data))
@@ -315,6 +317,10 @@ static void GPENCIL_cache_init(void *vedata)
if (stl->storage->playing == 1) {
gpd->flag |= GP_DATA_CACHE_IS_DIRTY;
}
+ /* if render, set as dirty to update all data */
+ else if (stl->storage->is_render == true) {
+ gpd->flag |= GP_DATA_CACHE_IS_DIRTY;
+ }
}
bGPDpaletteref *palslot = BKE_gpencil_paletteslot_get_active(gpd);
PaletteColor *palcolor = BKE_palette_color_get_active((palslot) ? palslot->palette : NULL);
diff --git a/source/blender/draw/engines/gpencil/gpencil_engine.h b/source/blender/draw/engines/gpencil/gpencil_engine.h
index fd5d8e5b954..e082ea2fc95 100644
--- a/source/blender/draw/engines/gpencil/gpencil_engine.h
+++ b/source/blender/draw/engines/gpencil/gpencil_engine.h
@@ -163,6 +163,7 @@ typedef struct GPENCIL_Storage {
float obj_scale;
int pixfactor;
int playing;
+ bool is_render;
int uselines;
float gridsize[2];
float gridcolor[3];
diff --git a/source/blender/draw/engines/gpencil/gpencil_vfx.c b/source/blender/draw/engines/gpencil/gpencil_vfx.c
index bb428eeea0d..24d65e2cbb2 100644
--- a/source/blender/draw/engines/gpencil/gpencil_vfx.c
+++ b/source/blender/draw/engines/gpencil/gpencil_vfx.c
@@ -24,7 +24,6 @@
*/
#include "BKE_modifier.h"
-#include "BKE_global.h"
#include "BKE_gpencil.h"
#include "DRW_engine.h"
@@ -40,7 +39,7 @@
#include "gpencil_engine.h"
/* verify if this modifier is available in the context, return NULL if not available */
-static ModifierData *modifier_available(Object *ob, ModifierType type)
+static ModifierData *modifier_available(Object *ob, ModifierType type, bool is_render)
{
ModifierData *md = modifiers_findByType(ob, type);
if (md == NULL) {
@@ -56,8 +55,8 @@ static ModifierData *modifier_available(Object *ob, ModifierType type)
if (((md->mode & eModifierMode_Editmode) == 0) && (is_edit)) {
return NULL;
}
- if (((md->mode & eModifierMode_Realtime) && ((G.f & G_RENDER_OGL) == 0)) ||
- ((md->mode & eModifierMode_Render) && (G.f & G_RENDER_OGL)))
+ if (((md->mode & eModifierMode_Realtime) && (is_render == false)) ||
+ ((md->mode & eModifierMode_Render) && (is_render == true)))
{
return md;
}
@@ -66,7 +65,7 @@ static ModifierData *modifier_available(Object *ob, ModifierType type)
}
/* verify if this modifier is active */
-static bool modifier_is_active(Object *ob, ModifierData *md)
+static bool modifier_is_active(Object *ob, ModifierData *md, bool is_render)
{
if (md == NULL) {
return false;
@@ -82,8 +81,8 @@ static bool modifier_is_active(Object *ob, ModifierData *md)
return false;
}
- if (((md->mode & eModifierMode_Realtime) && ((G.f & G_RENDER_OGL) == 0)) ||
- ((md->mode & eModifierMode_Render) && (G.f & G_RENDER_OGL)))
+ if (((md->mode & eModifierMode_Realtime) && (is_render == false)) ||
+ ((md->mode & eModifierMode_Render) && (is_render == true)))
{
return true;
}
@@ -427,8 +426,9 @@ void DRW_gpencil_vfx_modifiers(
int ob_idx, struct GPENCIL_e_data *e_data, struct GPENCIL_Data *vedata,
struct Object *ob, struct tGPencilObjectCache *cache)
{
+ GPENCIL_StorageList *stl = ((GPENCIL_Data *)vedata)->stl;
bool ready = false;
- ModifierData *md_wave = modifier_available(ob, eModifierType_GpencilWave);
+ ModifierData *md_wave = modifier_available(ob, eModifierType_GpencilWave, stl->storage->is_render);
if (md_wave) {
DRW_gpencil_vfx_wave(md_wave, ob_idx, e_data, vedata, ob, cache);
@@ -441,7 +441,7 @@ void DRW_gpencil_vfx_modifiers(
for (ModifierData *md = ob->modifiers.first; md; md = md->next) {
switch (md->type) {
case eModifierType_GpencilBlur:
- if (modifier_is_active(ob, md)) {
+ if (modifier_is_active(ob, md, stl->storage->is_render)) {
if (!ready) {
DRW_gpencil_vfx_copy(ob_idx, e_data, vedata, ob, cache);
ready = true;
@@ -450,7 +450,7 @@ void DRW_gpencil_vfx_modifiers(
}
break;
case eModifierType_GpencilPixel:
- if (modifier_is_active(ob, md)) {
+ if (modifier_is_active(ob, md, stl->storage->is_render)) {
if (!ready) {
DRW_gpencil_vfx_copy(ob_idx, e_data, vedata, ob, cache);
ready = true;
@@ -459,7 +459,7 @@ void DRW_gpencil_vfx_modifiers(
}
break;
case eModifierType_GpencilSwirl:
- if (modifier_is_active(ob, md)) {
+ if (modifier_is_active(ob, md, stl->storage->is_render)) {
if (!ready) {
DRW_gpencil_vfx_copy(ob_idx, e_data, vedata, ob, cache);
ready = true;
@@ -468,7 +468,7 @@ void DRW_gpencil_vfx_modifiers(
}
break;
case eModifierType_GpencilFlip:
- if (modifier_is_active(ob, md)) {
+ if (modifier_is_active(ob, md, s
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list