Merge branch 'master' into blender2.8
authorPhilipp Oeser <info@graphics-engineer.com>
Mon, 11 Jun 2018 07:34:04 +0000 (09:34 +0200)
committerPhilipp Oeser <info@graphics-engineer.com>
Mon, 11 Jun 2018 07:34:04 +0000 (09:34 +0200)
1  2 
source/blender/editors/sculpt_paint/paint_image_proj.c

index 32355d41ada4fcd637dbfb089f7e9e7d2e0dcd0a,a24599f813f982ebfe8b74dd1109b0fc95799e59..aa38df71ded5b9653251ce3ff6db5eea10944942
@@@ -65,6 -65,7 +65,6 @@@
  #include "BKE_colorband.h"
  #include "BKE_context.h"
  #include "BKE_colortools.h"
 -#include "BKE_depsgraph.h"
  #include "BKE_DerivedMesh.h"
  #include "BKE_idprop.h"
  #include "BKE_brush.h"
  #include "BKE_material.h"
  #include "BKE_mesh.h"
  #include "BKE_mesh_mapping.h"
 +#include "BKE_mesh_runtime.h"
  #include "BKE_node.h"
  #include "BKE_paint.h"
  #include "BKE_report.h"
  #include "BKE_scene.h"
  #include "BKE_texture.h"
  
 +#include "DEG_depsgraph.h"
 +#include "DEG_depsgraph_query.h"
 +
  #include "UI_interface.h"
  
+ #include "ED_object.h"
  #include "ED_mesh.h"
  #include "ED_node.h"
  #include "ED_paint.h"
@@@ -229,7 -227,6 +230,7 @@@ typedef struct ProjPaintState 
        View3D *v3d;
        RegionView3D *rv3d;
        ARegion *ar;
 +      Depsgraph *depsgraph;
        Scene *scene;
        int source; /* PROJ_SRC_**** */
  
        bool  do_backfacecull;          /* ignore faces with normals pointing away, skips a lot of raycasts if your normals are correctly flipped */
        bool  do_mask_normal;           /* mask out pixels based on their normals */
        bool  do_mask_cavity;           /* mask out pixels based on cavity */
 -      bool  do_new_shading_nodes;     /* cache BKE_scene_use_new_shading_nodes value */
        float normal_angle;             /* what angle to mask at */
        float normal_angle__cos;         /* cos(normal_angle), faster to compare */
        float normal_angle_inner;
@@@ -2493,7 -2491,8 +2494,7 @@@ static bool IsectPoly2Df_twoside(const 
  static void project_paint_face_init(
          const ProjPaintState *ps,
          const int thread_index, const int bucket_index, const int tri_index, const int image_index,
 -        const rctf *clip_rect, const rctf *bucket_bounds, ImBuf *ibuf, ImBuf **tmpibuf,
 -        const bool clamp_u, const bool clamp_v)
 +        const rctf *clip_rect, const rctf *bucket_bounds, ImBuf *ibuf, ImBuf **tmpibuf)
  {
        /* Projection vars, to get the 3D locations into screen space  */
        MemArena *arena = ps->arena_mt[thread_index];
  #endif
  
                if (pixel_bounds_array(uv_clip, &bounds_px, ibuf->x, ibuf->y, uv_clip_tot)) {
 -
 -                      if (clamp_u) {
 -                              CLAMP(bounds_px.xmin, 0, ibuf->x);
 -                              CLAMP(bounds_px.xmax, 0, ibuf->x);
 -                      }
 -
 -                      if (clamp_v) {
 -                              CLAMP(bounds_px.ymin, 0, ibuf->y);
 -                              CLAMP(bounds_px.ymax, 0, ibuf->y);
 -                      }
 -
  #if 0
                        project_paint_undo_tiles_init(&bounds_px, ps->projImages + image_index, tmpibuf,
                                                      tile_width, threaded, ps->do_masking);
@@@ -2916,16 -2926,19 +2917,16 @@@ static void project_bucket_init
        int tri_index, image_index = 0;
        ImBuf *ibuf = NULL;
        Image *tpage_last = NULL, *tpage;
 -      Image *ima = NULL;
        ImBuf *tmpibuf = NULL;
  
        if (ps->image_tot == 1) {
                /* Simple loop, no context switching */
                ibuf = ps->projImages[0].ibuf;
 -              ima = ps->projImages[0].ima;
  
                for (node = ps->bucketFaces[bucket_index]; node; node = node->next) {
                        project_paint_face_init(
                                ps, thread_index, bucket_index, GET_INT_FROM_POINTER(node->link), 0,
 -                              clip_rect, bucket_bounds, ibuf, &tmpibuf,
 -                              (ima->tpageflag & IMA_CLAMP_U) != 0, (ima->tpageflag & IMA_CLAMP_V) != 0);
 +                              clip_rect, bucket_bounds, ibuf, &tmpibuf);
                }
        }
        else {
                                for (image_index = 0; image_index < ps->image_tot; image_index++) {
                                        if (ps->projImages[image_index].ima == tpage_last) {
                                                ibuf = ps->projImages[image_index].ibuf;
 -                                              ima = ps->projImages[image_index].ima;
                                                break;
                                        }
                                }
  
                        project_paint_face_init(
                                ps, thread_index, bucket_index, tri_index, image_index,
 -                              clip_rect, bucket_bounds, ibuf, &tmpibuf,
 -                              (ima->tpageflag & IMA_CLAMP_U) != 0, (ima->tpageflag & IMA_CLAMP_V) != 0);
 +                              clip_rect, bucket_bounds, ibuf, &tmpibuf);
                }
        }
  
@@@ -3085,7 -3100,7 +3086,7 @@@ static void proj_paint_state_non_cddm_i
  }
  
  static void proj_paint_state_viewport_init(
 -        ProjPaintState *ps, const char symmetry_flag)
 +        ProjPaintState *ps, const Depsgraph *depsgraph, const char symmetry_flag)
  {
        float mat[3][3];
        float viewmat[4][4];
  
                ED_view3d_ob_project_mat_get_from_obmat(ps->rv3d, ps->obmat, ps->projectMat);
  
 -              ps->is_ortho = ED_view3d_clip_range_get(ps->v3d, ps->rv3d, &ps->clipsta, &ps->clipend, true);
 +              ps->is_ortho = ED_view3d_clip_range_get(ps->depsgraph, ps->v3d, ps->rv3d, &ps->clipsta, &ps->clipend, true);
        }
        else {
                /* re-projection */
                        invert_m4_m4(viewinv, viewmat);
                }
                else if (ps->source == PROJ_SRC_IMAGE_CAM) {
 -                      Object *cam_ob = ps->scene->camera;
 +                      Object *cam_ob_eval = DEG_get_evaluated_object(depsgraph, ps->scene->camera);
                        CameraParams params;
  
                        /* viewmat & viewinv */
 -                      copy_m4_m4(viewinv, cam_ob->obmat);
 +                      copy_m4_m4(viewinv, cam_ob_eval->obmat);
                        normalize_m4(viewinv);
                        invert_m4_m4(viewmat, viewinv);
  
                        /* window matrix, clipping and ortho */
                        BKE_camera_params_init(&params);
 -                      BKE_camera_params_from_object(&params, cam_ob);
 +                      BKE_camera_params_from_object(&params, cam_ob_eval);
                        BKE_camera_params_compute_viewplane(&params, ps->winx, ps->winy, 1.0f, 1.0f);
                        BKE_camera_params_compute_matrix(&params);
  
@@@ -3408,14 -3423,12 +3409,14 @@@ static void project_paint_bleed_add_fac
  #endif
  
  /* Return true if DM can be painted on, false otherwise */
 -static bool proj_paint_state_dm_init(ProjPaintState *ps)
 +static bool proj_paint_state_dm_init(const bContext *C, ProjPaintState *ps)
  {
 +      Depsgraph *depsgraph = CTX_data_depsgraph(C);
 +
        /* Workaround for subsurf selection, try the display mesh first */
        if (ps->source == PROJ_SRC_IMAGE_CAM) {
                /* using render mesh, assume only camera was rendered from */
 -              ps->dm = mesh_create_derived_render(ps->scene, ps->ob, ps->scene->customdata_mask | CD_MASK_MTFACE);
 +              ps->dm = mesh_create_derived_render(depsgraph, ps->scene, ps->ob, ps->scene->customdata_mask | CD_MASK_MTFACE);
                ps->dm_release = true;
        }
        else if (ps->ob->derivedFinal &&
        }
        else {
                ps->dm = mesh_get_derived_final(
 -                      ps->scene, ps->ob,
 +                      depsgraph, ps->scene, ps->ob,
                        ps->scene->customdata_mask | CD_MASK_MTFACE | (ps->do_face_sel ? CD_ORIGINDEX : 0));
                ps->dm_release = true;
        }
@@@ -3477,7 -3490,7 +3478,7 @@@ static void proj_paint_layer_clone_init
  
        /* use clone mtface? */
        if (ps->do_layer_clone) {
 -              const int layer_num = CustomData_get_clone_layer(&((Mesh *)ps->ob->data)->pdata, CD_MTEXPOLY);
 +              const int layer_num = CustomData_get_clone_layer(&((Mesh *)ps->ob->data)->ldata, CD_MLOOPUV);
  
                ps->dm_mloopuv_clone = MEM_mallocN(ps->dm_totpoly * sizeof(MLoopUV *), "proj_paint_mtfaces");
  
@@@ -3807,7 -3820,7 +3808,7 @@@ static void project_paint_prepare_all_f
  
  /* run once per stroke before projection painting */
  static void project_paint_begin(
 -        ProjPaintState *ps,
 +        const bContext *C, ProjPaintState *ps,
          const bool is_multi_view, const char symmetry_flag)
  {
        ProjPaintLayerClone layer_clone;
  
        /* paint onto the derived mesh */
        if (ps->is_shared_user == false) {
 -              if (!proj_paint_state_dm_init(ps)) {
 +              if (!proj_paint_state_dm_init(C, ps)) {
                        return;
                }
        }
  
        if (ps->do_layer_stencil || ps->do_stencil_brush) {
                //int layer_num = CustomData_get_stencil_layer(&ps->dm->loopData, CD_MLOOPUV);
 -              int layer_num = CustomData_get_stencil_layer(&((Mesh *)ps->ob->data)->pdata, CD_MTEXPOLY);
 +              int layer_num = CustomData_get_stencil_layer(&((Mesh *)ps->ob->data)->ldata, CD_MLOOPUV);
                if (layer_num != -1)
                        ps->dm_mloopuv_stencil = CustomData_get_layer_n(&ps->dm->loopData, CD_MLOOPUV, layer_num);
  
                proj_paint_state_cavity_init(ps);
        }
  
 -      proj_paint_state_viewport_init(ps, symmetry_flag);
 +      proj_paint_state_viewport_init(ps, CTX_data_depsgraph(C), symmetry_flag);
  
        /* calculate vert screen coords
         * run this early so we can calculate the x/y resolution of our bucket rect */
@@@ -3907,7 -3920,7 +3908,7 @@@ static void paint_proj_begin_clone(Proj
        /* setup clone offset */
        if (ps->tool == PAINT_TOOL_CLONE) {
                float projCo[4];
 -              copy_v3_v3(projCo, ED_view3d_cursor3d_get(ps->scene, ps->v3d));
 +              copy_v3_v3(projCo, ED_view3d_cursor3d_get(ps->scene, ps->v3d)->location);
                mul_m4_v3(ps->obmat_imat, projCo);
  
                projCo[3] = 1.0f;
@@@ -3928,7 -3941,7 +3929,7 @@@ static void project_paint_end(ProjPaint
                ProjPaintImage *projIma;
                for (a = 0, projIma = ps->projImages; a < ps->image_tot; a++, projIma++) {
                        BKE_image_release_ibuf(projIma->ima, projIma->ibuf, NULL);
 -                      DAG_id_tag_update(&projIma->ima->id, 0);
 +                      DEG_id_tag_update(&projIma->ima->id, 0);
                }
        }
  
@@@ -5013,18 -5026,17 +5014,18 @@@ void paint_proj_stroke
  
        /* clone gets special treatment here to avoid going through image initialization */
        if (ps_handle->is_clone_cursor_pick) {
 -              Main *bmain = CTX_data_main(C);
                Scene *scene = ps_handle->scene;
 +              struct Depsgraph *depsgraph = CTX_data_depsgraph(C);
                View3D *v3d = CTX_wm_view3d(C);
                ARegion *ar = CTX_wm_region(C);
 -              float *cursor = ED_view3d_cursor3d_get(scene, v3d);
 +              float *cursor = ED_view3d_cursor3d_get(scene, v3d)->location;
                int mval_i[2] = {(int)pos[0], (int)pos[1]};
  
                view3d_operator_needs_opengl(C);
  
 -              if (!ED_view3d_autodist(bmain, scene, ar, v3d, mval_i, cursor, false, NULL))
 +              if (!ED_view3d_autodist(depsgraph, ar, v3d, mval_i, cursor, false, NULL)) {
                        return;
 +              }
  
                ED_region_tag_redraw(ar);
  
@@@ -5080,7 -5092,6 +5081,7 @@@ static void project_state_init(bContex
        ps->rv3d = CTX_wm_region_view3d(C);
        ps->ar = CTX_wm_region(C);
  
 +      ps->depsgraph = CTX_data_depsgraph(C);
        ps->scene = scene;
        ps->ob = ob; /* allow override of active object */
  
        else {
                ps->do_backfacecull = ps->do_occlude = ps->do_mask_normal = 0;
        }
 -      ps->do_new_shading_nodes = BKE_scene_use_new_shading_nodes(scene); /* only cache the value */
  
        if (ps->tool == PAINT_TOOL_CLONE)
                ps->do_layer_clone = (settings->imapaint.flag & IMAGEPAINT_PROJECT_LAYER_CLONE) ? 1 : 0;
@@@ -5202,7 -5214,7 +5203,7 @@@ void *paint_proj_new_stroke(bContext *C
  
                project_state_init(C, ob, ps, mode);
  
 -              if (ps->ob == NULL || !(ps->ob->lay & ps->v3d->lay)) {
 +              if (ps->ob == NULL) {
                        ps_handle->ps_views_tot = i + 1;
                        goto fail;
                }
                        PROJ_PAINT_STATE_SHARED_MEMCPY(ps, ps_handle->ps_views[0]);
                }
  
 -              project_paint_begin(ps, is_multi_view, symmetry_flag_views[i]);
 +              project_paint_begin(C, ps, is_multi_view, symmetry_flag_views[i]);
  
                paint_proj_begin_clone(ps, mouse);
  
@@@ -5304,12 -5316,11 +5305,12 @@@ static int texture_paint_camera_project
  {
        Image *image = BLI_findlink(&CTX_data_main(C)->image, RNA_enum_get(op->ptr, "image"));
        Scene *scene = CTX_data_scene(C);
 +      ViewLayer *view_layer = CTX_data_view_layer(C);
        ProjPaintState ps = {NULL};
        int orig_brush_size;
        IDProperty *idgroup;
        IDProperty *view_data = NULL;
 -      Object *ob = OBACT;
 +      Object *ob = OBACT(view_layer);
        bool uvs, mat, tex;
  
        if (ob == NULL || ob->type != OB_MESH) {
        ED_image_undo_push_begin(op->type->name);
  
        /* allocate and initialize spatial data structures */
 -      project_paint_begin(&ps, false, 0);
 +      project_paint_begin(C, &ps, false, 0);
  
        if (ps.dm == NULL) {
                BKE_brush_size_set(scene, ps.brush, orig_brush_size);
@@@ -5436,11 -5447,9 +5437,11 @@@ static int texture_paint_image_from_vie
        ImBuf *ibuf;
        char filename[FILE_MAX];
  
 -      Main *bmain = CTX_data_main(C);
 +      Depsgraph *depsgraph = CTX_data_depsgraph(C);
        Scene *scene = CTX_data_scene(C);
        ToolSettings *settings = scene->toolsettings;
 +      View3D *v3d = CTX_wm_view3d(C);
 +      RegionView3D *rv3d = CTX_wm_region_view3d(C);
        int w = settings->imapaint.screen_grab_size[0];
        int h = settings->imapaint.screen_grab_size[1];
        int maxsize;
        if (h > maxsize) h = maxsize;
  
        ibuf = ED_view3d_draw_offscreen_imbuf(
 -              bmain, scene, CTX_wm_view3d(C), CTX_wm_region(C),
 +              depsgraph, scene, v3d->drawtype,
 +              v3d, CTX_wm_region(C),
                w, h, IB_rect, V3D_OFSDRAW_NONE, R_ALPHAPREMUL, 0, NULL,
 -              NULL, NULL, err_out);
 +              NULL, err_out);
        if (!ibuf) {
                /* Mostly happens when OpenGL offscreen buffer was failed to create, */
                /* but could be other reasons. Should be handled in the future. nazgul */
        if (image) {
                /* now for the trickiness. store the view projection here!
                 * re-projection will reuse this */
 -              View3D *v3d = CTX_wm_view3d(C);
 -              RegionView3D *rv3d = CTX_wm_region_view3d(C);
 -
                IDPropertyTemplate val;
                IDProperty *idgroup = IDP_GetProperties(&image->id, 1);
                IDProperty *view_data;
                array = (float *)IDP_Array(view_data);
                memcpy(array, rv3d->winmat, sizeof(rv3d->winmat)); array += sizeof(rv3d->winmat) / sizeof(float);
                memcpy(array, rv3d->viewmat, sizeof(rv3d->viewmat)); array += sizeof(rv3d->viewmat) / sizeof(float);
 -              is_ortho = ED_view3d_clip_range_get(v3d, rv3d, &array[0], &array[1], true);
 +              is_ortho = ED_view3d_clip_range_get(CTX_data_depsgraph(C), v3d, rv3d, &array[0], &array[1], true);
                /* using float for a bool is dodgy but since its an extra member in the array...
                 * easier then adding a single bool prop */
                array[2] = is_ortho ? 1.0f : 0.0f;
@@@ -5586,7 -5597,7 +5587,7 @@@ bool BKE_paint_proj_mesh_data_check(Sce
        }
  
        me = BKE_mesh_from_object(ob);
 -      layernum = CustomData_number_of_layers(&me->pdata, CD_MTEXPOLY);
 +      layernum = CustomData_number_of_layers(&me->ldata, CD_MLOOPUV);
  
        if (layernum == 0) {
                hasuvs = false;
  /* Add layer operator */
  
  static const EnumPropertyItem layer_type_items[] = {
 -      {MAP_COL, "DIFFUSE_COLOR", 0, "Diffuse Color", ""},
 -      {MAP_REF, "DIFFUSE_INTENSITY", 0, "Diffuse Intensity", ""},
 -      {MAP_ALPHA, "ALPHA", 0, "Alpha", ""},
 -      {MAP_TRANSLU, "TRANSLUCENCY", 0, "Translucency", ""},
 -      {MAP_COLSPEC, "SPECULAR_COLOR", 0, "Specular Color", ""},
 -      {MAP_SPEC, "SPECULAR_INTENSITY", 0, "Specular Intensity", ""},
 -      {MAP_HAR, "SPECULAR_HARDNESS", 0, "Specular Hardness", ""},
 -      {MAP_AMB, "AMBIENT", 0, "Ambient", ""},
 -      {MAP_EMIT, "EMIT", 0, "Emit", ""},
 -      {MAP_COLMIR, "MIRROR_COLOR", 0, "Mirror Color", ""},
 -      {MAP_RAYMIRR, "RAYMIRROR", 0, "Ray Mirror", ""},
 -      {MAP_NORM, "NORMAL", 0, "Normal", ""},
 -      {MAP_WARP, "WARP", 0, "Warp", ""},
 -      {MAP_DISPLACE, "DISPLACE", 0, "Displace", ""},
 +      {0, "BASE_COLOR", 0, "Base Color", ""},
 +      {1, "EMISSION", 0, "Emission", ""},
 +      {2, "NORMAL", 0, "Normal", ""},
 +      {3, "BUMP", 0, "Bump", ""},
 +      {4, "DISPLACEMENT", 0, "Displacement", ""},
        {0, NULL, 0, NULL, NULL}
  };
  
@@@ -5661,9 -5681,10 +5662,9 @@@ static Image *proj_paint_image_create(w
  
  static bool proj_paint_add_slot(bContext *C, wmOperator *op)
  {
-       Object *ob = CTX_data_active_object(C);
+       Object *ob = ED_object_active_context(C);
        Scene *scene = CTX_data_scene(C);
        Material *ma;
 -      bool is_bi = BKE_scene_uses_blender_internal(scene) || BKE_scene_uses_blender_game(scene);
        Image *ima = NULL;
  
        if (!ob)
        ma = give_current_material(ob, ob->actcol);
  
        if (ma) {
 +              /* TODO: use type to link to proper socket. */
                Main *bmain = CTX_data_main(C);
  
 -              if (!is_bi && BKE_scene_use_new_shading_nodes(scene)) {
 -                      bNode *imanode;
 -                      bNodeTree *ntree = ma->nodetree;
 +              bNode *imanode;
 +              bNodeTree *ntree = ma->nodetree;
  
 -                      if (!ntree) {
 -                              ED_node_shader_default(C, &ma->id);
 -                              ntree = ma->nodetree;
 -                      }
 -
 -                      ma->use_nodes = true;
 -
 -                      /* try to add an image node */
 -                      imanode = nodeAddStaticNode(C, ntree, SH_NODE_TEX_IMAGE);
 -
 -                      ima = proj_paint_image_create(op, bmain);
 -                      imanode->id = &ima->id;
 +              if (!ntree) {
 +                      ED_node_shader_default(C, &ma->id);
 +                      ntree = ma->nodetree;
 +              }
  
 -                      nodeSetActive(ntree, imanode);
 +              ma->use_nodes = true;
  
 -                      ntreeUpdateTree(CTX_data_main(C), ntree);
 -              }
 -              else {
 -                      MTex *mtex = BKE_texture_mtex_add_id(&ma->id, -1);
 -
 -                      /* successful creation of mtex layer, now create set */
 -                      if (mtex) {
 -                              int type = MAP_COL;
 -                              char imagename_buff[MAX_ID_NAME - 2];
 -                              const char *imagename = DATA_("Diffuse Color");
 -
 -                              if (op) {
 -                                      type = RNA_enum_get(op->ptr, "type");
 -                                      RNA_string_get(op->ptr, "name", imagename_buff);
 -                                      imagename = imagename_buff;
 -                              }
 +              /* try to add an image node */
 +              imanode = nodeAddStaticNode(C, ntree, SH_NODE_TEX_IMAGE);
  
 -                              mtex->tex = BKE_texture_add(bmain, imagename);
 -                              mtex->mapto = type;
 +              ima = proj_paint_image_create(op, bmain);
 +              imanode->id = &ima->id;
  
 -                              if (mtex->tex) {
 -                                      ima = mtex->tex->ima = proj_paint_image_create(op, bmain);
 -                              }
 +              nodeSetActive(ntree, imanode);
  
 -                              WM_event_add_notifier(C, NC_TEXTURE | NA_ADDED, mtex->tex);
 -                      }
 -              }
 +              ntreeUpdateTree(CTX_data_main(C), ntree);
  
                if (ima) {
                        BKE_texpaint_slot_refresh_cache(scene, ma);
                        BKE_image_signal(ima, NULL, IMA_SIGNAL_USER_NEW_IMAGE);
                        WM_event_add_notifier(C, NC_IMAGE | NA_ADDED, ima);
 -                      DAG_id_tag_update(&ma->id, 0);
 +                      DEG_id_tag_update(&ma->id, 0);
                        ED_area_tag_redraw(CTX_wm_area(C));
  
                        BKE_paint_proj_mesh_data_check(scene, ob, NULL, NULL, NULL, NULL);
@@@ -5726,7 -5773,7 +5727,7 @@@ static int texture_paint_add_texture_pa
  {
        char imagename[MAX_ID_NAME - 2];
        Main *bmain = CTX_data_main(C);
-       Object *ob = CTX_data_active_object(C);
+       Object *ob = ED_object_active_context(C);
        Material *ma = give_current_material(ob, ob->actcol);
        int type = RNA_enum_get(op->ptr, "type");
  
@@@ -5786,6 -5833,59 +5787,6 @@@ void PAINT_OT_add_texture_paint_slot(wm
        RNA_def_boolean(ot->srna, "float", 0, "32 bit Float", "Create image with 32 bit floating point bit depth");
  }
  
 -static int texture_paint_delete_texture_paint_slot_exec(bContext *C, wmOperator *UNUSED(op))
 -{
 -      Object *ob = CTX_data_active_object(C);
 -      Scene *scene = CTX_data_scene(C);
 -      Material *ma;
 -      bool is_bi = BKE_scene_uses_blender_internal(scene) || BKE_scene_uses_blender_game(scene);
 -      TexPaintSlot *slot;
 -
 -      /* not supported for node-based engines */
 -      if (!ob || !is_bi)
 -              return OPERATOR_CANCELLED;
 -
 -      ma = give_current_material(ob, ob->actcol);
 -
 -      if (!ma->texpaintslot || ma->use_nodes)
 -              return OPERATOR_CANCELLED;
 -
 -      slot = ma->texpaintslot + ma->paint_active_slot;
 -
 -      if (ma->mtex[slot->index]->tex) {
 -              id_us_min(&ma->mtex[slot->index]->tex->id);
 -
 -              if (ma->mtex[slot->index]->tex->ima) {
 -                      id_us_min(&ma->mtex[slot->index]->tex->ima->id);
 -              }
 -      }
 -      MEM_freeN(ma->mtex[slot->index]);
 -      ma->mtex[slot->index] = NULL;
 -
 -      BKE_texpaint_slot_refresh_cache(scene, ma);
 -      DAG_id_tag_update(&ma->id, 0);
 -      WM_event_add_notifier(C, NC_MATERIAL, ma);
 -      /* we need a notifier for data change since we change the displayed modifier uvs */
 -      WM_event_add_notifier(C, NC_GEOM | ND_DATA, ob->data);
 -      return OPERATOR_FINISHED;
 -}
 -
 -
 -void PAINT_OT_delete_texture_paint_slot(wmOperatorType *ot)
 -{
 -      /* identifiers */
 -      ot->name = "Delete Texture Paint Slot";
 -      ot->description = "Delete selected texture paint slot";
 -      ot->idname = "PAINT_OT_delete_texture_paint_slot";
 -
 -      /* api callbacks */
 -      ot->exec = texture_paint_delete_texture_paint_slot_exec;
 -      ot->poll = ED_operator_region_view3d_active;
 -
 -      /* flags */
 -      ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
 -}
 -
  static int add_simple_uvs_exec(bContext *C, wmOperator *UNUSED(op))
  {
        /* no checks here, poll function does them for us */
  
        BKE_paint_proj_mesh_data_check(scene, ob, NULL, NULL, NULL, NULL);
  
 -      DAG_id_tag_update(ob->data, 0);
 +      DEG_id_tag_update(ob->data, 0);
        WM_event_add_notifier(C, NC_GEOM | ND_DATA, ob->data);
        WM_event_add_notifier(C, NC_SCENE | ND_TOOLSETTINGS, scene);
        return OPERATOR_FINISHED;
@@@ -5831,9 -5931,9 +5832,9 @@@ static int add_simple_uvs_poll(bContex
  {
        Object *ob = CTX_data_active_object(C);
  
 -      if (!ob || ob->type != OB_MESH || ob->mode != OB_MODE_TEXTURE_PAINT)
 +      if (!ob || ob->type != OB_MESH || ob->mode != OB_MODE_TEXTURE_PAINT) {
                return false;
 -
 +      }
        return true;
  }