[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [35101] branches/bmesh/blender/source/ blender: =bmesh= fix bug with uvlayers
Joseph Eagar
joeedh at gmail.com
Wed Feb 23 09:12:27 CET 2011
Revision: 35101
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=35101
Author: joeedh
Date: 2011-02-23 08:12:27 +0000 (Wed, 23 Feb 2011)
Log Message:
-----------
=bmesh= fix bug with uvlayers
Modified Paths:
--------------
branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c
branches/bmesh/blender/source/blender/bmesh/operators/edgesplitop.c
branches/bmesh/blender/source/blender/editors/mesh/bmeshutils.c
branches/bmesh/blender/source/blender/editors/mesh/knifetool.c
branches/bmesh/blender/source/blender/editors/mesh/mesh_data.c
branches/bmesh/blender/source/blender/editors/space_image/image_draw.c
branches/bmesh/blender/source/blender/editors/uvedit/uvedit_unwrap_ops.c
branches/bmesh/blender/source/blender/nodes/intern/SHD_nodes/SHD_output.c
Modified: branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c 2011-02-23 06:48:47 UTC (rev 35100)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c 2011-02-23 08:12:27 UTC (rev 35101)
@@ -926,6 +926,28 @@
cdDM_drawFacesTex_common(dm, NULL, setDrawOptions, userData);
}
+#define PASSVERT(index, vert) { \
+ if(attribs.totorco) \
+ glVertexAttrib3fvARB(attribs.orco.glIndex, attribs.orco.array[index]); \
+ for(b = 0; b < attribs.tottface; b++) { \
+ MTFace *tf = &attribs.tface[b].array[a]; \
+ glVertexAttrib2fvARB(attribs.tface[b].glIndex, tf->uv[vert]); \
+ } \
+ for(b = 0; b < attribs.totmcol; b++) { \
+ MCol *cp = &attribs.mcol[b].array[a*4 + vert]; \
+ GLubyte col[4]; \
+ col[0]= cp->b; col[1]= cp->g; col[2]= cp->r; col[3]= cp->a; \
+ glVertexAttrib4ubvARB(attribs.mcol[b].glIndex, col); \
+ } \
+ if(attribs.tottang) { \
+ float *tang = attribs.tang.array[a*4 + vert]; \
+ glVertexAttrib3fvARB(attribs.tang.glIndex, tang); \
+ } \
+ if(smoothnormal) \
+ glNormal3sv(mvert[index].no); \
+ glVertex3fv(mvert[index].co); \
+ }
+
static void cdDM_drawMappedFacesGLSL(DerivedMesh *dm, int (*setMaterial)(int, void *attribs), int (*setDrawOptions)(void *userData, int index), void *userData)
{
CDDerivedMesh *cddm = (CDDerivedMesh*) dm;
@@ -1012,28 +1034,6 @@
}
}
-#define PASSVERT(index, vert) { \
- if(attribs.totorco) \
- glVertexAttrib3fvARB(attribs.orco.glIndex, attribs.orco.array[index]); \
- for(b = 0; b < attribs.tottface; b++) { \
- MTFace *tf = &attribs.tface[b].array[a]; \
- glVertexAttrib2fvARB(attribs.tface[b].glIndex, tf->uv[vert]); \
- } \
- for(b = 0; b < attribs.totmcol; b++) { \
- MCol *cp = &attribs.mcol[b].array[a*4 + vert]; \
- GLubyte col[4]; \
- col[0]= cp->b; col[1]= cp->g; col[2]= cp->r; col[3]= cp->a; \
- glVertexAttrib4ubvARB(attribs.mcol[b].glIndex, col); \
- } \
- if(attribs.tottang) { \
- float *tang = attribs.tang.array[a*4 + vert]; \
- glVertexAttrib3fvARB(attribs.tang.glIndex, tang); \
- } \
- if(smoothnormal) \
- glNormal3sv(mvert[index].no); \
- glVertex3fv(mvert[index].co); \
- }
-
PASSVERT(mface->v1, 0);
PASSVERT(mface->v2, 1);
PASSVERT(mface->v3, 2);
Modified: branches/bmesh/blender/source/blender/bmesh/operators/edgesplitop.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/operators/edgesplitop.c 2011-02-23 06:48:47 UTC (rev 35100)
+++ branches/bmesh/blender/source/blender/bmesh/operators/edgesplitop.c 2011-02-23 08:12:27 UTC (rev 35101)
@@ -127,9 +127,10 @@
BMLoop *l, *startl;
BMEdge *e;
BMVert *v;
- int i;
-
- while (1) {
+ int i, ok;
+
+ ok=0;
+ while (ok++ < 100000) {
BM_ITER(e, &iter, bm, BM_EDGES_OF_MESH, NULL) {
if (!BMO_TestFlag(bm, e, EDGE_SEAM))
continue;
Modified: branches/bmesh/blender/source/blender/editors/mesh/bmeshutils.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/mesh/bmeshutils.c 2011-02-23 06:48:47 UTC (rev 35100)
+++ branches/bmesh/blender/source/blender/editors/mesh/bmeshutils.c 2011-02-23 08:12:27 UTC (rev 35101)
@@ -798,7 +798,7 @@
{
/* some of these checks could be a touch overkill */
return em && em->bm->totface && CustomData_has_layer(&em->bm->pdata, CD_MTEXPOLY) &&
- CustomData_has_layer(&em->bm->ldata, CD_MLOOPCOL);
+ CustomData_has_layer(&em->bm->ldata, CD_MLOOPUV);
}
int EDBM_vertColorCheck(BMEditMesh *em)
Modified: branches/bmesh/blender/source/blender/editors/mesh/knifetool.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/mesh/knifetool.c 2011-02-23 06:48:47 UTC (rev 35100)
+++ branches/bmesh/blender/source/blender/editors/mesh/knifetool.c 2011-02-23 08:12:27 UTC (rev 35101)
@@ -1582,12 +1582,17 @@
static int knifetool_modal (bContext *C, wmOperator *op, wmEvent *event)
{
+ Object *obedit;
knifetool_opdata *kcd= op->customdata;
if (!C) {
return OPERATOR_FINISHED;
}
+ obedit = CTX_data_edit_object(C);
+ if (!obedit || obedit->type != OB_MESH || ((Mesh*)obedit->data)->edit_btmesh != kcd->em)
+ return OPERATOR_FINISHED;
+
view3d_operator_needs_opengl(C);
switch (event->type) {
Modified: branches/bmesh/blender/source/blender/editors/mesh/mesh_data.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/mesh/mesh_data.c 2011-02-23 06:48:47 UTC (rev 35100)
+++ branches/bmesh/blender/source/blender/editors/mesh/mesh_data.c 2011-02-23 08:12:27 UTC (rev 35101)
@@ -67,19 +67,26 @@
#include "mesh_intern.h"
+#define GET_CD_DATA(me, data) (me->edit_btmesh ? &me->edit_btmesh->bm->data : &me->data)
+
static void delete_customdata_layer(bContext *C, Object *ob, CustomDataLayer *layer)
{
Mesh *me = ob->data;
- CustomData *data= (me->edit_btmesh)? &me->edit_btmesh->bm->pdata: &me->pdata;
+ CustomData *data;
void *actlayerdata, *rndlayerdata, *clonelayerdata, *stencillayerdata, *layerdata=layer->data;
int type= layer->type;
- int index= CustomData_get_layer_index(data, type);
- int i, actindex, rndindex, cloneindex, stencilindex, tot = me->totpoly;
+ int index;
+ int i, actindex, rndindex, cloneindex, stencilindex, tot;
- if (layer->type == CD_MLOOPCOL) {
+ if (layer->type == CD_MLOOPCOL || layer->type == CD_MLOOPUV) {
data = (me->edit_btmesh)? &me->edit_btmesh->bm->ldata: &me->ldata;
tot = me->totloop;
+ } else {
+ data = (me->edit_btmesh)? &me->edit_btmesh->bm->pdata: &me->pdata;
+ tot = me->totpoly;
}
+
+ index = CustomData_get_layer_index(data, type);
/* ok, deleting a non-active layer needs to preserve the active layer indices.
to do this, we store a pointer to the .data member of both layer and the active layer,
@@ -179,20 +186,31 @@
CustomData_set_layer_active(&em->bm->pdata, CD_MTEXPOLY, layernum);
if(active_set || layernum==0)
CustomData_set_layer_active(&em->bm->pdata, CD_MTEXPOLY, layernum);
+
+ BM_add_data_layer(em->bm, &em->bm->ldata, CD_MLOOPUV);
+ CustomData_set_layer_active(&em->bm->ldata, CD_MLOOPUV, layernum);
+ if(active_set || layernum==0)
+ CustomData_set_layer_active(&em->bm->ldata, CD_MLOOPUV, layernum);
+
}
else {
- layernum= CustomData_number_of_layers(&me->pdata, MAX_MTFACE);
+ layernum= CustomData_number_of_layers(&me->pdata, CD_MTEXPOLY);
if(layernum >= MAX_MTFACE)
return 0;
- if(me->mtface)
+ if(me->mtpoly) {
CustomData_add_layer_named(&me->pdata, CD_MTEXPOLY, CD_DUPLICATE, me->mtpoly, me->totpoly, name);
- else
+ CustomData_add_layer_named(&me->ldata, CD_MLOOPUV, CD_DUPLICATE, me->mloopuv, me->totloop, name);
+ } else {
CustomData_add_layer_named(&me->pdata, CD_MTEXPOLY, CD_DEFAULT, NULL, me->totpoly, name);
-
- if(active_set || layernum==0)
+ CustomData_add_layer_named(&me->ldata, CD_MLOOPUV, CD_DEFAULT, NULL, me->totloop, name);
+ }
+
+ if(active_set || layernum==0) {
CustomData_set_layer_active(&me->pdata, CD_MTEXPOLY, layernum);
-
+ CustomData_set_layer_active(&me->ldata, CD_MLOOPUV, layernum);
+ }
+
mesh_update_customdata_pointers(me);
}
@@ -204,16 +222,22 @@
int ED_mesh_uv_texture_remove(bContext *C, Object *ob, Mesh *me)
{
- CustomDataLayer *cdl;
+ CustomData *pdata = GET_CD_DATA(me, pdata), *ldata = GET_CD_DATA(me, ldata);
+ CustomDataLayer *cdlp, *cdlu;
int index;
- index= CustomData_get_active_layer_index(&me->pdata, CD_MTEXPOLY);
- cdl= (index == -1)? NULL: &me->pdata.layers[index];
+ index= CustomData_get_active_layer_index(pdata, CD_MTEXPOLY);
+ cdlp= (index == -1)? NULL: &pdata->layers[index];
- if(!cdl)
+ index= CustomData_get_active_layer_index(ldata, CD_MLOOPUV);
+ cdlu= (index == -1)? NULL: &ldata->layers[index];
+
+ if (!cdlp || !cdlu)
return 0;
- delete_customdata_layer(C, ob, cdl);
+ delete_customdata_layer(C, ob, cdlp);
+ delete_customdata_layer(C, ob, cdlu);
+
DAG_id_flush_update(&me->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_GEOM|ND_DATA, me);
@@ -274,8 +298,8 @@
CustomDataLayer *cdl;
int index;
- index= CustomData_get_active_layer_index(&me->pdata, CD_MLOOPCOL);
- cdl= (index == -1)? NULL: &me->pdata.layers[index];
+ index= CustomData_get_active_layer_index(&me->ldata, CD_MLOOPCOL);
+ cdl= (index == -1)? NULL: &me->ldata.layers[index];
if(!cdl)
return 0;
@@ -554,6 +578,7 @@
static void mesh_calc_edges(Mesh *mesh, int update)
{
+#if 0
CustomData edata;
EdgeHashIterator *ehi;
MFace *mf = mesh->mface;
@@ -617,6 +642,7 @@
mesh->medge = CustomData_get_layer(&mesh->edata, CD_MEDGE);
BLI_edgehash_free(eh, NULL);
+#endif
}
void ED_mesh_update(Mesh *mesh, bContext *C, int calc_edges)
Modified: branches/bmesh/blender/source/blender/editors/space_image/image_draw.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/space_image/image_draw.c 2011-02-23 06:48:47 UTC (rev 35100)
+++ branches/bmesh/blender/source/blender/editors/space_image/image_draw.c 2011-02-23 08:12:27 UTC (rev 35101)
@@ -173,13 +173,13 @@
if(gridsize<=0.0f) return;
if(gridsize<1.0f) {
- while(gridsize<1.0f) {
+ while(gridsize<1.0f && gridsize<1000000.0f ) {
gridsize*= 4.0;
gridstep*= 4.0;
}
}
else {
- while(gridsize>=4.0f) {
+ while(gridsize>=4.0f && gridsize<1000000.0f) {
gridsize/= 4.0;
gridstep/= 4.0;
}
Modified: branches/bmesh/blender/source/blender/editors/uvedit/uvedit_unwrap_ops.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/uvedit/uvedit_unwrap_ops.c 2011-02-23 06:48:47 UTC (rev 35100)
+++ branches/bmesh/blender/source/blender/editors/uvedit/uvedit_unwrap_ops.c 2011-02-23 08:12:27 UTC (rev 35101)
@@ -85,7 +85,7 @@
return 1;
}
- if(em && em->bm->totface) {// && !CustomData_has_layer(&em->bm->pdata, CD_MTEXPOLY)) {
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list