[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [56308] trunk/blender/source/blender: add subsurf limits, in RNA, there were none, but subsurf would assert at 29.

Campbell Barton ideasman42 at gmail.com
Fri Apr 26 13:30:16 CEST 2013


Revision: 56308
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=56308
Author:   campbellbarton
Date:     2013-04-26 11:30:16 +0000 (Fri, 26 Apr 2013)
Log Message:
-----------
add subsurf limits, in RNA, there were none, but subsurf would assert at 29.

Checked and subsurf level 11 gives over 3 million faces from a single triangle. So use this as a limit.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/CCGSubSurf.c
    trunk/blender/source/blender/makesrna/intern/rna_modifier.c

Modified: trunk/blender/source/blender/blenkernel/intern/CCGSubSurf.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/CCGSubSurf.c	2013-04-26 09:49:56 UTC (rev 56307)
+++ trunk/blender/source/blender/blenkernel/intern/CCGSubSurf.c	2013-04-26 11:30:16 UTC (rev 56308)
@@ -20,6 +20,9 @@
  * float.h's FLT_EPSILON causes trouble with subsurf normals - campbell */
 #define EPSILON (1.0e-35f)
 
+/* With this limit a single triangle becomes over 3 million faces */
+#define CCGSUBSURF_LEVEL_MAX 11
+
 /***/
 
 typedef unsigned char byte;
@@ -229,7 +232,7 @@
 int ccg_gridsize(int level)
 {
 	BLI_assert(level > 0);
-	BLI_assert(level <= 31);
+	BLI_assert(level <= CCGSUBSURF_LEVEL_MAX + 1);
 
 	return (1 << (level - 1)) + 1;
 }
@@ -245,7 +248,7 @@
 static int ccg_edgesize(int level)
 {
 	BLI_assert(level > 0);
-	BLI_assert(level <= 30);
+	BLI_assert(level <= CCGSUBSURF_LEVEL_MAX + 1);
 	
 	return 1 + (1 << level);
 }
@@ -254,7 +257,7 @@
 {
 	BLI_assert(high_level > 0 && low_level > 0);
 	BLI_assert(high_level >= low_level);
-	BLI_assert((high_level - low_level) <= 30);
+	BLI_assert((high_level - low_level) <= CCGSUBSURF_LEVEL_MAX);
 
 	return 1 << (high_level - low_level);
 }
@@ -262,7 +265,7 @@
 static int ccg_edgebase(int level)
 {
 	BLI_assert(level > 0);
-	BLI_assert(level <= 30);
+	BLI_assert(level <= CCGSUBSURF_LEVEL_MAX + 1);
 
 	return level + (1 << level) - 1;
 }

Modified: trunk/blender/source/blender/makesrna/intern/rna_modifier.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_modifier.c	2013-04-26 09:49:56 UTC (rev 56307)
+++ trunk/blender/source/blender/makesrna/intern/rna_modifier.c	2013-04-26 11:30:16 UTC (rev 56308)
@@ -793,14 +793,17 @@
 
 	rna_def_property_subdivision_common(srna, "subdivType");
 
+	/* see CCGSUBSURF_LEVEL_MAX for max limit */
 	prop = RNA_def_property(srna, "levels", PROP_INT, PROP_UNSIGNED);
 	RNA_def_property_int_sdna(prop, NULL, "levels");
+	RNA_def_property_range(prop, 0, 11);
 	RNA_def_property_ui_range(prop, 0, 6, 1, -1);
 	RNA_def_property_ui_text(prop, "Levels", "Number of subdivisions to perform");
 	RNA_def_property_update(prop, 0, "rna_Modifier_update");
 
 	prop = RNA_def_property(srna, "render_levels", PROP_INT, PROP_UNSIGNED);
 	RNA_def_property_int_sdna(prop, NULL, "renderLevels");
+	RNA_def_property_range(prop, 0, 11);
 	RNA_def_property_ui_range(prop, 0, 6, 1, -1);
 	RNA_def_property_ui_text(prop, "Render Levels", "Number of subdivisions to perform when rendering");
 




More information about the Bf-blender-cvs mailing list