diff options
Diffstat (limited to 'source/blender/blenloader/intern/versioning_280.c')
-rw-r--r-- | source/blender/blenloader/intern/versioning_280.c | 447 |
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. * |