[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [41828] trunk/blender/source/blender/ editors/space_view3d/drawobject.c: Better fix for crashes when rendering original edit mesh faces on empty edit mesh with constructive modifier (#29241).

Lukas Toenne lukas.toenne at googlemail.com
Mon Nov 14 12:17:07 CET 2011


Revision: 41828
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=41828
Author:   lukastoenne
Date:     2011-11-14 11:17:07 +0000 (Mon, 14 Nov 2011)
Log Message:
-----------
Better fix for crashes when rendering original edit mesh faces on empty edit mesh with constructive modifier (#29241). This avoids the additional test inside the loop.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/space_view3d/drawobject.c

Modified: trunk/blender/source/blender/editors/space_view3d/drawobject.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/drawobject.c	2011-11-14 10:47:34 UTC (rev 41827)
+++ trunk/blender/source/blender/editors/space_view3d/drawobject.c	2011-11-14 11:17:07 UTC (rev 41828)
@@ -2696,8 +2696,7 @@
 {
 	EditFace *efa = EM_get_face_for_index(index);
 
-	/* efa=0 for constructive modifier on empty mesh */
-	if (efa && efa->h==0) {
+	if (efa->h==0) {
 		GPU_enable_material(efa->mat_nr+1, NULL);
 		return 1;
 	}
@@ -2736,29 +2735,35 @@
 	if(dt>OB_WIRE) {
 		if(CHECK_OB_DRAWTEXTURE(v3d, dt)) {
 			if(draw_glsl_material(scene, ob, v3d, dt)) {
-				glFrontFace((ob->transflag&OB_NEG_SCALE)?GL_CW:GL_CCW);
+				/* if em has no faces the drawMappedFaces callback will fail */
+				if(em->faces.first) {
+					glFrontFace((ob->transflag&OB_NEG_SCALE)?GL_CW:GL_CCW);
 
-				finalDM->drawMappedFacesGLSL(finalDM, GPU_enable_material,
-					draw_em_fancy__setGLSLFaceOpts, NULL);
-				GPU_disable_material();
+					finalDM->drawMappedFacesGLSL(finalDM, GPU_enable_material,
+												 draw_em_fancy__setGLSLFaceOpts, NULL);
+					GPU_disable_material();
 
-				glFrontFace(GL_CCW);
+					glFrontFace(GL_CCW);
+				}
 			}
 			else {
 				draw_mesh_textured(scene, v3d, rv3d, ob, finalDM, 0);
 			}
 		}
 		else {
-			/* 3 floats for position, 3 for normal and times two because the faces may actually be quads instead of triangles */
-			glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, me->flag & ME_TWOSIDED);
+			/* if em has no faces the drawMappedFaces callback will fail */
+			if(em->faces.first) {
+				/* 3 floats for position, 3 for normal and times two because the faces may actually be quads instead of triangles */
+				glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, me->flag & ME_TWOSIDED);
 
-			glEnable(GL_LIGHTING);
-			glFrontFace((ob->transflag&OB_NEG_SCALE)?GL_CW:GL_CCW);
+				glEnable(GL_LIGHTING);
+				glFrontFace((ob->transflag&OB_NEG_SCALE)?GL_CW:GL_CCW);
 
-			finalDM->drawMappedFaces(finalDM, draw_em_fancy__setFaceOpts, NULL, 0, GPU_enable_material, NULL);
+				finalDM->drawMappedFaces(finalDM, draw_em_fancy__setFaceOpts, NULL, 0, GPU_enable_material, NULL);
 
-			glFrontFace(GL_CCW);
-			glDisable(GL_LIGHTING);
+				glFrontFace(GL_CCW);
+				glDisable(GL_LIGHTING);
+			}
 		}
 			
 		// Setup for drawing wire over, disable zbuffer




More information about the Bf-blender-cvs mailing list