[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [12379] branches/qdune/blender/source/ blender:

Brecht Van Lommel brechtvanlommel at pandora.be
Wed Oct 24 17:58:49 CEST 2007


Revision: 12379
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=12379
Author:   blendix
Date:     2007-10-24 17:58:49 +0200 (Wed, 24 Oct 2007)

Log Message:
-----------

QDune Branch
============

The last subsurf modifier in the stack is disabled now when
rendering with qdune.

Modified Paths:
--------------
    branches/qdune/blender/source/blender/blenkernel/BKE_DerivedMesh.h
    branches/qdune/blender/source/blender/blenkernel/BKE_mesh.h
    branches/qdune/blender/source/blender/blenkernel/BKE_modifier.h
    branches/qdune/blender/source/blender/blenkernel/intern/DerivedMesh.c
    branches/qdune/blender/source/blender/blenkernel/intern/mesh.c
    branches/qdune/blender/source/blender/blenkernel/intern/modifier.c
    branches/qdune/blender/source/blender/python/api2_2x/Mesh.c
    branches/qdune/blender/source/blender/python/api2_2x/NMesh.c
    branches/qdune/blender/source/blender/render/intern/source/convertblender.c
    branches/qdune/blender/source/blender/render/intern/source/qdinterface.c

Modified: branches/qdune/blender/source/blender/blenkernel/BKE_DerivedMesh.h
===================================================================
--- branches/qdune/blender/source/blender/blenkernel/BKE_DerivedMesh.h	2007-10-24 14:58:31 UTC (rev 12378)
+++ branches/qdune/blender/source/blender/blenkernel/BKE_DerivedMesh.h	2007-10-24 15:58:49 UTC (rev 12379)
@@ -409,7 +409,8 @@
 DerivedMesh *mesh_create_derived_for_modifier(struct Object *ob, struct ModifierData *md);
 
 DerivedMesh *mesh_create_derived_render(struct Object *ob,
-                                        CustomDataMask dataMask);
+                                        CustomDataMask dataMask,
+                                        int renderSubsurf);
 /* same as above but wont use render settings */
 DerivedMesh *mesh_create_derived_view(struct Object *ob,
                                       CustomDataMask dataMask);
@@ -418,7 +419,8 @@
                                            CustomDataMask dataMask);
 DerivedMesh *mesh_create_derived_no_deform_render(struct Object *ob,
                                                   float (*vertCos)[3],
-                                                  CustomDataMask dataMask);
+                                                  CustomDataMask dataMask,
+                                                  int renderSubsurf);
 
 DerivedMesh *editmesh_get_derived_base(void);
 DerivedMesh *editmesh_get_derived_cage(CustomDataMask dataMask);

Modified: branches/qdune/blender/source/blender/blenkernel/BKE_mesh.h
===================================================================
--- branches/qdune/blender/source/blender/blenkernel/BKE_mesh.h	2007-10-24 14:58:31 UTC (rev 12378)
+++ branches/qdune/blender/source/blender/blenkernel/BKE_mesh.h	2007-10-24 15:58:49 UTC (rev 12379)
@@ -62,7 +62,7 @@
 void make_local_mesh(struct Mesh *me);
 void boundbox_mesh(struct Mesh *me, float *loc, float *size);
 void tex_space_mesh(struct Mesh *me);
-float *mesh_create_orco_render(struct Object *ob);
+float *mesh_create_orco_render(struct Object *ob, int rendersubsurf);
 float *mesh_create_orco(struct Object *ob);
 void test_index_face(struct MFace *mface, struct CustomData *mfdata, int mfindex, int nr);
 struct Mesh *get_mesh(struct Object *ob);

Modified: branches/qdune/blender/source/blender/blenkernel/BKE_modifier.h
===================================================================
--- branches/qdune/blender/source/blender/blenkernel/BKE_modifier.h	2007-10-24 14:58:31 UTC (rev 12378)
+++ branches/qdune/blender/source/blender/blenkernel/BKE_modifier.h	2007-10-24 15:58:49 UTC (rev 12379)
@@ -281,7 +281,7 @@
 struct Object *modifiers_isDeformedByLattice(struct Object *ob);
 int           modifiers_usesArmature(struct Object *ob, struct bArmature *arm);
 int           modifiers_isDeformed(struct Object *ob);
-int           modifier_isRenderSubsurf(struct Object *ob);
+int           modifier_isRenderSubsurf(struct Object *ob, struct ModifierData **ssmd);
 
 /* Calculates and returns a linked list of CustomDataMasks indicating the
  * data required by each modifier in the stack pointed to by md for correct

Modified: branches/qdune/blender/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- branches/qdune/blender/source/blender/blenkernel/intern/DerivedMesh.c	2007-10-24 14:58:31 UTC (rev 12378)
+++ branches/qdune/blender/source/blender/blenkernel/intern/DerivedMesh.c	2007-10-24 15:58:49 UTC (rev 12379)
@@ -1828,10 +1828,11 @@
 static void mesh_calc_modifiers(Object *ob, float (*inputVertexCos)[3],
                                 DerivedMesh **deform_r, DerivedMesh **final_r,
                                 int useRenderParams, int useDeform,
-                                int needMapping, CustomDataMask dataMask)
+                                int needMapping, int renderSubsurf, CustomDataMask dataMask)
 {
 	Mesh *me = ob->data;
 	ModifierData *md = modifiers_getVirtualModifierList(ob);
+	ModifierData *ssmd = NULL;
 	LinkNode *datamasks, *curr;
 	float (*deformedVerts)[3] = NULL;
 	DerivedMesh *dm;
@@ -1937,6 +1938,9 @@
 	if(me->vnode) dm = derivedmesh_from_versemesh(me->vnode, deformedVerts);
 #endif
 
+	if(renderSubsurf)
+		modifier_isRenderSubsurf(ob, &ssmd);
+
 	for(; md; md = md->next, curr = curr->next) {
 		ModifierTypeInfo *mti = modifierType_getInfo(md->type);
 
@@ -1949,6 +1953,7 @@
 		}
 		if(mti->isDisabled && mti->isDisabled(md)) continue;
 		if(needMapping && !modifier_supportsMapping(md)) continue;
+		if(renderSubsurf && md==ssmd) continue;
 
 		/* How to apply modifier depends on (a) what we already have as
 		 * a result of previous modifiers (could be a DerivedMesh or just
@@ -2357,13 +2362,13 @@
 
 			mesh_calc_modifiers(ob, NULL, &ob->derivedDeform,
 			                    &ob->derivedFinal, 0, 1,
-			                    needMapping, dataMask);
+			                    needMapping, 0, dataMask);
 
 			CustomData_free_layer_active(&me->fdata, CD_MCOL, me->totface);
 		} else {
 			mesh_calc_modifiers(ob, NULL, &ob->derivedDeform,
 			                    &ob->derivedFinal, 0, 1,
-			                    needMapping, dataMask);
+			                    needMapping, 0, dataMask);
 		}
 
 		INIT_MINMAX(min, max);
@@ -2519,7 +2524,7 @@
 /* Multires note - if mesh has multires enabled, mesh is first set to the Pin level,
    where all modifiers are applied, then if the topology hasn't changed, the changes
    from modifiers are propagated up to the Render level. */
-DerivedMesh *mesh_create_derived_render(Object *ob, CustomDataMask dataMask)
+DerivedMesh *mesh_create_derived_render(Object *ob, CustomDataMask dataMask, int renderSubsurf)
 {
 	DerivedMesh *final;
 	Mesh *me= get_mesh(ob);
@@ -2527,7 +2532,7 @@
 	int orig_lvl= 0;
 	
 	vert_copy= multires_render_pin(ob, me, &orig_lvl);
-	mesh_calc_modifiers(ob, NULL, NULL, &final, 1, 1, 0, dataMask);
+	mesh_calc_modifiers(ob, NULL, NULL, &final, 1, 1, 0, renderSubsurf, dataMask);
 	multires_render_final(ob, me, &final, vert_copy, orig_lvl);
 
 	return final;
@@ -2537,7 +2542,7 @@
 {
 	DerivedMesh *final;
 
-	mesh_calc_modifiers(ob, NULL, NULL, &final, 0, 1, 0, dataMask);
+	mesh_calc_modifiers(ob, NULL, NULL, &final, 0, 1, 0, 0, dataMask);
 
 	return final;
 }
@@ -2547,14 +2552,15 @@
 {
 	DerivedMesh *final;
 	
-	mesh_calc_modifiers(ob, vertCos, NULL, &final, 0, 0, 0, dataMask);
+	mesh_calc_modifiers(ob, vertCos, NULL, &final, 0, 0, 0, 0, dataMask);
 
 	return final;
 }
 
 DerivedMesh *mesh_create_derived_no_deform_render(Object *ob,
                                                   float (*vertCos)[3],
-                                                  CustomDataMask dataMask)
+                                                  CustomDataMask dataMask,
+                                                  int renderSubsurf)
 {
 	DerivedMesh *final;
 	Mesh *me= get_mesh(ob);
@@ -2562,7 +2568,7 @@
 	int orig_lvl= 0;
 
 	vert_copy= multires_render_pin(ob, me, &orig_lvl);
-	mesh_calc_modifiers(ob, vertCos, NULL, &final, 1, 0, 0, dataMask);
+	mesh_calc_modifiers(ob, vertCos, NULL, &final, 1, 0, 0, renderSubsurf, dataMask);
 	multires_render_final(ob, me, &final, vert_copy, orig_lvl);
 
 	return final;
@@ -2757,7 +2763,7 @@
 		return;
 	}
 
-	dm = mesh_create_derived_render(ob, CD_MASK_BAREMESH);
+	dm = mesh_create_derived_render(ob, CD_MASK_BAREMESH, 0);
 	//dm = mesh_create_derived_no_deform(ob,NULL);
 
 	mvert = dm->getVertArray(dm);
@@ -2861,7 +2867,7 @@
 	float *verts;
 	int *tris;
 
-	dm = mesh_create_derived_render(ob, CD_MASK_BAREMESH);
+	dm = mesh_create_derived_render(ob, CD_MASK_BAREMESH, 0);
 	//dm = mesh_create_derived_no_deform(ob,NULL);
 
 	mvert = dm->getVertArray(dm);

Modified: branches/qdune/blender/source/blender/blenkernel/intern/mesh.c
===================================================================
--- branches/qdune/blender/source/blender/blenkernel/intern/mesh.c	2007-10-24 14:58:31 UTC (rev 12378)
+++ branches/qdune/blender/source/blender/blenkernel/intern/mesh.c	2007-10-24 15:58:49 UTC (rev 12379)
@@ -474,7 +474,7 @@
 	if (size_r) VECCOPY(size_r, me->size);
 }
 
-static float *make_orco_mesh_internal(Object *ob, int render)
+static float *make_orco_mesh_internal(Object *ob, int render, int rendersubsurf)
 {
 	Mesh *me = ob->data;
 	float (*orcoData)[3];
@@ -524,7 +524,7 @@
 		/* Apply orco-changing modifiers */
 
 	if (render) {
-		dm = mesh_create_derived_no_deform_render(ob, vcos, CD_MASK_BAREMESH);
+		dm = mesh_create_derived_no_deform_render(ob, vcos, CD_MASK_BAREMESH, rendersubsurf);
 	} else {
 		dm = mesh_create_derived_no_deform(ob, vcos, CD_MASK_BAREMESH);
 	}
@@ -547,14 +547,14 @@
 	return (float*) orcoData;
 }
 
-float *mesh_create_orco_render(Object *ob) 
+float *mesh_create_orco_render(Object *ob, int rendersubsurf) 
 {
-	return make_orco_mesh_internal(ob, 1);
+	return make_orco_mesh_internal(ob, 1, rendersubsurf);
 }
 
 float *mesh_create_orco(Object *ob)
 {
-	return make_orco_mesh_internal(ob, 0);
+	return make_orco_mesh_internal(ob, 0, 0);
 }
 
 /* rotates the vertices of a face in case v[2] or v[3] (vertex index) is = 0.

Modified: branches/qdune/blender/source/blender/blenkernel/intern/modifier.c
===================================================================
--- branches/qdune/blender/source/blender/blenkernel/intern/modifier.c	2007-10-24 14:58:31 UTC (rev 12378)
+++ branches/qdune/blender/source/blender/blenkernel/intern/modifier.c	2007-10-24 15:58:49 UTC (rev 12379)
@@ -5524,13 +5524,13 @@
 	return 0;
 }
 
-int modifier_isRenderSubsurf(Object *ob)
+int modifier_isRenderSubsurf(Object *ob, ModifierData **ssmd)
 {
 	ModifierData *md = modifiers_getVirtualModifierList(ob);
 	ModifierData *lastmd = NULL;
 	SubsurfModifierData *smd;
 
-	/* Apply all leading deforming modifiers */
+	/* check if last active render modifier is subsurf */
 	for(; md; md = md->next) {
 		ModifierTypeInfo *mti = modifierType_getInfo(md->type);
 
@@ -5542,7 +5542,9 @@
 
 	if(lastmd && (lastmd->type == eModifierType_Subsurf)) {
 		smd = (SubsurfModifierData*)lastmd;
-		return (smd->subdivType == ME_CC_SUBSURF);
+		if(ssmd)
+			*ssmd= lastmd;
+		return 1;
 	}
 	
 	return 0;

Modified: branches/qdune/blender/source/blender/python/api2_2x/Mesh.c
===================================================================
--- branches/qdune/blender/source/blender/python/api2_2x/Mesh.c	2007-10-24 14:58:31 UTC (rev 12378)

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list