From f745564e4ee791e4faf804b09ce975b882f4f8d9 Mon Sep 17 00:00:00 2001 From: Antony Riakiotakis Date: Mon, 21 Jul 2014 12:02:05 +0200 Subject: GSOC 2013 paint Yep, at last it's here! There are a few minor issues remaining but development can go on in master after discussion at blender institute. For full list of features see: http://wiki.blender.org/index.php/Dev:Ref/Release_Notes/2.72/Painting Thanks to Sergey and Campbell for the extensive review and to the countless artists that have given their input and reported issues during development. --- source/blender/blenloader/intern/readfile.c | 59 ++++++++++++++++++++++- source/blender/blenloader/intern/versioning_270.c | 22 +++++++++ source/blender/blenloader/intern/writefile.c | 34 +++++++++++++ 3 files changed, 114 insertions(+), 1 deletion(-) (limited to 'source/blender/blenloader/intern') diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index 419f72b5fd6..d5eebdb12d2 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -1824,6 +1824,7 @@ static void lib_link_brush(FileData *fd, Main *main) brush->mtex.tex = newlibadr_us(fd, brush->id.lib, brush->mtex.tex); brush->mask_mtex.tex = newlibadr_us(fd, brush->id.lib, brush->mask_mtex.tex); brush->clone.image = newlibadr_us(fd, brush->id.lib, brush->clone.image); + brush->paint_curve = newlibadr_us(fd, brush->id.lib, brush->paint_curve); } } } @@ -1834,6 +1835,8 @@ static void direct_link_brush(FileData *fd, Brush *brush) /* fallof curve */ brush->curve = newdataadr(fd, brush->curve); + brush->gradient = newdataadr(fd, brush->gradient); + if (brush->curve) direct_link_curvemapping(fd, brush->curve); else @@ -1843,6 +1846,43 @@ static void direct_link_brush(FileData *fd, Brush *brush) brush->icon_imbuf = NULL; } +/* ************ READ Palette *************** */ +static void lib_link_palette(FileData *UNUSED(fd), Main *main) +{ + Palette *palette; + + /* only link ID pointers */ + for (palette = main->palettes.first; palette; palette = palette->id.next) { + if (palette->id.flag & LIB_NEED_LINK) { + palette->id.flag -= LIB_NEED_LINK; + } + } +} + +static void direct_link_palette(FileData *fd, Palette *palette) +{ + /* palette itself has been read */ + link_list(fd, &palette->colors); +} + +static void lib_link_paint_curve(FileData *UNUSED(fd), Main *main) +{ + PaintCurve *pc; + + /* only link ID pointers */ + for (pc = main->paintcurves.first; pc; pc = pc->id.next) { + if (pc->id.flag & LIB_NEED_LINK) { + pc->id.flag -= LIB_NEED_LINK; + } + } +} + +static void direct_link_paint_curve(FileData *fd, PaintCurve *pc) +{ + pc->points = newdataadr(fd, pc->points); +} + + static void direct_link_script(FileData *UNUSED(fd), Script *script) { script->id.us = 1; @@ -3516,7 +3556,8 @@ static void direct_link_material(FileData *fd, Material *ma) for (a = 0; a < MAX_MTEX; a++) { ma->mtex[a] = newdataadr(fd, ma->mtex[a]); } - + ma->texpaintslot = NULL; + ma->ramp_col = newdataadr(fd, ma->ramp_col); ma->ramp_spec = newdataadr(fd, ma->ramp_spec); @@ -5059,6 +5100,7 @@ static void link_paint(FileData *fd, Scene *sce, Paint *p) { if (p) { p->brush = newlibadr_us(fd, sce->id.lib, p->brush); + p->palette = newlibadr_us(fd, sce->id.lib, p->palette); p->paint_cursor = NULL; } } @@ -5107,6 +5149,10 @@ static void lib_link_scene(FileData *fd, Main *main) sce->toolsettings->sculpt->gravity_object = newlibadr_us(fd, sce->id.lib, sce->toolsettings->sculpt->gravity_object); + if (sce->toolsettings->imapaint.stencil) + sce->toolsettings->imapaint.stencil = + newlibadr_us(fd, sce->id.lib, sce->toolsettings->imapaint.stencil); + sce->toolsettings->skgen_template = newlibadr(fd, sce->id.lib, sce->toolsettings->skgen_template); for (base = sce->base.first; base; base = next) { @@ -7138,6 +7184,8 @@ static const char *dataname(short id_code) case ID_NT: return "Data from NT"; case ID_BR: return "Data from BR"; case ID_PA: return "Data from PA"; + case ID_PAL: return "Data from PAL"; + case ID_PC: return "Data from PCRV"; case ID_GD: return "Data from GD"; case ID_WM: return "Data from WM"; case ID_MC: return "Data from MC"; @@ -7323,6 +7371,12 @@ static BHead *read_libblock(FileData *fd, Main *main, BHead *bhead, int flag, ID case ID_LS: direct_link_linestyle(fd, (FreestyleLineStyle *)id); break; + case ID_PAL: + direct_link_palette(fd, (Palette *)id); + break; + case ID_PC: + direct_link_paint_curve(fd, (PaintCurve *)id); + break; } oldnewmap_free_unused(fd->datamap); @@ -7511,6 +7565,8 @@ static void lib_link_all(FileData *fd, Main *main) lib_link_vfont(fd, main); lib_link_nodetree(fd, main); /* has to be done after scene/materials, this will verify group nodes */ lib_link_brush(fd, main); + lib_link_palette(fd, main); + lib_link_paint_curve(fd, main); lib_link_particlesettings(fd, main); lib_link_movieclip(fd, main); lib_link_mask(fd, main); @@ -8050,6 +8106,7 @@ static void expand_brush(FileData *fd, Main *mainvar, Brush *brush) expand_doit(fd, mainvar, brush->mtex.tex); expand_doit(fd, mainvar, brush->mask_mtex.tex); expand_doit(fd, mainvar, brush->clone.image); + expand_doit(fd, mainvar, brush->paint_curve); } static void expand_material(FileData *fd, Main *mainvar, Material *ma) diff --git a/source/blender/blenloader/intern/versioning_270.c b/source/blender/blenloader/intern/versioning_270.c index dde16c8d44f..be6f985d701 100644 --- a/source/blender/blenloader/intern/versioning_270.c +++ b/source/blender/blenloader/intern/versioning_270.c @@ -34,6 +34,7 @@ /* allow readfile to use deprecated functionality */ #define DNA_DEPRECATED_ALLOW +#include "DNA_brush_types.h" #include "DNA_constraint_types.h" #include "DNA_sdna_types.h" #include "DNA_space_types.h" @@ -309,6 +310,13 @@ void blo_do_versions_270(FileData *fd, Library *UNUSED(lib), Main *main) mat->line_col[3] = mat->alpha; } } + + if (!DNA_struct_elem_find(fd->filesdna, "RenderData", "int", "preview_start_resolution")) { + Scene *scene; + for (scene = main->scene.first; scene; scene = scene->id.next) { + scene->r.preview_start_resolution = 64; + } + } } if (!MAIN_VERSION_ATLEAST(main, 271, 2)) { @@ -334,6 +342,20 @@ void blo_do_versions_270(FileData *fd, Library *UNUSED(lib), Main *main) } } + if (!MAIN_VERSION_ATLEAST(main, 271, 3)) { + Scene *sce; + Brush *br; + + for (sce = main->scene.first; sce; sce = sce->id.next) { + sce->toolsettings->imapaint.slot_xresolution_default = 1024; + sce->toolsettings->imapaint.slot_yresolution_default = 1024; + } + + for (br = main->brush.first; br; br = br->id.next) { + br->fill_threshold = 0.2f; + } + } + if (!DNA_struct_elem_find(fd->filesdna, "RenderData", "int", "preview_start_resolution")) { Scene *scene; for (scene = main->scene.first; scene; scene = scene->id.next) { diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c index 759e17295bc..13fa6f65d0c 100644 --- a/source/blender/blenloader/intern/writefile.c +++ b/source/blender/blenloader/intern/writefile.c @@ -2924,6 +2924,38 @@ static void write_brushes(WriteData *wd, ListBase *idbase) if (brush->curve) write_curvemapping(wd, brush->curve); + if (brush->curve) + writestruct(wd, DATA, "ColorBand", 1, brush->gradient); + } + } +} + +static void write_palettes(WriteData *wd, ListBase *idbase) +{ + Palette *palette; + + for (palette = idbase->first; palette; palette = palette->id.next) { + if (palette->id.us > 0 || wd->current) { + PaletteColor *color; + writestruct(wd, ID_PAL, "Palette", 1, palette); + if (palette->id.properties) IDP_WriteProperty(palette->id.properties, wd); + + for (color = palette->colors.first; color; color= color->next) + writestruct(wd, DATA, "PaletteColor", 1, color); + } + } +} + +static void write_paintcurves(WriteData *wd, ListBase *idbase) +{ + PaintCurve *pc; + + for (pc = idbase->first; pc; pc = pc->id.next) { + if (pc->id.us > 0 || wd->current) { + writestruct(wd, ID_PC, "PaintCurve", 1, pc); + + writestruct(wd, DATA, "PaintCurvePoint", pc->tot_points, pc->points); + if (pc->id.properties) IDP_WriteProperty(pc->id.properties, wd); } } } @@ -3399,6 +3431,8 @@ static int write_file_handle(Main *mainvar, int handle, MemFile *compare, MemFil write_particlesettings(wd, &mainvar->particle); write_nodetrees(wd, &mainvar->nodetree); write_brushes (wd, &mainvar->brush); + write_palettes (wd, &mainvar->palettes); + write_paintcurves (wd, &mainvar->paintcurves); write_scripts (wd, &mainvar->script); write_gpencils (wd, &mainvar->gpencil); write_linestyles(wd, &mainvar->linestyle); -- cgit v1.2.3