Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
Diffstat (limited to 'source')
-rw-r--r--source/blender/blenkernel/intern/subsurf_ccg.c33
-rw-r--r--source/blender/src/drawimage.c80
2 files changed, 80 insertions, 33 deletions
diff --git a/source/blender/blenkernel/intern/subsurf_ccg.c b/source/blender/blenkernel/intern/subsurf_ccg.c
index ea2021430f1..39674c9796f 100644
--- a/source/blender/blenkernel/intern/subsurf_ccg.c
+++ b/source/blender/blenkernel/intern/subsurf_ccg.c
@@ -1874,6 +1874,37 @@ static void ccgDM_drawMappedFacesTex(DerivedMesh *dm, int (*setDrawOptions)(void
ccgDM_drawFacesTex_common(dm, NULL, setDrawOptions, userData);
}
+static void ccgDM_drawUVEdges(DerivedMesh *dm)
+{
+
+ MFace *mf = dm->getFaceArray(dm);
+ MTFace *tf = DM_get_face_data_layer(dm, CD_MTFACE);
+ int i;
+
+ glBegin(GL_LINES);
+ for(i = 0; i < dm->numFaceData; i++, mf++, tf++) {
+ if(!(mf->flag&ME_HIDE)) {
+ glVertex2fv(tf->uv[0]);
+ glVertex2fv(tf->uv[1]);
+
+ glVertex2fv(tf->uv[1]);
+ glVertex2fv(tf->uv[2]);
+
+ if(!mf->v4) {
+ glVertex2fv(tf->uv[2]);
+ glVertex2fv(tf->uv[0]);
+ } else {
+ glVertex2fv(tf->uv[2]);
+ glVertex2fv(tf->uv[3]);
+
+ glVertex2fv(tf->uv[3]);
+ glVertex2fv(tf->uv[0]);
+ }
+ }
+ }
+ glEnd();
+}
+
static void ccgDM_drawMappedFaces(DerivedMesh *dm, int (*setDrawOptions)(void *userData, int index, int *drawSmooth_r), void *userData, int useColors) {
CCGDerivedMesh *ccgdm = (CCGDerivedMesh*) dm;
CCGSubSurf *ss = ccgdm->ss;
@@ -2101,7 +2132,7 @@ static CCGDerivedMesh *getCCGDerivedMesh(CCGSubSurf *ss,
ccgdm->dm.drawFacesTex = ccgDM_drawFacesTex;
ccgdm->dm.drawMappedFaces = ccgDM_drawMappedFaces;
ccgdm->dm.drawMappedFacesTex = ccgDM_drawMappedFacesTex;
- /* todo: drawUVEdges */
+ ccgdm->dm.drawUVEdges = ccgDM_drawUVEdges;
ccgdm->dm.drawMappedEdgesInterp = ccgDM_drawMappedEdgesInterp;
ccgdm->dm.drawMappedEdges = ccgDM_drawMappedEdges;
diff --git a/source/blender/src/drawimage.c b/source/blender/src/drawimage.c
index 8db0eda752b..d69ec6d1b05 100644
--- a/source/blender/src/drawimage.c
+++ b/source/blender/src/drawimage.c
@@ -454,7 +454,7 @@ void draw_uvs_sima(void)
EditFace *efa;
char col1[4], col2[4];
- float pointsize= BIF_GetThemeValuef(TH_VERTEX_SIZE);
+ float pointsize;
if (!G.obedit || !CustomData_has_layer(&em->fdata, CD_MTFACE))
return;
@@ -464,36 +464,43 @@ void draw_uvs_sima(void)
glLoadIdentity();
- if(G.sima->flag & SI_DRAWTOOL || G.sima->flag & SI_DRAWSHADOW) {
+ if(G.sima->flag & SI_DRAWTOOL) {
+ /* draws the grey mesh when painting */
glColor3ub(112, 112, 112);
for (efa= em->faces.first; efa; efa= efa->next) {
tface= CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
- if (SIMA_FACEDRAW_CHECK(efa, tface)) {
- efa->tmp.p = tface;
- } else {
- glBegin(GL_LINE_LOOP);
- glVertex2fv(tface->uv[0]);
- glVertex2fv(tface->uv[1]);
- glVertex2fv(tface->uv[2]);
- if(efa->v4) glVertex2fv(tface->uv[3]);
- glEnd();
-
- efa->tmp.p = NULL;
- }
+ glBegin(GL_LINE_LOOP);
+ glVertex2fv(tface->uv[0]);
+ glVertex2fv(tface->uv[1]);
+ glVertex2fv(tface->uv[2]);
+ if(efa->v4) glVertex2fv(tface->uv[3]);
+ glEnd();
}
- if(G.sima->flag & SI_DRAWTOOL)
- return; /* only draw shadow mesh */
+ return; /* only draw shadow mesh */
+ } else if (G.sima->flag & SI_DRAWSHADOW) {
+ /* draw shadow mesh - this is the mesh with the modifier applied */
+ DerivedMesh *finalDM, *cageDM;
- } else {
- /* would be nice to do this within a draw loop but most below are optional, so it would involve too many checks */
- for (efa= em->faces.first; efa; efa= efa->next) {
- tface= CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
- if (SIMA_FACEDRAW_CHECK(efa, tface)) {
- efa->tmp.p = tface;
- } else {
- efa->tmp.p = NULL;
- }
+ glColor3ub(112, 112, 112);
+ if (G.editMesh->derivedFinal && G.editMesh->derivedFinal->drawUVEdges) {
+ G.editMesh->derivedFinal->drawUVEdges(G.editMesh->derivedFinal);
+ }
+
+ /* draw final mesh with modifiers applied */
+ cageDM = editmesh_get_derived_cage_and_final(&finalDM, CD_MASK_BAREMESH | CD_MASK_MTFACE);
+
+ if (finalDM->drawUVEdges &&
+ /* When sync selection is enabled, all faces are drawn (except for hidden)
+ * so if cage is the same as the final, theres no point in drawing the shadowmesh. */
+ !((G.sima->flag & SI_SYNC_UVSEL && cageDM==finalDM))
+ ) {
+ glColor3ub(112, 112, 112);
+ finalDM->drawUVEdges(finalDM);
}
+
+ if (cageDM != finalDM)
+ cageDM->release(cageDM);
+ finalDM->release(finalDM);
}
/* draw transparent faces */
@@ -504,13 +511,8 @@ void draw_uvs_sima(void)
glEnable(GL_BLEND);
for (efa= em->faces.first; efa; efa= efa->next) {
-
-// tface= CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
-// if (SIMA_FACEDRAW_CHECK(efa, tface)) {
-
- /*this is a shortcut to do the same as above but a faster for drawing */
- if ((tface=(MTFace *)efa->tmp.p)) {
-
+ tface= CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
+ if (SIMA_FACEDRAW_CHECK(efa, tface)) {
if( SIMA_FACESEL_CHECK(efa, tface) )
glColor4ubv((GLubyte *)col2);
else
@@ -522,6 +524,19 @@ void draw_uvs_sima(void)
glVertex2fv(tface->uv[2]);
if(efa->v4) glVertex2fv(tface->uv[3]);
glEnd();
+ efa->tmp.p = tface;
+ } else {
+ efa->tmp.p = NULL;
+ }
+ }
+ } else {
+ /* would be nice to do this within a draw loop but most below are optional, so it would involve too many checks */
+ for (efa= em->faces.first; efa; efa= efa->next) {
+ tface= CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
+ if (SIMA_FACEDRAW_CHECK(efa, tface)) {
+ efa->tmp.p = tface;
+ } else {
+ efa->tmp.p = NULL;
}
}
glDisable(GL_BLEND);
@@ -677,6 +692,7 @@ void draw_uvs_sima(void)
/* unselected uv's */
BIF_ThemeColor(TH_VERTEX);
+ pointsize = BIF_GetThemeValuef(TH_VERTEX_SIZE);
glPointSize(pointsize);
bglBegin(GL_POINTS);