Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAntonio Vazquez <blendergit@gmail.com>2020-03-09 18:27:24 +0300
committerAntonio Vazquez <blendergit@gmail.com>2020-03-09 18:27:24 +0300
commit29f3af95272590d26f610ae828b2eeee89c82a00 (patch)
treea696a58a2561c48f7ec6166e369e22081e0a64d8 /source/blender/blenloader/intern/versioning_280.c
parentdcb93126876879d969a30a7865700abd072066f8 (diff)
GPencil: Refactor of Draw Engine, Vertex Paint and all internal functions
This commit is a full refactor of the grease pencil modules including Draw Engine, Modifiers, VFX, depsgraph update, improvements in operators and conversion of Sculpt and Weight paint tools to real brushes. Also, a huge code cleanup has been done at all levels. Thanks to @fclem for his work and yo @pepeland and @mendio for the testing and help in the development. Differential Revision: https://developer.blender.org/D6293
Diffstat (limited to 'source/blender/blenloader/intern/versioning_280.c')
-rw-r--r--source/blender/blenloader/intern/versioning_280.c447
1 files changed, 359 insertions, 88 deletions
diff --git a/source/blender/blenloader/intern/versioning_280.c b/source/blender/blenloader/intern/versioning_280.c
index e29c4f8658f..2035ee3590f 100644
--- a/source/blender/blenloader/intern/versioning_280.c
+++ b/source/blender/blenloader/intern/versioning_280.c
@@ -52,6 +52,7 @@
#include "DNA_rigidbody_types.h"
#include "DNA_scene_types.h"
#include "DNA_screen_types.h"
+#include "DNA_shader_fx_types.h"
#include "DNA_view3d_types.h"
#include "DNA_genfile.h"
#include "DNA_workspace_types.h"
@@ -63,6 +64,7 @@
#include "DNA_world_types.h"
#include "BKE_animsys.h"
+#include "BKE_brush.h"
#include "BKE_cloth.h"
#include "BKE_collection.h"
#include "BKE_constraint.h"
@@ -71,6 +73,8 @@
#include "BKE_fcurve.h"
#include "BKE_freestyle.h"
#include "BKE_global.h"
+#include "BKE_gpencil.h"
+#include "BKE_gpencil_modifier.h"
#include "BKE_idprop.h"
#include "BKE_key.h"
#include "BKE_lib_id.h"
@@ -573,7 +577,7 @@ static void do_versions_fix_annotations(bGPdata *gpd)
for (const bGPDpalette *palette = gpd->palettes.first; palette; palette = palette->next) {
for (bGPDpalettecolor *palcolor = palette->colors.first; palcolor; palcolor = palcolor->next) {
/* fix layers */
- for (bGPDlayer *gpl = gpd->layers.first; gpl; gpl = gpl->next) {
+ LISTBASE_FOREACH (bGPDlayer *, gpl, &gpd->layers) {
/* unlock/unhide layer */
gpl->flag &= ~GP_LAYER_LOCKED;
gpl->flag &= ~GP_LAYER_HIDE;
@@ -582,8 +586,8 @@ static void do_versions_fix_annotations(bGPdata *gpd)
/* disable tint */
gpl->tintcolor[3] = 0.0f;
- for (bGPDframe *gpf = gpl->frames.first; gpf; gpf = gpf->next) {
- for (bGPDstroke *gps = gpf->strokes.first; gps; gps = gps->next) {
+ LISTBASE_FOREACH (bGPDframe *, gpf, &gpl->frames) {
+ LISTBASE_FOREACH (bGPDstroke *, gps, &gpf->strokes) {
if ((gps->colorname[0] != '\0') && (STREQ(gps->colorname, palcolor->info))) {
/* copy color settings */
copy_v4_v4(gpl->color, palcolor->color);
@@ -1057,6 +1061,48 @@ static void do_version_curvemapping_walker(Main *bmain, void (*callback)(CurveMa
callback(gpmd->curfalloff);
}
}
+ else if (md->type == eGpencilModifierType_Noise) {
+ NoiseGpencilModifierData *gpmd = (NoiseGpencilModifierData *)md;
+
+ if (gpmd->curve_intensity) {
+ callback(gpmd->curve_intensity);
+ }
+ }
+ else if (md->type == eGpencilModifierType_Vertexcolor) {
+ VertexcolorGpencilModifierData *gpmd = (VertexcolorGpencilModifierData *)md;
+
+ if (gpmd->curve_intensity) {
+ callback(gpmd->curve_intensity);
+ }
+ }
+ else if (md->type == eGpencilModifierType_Smooth) {
+ SmoothGpencilModifierData *gpmd = (SmoothGpencilModifierData *)md;
+
+ if (gpmd->curve_intensity) {
+ callback(gpmd->curve_intensity);
+ }
+ }
+ else if (md->type == eGpencilModifierType_Color) {
+ ColorGpencilModifierData *gpmd = (ColorGpencilModifierData *)md;
+
+ if (gpmd->curve_intensity) {
+ callback(gpmd->curve_intensity);
+ }
+ }
+ else if (md->type == eGpencilModifierType_Opacity) {
+ OpacityGpencilModifierData *gpmd = (OpacityGpencilModifierData *)md;
+
+ if (gpmd->curve_intensity) {
+ callback(gpmd->curve_intensity);
+ }
+ }
+ else if (md->type == eGpencilModifierType_Tint) {
+ TintGpencilModifierData *gpmd = (TintGpencilModifierData *)md;
+
+ if (gpmd->curve_intensity) {
+ callback(gpmd->curve_intensity);
+ }
+ }
}
}
@@ -1554,7 +1600,7 @@ void do_versions_after_linking_280(Main *bmain, ReportList *UNUSED(reports))
if (gpd == NULL) {
continue;
}
- for (bGPDlayer *gpl = gpd->layers.first; gpl; gpl = gpl->next) {
+ LISTBASE_FOREACH (bGPDlayer *, gpl, &gpd->layers) {
if (STREQ(gpl->info, "RulerData3D")) {
gpl->flag |= GP_LAYER_IS_RULER;
break;
@@ -1588,6 +1634,34 @@ void do_versions_after_linking_280(Main *bmain, ReportList *UNUSED(reports))
}
}
+ if (!MAIN_VERSION_ATLEAST(bmain, 282, 2)) {
+ /* Init all Vertex/Sculpt and Weight Paint brushes. */
+ Brush *brush = BLI_findstring(&bmain->brushes, "Pencil", offsetof(ID, name) + 2);
+ for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) {
+ ToolSettings *ts = scene->toolsettings;
+
+ BKE_brush_gpencil_vertex_presets(bmain, ts);
+ BKE_brush_gpencil_sculpt_presets(bmain, ts);
+ BKE_brush_gpencil_weight_presets(bmain, ts);
+
+ /* Ensure new Paint modes. */
+ BKE_paint_ensure_from_paintmode(scene, PAINT_MODE_GPENCIL);
+ BKE_paint_ensure_from_paintmode(scene, PAINT_MODE_VERTEX_GPENCIL);
+ BKE_paint_ensure_from_paintmode(scene, PAINT_MODE_SCULPT_GPENCIL);
+ BKE_paint_ensure_from_paintmode(scene, PAINT_MODE_WEIGHT_GPENCIL);
+
+ /* Set default Draw brush. */
+ if (brush != NULL) {
+ Paint *paint = &ts->gp_paint->paint;
+ BKE_paint_brush_set(paint, brush);
+ /* Enable cursor by default. */
+ paint->flags |= PAINT_SHOW_BRUSH;
+ }
+ /* Ensure Palette by default. */
+ BKE_gpencil_palette_ensure(bmain, scene);
+ }
+ }
+
/**
* Versioning code until next subversion bump goes here.
*
@@ -1774,36 +1848,6 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *bmain)
#endif
{
- /* Grease pencil sculpt and paint cursors */
- if (!DNA_struct_elem_find(fd->filesdna, "GP_Sculpt_Settings", "int", "weighttype")) {
- for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) {
- /* sculpt brushes */
- GP_Sculpt_Settings *gset = &scene->toolsettings->gp_sculpt;
- if (gset) {
- gset->weighttype = GP_SCULPT_TYPE_WEIGHT;
- }
- }
- }
-
- {
- float curcolor_add[3], curcolor_sub[3];
- ARRAY_SET_ITEMS(curcolor_add, 1.0f, 0.6f, 0.6f);
- ARRAY_SET_ITEMS(curcolor_sub, 0.6f, 0.6f, 1.0f);
- GP_Sculpt_Data *gp_brush;
-
- for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) {
- ToolSettings *ts = scene->toolsettings;
- /* sculpt brushes */
- GP_Sculpt_Settings *gset = &ts->gp_sculpt;
- for (int i = 0; i < GP_SCULPT_TYPE_MAX; i++) {
- gp_brush = &gset->brush[i];
- gp_brush->flag |= GP_SCULPT_FLAG_ENABLE_CURSOR;
- copy_v3_v3(gp_brush->curcolor_add, curcolor_add);
- copy_v3_v3(gp_brush->curcolor_sub, curcolor_sub);
- }
- }
- }
-
/* Init grease pencil edit line color */
if (!DNA_struct_elem_find(fd->filesdna, "bGPdata", "float", "line_color[4]")) {
for (bGPdata *gpd = bmain->gpencils.first; gpd; gpd = gpd->id.next) {
@@ -1866,8 +1910,7 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *bmain)
if (!MAIN_VERSION_ATLEAST(bmain, 280, 3)) {
/* init grease pencil grids and paper */
- if (!DNA_struct_elem_find(
- fd->filesdna, "gp_paper_opacity", "float", "gpencil_paper_color[3]")) {
+ if (!DNA_struct_elem_find(fd->filesdna, "View3DOverlay", "float", "gpencil_paper_color[3]")) {
for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
for (ScrArea *area = screen->areabase.first; area; area = area->next) {
for (SpaceLink *sl = area->spacedata.first; sl; sl = sl->next) {
@@ -2621,7 +2664,7 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *bmain)
}
if (!DNA_struct_elem_find(fd->filesdna, "bGPDlayer", "short", "line_change")) {
for (bGPdata *gpd = bmain->gpencils.first; gpd; gpd = gpd->id.next) {
- for (bGPDlayer *gpl = gpd->layers.first; gpl; gpl = gpl->next) {
+ LISTBASE_FOREACH (bGPDlayer *, gpl, &gpd->layers) {
gpl->line_change = gpl->thickness;
if ((gpl->thickness < 1) || (gpl->thickness > 10)) {
gpl->thickness = 3;
@@ -2953,34 +2996,13 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *bmain)
/* grease pencil main material show switches */
for (Material *mat = bmain->materials.first; mat; mat = mat->id.next) {
if (mat->gp_style) {
- mat->gp_style->flag |= GP_STYLE_STROKE_SHOW;
- mat->gp_style->flag |= GP_STYLE_FILL_SHOW;
+ mat->gp_style->flag |= GP_MATERIAL_STROKE_SHOW;
+ mat->gp_style->flag |= GP_MATERIAL_FILL_SHOW;
}
}
}
if (!MAIN_VERSION_ATLEAST(bmain, 280, 33)) {
- /* Grease pencil reset sculpt brushes after struct rename */
- if (!DNA_struct_elem_find(fd->filesdna, "GP_Sculpt_Settings", "int", "weighttype")) {
- float curcolor_add[3], curcolor_sub[3];
- ARRAY_SET_ITEMS(curcolor_add, 1.0f, 0.6f, 0.6f);
- ARRAY_SET_ITEMS(curcolor_sub, 0.6f, 0.6f, 1.0f);
-
- for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) {
- /* sculpt brushes */
- GP_Sculpt_Settings *gset = &scene->toolsettings->gp_sculpt;
- if (gset) {
- for (int i = 0; i < GP_SCULPT_TYPE_MAX; i++) {
- GP_Sculpt_Data *gp_brush = &gset->brush[i];
- gp_brush->size = 30;
- gp_brush->strength = 0.5f;
- gp_brush->flag = GP_SCULPT_FLAG_USE_FALLOFF | GP_SCULPT_FLAG_ENABLE_CURSOR;
- copy_v3_v3(gp_brush->curcolor_add, curcolor_add);
- copy_v3_v3(gp_brush->curcolor_sub, curcolor_sub);
- }
- }
- }
- }
if (!DNA_struct_elem_find(fd->filesdna, "SceneEEVEE", "float", "overscan")) {
for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) {
@@ -3214,7 +3236,7 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *bmain)
/* init Annotations onion skin */
if (!DNA_struct_elem_find(fd->filesdna, "bGPDlayer", "int", "gstep")) {
for (bGPdata *gpd = bmain->gpencils.first; gpd; gpd = gpd->id.next) {
- for (bGPDlayer *gpl = gpd->layers.first; gpl; gpl = gpl->next) {
+ LISTBASE_FOREACH (bGPDlayer *, gpl, &gpd->layers) {
ARRAY_SET_ITEMS(gpl->gcolor_prev, 0.302f, 0.851f, 0.302f);
ARRAY_SET_ITEMS(gpl->gcolor_next, 0.250f, 0.1f, 1.0f);
}
@@ -3420,20 +3442,6 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *bmain)
}
}
- /* Grease pencil target weight */
- if (!DNA_struct_elem_find(fd->filesdna, "GP_Sculpt_Settings", "float", "weight")) {
- for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) {
- /* sculpt brushes */
- GP_Sculpt_Settings *gset = &scene->toolsettings->gp_sculpt;
- if (gset) {
- for (int i = 0; i < GP_SCULPT_TYPE_MAX; i++) {
- GP_Sculpt_Data *gp_brush = &gset->brush[i];
- gp_brush->weight = 1.0f;
- }
- }
- }
- }
-
/* Grease pencil cutter/select segment intersection threshold */
if (!DNA_struct_elem_find(fd->filesdna, "GP_Sculpt_Settings", "float", "isect_threshold")) {
for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) {
@@ -3653,7 +3661,7 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *bmain)
if (gpd->flag & GP_DATA_ANNOTATIONS) {
continue;
}
- for (bGPDlayer *gpl = gpd->layers.first; gpl; gpl = gpl->next) {
+ LISTBASE_FOREACH (bGPDlayer *, gpl, &gpd->layers) {
/* default channel color */
ARRAY_SET_ITEMS(gpl->color, 0.2f, 0.2f, 0.2f);
}
@@ -3744,26 +3752,24 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *bmain)
}
/* init grease pencil brush gradients */
- if (!DNA_struct_elem_find(fd->filesdna, "BrushGpencilSettings", "float", "gradient_f")) {
+ if (!DNA_struct_elem_find(fd->filesdna, "BrushGpencilSettings", "float", "hardeness")) {
for (Brush *brush = bmain->brushes.first; brush; brush = brush->id.next) {
if (brush->gpencil_settings != NULL) {
BrushGpencilSettings *gp = brush->gpencil_settings;
- gp->gradient_f = 1.0f;
- gp->gradient_s[0] = 1.0f;
- gp->gradient_s[1] = 1.0f;
+ gp->hardeness = 1.0f;
+ copy_v2_fl(gp->aspect_ratio, 1.0f);
}
}
}
/* init grease pencil stroke gradients */
- if (!DNA_struct_elem_find(fd->filesdna, "bGPDstroke", "float", "gradient_f")) {
+ if (!DNA_struct_elem_find(fd->filesdna, "bGPDstroke", "float", "hardeness")) {
for (bGPdata *gpd = bmain->gpencils.first; gpd; gpd = gpd->id.next) {
- for (bGPDlayer *gpl = gpd->layers.first; gpl; gpl = gpl->next) {
- for (bGPDframe *gpf = gpl->frames.first; gpf; gpf = gpf->next) {
- for (bGPDstroke *gps = gpf->strokes.first; gps; gps = gps->next) {
- gps->gradient_f = 1.0f;
- gps->gradient_s[0] = 1.0f;
- gps->gradient_s[1] = 1.0f;
+ LISTBASE_FOREACH (bGPDlayer *, gpl, &gpd->layers) {
+ LISTBASE_FOREACH (bGPDframe *, gpf, &gpl->frames) {
+ LISTBASE_FOREACH (bGPDstroke *, gps, &gpf->strokes) {
+ gps->hardeness = 1.0f;
+ copy_v2_fl(gps->aspect_ratio, 1.0f);
}
}
}
@@ -4217,7 +4223,6 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *bmain)
}
}
- /* Fix wrong 3D viewport copying causing corrupt pointers (T69974). */
for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
for (ScrArea *sa = screen->areabase.first; sa; sa = sa->next) {
for (SpaceLink *sl = sa->spacedata.first; sl; sl = sl->next) {
@@ -4507,6 +4512,272 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *bmain)
}
}
+ if (!MAIN_VERSION_ATLEAST(bmain, 283, 7)) {
+ /* Init default Grease Pencil Vertex paint mix factor for Viewport. */
+ if (!DNA_struct_elem_find(
+ fd->filesdna, "View3DOverlay", "float", "gpencil_vertex_paint_opacity")) {
+ LISTBASE_FOREACH (bScreen *, screen, &bmain->screens) {
+ LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
+ LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
+ if (sl->spacetype == SPACE_VIEW3D) {
+ View3D *v3d = (View3D *)sl;
+ v3d->overlay.gpencil_vertex_paint_opacity = 1.0f;
+ }
+ }
+ }
+ }
+ }
+
+ /* Update Grease Pencil after drawing engine and code refactor.
+ * It uses the seed variable of Array modifier to avoid double patching for
+ * files created with a development version. */
+ if (!DNA_struct_elem_find(fd->filesdna, "ArrayGpencilModifierData", "int", "seed")) {
+ /* Init new Grease Pencil Paint tools. */
+ {
+ LISTBASE_FOREACH (Brush *, brush, &bmain->brushes) {
+ if (brush->gpencil_settings != NULL) {
+ brush->gpencil_vertex_tool = brush->gpencil_settings->brush_type;
+ brush->gpencil_sculpt_tool = brush->gpencil_settings->brush_type;
+ brush->gpencil_weight_tool = brush->gpencil_settings->brush_type;
+ }
+ }
+
+ BKE_paint_toolslots_init_from_main(bmain);
+ }
+
+ LISTBASE_FOREACH (Material *, mat, &bmain->materials) {
+ MaterialGPencilStyle *gp_style = mat->gp_style;
+ if (gp_style == NULL) {
+ continue;
+ }
+ /* Fix Grease Pencil Material colors to Linear. */
+ srgb_to_linearrgb_v4(gp_style->stroke_rgba, gp_style->stroke_rgba);
+ srgb_to_linearrgb_v4(gp_style->fill_rgba, gp_style->fill_rgba);
+
+ /* Move old gradient variables to texture. */
+ if (gp_style->fill_style == GP_MATERIAL_FILL_STYLE_GRADIENT) {
+ gp_style->texture_angle = gp_style->gradient_angle;
+ copy_v2_v2(gp_style->texture_scale, gp_style->gradient_scale);
+ copy_v2_v2(gp_style->texture_offset, gp_style->gradient_shift);
+ }
+ /* Set Checker material as Solid. This fill mode has been removed and replaced
+ * by textures. */
+ if (gp_style->fill_style == GP_MATERIAL_FILL_STYLE_CHECKER) {
+ gp_style->fill_style = GP_MATERIAL_FILL_STYLE_SOLID;
+ }
+ /* Update Alpha channel for texture opacity. */
+ if (gp_style->fill_style == GP_MATERIAL_FILL_STYLE_TEXTURE) {
+ gp_style->fill_rgba[3] *= gp_style->texture_opacity;
+ }
+ /* Stroke stencil mask to mix = 1. */
+ if (gp_style->flag & GP_MATERIAL_STROKE_PATTERN) {
+ gp_style->mix_stroke_factor = 1.0f;
+ gp_style->flag &= ~GP_MATERIAL_STROKE_PATTERN;
+ }
+ /* Mix disabled, set mix factor to 0. */
+ else if ((gp_style->flag & GP_MATERIAL_STROKE_TEX_MIX) == 0) {
+ gp_style->mix_stroke_factor = 0.0f;
+ }
+ }
+
+ /* Fix Grease Pencil VFX and modifiers. */
+ LISTBASE_FOREACH (Object *, ob, &bmain->objects) {
+ if (ob->type != OB_GPENCIL) {
+ continue;
+ }
+
+ /* VFX. */
+ LISTBASE_FOREACH (ShaderFxData *, fx, &ob->shader_fx) {
+ switch (fx->type) {
+ case eShaderFxType_Colorize: {
+ ColorizeShaderFxData *vfx = (ColorizeShaderFxData *)fx;
+ if (ELEM(vfx->mode, eShaderFxColorizeMode_GrayScale, eShaderFxColorizeMode_Sepia)) {
+ vfx->factor = 1.0f;
+ }
+ srgb_to_linearrgb_v4(vfx->low_color, vfx->low_color);
+ srgb_to_linearrgb_v4(vfx->high_color, vfx->high_color);
+ break;
+ }
+ case eShaderFxType_Pixel: {
+ PixelShaderFxData *vfx = (PixelShaderFxData *)fx;
+ srgb_to_linearrgb_v4(vfx->rgba, vfx->rgba);
+ break;
+ }
+ case eShaderFxType_Rim: {
+ RimShaderFxData *vfx = (RimShaderFxData *)fx;
+ srgb_to_linearrgb_v3_v3(vfx->rim_rgb, vfx->rim_rgb);
+ srgb_to_linearrgb_v3_v3(vfx->mask_rgb, vfx->mask_rgb);
+ break;
+ }
+ case eShaderFxType_Shadow: {
+ ShadowShaderFxData *vfx = (ShadowShaderFxData *)fx;
+ srgb_to_linearrgb_v4(vfx->shadow_rgba, vfx->shadow_rgba);
+ break;
+ }
+ case eShaderFxType_Glow: {
+ GlowShaderFxData *vfx = (GlowShaderFxData *)fx;
+ srgb_to_linearrgb_v3_v3(vfx->glow_color, vfx->glow_color);
+ vfx->glow_color[3] = 1.0f;
+ srgb_to_linearrgb_v3_v3(vfx->select_color, vfx->select_color);
+ vfx->blur[1] = vfx->blur[0];
+ break;
+ }
+ default:
+ break;
+ }
+ }
+
+ /* Modifiers. */
+ LISTBASE_FOREACH (GpencilModifierData *, md, &ob->greasepencil_modifiers) {
+ switch ((GpencilModifierType)md->type) {
+ case eGpencilModifierType_Array: {
+ ArrayGpencilModifierData *mmd = (ArrayGpencilModifierData *)md;
+ mmd->seed = 1;
+ if ((mmd->offset[0] != 0.0f) || (mmd->offset[1] != 0.0f) ||
+ (mmd->offset[2] != 0.0f)) {
+ mmd->flag |= GP_ARRAY_USE_OFFSET;
+ }
+ if ((mmd->shift[0] != 0.0f) || (mmd->shift[1] != 0.0f) || (mmd->shift[2] != 0.0f)) {
+ mmd->flag |= GP_ARRAY_USE_OFFSET;
+ }
+ if (mmd->object != NULL) {
+ mmd->flag |= GP_ARRAY_USE_OB_OFFSET;
+ }
+ break;
+ }
+ case eGpencilModifierType_Noise: {
+ NoiseGpencilModifierData *mmd = (NoiseGpencilModifierData *)md;
+ mmd->factor /= 25.0f;
+ mmd->factor_thickness = mmd->factor;
+ mmd->factor_strength = mmd->factor;
+ mmd->factor_uvs = mmd->factor;
+ mmd->noise_scale = (mmd->flag & GP_NOISE_FULL_STROKE) ? 0.0f : 1.0f;
+
+ if (mmd->curve_intensity == NULL) {
+ mmd->curve_intensity = BKE_curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
+ if (mmd->curve_intensity) {
+ BKE_curvemapping_initialize(mmd->curve_intensity);
+ }
+ }
+ break;
+ }
+ case eGpencilModifierType_Tint: {
+ TintGpencilModifierData *mmd = (TintGpencilModifierData *)md;
+ srgb_to_linearrgb_v3_v3(mmd->rgb, mmd->rgb);
+ if (mmd->curve_intensity == NULL) {
+ mmd->curve_intensity = BKE_curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
+ if (mmd->curve_intensity) {
+ BKE_curvemapping_initialize(mmd->curve_intensity);
+ }
+ }
+ break;
+ }
+ case eGpencilModifierType_Smooth: {
+ SmoothGpencilModifierData *mmd = (SmoothGpencilModifierData *)md;
+ if (mmd->curve_intensity == NULL) {
+ mmd->curve_intensity = BKE_curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
+ if (mmd->curve_intensity) {
+ BKE_curvemapping_initialize(mmd->curve_intensity);
+ }
+ }
+ break;
+ }
+ case eGpencilModifierType_Opacity: {
+ OpacityGpencilModifierData *mmd = (OpacityGpencilModifierData *)md;
+ if (mmd->curve_intensity == NULL) {
+ mmd->curve_intensity = BKE_curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
+ if (mmd->curve_intensity) {
+ BKE_curvemapping_initialize(mmd->curve_intensity);
+ }
+ }
+ break;
+ }
+ case eGpencilModifierType_Color: {
+ ColorGpencilModifierData *mmd = (ColorGpencilModifierData *)md;
+ if (mmd->curve_intensity == NULL) {
+ mmd->curve_intensity = BKE_curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
+ if (mmd->curve_intensity) {
+ BKE_curvemapping_initialize(mmd->curve_intensity);
+ }
+ }
+ break;
+ }
+ case eGpencilModifierType_Thick: {
+ if (!DNA_struct_elem_find(
+ fd->filesdna, "ThickGpencilModifierData", "float", "thickness_fac")) {
+ ThickGpencilModifierData *mmd = (ThickGpencilModifierData *)md;
+ mmd->thickness_fac = mmd->thickness;
+ }
+ break;
+ }
+ case eGpencilModifierType_Multiply: {
+ MultiplyGpencilModifierData *mmd = (MultiplyGpencilModifierData *)md;
+ mmd->fading_opacity = 1.0 - mmd->fading_opacity;
+ break;
+ }
+ case eGpencilModifierType_Subdiv: {
+ const short simple = (1 << 0);
+ SubdivGpencilModifierData *mmd = (SubdivGpencilModifierData *)md;
+ if (mmd->flag & simple) {
+ mmd->flag &= ~simple;
+ mmd->type = GP_SUBDIV_SIMPLE;
+ }
+ break;
+ }
+ case eGpencilModifierType_Vertexcolor: {
+ VertexcolorGpencilModifierData *mmd = (VertexcolorGpencilModifierData *)md;
+ if (mmd->curve_intensity == NULL) {
+ mmd->curve_intensity = BKE_curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
+ if (mmd->curve_intensity) {
+ BKE_curvemapping_initialize(mmd->curve_intensity);
+ }
+ }
+ break;
+ }
+ default:
+ break;
+ }
+ }
+ }
+
+ /* Fix Layers Colors and Vertex Colors to Linear.
+ * Also set lights to on for layers. */
+ LISTBASE_FOREACH (bGPdata *, gpd, &bmain->gpencils) {
+ if (gpd->flag & GP_DATA_ANNOTATIONS) {
+ continue;
+ }
+ /* Onion colors. */
+ srgb_to_linearrgb_v3_v3(gpd->gcolor_prev, gpd->gcolor_prev);
+ srgb_to_linearrgb_v3_v3(gpd->gcolor_next, gpd->gcolor_next);
+ /* Z-depth Offset. */
+ gpd->zdepth_offset = 0.150f;
+
+ LISTBASE_FOREACH (bGPDlayer *, gpl, &gpd->layers) {
+ gpl->flag |= GP_LAYER_USE_LIGHTS;
+ srgb_to_linearrgb_v4(gpl->tintcolor, gpl->tintcolor);
+ gpl->vertex_paint_opacity = 1.0f;
+
+ LISTBASE_FOREACH (bGPDframe *, gpf, &gpl->frames) {
+ LISTBASE_FOREACH (bGPDstroke *, gps, &gpf->strokes) {
+ /* Set initial opacity for fill color. */
+ gps->fill_opacity_fac = 1.0f;
+
+ /* Calc geometry data because in old versions this data was not saved. */
+ BKE_gpencil_stroke_geometry_update(gps);
+
+ srgb_to_linearrgb_v4(gps->vert_color_fill, gps->vert_color_fill);
+ int i;
+ bGPDspoint *pt;
+ for (i = 0, pt = gps->points; i < gps->totpoints; i++, pt++) {
+ srgb_to_linearrgb_v4(pt->vert_color, pt->vert_color);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
/**
* Versioning code until next subversion bump goes here.
*