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
diff options
context:
space:
mode:
-rw-r--r--source/blender/blenkernel/intern/cdderivedmesh.c23
-rw-r--r--source/blender/blenkernel/intern/subsurf_ccg.c2
2 files changed, 24 insertions, 1 deletions
diff --git a/source/blender/blenkernel/intern/cdderivedmesh.c b/source/blender/blenkernel/intern/cdderivedmesh.c
index b820ad00305..cd0872807a0 100644
--- a/source/blender/blenkernel/intern/cdderivedmesh.c
+++ b/source/blender/blenkernel/intern/cdderivedmesh.c
@@ -226,6 +226,21 @@ static struct PBVH *cdDM_getPBVH(Object *ob, DerivedMesh *dm)
return cddm->pbvh;
}
+/* update vertex normals so that drawing smooth faces works during sculpt
+ TODO: proper fix is to support the pbvh in all drawing modes */
+static void cdDM_update_normals_from_pbvh(DerivedMesh *dm)
+{
+ CDDerivedMesh *cddm = (CDDerivedMesh*) dm;
+ float (*face_nors)[3];
+
+ if(!cddm->pbvh || !cddm->pbvh_draw || !dm->numFaceData)
+ return;
+
+ face_nors = CustomData_get_layer(&dm->faceData, CD_NORMAL);
+
+ BLI_pbvh_update(cddm->pbvh, PBVH_UpdateNormals, face_nors);
+}
+
static void cdDM_drawVerts(DerivedMesh *dm)
{
CDDerivedMesh *cddm = (CDDerivedMesh*) dm;
@@ -538,6 +553,8 @@ static void cdDM_drawFacesColored(DerivedMesh *dm, int useTwoSided, unsigned cha
if(col1 && col2)
glEnable(GL_CULL_FACE);
+ cdDM_update_normals_from_pbvh(dm);
+
if( GPU_buffer_legacy(dm) ) {
DEBUG_VBO( "Using legacy code. cdDM_drawFacesColored\n" );
glShadeModel(GL_SMOOTH);
@@ -617,6 +634,8 @@ static void cdDM_drawFacesTex_common(DerivedMesh *dm,
if(!mcol)
mcol = dm->getFaceDataArray(dm, CD_MCOL);
+ cdDM_update_normals_from_pbvh(dm);
+
if( GPU_buffer_legacy(dm) ) {
DEBUG_VBO( "Using legacy code. cdDM_drawFacesTex_common\n" );
for(i = 0; i < dm->numFaceData; i++, mf++) {
@@ -792,6 +811,8 @@ static void cdDM_drawMappedFaces(DerivedMesh *dm, int (*setDrawOptions)(void *us
if(!mc)
mc = DM_get_face_data_layer(dm, CD_MCOL);
+ cdDM_update_normals_from_pbvh(dm);
+
/* back-buffer always uses legacy since VBO's would need the
* color array temporarily overwritten for drawing, then reset. */
if( GPU_buffer_legacy(dm) || G.f & G_BACKBUFSEL) {
@@ -938,6 +959,8 @@ static void cdDM_drawMappedFacesGLSL(DerivedMesh *dm, int (*setMaterial)(int, vo
int transp, new_transp, orig_transp;
int orig, *index = dm->getFaceDataArray(dm, CD_ORIGINDEX);
+ cdDM_update_normals_from_pbvh(dm);
+
matnr = -1;
smoothnormal = 0;
dodraw = 0;
diff --git a/source/blender/blenkernel/intern/subsurf_ccg.c b/source/blender/blenkernel/intern/subsurf_ccg.c
index 56491b8d692..6f6e6844f0b 100644
--- a/source/blender/blenkernel/intern/subsurf_ccg.c
+++ b/source/blender/blenkernel/intern/subsurf_ccg.c
@@ -1245,7 +1245,7 @@ static void ccgDM_glNormalFast(float *a, float *b, float *c, float *d)
no[1] = b_dZ*a_cX - b_dX*a_cZ;
no[2] = b_dX*a_cY - b_dY*a_cX;
- /* don't normalize, GL_NORMALIZE is be enabled */
+ /* don't normalize, GL_NORMALIZE is enabled */
glNormal3fv(no);
}