Commit: 8a64370364942188cdec5f232876016028284e21
Author: Antonio Vazquez
Date:   Sun Jun 11 13:36:04 2017 +0200
Branches: greasepencil-object
https://developer.blender.org/rB8a64370364942188cdec5f232876016028284e21

Merge branch 'blender2.8' into greasepencil-object

===================================================================



===================================================================

diff --cc source/blender/blenkernel/intern/object.c
index ef74f78d567,66c3f64f3d5..07ad1359dbe
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@@ -603,8 -604,8 +605,9 @@@ void *BKE_object_obdata_add_from_type(M
                case OB_LATTICE:   return BKE_lattice_add(bmain, name);
                case OB_ARMATURE:  return BKE_armature_add(bmain, name);
                case OB_SPEAKER:   return BKE_speaker_add(bmain, name);
+               case OB_PROBE:     return BKE_probe_add(bmain, name);
                case OB_EMPTY:     return NULL;
 +              case OB_GPENCIL:   return NULL;
                default:
                        printf("%s: Internal error, bad type: %d\n", __func__, 
type);
                        return NULL;
diff --cc source/blender/editors/gpencil/gpencil_edit.c
index eb59d7b06f0,1d70d3685c7..f3c7e9e1379
--- a/source/blender/editors/gpencil/gpencil_edit.c
+++ b/source/blender/editors/gpencil/gpencil_edit.c
@@@ -727,8 -640,10 +820,11 @@@ static int gp_strokes_paste_exec(bConte
                }
        }
        
+       /* free temp data */
+       BLI_ghash_free(new_colors, NULL, NULL);
+       
        /* updates */
 +      BKE_gpencil_batch_cache_dirty(gpd, 0);
        WM_event_add_notifier(C, NC_GPENCIL | ND_DATA | NA_EDITED, NULL);
        
        return OPERATOR_FINISHED;
diff --cc source/blender/editors/object/object_intern.h
index 754b686b7c3,a03bb17dc2a..3ea69a71a0a
--- a/source/blender/editors/object/object_intern.h
+++ b/source/blender/editors/object/object_intern.h
@@@ -112,8 -112,8 +112,9 @@@ void OBJECT_OT_metaball_add(struct wmOp
  void OBJECT_OT_text_add(struct wmOperatorType *ot);
  void OBJECT_OT_armature_add(struct wmOperatorType *ot);
  void OBJECT_OT_empty_add(struct wmOperatorType *ot);
+ void OBJECT_OT_probe_add(struct wmOperatorType *ot);
  void OBJECT_OT_drop_named_image(struct wmOperatorType *ot);
 +void OBJECT_OT_gpencil_add(struct wmOperatorType *ot);
  void OBJECT_OT_lamp_add(struct wmOperatorType *ot);
  void OBJECT_OT_effector_add(struct wmOperatorType *ot);
  void OBJECT_OT_camera_add(struct wmOperatorType *ot);
diff --cc source/blender/editors/object/object_ops.c
index fb900882d52,8e50db725e3..60da05802bb
--- a/source/blender/editors/object/object_ops.c
+++ b/source/blender/editors/object/object_ops.c
@@@ -107,8 -107,8 +107,9 @@@ void ED_operatortypes_object(void
        WM_operatortype_append(OBJECT_OT_text_add);
        WM_operatortype_append(OBJECT_OT_armature_add);
        WM_operatortype_append(OBJECT_OT_empty_add);
+       WM_operatortype_append(OBJECT_OT_probe_add);
        WM_operatortype_append(OBJECT_OT_drop_named_image);
 +      WM_operatortype_append(OBJECT_OT_gpencil_add);
        WM_operatortype_append(OBJECT_OT_lamp_add);
        WM_operatortype_append(OBJECT_OT_camera_add);
        WM_operatortype_append(OBJECT_OT_speaker_add);
diff --cc source/blender/editors/space_view3d/drawobject.c
index 35c3746c799,126217057e5..935906526cb
--- a/source/blender/editors/space_view3d/drawobject.c
+++ b/source/blender/editors/space_view3d/drawobject.c
@@@ -9772,10 -9764,127 +9772,132 @@@ void draw_object_instance(Scene *scene
                                drawaxes(rv3d->viewmatob, ob->empty_drawsize, 
ob->empty_drawtype, bcol);
                        }
                        break;
 +              case OB_GPENCIL:
 +                      drawaxes(rv3d->viewmatob, ob->empty_drawsize, 
ob->empty_drawtype, NULL);
 +                      /* draw small box to make different of empty type */
 +                      drawaxes(rv3d->viewmatob, ob->empty_drawsize / 4.0f, 
OB_CUBE, NULL);
 +                      break;
        }
  }
+ 
+ void ED_draw_object_facemap(Scene *scene, Object *ob, const float col[4], 
const int facemap)
+ {
+       DerivedMesh *dm = NULL;
+ 
+       /* happens on undo */
+       if (ob->type != OB_MESH || !ob->data)
+               return;
+ 
+       dm = mesh_get_derived_final(scene, ob, CD_MASK_BAREMESH);
+       if (!dm || !CustomData_has_layer(&dm->polyData, CD_FACEMAP))
+               return;
+ 
+ 
+       glFrontFace((ob->transflag & OB_NEG_SCALE) ? GL_CW : GL_CCW);
+       
+ #if 0
+       DM_update_materials(dm, ob);
+ 
+       /* add polygon offset so we draw above the original surface */
+       glPolygonOffset(1.0, 1.0);
+ 
+       GPU_facemap_setup(dm);
+ 
+       glColor4fv(col);
+ 
+       gpuPushAttrib(GL_ENABLE_BIT);
+       glEnable(GL_BLEND);
+       glDisable(GL_LIGHTING);
+ 
+       /* always draw using backface culling */
+       glEnable(GL_CULL_FACE);
+       glCullFace(GL_BACK);
+ 
+       if (dm->drawObject->facemapindices) {
+               glDrawElements(GL_TRIANGLES, 
dm->drawObject->facemap_count[facemap] * 3, GL_UNSIGNED_INT,
+                              (int *)NULL + 
dm->drawObject->facemap_start[facemap] * 3);
+       }
+       gpuPopAttrib();
+ 
+       GPU_buffers_unbind();
+ 
+       glPolygonOffset(0.0, 0.0);
+ 
+ #else
+ 
+       /* Just to create the data to pass to immediate mode, grr! */
+       Mesh *me = ob->data;
+       const int *facemap_data = CustomData_get_layer(&me->pdata, CD_FACEMAP);
+       if (facemap_data) {
+               VertexFormat *format = immVertexFormat();
+               unsigned int pos = VertexFormat_add_attrib(format, "pos", 
COMP_F32, 3, KEEP_FLOAT);
+ 
+               immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+               immUniformColor4fv(col);
+ 
+               /* XXX, alpha isn't working yet, not sure why. */
+               glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+               glEnable(GL_BLEND);
+ 
+               MVert *mvert;
+ 
+               MPoly *mpoly;
+               int    mpoly_len;
+ 
+               MLoop *mloop;
+               int    mloop_len;
+ 
+               if (dm && CustomData_has_layer(&dm->polyData, CD_FACEMAP)) {
+                       mvert = dm->getVertArray(dm);
+                       mpoly = dm->getPolyArray(dm);
+                       mloop = dm->getLoopArray(dm);
+ 
+                       mpoly_len = dm->getNumPolys(dm);
+                       mloop_len = dm->getNumLoops(dm);
+ 
+                       facemap_data = CustomData_get_layer(&dm->polyData, 
CD_FACEMAP);
+               }
+               else {
+                       mvert = me->mvert;
+                       mpoly = me->mpoly;
+                       mloop = me->mloop;
+ 
+                       mpoly_len = me->totpoly;
+                       mloop_len = me->totloop;
+ 
+                       facemap_data = CustomData_get_layer(&me->pdata, 
CD_FACEMAP);
+               }
+ 
+               /* use gawain immediate mode fore now */
+               const int looptris_len = poly_to_tri_count(mpoly_len, 
mloop_len);
+               immBeginAtMost(PRIM_TRIANGLES, looptris_len * 3);
+ 
+               MPoly *mp;
+               int i;
+               for (mp = mpoly, i = 0; i < mpoly_len; i++, mp++) {
+                       if (facemap_data[i] == facemap) {
+                               /* Weak, fan-fill, use until we have 
derived-mesh replaced. */
+                               const MLoop *ml_start = &mloop[mp->loopstart];
+                               const MLoop *ml_a = ml_start + 1;
+                               const MLoop *ml_b = ml_start + 2;
+                               for (int j = 2; j < mp->totloop; j++) {
+                                       immVertex3fv(pos, 
mvert[ml_start->v].co);
+                                       immVertex3fv(pos, mvert[ml_a->v].co);
+                                       immVertex3fv(pos, mvert[ml_b->v].co);
+ 
+                                       ml_a++;
+                                       ml_b++;
+                               }
+                       }
+               }
+               immEnd();
+ 
+               immUnbindProgram();
+ 
+               glDisable(GL_BLEND);
+       }
+ #endif
+ 
+       dm->release(dm);
+ }
+

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to