[Bf-blender-cvs] [8a643703649] greasepencil-object: Merge branch 'blender2.8' into greasepencil-object

Antonio Vazquez noreply at git.blender.org
Sun Jun 11 13:36:21 CEST 2017


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);
+ }
+




More information about the Bf-blender-cvs mailing list